初级会员
- 积分
- 82
- 金钱
- 82
- 注册时间
- 2018-7-10
- 在线时间
- 11 小时
|
2金钱
中断中是不是能不能有display(a,b,c,d...)函数啊,我用的定时器中断,但是display没有用,a,b,c,d...是全局变量。(想做一个以10ms为最小单位的秒表)--(小时)--(分)--(秒)--(100ms 和 10ms)
如下:数码管没有显示
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula = P2^6;//数码管段选
sbit wela = P2^7;//数码管段选
char a0,b0,c0,d0,e0,f0,g0,h0;
unsigned long num=0;
//共阴数码管段选表0-9
unsigned char code table[10]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar g,uchar h)
{
dula=0;
P0=table[a];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(2);
P0=table[b];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(2);
P0=table[c];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(2);
P0=table[d];
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(2);
P0=table[e];
dula=1;
dula=0;
P0=0xef;
wela=1;
wela=0;
delay(2);
P0=table[f];
dula=1;
dula=0;
P0=0xdf;
wela=1;
wela=0;
delay(2);
P0=table[g];
dula=1;
dula=0;
P0=0xbf;
wela=1;
wela=0;
delay(2);
P0=table[h];
dula=1;
dula=0;
P0=0x7f;
wela=1;
wela=0;
delay(2);
}
void time0() interrupt 1
{
TH0=0xff;
TL0=0xff;
display(a0,b0,c0,d0,e0,f0,g0,h0);
}
//定时器0初始化
void timer0Init()
{
TR0 = 1; //启动定时器0
TMOD = 0X01; //定时器工作模式1,16位定时器计数模式
TH0 = 0xff;
TL0 = 0xff;//达不到啊!!!!!!
}
void main()//main函数自身会循环
{
timer0Init();//定时器0初始化
while(1)
{
if(e0==6&&g0==9&&h0==9&&c0!=6) num=num+3901;
else if(e0==6&&g0==9&&h0==9&&c0==6&&(a0!=2&&b0!=4)) num=num+393901;
else if(e0==6&&g0==9&&h0==9&&c0==6&&(a0==2&&b0==4)) num=0;
else num++;
}
a0=num/10000000;b0=num%10000000/1000000;c0=num%1000000/100000;d0=num%100000/10000;e0=num%10000/1000;f0=num%1000/100;g0=num%100/10;h0=num%10;
}
|
最佳答案
查看完整内容[请看2#楼]
这个程序架构不好,定时器只做时间计数用就好,数码管显示要独立出来,对计数进行时间换算,并在相应的时间位上显示当前计数时间就好!
|