找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4615|回复: 4
收起左侧

这个数码管动态显示程序问题在哪里请指教

[复制链接]
ID:31774 发表于 2011-9-25 21:46 | 显示全部楼层 |阅读模式
# 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'这四位数字没有闪烁也没有重影,可是这在原理上让我想不明白,此程序的延时程序中计数器的计数功能明显没起到作用这是为什么?新手上路,在此希望各位朋友多多指教。

 

回复

使用道具 举报

ID:31953 发表于 2011-10-2 13:22 | 显示全部楼层
是没有用上,根本就没有打开中断啊。 可以试着去掉看看行不行,多试试就明白了。
回复

使用道具 举报

ID:32335 发表于 2011-11-13 09:23 | 显示全部楼层

你那是FOR循环,根本不是中断,况且EA,ET0中断允许都没打开,中断能起什么用

回复

使用道具 举报

ID:20559 发表于 2011-10-16 22:00 | 显示全部楼层

1,你得程序思想是很好的,很好的用了定时器做精确的延时,就向和汇编的语句控制延时一样可以做到很精确

2,定时器到时候的用法你好好加深一下。你这里的定时器只是起到延时的作用。

3,要想使用到计数器你要明白什么是计数器。怎样使用计数器。例如unsigned char i=0,a = 0;for(i=0,i<10;++i) a =a+i;这也是一个计数器

4,我想你是想用定时器做一个定时一定时间然后再加数据吧,这个要是用到定时器的中断。然后配置中断服务子程序,在中断程序中修改计数器的值,然后传递出来显示就可以了

5,你定时器的应该是50ms时间吧,这个动态做出来的效果应该不是很稳定吧,才20hz的刷新频率。

回复

使用道具 举报

ID:20559 发表于 2011-10-16 22:02 | 显示全部楼层
关于你这个定时器的这种用法我可以给你提供一点小建议。以后做按键扫描滤波的时候也可以用。还有就是DI输入采集信号的时候也可以用,采集多个数据,做数值滤波,很有效的。建议尝试一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表