打印

静态数码管的串行显示问题

[复制链接]
1773|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
四枫院夜一|  楼主 | 2009-3-21 06:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为了完全的弄明白关于静态数码管的串行显示原理故写了如下的程序
MCU:C8051F020
MC74HC164N
6个数码管  用的SPI的串行输出
char code 
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
void Display(char *buf)
{
    char ch;
    int i;
    for(i=5;i>=0;i--)
    {
        ch=buf;
        if((ch>='0')&&(ch<='9'))
        {ch-='0';}
        else ch=10;
        
        SPI0DAT=table[ch];
        while(!SPIF);      
        SPIF=0;                      //调试时候用的定位行
        if(i==2)Delay(1000);
     }

}
延时程序用的定时器3来实现的(为了练手用的定时器3)
int Delay(int time)
{
    timer=time;
    TMR3CN=0x04;
    while(timer);
    TMR3CN=0x00;
}
主程序调用为 Display("654321");
照此程序全速执行  其显示结果为  先显示 4321** (**为不确定的) 
                                1s后显示为 432165
                                (????此处即有点不明白了,按照74ls的移位的原理来说不是应该显示为 654321 吗)
此后为了解决问题, 进行了调试    在上面所示的定位行处 按了4次 执行到当前行 LED显示为 4321**
                                此时ch=0x04  i==0x02 
                                问题即将发生了 由于i==2 进入延时子程序,当跳出子程序后 ch的值改变为0xE8了
                                (???怎么变了呢,内存溢出,堆栈出错?)
                                此后 再执行ch=buf时候  也不能正确的赋值了
                                照此调试完后 显示为  654321 
                                (???怎么全速和单调的显示结果不一样了呢)
                                
                                到此请各位看官不吝金言,给小弟指点下,问题出在哪里呢,或者我该去加强哪一方面的能力以获得解决问                                题和避免此问题的再次发生的能力.
                        

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝