该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include//头文件
typedef unsigned int u16;//定义16位数值
typedef unsigned char u8;//定义8位数值
#define led P2//宏定义P1为led
#define KEY P3//宏定义P1为led
u16 a,b,c;
sbit k0=P3^0;
sbit k1=P3^1 ;
sbit k2=P3^2 ;
sbit k3=P3^3 ;
u8 Keydata;
u8 code smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
void delay(u16 ms)//延时函数
{
u16 i,k;
for(i=ms;i>0;i--);
for(k=110;k>0;k--);
}
void Int0Init()
{
TMOD=0x01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0xD8; //给定时器赋初值,定时1ms
TL0=0xF0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
b=0;
c=0;
}
void Int0() interrupt 1 //外部中断0的中断函数
{
TH0=0xD8; //给定时器赋初值,定时1ms
TL0=0xF0;
//void KeyDown(void)
{
char a=0;
KEY=0x0f;
if(KEY!=0x0f)//读取按键是否按下
{
delay(10);//延时10ms进行消抖
if(KEY!=0x0f)//再次检测键盘是否按下
{
//测试列
KEY=0X0F;
switch(KEY)
{
case(0X07): Keydata=1;break;
case(0X0b): Keydata=2;break;
case(0X0d): Keydata=3;b=~b;break;
case(0X0e): Keydata=4;c=~c;break;
}
while((a<50)&&(KEY!=0xf0)) //检测按键松手检测
{
delay(1000);
a++;
}
}
}
}
}
void main()
{
u16 j;
led=0xfe;
Int0Init();
while(1)
{
a=Keydata;
if(b==~0)
{
for(j=7;j>0;j--)//led右移
{
led=led<<1|0x01;
delay(5000);
if(c==~0)
while(c==~0)
P0=smg[Keydata];
}
for(j=7;j>0;j--)//led左移
{
led=led>>1|0x80;
delay(5000);
if(c==~0)
while(c==~0)
P0=smg[Keydata];
}
}
}
}
我都编晕了,你试试行不行,比较乱慢慢看!~ 应该行