题目:
用定时器0定时间隔1秒数码管静态循环显示0 - 9。按独立键盘的S2按键时开始循环显示,按S3按键时暂停,按S4按键时点亮P1口所有LED灯,按S5按键时关闭P1口所有LED灯。
源码:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit key_s2=P3^0;
sbit key_s3=P3^1;
sbit key_s4=P3^2;
sbit key_s5=P3^3;
sbit we=P2^7;
sbit du=P2^6;
uchar code leddata[]= {
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00 //?¨?e
};
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void main()
{
uint i,num;
//TR0=1;
TMOD=0x01;
TH0=0x4b;
TL0=0xfc;
we=1;
P0=0xfe;
we=0;
while(1)
{
if(TF0==1)
{
TH0=0x4b;
TL0=0xfc;
TF0=0;
i++;
}
if(i==20)
{
i=0;
num++;
}
if(num==10)
num=0;
du=1;
P0=leddata[num];
du=0;
if(key_s2==0)
{
delay(5);
if(key_s2==0)
TR0=1;
while(!key_s2);
}
if(key_s3==0)
{
delay(5);
if(key_s3==0)
TR0=0;
while(!key_s3);
}
if(key_s4==0)
{
delay(5);
if(key_s4==0)
P1=0x00;
while(!key_s4);
}
if(key_s5==0)
{
delay(5);
if(key_s5==0)
P1=0xff;
while(!key_s5);
}
}
}