找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2521|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)密碼鎖設(shè)計(jì)(發(fā)射部分和接受部分)含代碼,仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我做的密碼鎖,包含所有東西,希望和有經(jīng)驗(yàn)的人士交流,代碼程序不是很好,有待大家的 改進(jìn)。

密碼鎖的發(fā)射部分proteus仿真原理圖:


密碼鎖的接受部分proteus仿真原理圖:



單片機(jī)源程序如下:
  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};    //位的控制端        (開發(fā)板)
  7. uchar mbuf[6];//密碼位
  8. uchar  count;
  9. uchar CLK;
  10. sbit fmq=P3^7;
  11. uchar QX;

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

  13. 延時(shí)函數(shù)

  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. 延時(shí)函數(shù)

  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.                 數(shù)碼管動態(tài)掃描
  37. *********************************************************************/
  38. void xianshi()
  39. {
  40. /*****************數(shù)據(jù)轉(zhuǎn)換*****************************/
  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) //判斷鍵值(那一個(gè)鍵按下)
  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.                                 主函數(shù)       
  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黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
密碼鎖.rar (154.65 KB, 下載次數(shù): 14)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表