个人认为,这程序只有拿来玩玩以及忽悠老师的价值...
1,yanshi(10);→这种函数纯粹就是在浪费CPU时间,坚决禁止
2,while(P1!=0xFF)→这种程序结构相当之不可靠,如果你按键坏了一个(按下去上不来)的情况该怎么办?
3,风格比较混乱...嫌麻烦的话可以用SlickEdit的Beautify功能自动排版(下面这段我就是这么干的)
#include <c8051f020.h>
void yanshi( unsigned int x)//延时程序
{
unsigned char i;
while (x--) /*纯粹就是在浪费的时间,具体延时多久可以到Keil仿真下面插2个断点看*/
{
for(i=0;i<125;i++)
{
;
}
}
}
void main()
{
unsigned char key=0;
WDTCN=0XDE; //禁止看门狗
WDTCN=0XAD;
OSCXCN=0X65;//外部晶振
yanshi(1); //延时1ms
OSCICN=OSCICN|0X08;
XBR2=0X40;
/*上面几句是在初始化单片机时钟部分及相关寄存器,下面几句是IO口配置*/
P1MDOUT=0X00;//p1输入
P2MDOUT=0XFF;//p2输出
P2=0XFF;
/*主循环开始,通过P1口连接的按键输入情况选择switch分支下的一条执行*/
while (1)
{
if (P1!=0xFF) //检测是否有输入
{
yanshi(10); /*延时程序调用,目的在于消抖*/
if (P1!=0xFF) //再次检测是否有输入
{
key=P1; /*将当前键值暂存*/
while(P1!=0xFF) /*按下的按键如果不放开则一直执行下面的switch语句*/
switch (key) /*通过暂存的键值决定采取的操作*/
{
case 0xFE: P2=0xFE;break;//按下KEY1,L0亮
case 0xFD: P2=0xF9;break;//按下KEY2,L1,L2亮
case 0xFB: P2=0xE3;break;//按下KEY3,L3,L4,L5亮
case 0xF7: P2=0xFF;break;//按下KEY4,等灭
default:
break;
}
}
}
}
}
|