找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5791|回复: 7
收起左侧

基于51单片机的LCD1602密码锁Proteus仿真程序

  [复制链接]
ID:633081 发表于 2020-3-1 08:12 | 显示全部楼层 |阅读模式
显示让输入密码:1314
Q{5$G1TNAG7SO4@UZV{9~XR.png
密码输入正确,绿灯亮,否则,红灯亮。
2H[6%(QXF}52ZOIX3~888.png
源程序:
  1. #include<reg51.h>
  2. #include<string.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar table[]="INPUT PASSWORD:";
  6. uchar table1[]="*";
  7. uchar table2[]="Mission Success!";
  8. uchar table3[]="Forgot Password?";
  9. uchar new[4];
  10. uchar password[]={1,3,1,4};//原始码
  11. sbit P30=P3^0;
  12. sbit P31=P3^1;
  13. sbit P35=P3^5;
  14. sbit P36=P3^6;
  15. uchar k=0;
  16. uchar j=0;
  17. void delay(uint ms)
  18. {
  19. uint m,s;
  20. for(m=0;m<ms;m++)
  21. {
  22. for(s=0;s<1141;s++);
  23. }
  24. }
  25. void write_com(uchar com)//写指令
  26. {
  27. P30=0;
  28. P2=com;
  29. delay(1);
  30. P31=1;
  31. delay(1);
  32. P31=0;
  33. }
  34. void write_dat(uchar dat)//写数据
  35. {
  36. P30=1;
  37. P2=dat;
  38. P31=1;
  39. delay(1);
  40. P31=0;
  41. }
  42. void jiaodui()//密码校对
  43. {
  44. uchar i=0;
  45. while(password[i]==new[i])
  46. {
  47. i++;
  48. if(i==4)break;
  49. }
  50. if(i==4)
  51. {
  52. P36=1;//开锁
  53. write_com(0X80+0X40);
  54. delay(5);
  55. for(i=0;i<17;i++)
  56. {
  57. write_dat(table2[i]);
  58. delay(20);
  59. }
  60. }
  61. else//密码错误
  62. {
  63. j++;
  64. if(j==3)
  65. {    P35=1;
  66. write_com(0X80+0X40);
  67. delay(5);
  68. for(i=0;i<16;i++)
  69. {
  70. write_dat(table3[i]);
  71. delay(20);
  72. }
  73. while(1);
  74. }
  75. else if(j!=3)
  76. {
  77. k=0;
  78. write_com(0X80+0X40);
  79. }
  80. }
  81. }
  82. uchar key_press()//检查是否有按键按下
  83. {
  84. uchar i;
  85. P1=0Xf0;
  86. delay(20);
  87. i=P1;
  88. if(i==0Xf0)
  89. {
  90. return 0;
  91. }
  92. else
  93. {
  94. return 1;
  95. }
  96. }
  97. void key_scan()//确认所按按键的具体位置,及对应数据
  98. {
  99. uchar key,i=0X7F,j;
  100. delay(10);
  101. if(key_press())
  102. {
  103. do{
  104. i=(i<<1)|(i>>7);
  105. P1=i;
  106. key=P1;
  107. j=key&0Xf0;
  108. }while(j==0XF0);
  109. while(key_press());
  110. switch(key)
  111. {
  112. case 0X7E:
  113. key=0;break;
  114. case 0XBE:
  115. key=1;break;
  116. case 0XDE:
  117. key=2;break;
  118. case 0X7D:
  119. key=3;break;
  120. case 0XBD:
  121. key=4;break;
  122. case 0XDD:
  123. key=5;break;
  124. case 0X7B:
  125. key=6;break;
  126. case 0XBB:
  127. key=7;break;
  128. case 0XDB:
  129. key=8;break;
  130. case 0X77:
  131. key=9;break;
  132. case 0XB7:
  133. key=10;break;
  134. case 0XD7:
  135. key=11;break;
  136. }
  137. if(key<10)
  138. {
  139. new[k]=key;k++;
  140. write_dat(table1[0]);
  141. }
  142. else if(key==11) jiaodui();
  143. else if(key==10)
  144. {
  145. k=0;
  146. write_com(0X80+0X40);
  147. }
  148. }
  149. }
  150. void main()
  151. {
  152. uint i;//,j;
  153. P30=1;
  154. P31=0;
  155. P35=0;
  156. P36=0;
  157. write_com(0X38);
  158. delay(5);
  159. write_com(0X01);
  160. delay(5);
  161. write_com(0x0f);
  162. delay(5);
  163. write_com(0x80+0x00);
  164. delay(5);
  165. for(i=0;i<15;i++)
  166. {
  167. write_dat(table[i]);
  168. delay(20);
  169. }
  170. write_com(0Xc0);
  171. delay(5);
  172. while(1)
  173. {
  174. if(key_press())
  175. {
  176. key_scan();
  177. }
  178. }
  179. }
复制代码
全部资料51hei下载地址:
密码锁.rar (65.93 KB, 下载次数: 207)

评分

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

查看全部评分

回复

使用道具 举报

ID:934248 发表于 2021-6-7 15:26 | 显示全部楼层
程序做的很好,赞
回复

使用道具 举报

ID:943581 发表于 2021-6-23 22:58 | 显示全部楼层
请问这个源码有带详细注释么  
回复

使用道具 举报

ID:950289 发表于 2021-7-7 12:33 | 显示全部楼层
请问我还可以在这一个单片机上连接时钟吗
回复

使用道具 举报

ID:928284 发表于 2021-11-27 15:28 | 显示全部楼层
这个板子我有,有时间下载看看,谢谢。
回复

使用道具 举报

ID:825397 发表于 2022-5-27 15:56 | 显示全部楼层
功能虽然简单了点,值得参考,谢谢分享.
回复

使用道具 举报

ID:1042648 发表于 2022-9-7 01:02 | 显示全部楼层
怎么我把代码编译后,烧入单片机就直接开锁了呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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