历史上的今天
今天是:2024年10月15日(星期二)
2019年10月15日 | Atmega128a的4位独立键盘控制程序
2019-10-15 来源:eefocus
//***********************************************************************
// 包含文件
//***********************************************************************
#include #include #define F_CPU 16000000 // 单片机主频为16MHz,用于延时子程序,熔丝位必须设置到外部高频晶振才行 #include #include #include #include #include "Config.h" //*********************************************************************** // 定义变量区 //*********************************************************************** uchar key; //*********************************************************************** // IO端口初始化 //*********************************************************************** void system_init() { KEYPort |= (1 << PD1) |(1 << PD5)|(1 << PD6)|(1 << PD7); //四位独立按键连接在PD1/PD5/PD6/PD7上 KEYDDR = 0x00; //设置为输入,并且要打开上拉电阻 LED=0xFF; //LED灯IO口在PORTE LEDDDR=0xFF; //设置为输出 } //********************************************************************** // 键盘扫描子程序,采用逐键扫描的方式 //********************************************************************** uchar keyboardscan(void) { uchar key_check; uchar key_checkin; key_checkin=KEYRead; //读取IO口状态,判断是否有键按下 key_checkin&= 0xE2; //读取IO口状态,判断是否有键按下 if(key_checkin!=0xE2) //IO口值发生变化则表示有键按下 { delay_ms(20); //键盘消抖,延时20MS key_checkin=KEYRead; if(key_checkin!=0xE2) //再次读取状态,判断是否有按键按下 { key_check=KEYRead; switch (key_check & 0xE2) { case 0xE0:key=1;break; //S1按下 case 0xC2:key=2;break; //S2按下 case 0xA2:key=3;break; //S3按下 case 0x62:key=4;break; //S4按下 } } } else { return(key); } } //************************************************************************* // 主程序 //************************************************************************* int main(void) { system_init(); //初始化端口,注意按键端口要打开上拉电阻,确保稳定 while(1) { keyboardscan(); //键盘扫描,看是否有按键按下 if(key!=0xff) //如果有按键按下,则显示该按键键值1~4 { { switch(key) { case 1: LED=0x7F;break; //给不同的键赋键值,键值1,亮1个LED灯 case 2: LED=0x3F;break; //给不同的键赋键值,键值2,亮2个LED灯 case 3: LED=0x1F;break; //给不同的键赋键值,键值3,亮3个LED灯 case 4: LED=0x0F;break; //给不同的键赋键值,键值4,亮4个LED灯 } } } else { //LED=key; //没有按键的时候显示上次的键值 } } }
史海拾趣
|
我公司一产品上使用了windows ce 4.2 net 版本, 处理器为ARM4VR,分辨率为240*320,现在想寻一款手写软件, 现咨询一下购买这种软件要多少钱? 胡先生 13320807449 QQ:562850914 &n ...… 查看全部问答> |
|
Warning: Found duplicate entry \'binfs.dll NK C:\\WINCE420\\PUBLIC\\11\\RelDir\\SAMSUN~1\\binfs.dll 00000007\' ... skipping Error: Could not ...… 查看全部问答> |
|
Wince 是否支持大页nand flash?文件格式是dosfs吗? Wince是否支持大页nand flash?文件格式是dosfs吗? Wince支持的Nand的大页模式和小页模式是同一个文件系统吗?… 查看全部问答> |
|
如何使用OSAL的事件?OSAL通过一个16位宽度的数组来管理事件,意味着OSAL最多可以支持16个事件,其中最高位(0x08000,SYS_EVENT_MSG)系统保留,用户可以使用的事件有15个。事件的使用很简单:1)需要找个地方定义事件的ID,实际上是指定该事件占 ...… 查看全部问答> |
|
TxMessage.DLC最多是8字节,我一次要发24个。分三次发,发送程序如下TestStatus CAN_Polling(void){ u32 i = 0; u8 m=0; //每次发送的字节数 u8 n=0; ...… 查看全部问答> |




