📄 main.c
字号:
/*
带有缓冲区的键盘通用程序库演示程序
说明:传统的键盘程序,必须要执行到函数时才扫描键盘。如果主循环中有长时间
程序,或者按键后要执行耗时很长的功能,都有可能造成错过连续快速的按
键。本程序库的优点在于给键盘接口程序和应用程序中间增加了一级缓冲队
列,GetKey函数并不直接操作IO口,而是从缓冲队列中读取键值,而扫描键
盘的任务放在定时中断内完成,发现按键事件后将键值压入队列。这样缓冲
队列起到了快速按键输入与低速读取之间的"漏斗",保证按键不丢失,且应
用程序可以随时读取键盘,不用等待按键,不阻塞CPU。
要使用该库函数,需要将文件 Key.c 添加进工程,并在需要调用
键盘函数的文件开头处包含"Key.h";还需要开启一个定时器,在定时中断
内调用Key_ScanIO()函数。设置定时中断的频率在将16~128次/秒之间。
(C)西安电子科技大学 测控技术与仪器教研中心 编写:谢楷 2008/02/03
*/
// +-------------+
// | 定时中断 | 软件结构
// +-------------+
// |
// +-------------+ +-------------+ +-------------+
// KEY1_IN -->| Key_ScanIO | | KeyBuff[] | |Key_GetKey() |
// KEY2_IN -->| 键盘扫描 |-->| 键盘缓冲 |-->|Key_WaitKey()|-->应用程序
// KEY3_IN -->| 函 数 | | 队列(FIFO) | |键盘读取函数 |
// +-------------+ +-------------+ +-------------+
//
//
// MSP430F4XX
// +---------------+
// +---KEY1--|P1.5 |
// | | XOUT|-----
// +---KEY2--|P1.6 | 32.768KHz Watch Crystal
// | | XIN|-----
// +---KEY3--|P1.7 |
// | +---------------+
// GND
//
#include "MSP430x42x.h" /*430寄存器头文件*/
#include "BasicTimer.h" /*BasicTimer程序库头文件*/
#include "Key.h" /*键盘程序库头文件*/
#include "LCD_Display.h" /*LCD显示程序库头文件*/
void main( void )
{ int CNT=0; //计数值
long int i;
char Key;
WDTCTL=WDTPW+WDTHOLD; //停止看门狗
FLL_CTL0|=XCAP18PF; //配置晶振负载电容
BT_Init(32); //BasicTimer设为1/32秒中断一次
Key_Init(); //键盘IO初始化
LCD_Init(); //液晶显示屏初始化
while(1)
{
for(i=0;i<32760;i++); //模拟执行一个耗时很长的程序,来不及读取键盘
Key=Key_GetKey(); //很慢的读取键盘
if(Key==1) CNT++; //按Key1让计数加1
if(Key==2) CNT--; //按Key2让计数减1
if(Key==4) CNT=0; //按Key3让计数归0
LCD_DisplayNumber(CNT);//显示计数值
// 很快地连续按键,会发现按键仍然一次都不会漏掉!
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -