一个简单的单片机秒表程序,请大神看下我的代码问题在...
#include<reg52.h>
#define uchar unsigned char
sbit dula = P2^6;
sbit wela = P2^7;
uchar e0,e1,e2,e3,e4,e5,e6,e7,num,time;
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void init();
void display(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);
void delay(uchar);
void main()
{
init();
while(1)
{
display(e0,e1,e2,e3,e4,e5,e6,e7);
}
}
void init()
{
num = 0;
time = 0;
TMOD = 0x11;
TH0 = (65536-91)/256; //9174
TL0 = (65536-91)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void display(uchar e0,uchar e1,uchar e2,uchar e3,uchar e4,uchar e5,uchar e6,uchar e7)
{
dula = 1;
P1 = table[e0];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0x7f;
wela = 0;
delay(5);
dula = 1;
P1 = table[e1];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xbf;
wela = 0;
delay(5);
dula = 1;
P1 = table[e2];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xdf;
wela = 0;
delay(5);
dula = 1;
P1 = table[e3];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xef;
wela = 0;
delay(5);
dula = 1;
P1 = table[e4];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xf7;
wela = 0;
delay(5);
dula = 1;
P1 = table[e5];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfb;
wela = 0;
delay(5);
dula = 1;
P1 = table[e6];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfd;
wela = 0;
delay(5);
dula = 1;
P1 = table[e7];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfe;
wela = 0;
delay(5);
}
void delay(uchar xms)
{
uchar i,j;
for(i = xms;i>0;i--)
for(j = 110;j>0;j--);
}
void role0() interrupt 1
{
TH0 = (65536-91)/256;
TL0 = (65536-91)%256; //9174
num++;
if(num == 1)
{
num = 0;
time++;
e1 = time/10;
e0 = time%10;
if(time == 1)
{
time = 0;
e2++;
if(e2 == 10)
{
e2 = 0;
e3++;
if(e3 == 6)
{
e3 = 0;
e4++;
if(e4 == 10)
{
e4 = 0;
e5++;
if(e5 == 6)
{
e5 = 0;
e6++;
if(e6 == 10)
{
e6 = 0;
e7++;
if(e7*10+e6 == 24)
{
e7=0;
e6=0;
}
}
}
}
}
}
}
}
}
if(e6 == 10)
{
e6 = 0;
e7++;
if(e7*10+e6 == 24)
{
e7=0;
e6=0;
}
}
这段代码要e6 = 10 才能进入,假设e6 =4,e7=2时是进入不鸟这段代码,也就是e7=0;e6=0;永远都执行不了.
我想做一个多组秒表,你会不?就像体育跑步用的一样
你编的程序我实在是看不懂了,提个建议啊,弄三个变量:小时,分,秒,显示的时候把这三个变量和数码管做个对应就行了,程序看着清楚就不容易出错了~
很明显是看了郭大侠的代码,可以翻看几次视频就明白了