当前位置: 代码迷 >> 单片机 >> 嵌入式系统原理实验课的一个有关问题,数码管显示结果
  详细解决方案

嵌入式系统原理实验课的一个有关问题,数码管显示结果

热度:56   发布时间:2016-04-28 16:06:19.0
嵌入式系统原理实验课的一个问题,数码管显示结果。
C/C++ code
extern long int result;void Main(void){        for(;;)    {        int str[7] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};        int i,j,k=0,lamp=0,l=0,m=0;        int ch[16] = {0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};        int c[7];        if(result >999999)        {            for(m=0;m<6;m++)                c[m] = 0xb0;            k=6;        }        else        {            while(result != 0)            {                int a = result % 10;                result = result /10;                c[k++] = ch[a];            }        }        while(1)        {            *((unsigned char *)0x10000004)=c[l++];  //数字            *((unsigned char *)0x10000006)=str[lamp++];  //灯                            if(l  ==  k)            {                l=0;                lamp=0;            }        }    }}     

result 是汇编返回的结果,假设是5050.上面这段程序要做的是在6位数码管上显示一直5050.
单步调试的情况下,在这段在代码
C/C++ code
[color=#FF0000]*((unsigned char *)0x10000004)=c[l++];  //数字[/color]

执行之前,也就是while(1)的时候,数码管的第一个已经亮了,而且显示的是5.然后继续单步,5又变到了第二个数码管上,第一个才变成0.在加了
C/C++ code
[color=#FF0000]*((unsigned char *)0x10000006)=0xff;  //灯[/color]*((unsigned char *)0x10000004)=c[l++];  //数字

之后,数码管才显示正常,也就是while(1)的时候不显示,到下面显示数字的时候开始显示0了。

请问大家,这是为什么啊?我是新手,初学嵌入式啊。



------解决方案--------------------
反汇编看看代码,就知道具体原因。
上电初始化,需要对LED以及LAMP初始化。按照开发要求处理。
就是所谓的初始化函数,这是常规要求。
------解决方案--------------------
*((unsigned char *)0x10000004)=c[l++]; //数字
*((unsigned char *)0x10000006)=str[lamp++]; //灯 
这两句话换个顺序试试。
  相关解决方案