#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit sw2=P1^0;//开关
sbit sw3=P1^1;
sbit sw4=P1^2;
sbit k1=P1^3;//按钮
sbit k2=P1^4;
sbit led1=P2^6;//led
sbit led2=P2^7;
sbit smg1=P2^0;//数码管
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
//数码管编码
uchar code smgduan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar time=0,mode=0,num=0;//系统变量
//延时
void delay(uint i)
{
while(i--);
}
void main()//主函数
{
smg1=0;
smg2=0;
smg3=0;
smg4=0;
TMOD|=0X01;
TH0=(65536-50000)/256;//50ms
TL0=(65536-50000)%256;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
if(mode==0)//显示计数
{
P0=smgduan[num/10];
smg1=1;
delay(100);
smg1=0;
P0=smgduan[num%10];
smg2=1;
delay(100);
smg2=0;
}
if(mode==1)//显示ON
{
P0=smgduan[0];
smg1=1;
delay(100);
smg1=0;
P0=0xAB;
smg2=1;
delay(100);
smg2=0;
}
if(mode==2)//显示OFF
{
P0=smgduan[0];
smg1=1;
delay(100);
smg1=0;
P0=0x8E;
smg2=1;
delay(100);
smg2=0;
P0=0x8E;
smg3=1;
delay(100);
smg3=0;
}
if(!k1)//OK
{
if(!sw2 && !sw3 && !sw4 )
{
mode=1;
}
else
mode=2;
}
if(!k2)//复位
{
mode=0;
}
}
}
//定时器中断
void Timer0() interrupt 1
{
if(time<10)//0.5s
time++;
else
{
time=0;
if(mode==0)//0-60
{
if(num<60)
num++;
else
num=0;
led1=1;
led2=1;
}
if(mode==1)//绿灯
{
led1=!led1;
}
if(mode==2)//红灯
{
led2=!led2;
}
}
TH0=(65536-50000)/256;//50ms
TL0=(65536-50000)%256;
}