个人认为,这程序只有拿来玩玩以及忽悠老师的价值...
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;
- }
- }
- }
- }
- }
|