找了一段数码管显示0-9999的程序。我的
电路是p3高4位控制位选,p0控制段。个人觉得里面有些是多余的。求探讨。看注释。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void x_ms_delay(uint ms);
uchar led_discode[11]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xff};
void led_display(uint dis_data);
void main(void)
{
uchar i;
uint number;
P0=0Xff;
P3=0X00; //关闭所有数码管(个人觉得这两句是没必要的,完全不影响显示)
for(number=0;number<10000;number++)
{
for(i=0;i<30;i++)
led_display(number);
}
}
void led_display(uint dis_data) (下面有4个p3=0x00;为什么要加?不要这4个。显示效果是会更好的。网上有关于余辉的说法,但是个人觉得,只需点亮所需的,然后一直扫描就可以达到显示的效果。何须点亮,关闭,再扫描?)
{
uchar qian_bit,bai_bit,shi_bit,ge_bit;
qian_bit=dis_data/1000;
P0=led_discode[qian_bit]; //显示千位
P3=0Xe0;
x_ms_delay(1);
P3=0X00;
bai_bit=(dis_data%1000)/100;
P0=led_discode[bai_bit]; //显示百位
P3=0Xd0;
x_ms_delay(1);
P3=0X00;
shi_bit=(dis_data%100)/10;
P0=led_discode[shi_bit]; //显示十位
P3=0X70;
x_ms_delay(1);
P3=0X00;
ge_bit =(dis_data%10);
P0=led_discode[ge_bit]; //显示个位
P3=0Xb0;
x_ms_delay(1);
P3=0X00;
}
//毫秒级延时子程序
void x_ms_delay(uint ms)
{
uint us;
while(ms--)
{
for(us=500;us>0;us--);
}
}
是的。不过我理解了。这四句是要去掉才会消隐地。用程序的硬件电路验证过了。看懂别人,再按自己的思路来实现自己要的。这是我的学习方法。哈哈
一周热门 更多>