|
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1 = P2^0;
sbit D2 = P2^1;
sbit D3 = P2^2;
sbit D4 = P2^3;
sbit D5 = P2^4;
sbit D6 = P2^5;
sbit D7 = P2^6;
sbit D8 = P2^7;
sbit D9 = P3^2;
sbit D10 = P3^3;
sbit D11 = P3^4;
sbit D12 = P3^5;
sbit H1 = P3^6; // H1行
sbit H2 = P3^7; // H2行
sbit L1 = P0^5; // L1列
sbit L2 = P0^6; // L2列
sbit L3 = P0^7; // L2列
uchar k=0,b=0,temp=0,i;
void delay(uint x);
void main()
{
for(i=3;i>0;i--) //开机闪烁3次
{
P2 = 0;
P3 = 0;
delay(800);
P2 = 0XFF;
P3 = 0XFF;
delay(800);
}
TMOD = 0x11;
TH0 = (65536-25000)/256;
TL0 = (65536-25000)%256;
TH1 = (65536-10000)/256;
TL1 = (65536-10000)%256;
EA = 1;
ET0 = 1;
ET1 = 1;
TR1 = 1;
TR0 = 1;
while(1);
}
void delay(uint x)
{
uint b1,b;
for (b1 = x;b1>0;b1--)
for(b = 110;b>0;b--);
}
void tim0() interrupt 1 //扫描键盘
{
TH1 = (65536-10000)/256;
TL1 = (65536-10000)%256;
H1 = 0;
H2 = 1;
L1 = 1;
L2 = 1;
L3 = 1;
if( L3==0 ) //3号键控制反向
{
delay(7);
if( L3==0 )
{
k++;
while(!L3);
}
}
}
void tim1() interrupt 3 //灯的亮灭
{
TH0 = (65536-25000)/256;
TL0 = (65536-25000)%256;
b++;
if(b==3)
{
if(k%2==0)
{
temp++;
if(temp==13)
temp=1;
}
if(k%2==1)
{
temp--;
if(temp==0)
temp=12;
}
switch(temp)
{
case 1 : P2 = P3 = 0xff;D1 = 0; break;
case 2 : P2 = P3 = 0xff;D2 = 0; break;
case 3 : P2 = P3 = 0xff;D3 = 0; break;
case 4 : P2 = P3 = 0xff;D4 = 0; break;
case 5 : P2 = P3 = 0xff;D5 = 0; break;
case 6 : P2 = P3 = 0xff;D6 = 0; break;
case 7 : P2 = P3 = 0xff;D7 = 0; break;
case 8 : P2 = P3 = 0xff;D8 = 0; break;
case 9 : P2 = P3 = 0xff;D9 = 0; break;
case 10 : P2 = P3 = 0xff;D10 = 0; break;
case 11 : P2 = P3 = 0xff;D11 = 0; break;
case 12 : P2 = P3 = 0xff;D12 = 0; break;
}
b=0;
}
}
|
|