51单片机数码管倒计时!自己写的程序但输入后怎么都亮!#include<reg52.h>#d

51单片机数码管倒计时!自己写的程序但输入后怎么都亮!#include<reg52.h>#defineuintunsignedint#defineucharunsigne... 51单片机数码管倒计时!自己写的程序但输入后怎么都亮!#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar temp,aa,numwe,numdu;uchar code table[]={0xf5,0x41,0xd6,0xcf,0x63,0xa7,0xb7,0x45,0xf3,0xe7};uchar code tablewe[]={0xbf,0xdf};void main(){ numdu=0; numwe=0; aa=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; while(1) { if(aa==20) { aa=0; numdu++; if(numdu==9) numdu=1; P1=table[numdu]; P0=tablewe[numwe]; numwe++; if(numwe==2) numwe=0; } } }void timer0() interrupt 1 { TH0=(65536-5000)/256; TL0=(65536-5000)%256; aa++; } 展开
 我来答
张哥小技术
2016-10-27 · TA获得超过324个赞
知道小有建树答主
回答量:178
采纳率:87%
帮助的人:93.2万
展开全部
首先指出程序中明显的问题:
1.数字只能显示1~8,下面修改后显示0~9;当然这个不是问题;
2.主要问题:混淆了两位数码管动态显示的时间逻辑;显示的数字变化没有单独设置时间,以至于数字变化和数码管的短时间动态显示混淆了。
也就是数码管动态显示是根据人眼视觉效应原理,快速改变点亮第一个和点亮第二个数码管,实现看不到熄灭时候的那个数码管的效果,那么在这个时间值里面不可以加入改变显示内容的语句,也就是把显示数字0~9的语句从中提出来,例如延长变化的时间到0.5秒。
具体修改:在原来定义变量的语句里面增加bb函数;然后如下修改:
bb = 0;
P1=table[numdu];
while (1)
{
  if (aa==20)
  {
  aa=0;
  if (bb++ == 50) //10ms*50=500ms,半秒变化一次,改成100就是1秒
  {
  bb = 0;
  numdu++;
  if (numdu==10) numdu=0;
  P1=table[numdu];

  }

  P0=tablewe[numwe];
  numwe++;
  if (numwe==2) numwe=0;
  }
}
这样修改后的结果是:首先显示00,0.5秒后显示11,...
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式