久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5090|回復: 7
打印 上一主題 下一主題
收起左側

51單片機智能門鎖程序與Proteus仿真圖(智能門衛系統)

  [復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>        
  2. #include"lcd.h"
  3. #include<intrins.h>                        
  4. #define GPIO_KEY P1
  5. unsigned char i,u;
  6. unsigned char KeyValue;
  7. //用來存放讀取到的鍵值
  8. unsigned char KeyState;
  9. //用來存放按鍵狀態
  10. unsigned char error;
  11. unsigned char  PuZh[]=   "            sun ";
  12. unsigned char code w[]=          "      wrong     ";
  13. unsigned char code s[]=         "      ok        ";
  14. unsigned char code clear[]= " please in code ";
  15. unsigned char code dat[]=    "0123456789ABCDEF";
  16. unsigned char mima[]={1,2,3,4,5,6};
  17. unsigned char guanli[]={1,1,1,1,1,1};
  18. sbit men=P3^3;
  19. sbit in=P3^4;
  20. sbit out=P3^5;
  21. sbit model=P3^6;
  22. sbit sp=P3^7;
  23. void Delay10ms();   //延時50us
  24. void delay2s(void);
  25. void KeyDown();                 //檢測按鍵函數
  26. void InitUART(void);
  27. void SendOneByte(char c);

  28. void delay_ms(char p)
  29. {
  30.          char m;
  31.                   for(m=0;m<p;m++)
  32.         {
  33.           void Delay10ms();  
  34.         }
  35. }

  36. /*******************************************************************************
  37. * 函 數 名         : main
  38. * 函數功能                   : 主函數
  39. * 輸    入         : 無
  40. * 輸    出         : 無
  41. *******************************************************************************/
  42. void main(void)
  43. {
  44.         unsigned char i;
  45.         LcdInit();
  46.         InitUART();
  47.         sp=0;
  48.         KeyState=0;
  49.         for(i=0;i<16;i++)
  50.         {
  51.    //   LcdWriteCom(0x80);
  52.           LcdWriteData(PuZh[i]);
  53.         }
  54.          LcdWriteCom(0x80+0X40);
  55.                  for(i=0;i<16;i++)
  56.         {
  57.    //   LcdWriteCom(0x80);
  58.           LcdWriteData(clear[i]);
  59.         }
  60.         while(1)
  61.         {
  62.     KeyDown();        
  63.         if(in==0)
  64.           {
  65.          Delay10ms();         
  66.           if(in==0)
  67.             u++;
  68.           while(!in);
  69.           PuZh[0]=(int)dat[(u/10000)];
  70.           PuZh[1]=(int)dat[(u/1000)];
  71.           PuZh[2]=(int)dat[(u/100)];
  72.           PuZh[3]=(int)dat[(u/10%10)];
  73.           PuZh[4]=(int)dat[(u%10)];
  74.           LcdWriteCom(0x80);
  75.           for(i=0;i<16;i++)
  76.         {
  77.           LcdWriteData(PuZh[i]);
  78.         }
  79.          for(i=0;i<5;i++)
  80.         {
  81.          SendOneByte(PuZh[i]);
  82.         }
  83.         SendOneByte('\r');
  84.     SendOneByte('\n');        
  85.         }

  86.         if(model==0)
  87.           {
  88.           Delay10ms();
  89.           if(model==0){
  90.           PuZh[9]=dat[10];
  91.           Delay10ms();
  92.           LcdWriteCom(0x80);
  93.           for(i=0;i<16;i++)
  94.         {
  95.           LcdWriteData(PuZh[i]);
  96.         }
  97.          if(men==0)
  98.             Delay10ms();
  99.                 if(men==0)
  100.                 {
  101.                  sp=1;
  102.                  SendOneByte('w');
  103.                  SendOneByte('a');
  104.                  SendOneByte('r');
  105.                  SendOneByte('i');
  106.                  SendOneByte('n');
  107.                  SendOneByte('g');
  108.                  SendOneByte('\r');
  109.                  SendOneByte('\n');               
  110.                 }
  111.            Delay10ms();
  112.           }
  113.          }
  114.          
  115.                  
  116.         if(model==1)
  117.         {PuZh[9]=dat[11];
  118.          sp=0;
  119.           LcdWriteCom(0x80);
  120.           for(i=0;i<16;i++)
  121.         {
  122.           LcdWriteData(PuZh[i]);
  123.         }         
  124.                  }
  125.                                          
  126.                                 
  127. }
  128. }
  129.      





  130. /*******************************************************************************
  131. * 函 數 名         : KeyDown
  132. * 函數功能                   : 檢測有按鍵按下并讀取鍵值
  133. * 輸    入         : 無
  134. * 輸    出         : 無
  135. *******************************************************************************/
  136. void KeyDown(void)
  137. {
  138.         char a,k,l,error;
  139.         
  140.         GPIO_KEY=0x0f;
  141.         if(GPIO_KEY!=0x0f)
  142.         {
  143.                 Delay10ms();
  144.                 if(GPIO_KEY!=0x0f)
  145.                 {        
  146.                   k++;
  147.                         KeyState=1;
  148.                         //測試列
  149.                         GPIO_KEY=0X0F;
  150. //                         Delay10ms();
  151.                         switch(GPIO_KEY)
  152.                         {
  153.                                 case(0X07):        KeyValue=0;break;
  154.                                 case(0X0b):        KeyValue=1;break;
  155.                                 case(0X0d): KeyValue=2;break;
  156.                                 case(0X0e):        KeyValue=3;break;
  157. //                                default:        KeyValue=17;        //檢測出錯回復17意思是把數碼管全滅掉。
  158.                         }
  159.                         //測試行
  160.                         GPIO_KEY=0XF0;
  161.                         Delay10ms();
  162.                         switch(GPIO_KEY)
  163.                         {
  164.                                 case(0X70):        KeyValue=KeyValue;break;
  165.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  166.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  167.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  168. //                                default:        KeyValue=17;
  169.                         }
  170.                         while((a<50)&&(GPIO_KEY!=0xf0))         //檢測按鍵松手檢測
  171.                         {
  172.                                 Delay10ms();
  173.                                 a++;
  174.                         }
  175.    
  176.         a=0;
  177. if(k==6){
  178.          LcdWriteCom(0x80+0X40);
  179.          k=0;
  180.         for(l=0;l<6;l++)
  181.         {
  182. if(mima[l]==guanli[l])        error=1;
  183. else {error=0; break;}
  184.    }

  185. if(error==1) {
  186.         for(i=0;i<16;i++)
  187.         {
  188.         LcdWriteData(s[i]);        
  189.         }
  190.    delay2s();; }

  191. else
  192.         {
  193.           for(i=0;i<16;i++)
  194.         {  
  195.         LcdWriteData(w[i]);        
  196.         }
  197.     delay2s();
  198.           }
  199.    LcdWriteCom(0x80+0X40);
  200.    for(i=0;i<16;i++)
  201.         {  
  202.         LcdWriteData(clear[i]);        
  203.         }
  204.                 }
  205.                 }
  206.         }
  207. }
  208. /*******************************************************************************
  209. * 函 數 名         : Delay10ms
  210. * 函數功能                   : 延時函數,延時10ms
  211. * 輸    入         : 無
  212. * 輸    出         : 無
  213. *******************************************************************************/
  214. void Delay10ms(void)   //誤差 0us
  215. {
  216.     unsigned char a,b,c;
  217.     for(c=1;c>0;c--)
  218.         for(b=38;b>0;b--)
  219.             for(a=130;a>0;a--);
  220. }
  221. void delay2s(void)   //誤差 0us
  222. {
  223.     unsigned char a,b,c;
  224.     for(c=127;c>0;c--)
  225.         for(b=235;b>0;b--)
  226.             for(a=32;a>0;a--);
  227.     _nop_();  //if Keil,require use intrins.h
  228. }
  229.   void InitUART(void)
  230. {
  231.      TMOD = 0x20;
  232.     SCON = 0x50;
  233.     TH1 = 0xFD;
  234.     TL1 = TH1;
  235.     PCON = 0x00;
  236.     EA = 1;
  237.     ES = 1;
  238.     TR1 = 1;
  239. }
  240. void SendOneByte(char c)
  241. {
  242.     SBUF = c;
  243.     while(!TI);
  244.     TI = 0;
  245. }
  246. void UARTInterrupt(void) interrupt 4
  247. {
  248.     if(RI)
  249.     {
  250.         RI = 0;
  251.          
  252.     }

  253. }
復制代碼

仿真代碼51hei附件下載:
仿真程序.7z (251.29 KB, 下載次數: 104)

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1002881 發表于 2022-2-14 06:03 | 只看該作者
樓主,仿真密碼是什么了,
回復

使用道具 舉報

板凳
ID:474195 發表于 2022-3-21 22:09 | 只看該作者
gonglijun 發表于 2022-2-14 06:03
樓主,仿真密碼是什么了,

程序中有的
回復

使用道具 舉報

地板
ID:1017480 發表于 2022-4-11 14:37 | 只看該作者
我想問下就是那個最下面那個顯示屏是什么
回復

使用道具 舉報

5#
ID:474195 發表于 2022-4-19 16:08 | 只看該作者
YUANQIQI 發表于 2022-4-11 14:37
我想問下就是那個最下面那個顯示屏是什么

串口信息顯示
回復

使用道具 舉報

6#
ID:63541 發表于 2022-6-29 00:56 | 只看該作者
密碼打不開的。
回復

使用道具 舉報

7#
ID:1037655 發表于 2022-6-29 21:50 來自手機 | 只看該作者
感恩有你!
回復

使用道具 舉報

8#
ID:474195 發表于 2022-8-5 00:07 | 只看該作者

試下改變sw1的狀態
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线一区二区三区 | 中文字幕在线观看av | 国产999精品久久久 日本视频一区二区三区 | 亚洲图片一区二区三区 | 国产黄色一级电影 | 亚洲一区二区不卡在线观看 | 欧美a在线看 | 中文字幕国产 | 欧美一区二区在线 | 精品一区二区三区在线观看国产 | 91婷婷韩国欧美一区二区 | 久久久久久精 | 日本一区二区高清不卡 | 偷拍自拍在线观看 | 一区二区播放 | 国产精产国品一二三产区视频 | 欧美日韩三级视频 | 涩涩操 | 久久综合一区二区 | 最新国产精品 | 欧美jizzhd精品欧美巨大免费 | 日日干日日色 | 国产成人av一区二区三区 | 国产精品成人69xxx免费视频 | av大片| 久久成人国产精品 | 亚洲一区二区中文字幕 | 9久9久9久女女女九九九一九 | 国产精品免费观看 | 国产性色视频 | 在线播放中文字幕 | 日本精品一区二区三区在线观看视频 | 日韩精品一区二区三区老鸭窝 | 国产精品美女久久久av超清 | 亚洲一区二区在线播放 | 99精品视频在线 | 最近免费日本视频在线 | 中文亚洲视频 | 亚洲精品久久 | 精品一级电影 | 日日噜噜噜夜夜爽爽狠狠视频, |