找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机密码锁设计(发射部分和接受部分)含代码,仿真

[复制链接]
跳转到指定楼层
楼主
这是我做的密码锁,包含所有东西,希望和有经验的人士交流,代码程序不是很好,有待大家的 改进。

密码锁的发射部分proteus仿真原理图:


密码锁的接受部分proteus仿真原理图:



单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned  int       
  4. uchar duan[11]={0xbf,0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};         //所需的段的位码
  5. //uchar wei[6]={0X80,0X40,0X20,0X10,0x08,0x04};      //位的控制端        (仿真)
  6. uchar wei[6]={0X7f,0Xbf,0Xdf,0Xef,0xf7,0xfb};    //位的控制端        (开发板)
  7. uchar mbuf[6];//密码位
  8. uchar  count;
  9. uchar CLK;
  10. sbit fmq=P3^7;
  11. uchar QX;

  12. /******************************************************************

  13. 延时函数

  14. ******************************************************************/
  15. void delay(uchar t)
  16. {
  17.   uchar i,j;
  18.    for(i=0;i<t;i++)
  19.    {
  20.             for(j=1000;j>0;j--);
  21.          { ;
  22.          }
  23.    }
  24. }
  25. /******************************************************************

  26. 延时函数

  27. ******************************************************************/
  28. void delay1(uchar p)
  29. {
  30. unsigned char i,j,k;
  31. for(i=p;i>0;i--)
  32. for(j=20;j>0;j--)
  33. for(k=248;k>0;k--);

  34. }

  35. /**********************************************************************
  36.                 数码管动态扫描
  37. *********************************************************************/
  38. void xianshi()
  39. {
  40. /*****************数据转换*****************************/
  41.       
  42.           P2=wei[0];
  43.           P0=duan[mbuf[0]];
  44.           delay(1);  
  45.             P2=wei[1];
  46.       P0=duan[mbuf[1]];
  47.           delay(1);  
  48.              P2=wei[2];
  49.       P0=duan[mbuf[2]];
  50.           delay(1);  
  51.       P2=wei[3];
  52.       P0=duan[mbuf[3]];
  53.           delay(1);
  54.           P2=wei[4];
  55.       P0=duan[mbuf[4]];
  56.           delay(1);
  57.           P2=wei[5];
  58.       P0=duan[mbuf[5]];
  59.           delay(1);
  60. }

  61. /*************************************************************************
  62.                                 取键值       
  63. **************************************************************************/
  64. uchar getkey(void)///得到键值
  65. {
  66. uchar h,l,k;
  67. while(P1!=0x0f)
  68.   {
  69.    h=P1&0x0f;
  70.    P1=0xf0;
  71.    l=P1&0xf0;
  72.    k=h|l;
  73.    return(k);
  74.   }
  75. }

  76. /*************************************************************************
  77.                                 判断键值       
  78. **************************************************************************/
  79. void Getch (uchar i)
  80. {

  81. switch (i) //判断键值(那一个键按下)
  82. {
  83. case 0xe7: if (count<6) { mbuf[count]=1; count++;SBUF=0x55;while(!TI);TI=0;}break;
  84. case 0xd7: if (count<6) { mbuf[count]=2; count++;SBUF=0Xf9;while(!TI);TI=0;}break;
  85. case 0xb7: if (count<6) { mbuf[count]=3; count++;SBUF=0xa4;while(!TI);TI=0;}break;
  86. case 0x77: if (count<6) { mbuf[count]=4; count++;SBUF=0xb0;while(!TI);TI=0;}break;
  87. case 0xeb: if (count<6) { mbuf[count]=5; count++;SBUF=0x99;while(!TI);TI=0;}break;
  88. case 0xdb: if (count<6) { mbuf[count]=6; count++;SBUF=0Xf9;while(!TI);TI=0;}break;
  89. case 0xbb: if (count<6) { mbuf[count]=7; count++;SBUF=0x82;while(!TI);TI=0;}break;
  90. case 0x7b: if (count<6) { mbuf[count]=8; count++;SBUF=0xf8;while(!TI);TI=0;}break;
  91. case 0xed: if (count<6) { mbuf[count]=9; count++;SBUF=0x80;while(!TI);TI=0;}break;
  92. case 0xdd: if (count<6) { mbuf[count]=10;count++;SBUF=0x90;while(!TI);TI=0;}break;
  93. case 0xbd: if (count==6) {SBUF=75;while(!TI);TI=0;}break;
  94. case 0x7d: if (count<=6) {count=0;QX=1;}break;

  95. } }

  96. /*************************************************************************
  97.                      串口初始化,波特率9600,方式1
  98. **************************************************************************/

  99. void initTimer(void)
  100. {
  101. TMOD=0x1;
  102. TH0=0xdc;
  103. TL0=0x32;
  104. }

  105. void initUart(void)
  106. {
  107. TMOD|=0x20;
  108. SCON=0x50;
  109. TH1=0xfd;
  110. TL1=0xfd;
  111. TR1=1;
  112. }

  113. /*************************************************************************
  114.                                 主函数       
  115. **************************************************************************/
  116. void main()
  117. {
  118. uchar key;
  119. initTimer();
  120. initUart();
  121. count=0;
  122. P1=0X0F;
  123. while(1)
  124. {
  125. if(P1!=0X0F)
  126. {
  127. key=getkey(); //取键值
  128. Getch(key);        //求值
  129. ……………………

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

所有资料51hei提供下载:
密码锁.rar (154.65 KB, 下载次数: 14)



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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