由于单片机端口不够,在用PROTEUS对数码管进行仿真时使用了74HC595。程序编好之后发现显示的是乱码,刚开始还以为电路连接有问题,经反复检查之后确信不是电路的问题。问题出在了显示程序,一般的认为74HC595的输入都是低位在前高位在后,但在PROTEUS中应该是高位在前低位在后。
其部分程序如下:
void disp_smg(uchar DAT,uchar position)
{
uchar n;
for(n=0;n<=7;n++)
//向HC595输出一个字节
{
if(DAT&0x80)
//判断高位
//
if(DAT&0x01)
//低位判断,PROTEUS仿真软件里面显示的是乱码
PORTB|=BIT(1); //写数据位
PORTB|=BIT(1)
else
PORTB&=~BIT(1);
DAT <<=
1;
//DAT>>1;
//低位开始判断,右移
PORTB|=BIT(0);
PORTB&=~BIT(0);
Delay_us(4);
}
PORTB&=~BIT(2);//
Delay_us(4);
PORTB|=BIT(2);
//产生时钟上升沿,移位寄存器的数据进入锁存器,更新显示数据
Delay_us(4);
switch(position)
{
case
1:SET_WEI3;CLR_WEI4;CLR_WEI5;CLR_WEI6;break;
case
2:CLR_WEI3;SET_WEI4;CLR_WEI5;CLR_WEI6;break;
case
3:CLR_WEI3;CLR_WEI4;SET_WEI5;CLR_WEI6;break;
case
4:CLR_WEI3;CLR_WEI4;CLR_WEI5;SET_WEI6;break;
default:break;
}
Delay_ms(2);//延时2ms
http://s9/middle/77e3eca94b4a7551fa4c8&690
加载中,请稍候......