找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5460|回复: 1
打印 上一主题 下一主题
收起左侧

4*4矩阵键盘1602液晶显示仿真+单片机代码

[复制链接]
跳转到指定楼层
楼主
(1)4*4 矩阵键盘布局如下,检测按键,然后通过 LCD1602 显示出来
第一行:The key value is
第二行:每按一次键,键值依次显示出来,整行显示完后,清屏,键值
从左开始显示

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. /**************************************************************************************
  2. *                              LCD1602液晶显示实验                                                                                                  *
  3. 实现现象:下载程序后插上LCD1602液晶在开发板上,即可显示
  4. 注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。                                                                                                                                                                  
  5. ***************************************************************************************/

  6. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  7. #include "lcd.h"
  8. typedef unsigned int u16;          //对数据类型进行声明定义
  9. typedef unsigned char u8;
  10. #define LCD1602_DATAPINS P0
  11. #define GPIO_KEY P1
  12. u8 KeyValue,k=0,n=0,miss=1;
  13. u8 Disp[]="The key value is";
  14. u8 cmy[17]={'1','2','3','/','4','5','6','%','7','8','9','@','*','0','#','='};
  15. u8 dp[17]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};

  16. /*******************************************************************************
  17. * 函 数 名         : main
  18. * 函数功能                   : 主函数
  19. * 输    入         : 无
  20. * 输    出         : 无
  21. *******************************************************************************/
  22. void KeyDown(void)
  23. {
  24.         char a=0;
  25.         GPIO_KEY=0x0f;
  26.         if(GPIO_KEY!=0x0f)//读取按键是否按下
  27.         {
  28.                 Lcd1602_Delay1ms(10);//延时10ms进行消抖
  29.                 if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
  30.                 {        n=1;
  31.                         //测试列
  32.                         GPIO_KEY=0X0F;
  33.                         switch(GPIO_KEY)
  34.                         {
  35.                                 case(0X07):        KeyValue=0;break;
  36.                                 case(0X0b):        KeyValue=1;break;
  37.                                 case(0X0d): KeyValue=2;break;
  38.                                 case(0X0e):        KeyValue=3;break;
  39.                         }
  40.                         //测试行
  41.                         GPIO_KEY=0XF0;
  42.                         switch(GPIO_KEY)
  43.                         {
  44.                                 case(0X70):        KeyValue=KeyValue;break;
  45.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  46.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  47.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  48.                         }
  49.                         while((a<50)&&(GPIO_KEY!=0xf0))         //检测按键松手检测
  50.                         {
  51.                                 Lcd1602_Delay1ms(1);
  52.                                 a++;
  53.                         }
  54.                 }
  55.         }
  56. }

  57. void main(void)
  58. {
  59.         u8 i,m;
  60.         LcdInit();
  61.         for(i=0;i<16;i++)
  62.         {        
  63.                 LcdWriteData(Disp[i]);        
  64.         }
  65.          while(miss)
  66.         {
  67.         LcdWriteCom(0x80+0x40);
  68.                  KeyDown();         
  69.                   if(n==1)
  70.                 {dp[k]=cmy[KeyValue];
  71.                 n=0;
  72.                  k++;
  73.                  }
  74.                    for(m=0;m<16;m++)
  75.             {LcdWriteData(dp[m]);}
  76.                   if(k==16)
  77.                 { for(m=0;m<16;m++)
  78.                       {dp[m]=' ';}

  79.                  Lcd1602_Delay1ms(1000);
  80.                  LcdWriteCom(0x01);
  81.                  Lcd1602_Delay1ms(1000);
  82.                  k=0;
  83.                  for(i=0;i<16;i++)
  84.         {        
  85.                 LcdWriteData(Disp[i]);        
  86.         }
  87.              }        
  88.         }                 
  89. }

  90.         
复制代码

所有资料51hei提供下载:
44矩阵键盘液晶显示.zip (74.41 KB, 下载次数: 160)
第四次实验课要求.pdf (171.17 KB, 下载次数: 22)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶3 踩
回复

使用道具 举报

沙发
ID:440263 发表于 2018-12-12 10:24 | 只看该作者
正好需要这个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表