首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2012-04-16 
嵌入式系统原理实验课的一个问题,数码管显示结果。C/C++ codeextern long int resultvoid Main(void){for(

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

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++]; //灯 
这两句话换个顺序试试。

热点排行