找回密码
 立即注册

QQ登录

只需一步,快速开始

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

结合4X4矩阵键盘与LCD液晶屏显示器,将矩阵按键号显示在液晶屏上。在液晶屏的第一...

[复制链接]
跳转到指定楼层
楼主
ID:524955 发表于 2019-4-30 10:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
结合4X4矩阵键盘与LCD液晶屏显示器,将矩阵按键号显示在液晶屏上。在液晶屏的第一行显示实验者的姓名英文拼写,第二行显示:“KEY VALUE:矩阵按键号”

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define key P1
  6. sbit rw=P2^5;
  7. sbit rs=P2^6;
  8. sbit ep=P2^7;
  9. uchar pose;

  10. void delay(uint z)
  11. {
  12.         uint x,y;
  13.         for(x=0;x<z;x++)
  14.                 for(y=0;y<100;y++);
  15. }  

  16. bit lcd_bz()
  17. {  
  18.         bit result;
  19.         rw=1;  
  20.         rs=0;  
  21.         ep=1;  
  22.         _nop_();  
  23.         _nop_();  
  24.         _nop_();  
  25.         _nop_();  
  26.         result=(bit)(P0&0x80);  
  27.         ep=0;
  28.         return result;
  29. }

  30. void lcd_wdat(uchar dat)
  31. {
  32.         while(lcd_bz());
  33.         rs=1; //rs为1表示数据
  34.         rw=0;  
  35.         ep=0;
  36.         _nop_();
  37.         _nop_();  
  38.         P0=dat;
  39.         _nop_();
  40.         _nop_();
  41.         _nop_();
  42.         _nop_();  
  43.         ep=1;  
  44.         delay(1);
  45.         ep=0;
  46. }

  47. void lcd_w(uchar cmd)
  48. {  
  49.         while(lcd_bz());  
  50.         rs=0;//rs为0表示指令  
  51.         rw=0;  
  52.         ep=0;  
  53.         _nop_();  
  54.         _nop_();  
  55.         P0=cmd;
  56.         _nop_();
  57.         _nop_();  
  58.         _nop_();
  59.         _nop_();  
  60.         ep=1;  
  61.     delay(1);
  62.         ep=0;
  63. }

  64. void lcd_pos(uchar lie,uchar hang)
  65. {  
  66.         if(hang==1)
  67.                 lcd_w(lie+0x80);
  68.         else
  69.                 lcd_w(0x40+lie+0x80);
  70. }

  71. //液晶屏设置初始化
  72. void lcd_init()
  73. {
  74.         lcd_w(0x01);//清除显示内容
  75.         delay(1);
  76.         lcd_w(0x38);//功能设置:双行显示 //数据位为8,字形大小为5X7  
  77.         delay(1);  
  78.         lcd_w(0x38);
  79.         delay(1);
  80.         lcd_w(0x0c);//显示开关控制  
  81.         delay(1);  
  82.         lcd_w(0x06);//输入方式设置  
  83.         delay(1);
  84. }

  85. uchar scankey()
  86. {
  87.         uchar hang,lie;
  88.         key=0xf0;
  89.         if(key!=0xf0)
  90.         {
  91.                 switch(key)
  92.                 {
  93.                         case 0x70:        hang=3;break;
  94.                         case 0xb0:        hang=2;break;
  95.                         case 0xd0:        hang=1;break;
  96.                         case 0xe0:        hang=0;break;
  97.                         default:break;
  98.                 }
  99.                 delay(5);
  100.                 key=0x0f;
  101.                 if(key!=0x0f)
  102.                 {
  103.                           switch(key)
  104.                         {
  105.                                 case 0x07:        lie=3;break;
  106.                                 case 0x0b:        lie=2;break;
  107.                                 case 0x0d:        lie=1;break;
  108.                                 case 0x0e:        lie=0;break;
  109.                                 default:break;
  110.                         }
  111.                         pose=hang*4+lie;
  112.                         return 1;
  113.                 }
  114.                 else
  115.                         return 0;
  116.         }
  117.         else
  118.                         return 0;
  119. }

  120. void main()
  121. {  
  122.        
  123.         char i;  
  124.         uchar code str1[]="xiaoming";  
  125.         uchar code str2[]="KEY VALUE: ";
  126.         uchar c[ ]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};
  127.         lcd_init(); //液晶初始化  
  128.         delay(10);  
  129.         lcd_pos(0,1);
  130.         i=0;
  131.         while(str1[i]!='\0')
  132.         {  
  133.                 lcd_wdat(str1[i]);  
  134.                 i++;  
  135.         }
  136.                 //换行显示
  137.         lcd_pos(0,2);
  138.                 i=0;
  139.                 while(str2[i]!='\0')  
  140.                 {  
  141.                         lcd_wdat(str2[i]);  
  142.                         i++;  
  143.                 }
  144.         while(1)
  145.         {
  146.                 if(scankey())
  147.                 {
  148.                          lcd_pos(12,2);
  149.                          lcd_wdat(c[pose]);
  150.                 }
  151.         }
  152.        
  153. }
复制代码

所有资料51hei提供下载:
lcd.rar (1.02 KB, 下载次数: 39)



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

使用道具 举报

沙发
ID:561693 发表于 2019-6-21 14:12 来自手机 | 只看该作者
没有仿真原理图么?
回复

使用道具 举报

板凳
ID:561693 发表于 2019-6-21 14:12 来自手机 | 只看该作者
原理图有么
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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