找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机电子密码锁程序设计

[复制链接]
跳转到指定楼层
楼主
ID:249127 发表于 2017-11-14 16:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,直到没有按键按下3种后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。

单片机源程序如下:
  1. #include <reg52.h>
  2. unsigned char code ps[]={1,2,3,4,5};
  3. unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
  4. unsigned char pslen=9;
  5. unsigned char templen;
  6. unsigned char digit;
  7. unsigned char funcount;
  8. unsigned char digitcount;
  9. unsigned char psbuf[9];
  10. bit cmpflag;
  11. bit hibitflag;
  12. bit errorflag;
  13. bit rightflag;
  14. unsigned int second3;
  15. unsigned int aa;
  16. unsigned int bb;
  17. bit alarmflag;
  18. bit exchangeflag;
  19. unsigned int cc;
  20. unsigned int dd;
  21. bit okflag;
  22. unsigned char oka;
  23. unsigned char okb;
  24. void main(void)
  25. {
  26.         unsigned char i,j;
  27.     P2=dispcode[digitcount];
  28.     TMOD=0x01;
  29.     TH0=(65536-500)/256;
  30.     TL0=(65536-500)%256;
  31.     TR0=1;
  32.     ET0=1;
  33.     EA=1;
  34.     while(1)
  35. {
  36. if(cmpflag==0)
  37. {
  38. if(P3^6==0) //function key
  39. {
  40. for(i=10;i>0;i--)
  41. for(j=248;j>0;j--);
  42. if(P3^6==0)
  43. {
  44. if(hibitflag==0)
  45. {
  46. funcount++;
  47. if(funcount==pslen+2)
  48. {
  49. funcount=0;
  50. cmpflag=1;
  51. }
  52. P1=dispcode[funcount];
  53. }
  54. else
  55. {
  56. second3=0;
  57. }
  58. while(P3^6==0);
  59. }
  60. }
  61. if(P3^7==0) //digit key
  62. {
  63. for(i=10;i>0;i--)
  64. for(j=248;j>0;j--);
  65. if(P3^7==0)
  66. {
  67. if(hibitflag==0)
  68. {
  69. digitcount++;
  70. if(digitcount==10)
  71. {
  72. digitcount=0;
  73. }
  74. P2=dispcode[digitcount];
  75. if(funcount==1)
  76. {
  77. pslen=digitcount;
  78. templen=pslen;
  79. }
  80. else if(funcount>1)
  81. {
  82. psbuf[funcount-2]=digitcount;
  83. }
  84. }
  85. else
  86. {
  87. second3=0;
  88. }
  89. while(P3^7==0);
  90. }
  91. }
  92. }
  93. else
  94. {
  95. cmpflag=0;
  96. for(i=0;i<pslen;i++)
  97. {
  98. if(ps[i]!=psbuf[i])
  99. {
  100. hibitflag=1;
  101. i=pslen;
  102. errorflag=1;
  103. rightflag=0;
  104. cmpflag=0;
  105. second3=0;
  106. goto
  107. }
  108. }
  109. cc=0;
  110. errorflag=0;
  111. rightflag=1;
  112. hibitflag=0;
  113. cmpflag=0;
  114. }
  115. }
  116. }

  117. void t0(void) interrupt 1 using 0
  118. {
  119. TH0=(65536-500)/256;
  120. TL0=(65536-500)%256;
  121. if((errorflag==1) && (rightflag==0))
  122. {
  123. bb++;
  124. if(bb==800)
  125. {
  126. bb=0;
  127. alarmflag=~alarmflag;
  128. }
  129. if(alarmflag==1)
  130. {
  131. P0^0=~P0^0;
  132. }
  133. aa++;
  134. if(aa==800)
  135. {
  136. aa=0;
  137. P0^1=~P0^1;
  138. }
  139. second3++;
  140. if(second3==6400)
  141. {
  142. second3=0;
  143. hibitflag=0;
  144. errorflag=0;
  145. rightflag=0;
  146. cmpflag=0;
  147. P0^1=1;
  148. alarmflag=0;
  149. bb=0;
  150. aa=0;
  151. }
  152. }
  153. if((errorflag==0) && (rightflag==1))
  154. {
  155. P0_1=0;
  156. cc++;
  157. if(cc<1000)
  158. {
  159. okflag=1;
  160. }
  161. else if(cc<2000)
  162. {
  163. okflag=0;
  164. }
  165. else
  166. {
  167. errorflag=0;
  168. rightflag=0;
  169. hibitflag=0;
  170. cmpflag=0;
  171. P0^1=1;
  172. cc=0;
  173. oka=0;
  174. okb=0;
  175. okflag=0;
  176. P0^0=1;
  177. }
  178. if(okflag==1)
  179. ……………………

  180. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
新建文件夹.zip (15.74 KB, 下载次数: 8)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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