开博第一文。希望再次记录学习的过程。
按键扫描,单片机里面再基础不过的程序了。但对于初学者来说,用好按键也不是一件简单的事情。在毛老师的介绍下,第一次知道了状态机的思想也可以用于单片机的程序设计,感觉很是新奇。看了老师给发的几个文档后对状态机编程的概念有了一些初步的认识,于是试着用状态机的思想写了一个实现单个按键长按短按的小程序。
贴个代码试试....
//文件名:单个按键的复用
//作者:CWM
//修改日期:2011-06-15
//版本:V1.0
//功能描述:基于状态机的思想 实现单个按键的复用
//根据按键持续时间的不同,在数码管上分别显示0 1 2 3四个数字
001
#include <reg52.h>
002
003 #define key_state_0 0 //表示没有按下
004 #define key_state_1 1 //表示按键按下
005 #define key_state_2 2 //计时1
006 #define key_state_3 3 //计时2
007 #define key_state_4 4 //计时3
008 sbit KEY = P1 ^ 0;
009 sbit LED = P1 ^ 1;
010 unsigned char code LED7Code [] = { ~ 0x3F , ~ 0x06 , ~ 0x5B , ~ 0x4F ,
011 ~ 0x66 , ~ 0x6D , ~ 0x7D , ~ 0x07 , ~ 0x7F , ~ 0x6F ,
012 ~ 0x77 , ~ 0x7C , ~ 0x39 , ~ 0x5E , ~ 0x79 , ~
002
003 #define key_state_0 0 //表示没有按下
004 #define key_state_1 1 //表示按键按下
005 #define key_state_2 2 //计时1
006 #define key_state_3 3 //计时2
007 #define key_state_4 4 //计时3
008 sbit KEY = P1 ^ 0;
009 sbit LED = P1 ^ 1;
010 unsigned char code LED7Code [] = { ~ 0x3F , ~ 0x06 , ~ 0x5B , ~ 0x4F ,
011 ~ 0x66 , ~ 0x6D , ~ 0x7D , ~ 0x07 , ~ 0x7F , ~ 0x6F ,
012 ~ 0x77 , ~ 0x7C , ~ 0x39 , ~ 0x5E , ~ 0x79 , ~