外中断0接一按键,模拟检测上层乘客。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit P2_0=P2^0;
sbit P2_1=P2^1;
uchar a=16,time;
bit flag0,flag1;
uchar code tab[ ]={
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
};
void delay_ms(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<123;i++);
}
void INTinit()
{
TMOD=0x01;
EA=1;
EX0=1;
IT0=1;
ET0=1;
TR0=1;
TH0=0x3c;
TL0=0xb0;
}
void disp()
{
P0=tab[a/10];
P2_0=0;
delay_ms(3);
P2_0=1;
P0=tab[a%10];
P2_1=0;
delay_ms(3);
P2_1=1;
}
void main()
{
INTinit();
while(1)
{
if(a>4)
flag0=1;
else
flag0=0;
if(!flag0)
disp();
else
{
if(flag1)
disp();
}
}
}
void EX0INT() interrupt 0
{
a--;
if(a==0)
EA=0;
}
void T0INT() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
time++;
if(time==5)
{
time=0;
flag1=!flag1;
}
}