永发信息网

关于51单片机利用内部定时计数器使数码管前两位数从00变到59 的问题

答案:2  悬赏:20  手机版
解决时间 2021-02-01 10:04
  • 提问者网友:贪了杯
  • 2021-01-31 15:18
# include
# define uint unsigned int
# define uchar unsigned char
uchar code weixuan []={0xfe,0xfd,0xff,0xff,0xff,0xff,0xff,0xff};
uchar code duanxuan []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar xianshi [10];
uint m,n;
void delay (uint i)
{
uint j=30;
for (;i>0;i--)
for (;j>0;j--);
}
void main ()
{
uint i,j;
TMOD=0x01; //确定工作方式
EA=1; //开总中断
ET0=1; //开定时计数器0中断
TR0=1; //打开定时器0
TH0=(65536-50000)/256; //给定时器赋初值
TL0=(65536-50000)%256;

xianshi [0]=duanxuan [n%100/10];
xianshi [1]=duanxuan [n%10];
xianshi [2]=0x00;
xianshi [3]=0x00;
xianshi [4]=0x00;
xianshi [5]=0x00;
xianshi [6]=0x00;
xianshi [7]=0x00;
for (i=0;i<8;i++)
{
P1=weixuan [i];
P0=xianshi [i];
delay (1);
P0=0x00;
}
}
void time0 () interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
if (m==20)
{
m=0;
n++;
}
}
如题,还需要怎么修改,我感觉中断没有使n的值加一
最佳答案
  • 五星知识达人网友:杯酒困英雄
  • 2021-01-31 16:58
① n 值操作符合程序自加要求,但不符合时钟要求(秒的有效值是0-59),判断:程序功能为秒表;
② 该程序 n 能引起的问题只有:每隔655次(共18时12分16秒) 35 到 36 的显示,都会出现一次 35 到 0(n=65535,+1=0),修正方法:制定有效显示范围,从程序看出,只需显示2位数,即0-99秒,可以设置 n 的范围为 0-99(n=++n%100),那 n 也就用不上 uint 型了,uchar 够了。
③ 未分析出 有 00 直接到59 的显示过程,请LZ 将问题描述清楚。
④ m 的值可以使用 uchar 型的(非必须项)
全部回答
  • 1楼网友:山河有幸埋战骨
  • 2021-01-31 18:23
你好! 看手册啊,没用过这东西 不过估计是中断里处理不对,中断先清中断标志,不用重新配置计时器。 如有疑问,请追问。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯