TR0=1; while(1) { delay(1000); temp=_crol_(temp,1); P1=temp; if(aa==40) { aa=0; num++; if(num==16) num=0; dula=1; P0=table[num]; dula=0; } } }
void time() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%6; aa++; }
此程序能够单独实现数码管或发光二极管的功能,但二者不能同时实现,原因是:delay(1000)包含20次50ms,也就使得aa=20,if(aa==40)显然不满足条件。所以此时程序回到delay(1000),当再次执行到if(aa==40)的时候,aa已经超过40了。所以,一直没有进入这个if语句。
我们的解决措施是:将于中断有关的程序放入中断函数中,这样子的话,每次触发中断函数,就进去if语句。 #include
unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
unsigned char temp;
void delay(unsigned int z) { unsigned int x,y; }
void main() { 且50ms一到,触发中断*/ for(x=z;x>0;x--) for(y=110;y>0;y--); num=0; aa=0; temp=0xfe; P1=temp; wela=1; P0=0xc0; wela=0; dula=1; P0=table[num]; TMOD=0x01;//设置定时器0位工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%6; /*定时50ms, EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1; while(1) { delay(1000); temp=_crol_(temp,1); P1=temp; /* if(aa==40) { aa=0;
}
void time() interrupt 1 { }
} */ }
num++;
if(num==16) num=0; dula=1;
P0=table[num]; dula=0;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; aa++;
if(aa==40) {
aa=0; num++;
if(num==16) num=0; dula=1;
P0=table[num]; dula=0; }
数码管从左到右依次点亮(数码管的动态显示)
#include
unsigned char code tablewe[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
unsigned char temp;
void main() {
numdu=0; numwe=0; aa=0;
TMOD=0x01;//设置定时器0位工作方式1
TH0=(65536-50000)/256; TL0=(65536-50000)%6; /*定时50ms,且50ms一到,触发中断*/ EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1;
while(1) { if(aa==20) { aa=0;
if(numdu==6) {numdu=0;numwe=0;} //为了第二次实现功能 numdu++; dula=1;
P0=table[numdu]; dula=0; wela=1;
P0=tablewe[numwe]; wela=0; numwe++; } } }
void time() interrupt 1 {
TH0=(65536-50000)/256;
TL0=(65536-50000)%6; aa++; }
练习题
数码管上显示125
#include
unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
unsigned char bai,shi,ge,num;
void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
void display(unsigned char bai,unsigned char shi,unsigned char ge) { wela=1; P0=0xfe; wela=0; dula=1; P0=table[bai]; dula=0; delay(10); /*缺少delay(),程序错误*/ wela=1; P0=0xfd; wela=0; dula=1;