首页 矩阵键盘1602液晶显示键值

矩阵键盘1602液晶显示键值

举报
开通vip

矩阵键盘1602液晶显示键值矩阵键盘1602液晶显示键值 连接方法:JP8(P1) 与JP4(矩阵键盘接口) 连接 * 矩阵键盘定义: * P1.1-P1.4为列线,P1.4-P1.7为行线 * 喇叭接P1.5口 矩阵键盘P1口, ...

矩阵键盘1602液晶显示键值
矩阵键盘1602液晶显示键值 连接方法:JP8(P1) 与JP4(矩阵键盘接口) 连接 * 矩阵键盘定义: * P1.1-P1.4为列线,P1.4-P1.7为行线 * 喇叭接P1.5口 矩阵键盘P1口, * 注意:请将JP165短路冒断开 #include #include #define uchar unsigned char #define uint unsigned int uchar dis_buf; //显示缓存 uchar temp; uchar key; //键顺序吗 void delay0(uchar x); //x*0.14MS sbit LCD_RW = P2^5; sbit LCD_RS = P2^6; sbit LCD_EN = P2^7; uchar cdis1[16] = {" KEY NUMBER "}; uchar cdis2[16] = {" KEY-CODE: H "}; #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; /*************************************************************/ /* */ /* 延时子程序 */ /* */ /*************************************************************/ void delay(uchar x) { uchar j; while((x--)!=0) { for(j=0;j<125;j++) {;} } } /*************************************************************/ /* */ /*检查LCD忙状态 */ /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据 */ /* */ /*************************************************************/ bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); } /*******************************************************************/ /* */ /*写指令数据到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ /* */ /*******************************************************************/ void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } /*******************************************************************/ /* */ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ /* */ /*******************************************************************/ void lcd_wdat(uchar dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } /*************************************************************/ /* */ /* LCD初始化设定 */ /* */ /*************************************************************/ void lcd_init() { delay(15); lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据 delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x0c); //显示开,关光标 delay(5); lcd_wcmd(0x06); //移动光标 delay(5); lcd_wcmd(0x01); //清除LCD的显示内容 delay(5); } /*************************************************************/ /* */ /* 设定显示位置 */ /* */ /*************************************************************/ void lcd_pos(uchar pos) { lcd_wcmd(pos | 0x80); //数据指针=80+地址变量 } /*************************************************************/ /* */ /* 键扫描子程序 (4*3 的矩阵) P1.4 P1.5 P1.6 P1.7为行 */ /* P1.1 P1.2 P1.3为列 */ /* */ /*************************************************************/ void keyscan(void) { temp = 0; P1=0xF0; //高四位输入 行为高电平 列为低电平 delay(1); temp=P1; //读P1口 temp=temp&0xF0; //屏蔽低四位 temp=~((temp>>4)|0xF0); if(temp==1) // p1.4 被拉低 key=0; else if(temp==2) // p1.5 被拉低 key=1; else if(temp==4) // p1.6 被拉低 key=2; else if(temp==8) // p1.7 被拉低 key=3; else key=16; P1=0x0F; //低四位输入 列为高电平 行为低电平 delay(1); temp=P1; //读P1口 temp=temp&0x0F; temp=~(temp|0xF0); if(temp==2) // p1.1 被拉低 key=key+0; else if(temp==4) // p1.2 被拉低 key=key+4; else if(temp==8) // p1.3 被拉低 key=key+8; else key=16; dis_buf = key; //键值入显示缓存 dis_buf = dis_buf & 0x0f; if(dis_buf>9) //转换为ASCII码 dis_buf = dis_buf+0x37; else dis_buf = dis_buf+0x30; } /*************************************************************/ /* */ /*判断键是否按下 */ /* */ /*************************************************************/ void keydown(void) { P1=0xF0; if(P1!=0xF0) //判断按键是否按下 如果按钮按下 会拉低P1其中的一个端口 { keyscan(); } } main() { uchar m; P0=0xFF; //置P0口 P1=0xFF; //置P1口 delay(10); //延时 lcd_init(); //初始化LCD lcd_pos(0); //设置显示位置为第一行的第1个字符 m = 0; while(cdis1[m] != '\0') { //显示字符 lcd_wdat(cdis1[m]); m++; } lcd_pos(0x40); //设置显示位置为第二行第1个字符 m = 0; while(cdis2[m] != '\0') { lcd_wdat(cdis2[m]); //显示字符 m++; } dis_buf = 0x2d; //显示字符"-" while(1) { keydown(); lcd_pos(0x4c); lcd_wdat(dis_buf); //第一位数显示 } } /************************************************************/
本文档为【矩阵键盘1602液晶显示键值】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_922055
暂无简介~
格式:doc
大小:44KB
软件:Word
页数:6
分类:互联网
上传时间:2012-09-05
浏览量:39