找回密码
 立即注册

QQ登录

只需一步,快速开始

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

12864液晶显示4x4矩阵键盘键值+Proteus仿真电路

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. sbit  E=P3^0;
  4. sbit  RW=P3^1;
  5. sbit  DI=P3^2;
  6. sbit  CS2=P3^3;
  7. sbit  CS1=P3^4;
  8. #define uchar unsigned char
  9. #define uint unsigned int
  10. unsigned char cons,cont;
  11. //uchar code   
  12. //l[]=
  13. //{0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x10,0x11,0x16,0xD0,0x10,0x10,
  14. //0x00,0x80,0x40,0x20,0x18,0x06,0x41,0x20,0x10,0x3F,0x44,0x42,0x41,0x40,0x40,0x78},
  15. //c[]=
  16. //{0x00,0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0x3E,0x22,0x22,0x22,0x22,0x22,0x3E,0x00,
  17. //0x00,0x08,0x06,0x01,0xFF,0x01,0x06,0x40,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x41},
  18. //dian[]=
  19. //{0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,
  20. //0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},
  21. //qi[]=
  22. //{0x20,0x10,0x4C,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0xD4,0x04,0x04,0x00,0x00,
  23. //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x40,0xF0,0x00},
  24. //ban[]=
  25. //{0x84,0x84,0xFC,0x84,0x84,0x00,0xF8,0x00,0xFF,0x00,0x84,0x84,0xFC,0x84,0x84,0x00,
  26. //0x10,0x30,0x1F,0x08,0x88,0x42,0x21,0x18,0x07,0x00,0x20,0x20,0x3F,0x20,0x20,0x00};
  27. uchar code  
  28. shuzi[16][32]={{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  29. 0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"0",0*/
  30. {0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  31. 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"1",1*/
  32. {0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  33. 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"2",2*/
  34. {0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  35. 0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"3",3*/
  36. {0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  37. 0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"4",4*/
  38. {0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  39. 0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"5",5*/
  40. {0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  41. 0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"6",6*/
  42. {0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  43. 0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"7",7*/
  44. {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  45. 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"8",8*/
  46. {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  47. 0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"9",9*/
  48. {0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  49. 0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"a",
  50. 0*/
  51. {0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  52. 0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"b",
  53. 1*/
  54. {0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  55. 0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"c",
  56. 2*/
  57. {0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  58. 0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"d",
  59. 3*/
  60. {0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  61. 0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"e",
  62. 4*/
  63. {0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  64. 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};/*"f"
  65. ,5*/
  66. unsigned char i;
  67. void delay(uint x)//延时
  68. {
  69. uint a,b;
  70. for(a=x;a>0;a--)
  71. for(b=10;b>0;b--);
  72. }
  73. void keycan(void)
  74. {
  75. for(i=0;i<4;i++)
  76. switch(i)
  77. {
  78. case 0:
  79. P1=0x7f;
  80. delay(5);
  81. switch(P1|0xf0)
  82. {
  83. case 0xfe:cont=0;break;
  84. case 0xfd:cont=1;break;
  85. case 0xfb:cont=2;break;
  86. case 0xf7:cont=3;break;
  87. default:break;
  88. }
  89. case 1:
  90. P1=0xbf;
  91. delay(5);
  92. switch(P1|0xf0)
  93. {
  94. case 0xfe:cont=4;break;
  95. case 0xfd:cont=5;break;
  96. case 0xfb:cont=6;break;
  97. case 0xf7:cont=7;break;
  98. default:break;
  99. }
  100. case 2:
  101.     P1=0xdf;
  102. delay(5);
  103. switch(P1|0xf0)
  104. {
  105. case 0xfe:cont=8;break;
  106. case 0xfd:cont=9;break;
  107. case 0xfb:cont=10;break;
  108. case 0xf7:cont=11;break;
  109. default:break;
  110. }
  111. case 3:
  112. P1=0xef;
  113. delay(5);
  114. switch(P1|0xf0)
  115. {
  116. case 0xfe:cont=12;break;
  117. case 0xfd:cont=13;break;
  118. case 0xfb:cont=14;break;
  119. case 0xf7:cont=15;break;
  120. default:break;
  121. }
  122. default:break;
  123. }
  124. } void readbusy(void)     /* 判断最高位是否为 1,为 0 才读写数据 */
  125. {
  126. P0=0x00;
  127. cons=P0;
  128. DI=0;
  129. RW=1;
  130. E=1;  
  131. while(cons&0x80);
  132. E=0;
  133. }  
  134. void Select(uchar i)
  135. {
  136. switch(i)
  137.   {
  138.    case 0:CS1=0;CS2=0;break;
  139.    case 1:CS1=0;CS2=1;break;
  140.    case 2:CS1=1;CS2=0;break;
  141.    default:break;
  142.   }
  143. }
  144. void xieminling(uchar value)
  145. {  
  146. readbusy();/* 每次读写都要忙判断 */
  147. DI=0;
  148. RW=0;  
  149. P0=value;  
  150. E=1;
  151. _nop_();
  152. _nop_();
  153. E=0;  
  154. }
  155. void Setonoff(uchar onoff)
  156. {
  157. onoff=0x3e|onoff;
  158. xieminling(onoff);   
  159. }
  160. void xieshuju(uchar dat)
  161. {  
  162. readbusy();
  163. DI=1;
  164. RW=0;  
  165. P0=dat;
  166. E=1;   
  167. _nop_();
  168. _nop_();
  169. E=0;  
  170. }
  171. void  Setpage(uchar page)/* 设置页 */
  172. {  
  173. page=0xb8|page;   
  174. xieminling(page);  
  175. }
  176. void Setline(uchar line) /* 设置列 */
  177. {  
  178. line=0x40|line;
  179. xieminling(line);
  180. }  
  181. void qingping(uchar screen)   /* 清屏*/
  182. {
  183. uchar i,j;  
  184. Select(screen);  
  185. for(i=0;i<8;i++)
  186.   {   
  187.    Setline(0);
  188.    Setpage(i);  
  189.      for(j=0;j<64;j++)
  190.       {  
  191.         xieshuju(0x00);
  192.       }
  193.   }
  194. }  
  195. void chushihua(void)
  196. {
  197. Select(0);
  198. Setonoff(0);
  199. Select(0);
  200. Setonoff(1);
  201. Select(0);  
  202. qingping(0);
  203. }
  204. void xianshi(uchar ss,uchar lie,uchar page1,uchar *p)
  205. {
  206.   uchar i;
  207.   Select(ss);
  208.   Setpage(page1);
  209.   Setline(lie);
  210.   for(i=0;i<16;i++)
  211.     {
  212. xieshuju(p[i]);
  213. }
  214. Setpage(page1+1);
  215.     Setline(lie);
  216. for(i=0;i<16;i++)
  217. {xieshuju(p[i+16]);
  218. }
  219. }
  220. void main()
  221. {
  222. //xianshi(2,0,2,l);
  223. //xianshi(2,16*2,2,c);
  224. //xianshi(1,0,2,dian);
  225. //xianshi(1,16,2,qi);
  226. //xianshi(1,16*2,2,shuzi[1]);
  227. //xianshi(1,16*3,2,ban);
  228. //xianshi(2,0,4,shuzi[2]);
  229. //xianshi(2,8,4,shuzi[0]);
  230. //xianshi(2,16,4,shuzi[1]);
  231. //xianshi(2,16+8,4,shuzi[1]);
  232. //xianshi(2,16*2,4,shuzi[0]);
  233. //xianshi(2,16*2+8,4,shuzi[2]);
  234. //xianshi(2,16*3,4,shuzi[4]);
  235. //xianshi(1,0,4,shuzi[1]);
  236. //xianshi(1,8,4,shuzi[0]);
  237. //xianshi(1,8+8,4,shuzi[9]);
  238. while(1)
  239. {
  240. chushihua();
  241. keycan();
  242. xianshi(2,0,0,shuzi[cont]);

  243.    delay();

  244. }
  245. }  

复制代码

所有资料51hei提供下载:
12864液晶显示4x4矩阵键盘键值 仿真电路.zip (71.6 KB, 下载次数: 81)


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

使用道具 举报

沙发
ID:64765 发表于 2019-7-4 21:12 | 只看该作者
学习,谢谢分享。
回复

使用道具 举报

板凳
ID:794286 发表于 2020-7-1 11:15 | 只看该作者
压缩包里没有看到仿真,不是用Proteus仿真的吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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