/*头文件区域*/
#include <REGX52.H>
#include "intrins.h"
/*变量声明区域*/
unsigned char Key_Down,Key_Up,Key_Val,Key_OLd;//按键扫描专用变量
unsigned char Led_Mode;//Led运行模式专用变量
unsigned char ucLed = 0xfe;//Led存储变量
unsigned char Led_Dat[4] = {0x7e,0xbd,0xdb,0xe7};//Led显示存放数组
unsigned char Led_Dat_Index;//Led显示存放数组索引
bit System_Flag = 1;//系统使能标志位 0-关闭 1-启动
/*按键读取函数*/
unsigned char Key_Read()
{
unsigned char temp = 0;
if(P3_4 == 0) temp = 1;
if(P3_5 == 0) temp = 2;
if(P3_6 == 0) temp = 3;
if(P3_7 == 0) temp = 4;
return temp;
}
/*延时函数*/
void Delay(unsigned char xms) //@12.000MHz
{
unsigned char data i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
/*Main*/
void main()
{
while(1)
{
Key_Val = Key_Read();//读取键码值
Key_Down = Key_Val & (Key_Val ^ Key_OLd);//检测下降沿
Key_Up = ~Key_Val & (Key_Val ^ Key_OLd);//检测上升沿
Key_OLd = Key_Val;//辅助扫描
switch(Key_Down)
{
case 1://启动按键
System_Flag = 1;
break;
case 2://暂停按键
System_Flag = 0;
break;
case 3://运行模式+1
if(++Led_Mode == 4) Led_Mode = 0;
break;
case 4://运行模式-1
if(--Led_Mode == 255) Led_Mode = 3;
break;
}
switch(Led_Mode)
{
case 0://模式1
if(System_Flag == 1)
{
ucLed = _crol_(ucLed,1);
P1 = ucLed;
Delay(500);
}
break;
case 1://模式2
if(System_Flag == 1)
{
ucLed = _cror_(ucLed,1);
P1 = ucLed;
Delay(500);
}
break;
case 2://模式3
if(System_Flag == 1)
{
P1 = Led_Dat[Led_Dat_Index];
Led_Dat_Index++;
Delay(500);
if(Led_Dat_Index == 4) Led_Dat_Index = 0;
}
break;
case 3://模式4
if(System_Flag == 1)
{
P1 = Led_Dat[Led_Dat_Index];
Led_Dat_Index--;
Delay(500);
if(Led_Dat_Index == 255) Led_Dat_Index = 3;
}
break;
}
}
}
-
用 if(System_Flag = 1) 错当条件判断;
-
模式34未用Delay()延时;