独立键盘;流水灯;数码管。
功能:用定时器0 定时间隔 1 秒 循环0~9 当按下s2时,开始计时;当按下s3时,停止计时;按下s4 流水灯全亮。
。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit du = P2^6;//数码管段选
sbit we = P2^7;//数码管位选
sbit s2 = P3^0;//独立按键S2
sbit s3 = P3^1;//独立按键S3
sbit s4 = P3^2;//独立按键S4
sbit s5 = P3^3;//独立按键S5
uchar num;//数码管显示的值
//共阴数码管段选表0-9
uchar code leddata[]= {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 main ()
{
uint a,b;
TMOD = 0x01; // 定时器0,16位计数器;
TH0 = 0x4b; // 定时50ms
TL0 = 0xfc;
we = 1;
P0 = 0xfe; // 打开第一数码管
we = 0;
while(1)
{
if(TF0 == 1) // 定时50毫秒
{
TH0 = 0x4b;
TL0 = 0xfc;
TF0 = 0;
a++;
}
if(a==20) // 定时1秒
{
a = 0;
b++;
}
if(b == 10)
{
b=0;
}
du = 1;
P0 = leddata[b];
du = 0;
if(s2==0)
{
delay(5);
if(s2==0)
{
TR0 = 1; // 当s2 按下 启动定时器,开始计时
}
while(!s2);
}
if(s3==0)
{
delay(5);
if(s3==0)
{
TR0 = 0; // 当s3 按下 关闭定时器,停止计时
}
while(!s3);
}
if(s4==0)
{
delay(5);
if(s4==0)
{
P1=0x0;
}
while(!s4);
}
if(s5==0)
{
delay(5);
if(s5==0)
{
P1=0xff;
}
while(!s5);
}
}
}