标题:
单片机 数码管计时的显示问题
[打印本页]
作者:
s3395719
时间:
2015-5-23 16:28
标题:
单片机 数码管计时的显示问题
我刚学定时器,想让数码管 自动计时,但是。。数码管的个位能正常显示,但十位不显示,求助!!!!!!!!
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
code char tab[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint i ,j ,count;
sbit tr1 = P0^5; //个位
sbit tr2 = P0^4; //十位
void delay() //延时
{
int a,b;
for(a=0;a<20;a++)
for(b=0;b<30;b++);;
}
void init() //定时初始化
{
TMOD=0x01;
TH0= (65536 - 50000) / 255;
TL0= (65536 - 50000) % 255;
EA=1;
ET0=1;
TR0=1;
}
void func() //执行
{
tr1 = 0;
tr2 = 1;
P1 = tab[i];
delay();
tr1 = 1;
tr2 = 0;
P1 = tab[j];
delay();
}
timer0()interrupt 1 using 1 //定时器中断
{
TH0= (65536 - 50000) / 255;
TL0= (65536 - 50000) % 255;
if(count == 20)
{
count = 0;
i++;
if(i==10)
{
i = 0; j++;
if(j == 6) j = 0;
}
}
else
count++;
}
main()
{
P1 = 0x00;
init(); //计时初始化
while(1)
{
func();
}
}
作者:
电子爱好者life
时间:
2015-5-24 08:45
你的延时函数延时时间是多少?TH0和TL0的计算用的是256,不是255 (2^8=256)
作者:
电子爱好者life
时间:
2015-5-24 08:50
void timer0()interrupt 1
{
TH0= (65536-50000)/256;
TL0 = (65536-50000)%256;
count++;
if(count ==20)
{
count = 0;
num ++;
shi = num/10;
ge = num%10;
if(num==60)
num = 0;
}
}
你直接把个位和十位数送去显示就可以了
复制代码
作者:
电子爱好者life
时间:
2015-5-24 08:53
你的延时函数时间不要太长,也不能太短,用proteus仿真的延时比硬件仿真时间长点就行,一般硬件仿真就几个ms
作者:
电子爱好者life
时间:
2015-5-24 08:56
TH0 和TL0的计算用256(2^8 = 256),而不是8位二进制数的最大值255
作者:
QWL410792
时间:
2016-8-10 16:04
你这程序问题太大
作者:
QWL410792
时间:
2016-8-10 16:06
你这程序问题太大 你定时中断到底想要表达什么 呢 count都没赋值 怎么可能加到20
作者:
QWL410792
时间:
2016-8-10 16:08
好好看看数码管显示函数
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1