# include<reg51.h> void delay(); sfr p0=0x80; (p0控制数码管段选) sfr p2=0xa0; (p2控制数码管片选) void main (){ for(;;){ p0=0xc0; p2=0xf7; delay(); p0=0x82; p2=0xfb; delay(); p0=0xa4; p2=0xfd; delay(); p0=0xf9; p2=0xfe; delay(); }} void delay(){ int i; for(i=0;i<50;i++){ TMOD=0X01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TR0=1; while(TF0==0){;} }}
这个是我写的一个数码管动态显示程序,显示内容为“0621”,虽然把程序烧尽单片机能稳定的同时显示出"0621'这四位数字没有闪烁也没有重影,可是这在原理上让我想不明白,此程序的延时程序中计数器的计数功能明显没起到作用这是为什么?新手上路,在此希望各位朋友多多指教。
1,你得程序思想是很好的,很好的用了定时器做精确的延时,就向和汇编的语句控制延时一样可以做到很精确
2,定时器到时候的用法你好好加深一下。你这里的定时器只是起到延时的作用。
3,要想使用到计数器你要明白什么是计数器。怎样使用计数器。例如unsigned char i=0,a = 0;for(i=0,i<10;++i) a =a+i;这也是一个计数器
4,我想你是想用定时器做一个定时一定时间然后再加数据吧,这个要是用到定时器的中断。然后配置中断服务子程序,在中断程序中修改计数器的值,然后传递出来显示就可以了
5,你定时器的应该是50ms时间吧,这个动态做出来的效果应该不是很稳定吧,才20hz的刷新频率。
你那是FOR循环,根本不是中断,况且EA,ET0中断允许都没打开,中断能起什么用
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |