欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機做的電子密碼鎖(帶仿真文件液晶顯示) [打印本頁]

作者: xiaoliu    時間: 2013-6-26 01:23
標題: 51單片機做的電子密碼鎖(帶仿真文件液晶顯示)
我花了一整天做了這個小玩意,然后又花了10分鐘發到51hei論壇,分享給51hei的網友,第一次做這個。。小弟新手,代碼也很簡單給論壇的朋友們分享下。。
(打算這星期去實驗室把實物做出來,這周末更新額。。)
小提示:(小弟新手額,有提示不對的地方望大神指出 )
一:大家用多文件編譯的時候得多注意點
      (例如:  .h與.c文件的配對,以及.h的規定格式#ifndef_1602_  #define_1602_  ........................#endif,
                      在其他文件中調用別忘了extern前綴。eg:在文件1中定義了一個全局變量 unsigned int table[10];在文件2中使用
                              extern unsigned int table[10];
                       其他文件中的函數要記得定義,方法為void kay_scan();   注意分號。。。具體的可以買書看看)
二:說下制作的過程中得注意的問題
         1.鍵盤掃描中記錄鍵盤按下的次數,這個很關鍵得好好把握,在必要的時候也得清零。一開始我也糾結了很久
         2.設置密碼與輸入密碼數組的存儲問題,因為在密碼對比的時候用到兩個數組所以在
            鍵盤服務程序中要看情況分別將鍵盤輸入的密碼寫入不同的數組中。
         4.其他的一些小細節就不說了代碼的具體備注很詳細
            {:1:}下面的圖片也有些閱讀提示。。。。




  1. /**************************************************************** ***************   
  2. 閱讀提示:1.所有的數組以   名字_功能_pad[]
  3.                                  例如code_intput_pad[];   為密碼輸入數組
  4.                  2.所有的函數以           類型_功能_名字()
  5.                               例如desplay_set_code();   為密碼設置函數
  6.                                           desplay_input_code(); 為密碼輸入函數
  7.                  3.調用函數大家可以多用局部變量方便,空間占用又少
  8.                  (以上名字方式純屬本人自己感到合適的,大家也可以用適合自己的方式,但是
  9.                   不管是什么樣的命名方式都得有一套方式,這樣做一個比較復雜的程序方便點)
  10.                  4.由于小弟第一次用這種方式寫代碼,所以在寫這個程序中也有些地方沒注意;
  11.                          給大家帶來不便請諒解。                        
  12.                  5.廣告王,這里也插播下吧
  13.                    單片機交流群--best單片機交流群,歡迎你的加入一起學習交流
  14. *********************************************************************************/
  15. #include
  16. #include"delay.h"
  17. #include"1602.h"
  18. #define uint unsigned int
  19. #define uchar unsigned char
  20. #define port_key P1                                                  //矩陣鍵盤輸入口
  21. uchar key_num;                                                                //鍵盤掃描讀回值須為全局變量
  22. uchar keypad[]={0xfe,0xfd,0xfb,0xf7};           //鍵盤掃描分別將各行置0
  23. uchar code_new_pad[6]={1,1,1,1,1,' '};                //6位的設置密碼存儲‘ ’用來判斷是否輸入第六位密碼
  24. uchar code_input_pad[6]={1,1,1,1,1,' '};                //用來存儲輸入的密碼
  25. sbit buzzer=P2^7;                                                        //buzzzer接口
  26. sbit led_r=P2^3;                                                
  27. sbit led_l=P2^4;
  28. bit key_pd=0;                                        //按鍵標志
  29. bit code_compare=0;                                //密碼對比標志
  30. uint key_time=0;               //記錄鍵盤按下的次數
  31. uchar temp=0;
  32. void init_T1()                                           //定時器1初始化         利用定時器提高鍵盤的掃描速度
  33. {
  34.         EA=1;
  35.         ET1=1;
  36.         TMOD=0x10;                                           //定時器工作方式選擇16位定時
  37.         TH1=(65536-1000)/256;                  //定時器高八位
  38.         TL1=(65536-1000)%256;                 //定時器低八位
  39.         TR1=1;                                                //開啟定時器1
  40. }


  41. void play_buzzer(uint j,uint k)                 //蜂鳴器
  42. {
  43.         uchar i=0;
  44.         for(j;j>0;j--)
  45.         {
  46.                 for(i=0;i<=100;i++)
  47.                 {
  48.                         buzzer=~buzzer;
  49.                         delayms(k);
  50.                 }
  51.         }        
  52. }


  53. uint key_scan()         //4*3矩陣鍵盤掃描
  54. {
  55.         uint i=0;
  56.         uchar key_temp;
  57.         for(i=0;i<4;i++)
  58.         {
  59.                 port_key=keypad[i];
  60.                 key_temp=port_key;
  61.                 key_temp=key_temp&0xf0;                  
  62.                 if(key_temp!=0xf0)        //判斷是否有鍵盤被按下
  63.                 {
  64.                         delayms(15);     //延遲15ms,去除鍵盤的抖動
  65.                         key_temp=port_key;             //重新讀回key_port的值
  66.                         key_temp=key_temp&0xf0;                 
  67.                         if(key_temp!=0xf0)                 //說明確實有鍵被按下
  68.                         {
  69.                                 key_temp=port_key;
  70.                                 key_pd=1;                   //鍵盤按下標志
  71.                                 key_time++;                        //鍵盤按下次數標志
  72.                                 switch(key_temp)
  73.                                 {
  74.                                         case 0xee: key_num=1+0x30;play_buzzer(2,50); break;                  //將數字轉化為ASC
  75.                                         case 0xde: key_num=2+0x30;play_buzzer(2,50); break;
  76.                                         case 0xbe: key_num=3+0x30;play_buzzer(2,50); break;                 //以上3行代碼為第一行掃描
  77.                                         case 0xed: key_num=4+0x30;play_buzzer(2,50); break;
  78.                                         case 0xdd: key_num=5+0x30;play_buzzer(2,50); break;
  79.                                         case 0xbd: key_num=6+0x30;play_buzzer(2,50); break;         //第二行掃描
  80.                                         case 0xeb: key_num=7+0x30;play_buzzer(2,50); break;
  81.                                         case 0xdb: key_num=8+0x30;play_buzzer(2,50); break;
  82.                                         case 0xbb: key_num=9+0x30;play_buzzer(2,50); break;           //第三行掃描
  83.                                         case 0xe7: key_num=10;play_buzzer(1,50);        break;                   //...10代表確定鍵
  84.                                         case 0xd7: key_num=0+0x30;play_buzzer(2,50); break;
  85.                                         case 0xb7: key_num=11;play_buzzer(1,50);        break;                //第四行掃描..11代表刪除鍵                        
  86.                                 }
  87.                                 while(key_temp!=0xf0)                                //松手檢測
  88.                                 {
  89.                                         key_temp=port_key;
  90.                                         key_temp=key_temp&0xf0;
  91.                                 }
  92.                         }
  93.                 }               
  94.         }
  95.         return key_num;        
  96. }


  97. void new_save_code()        //將設置密碼存入code_new_pad
  98. {
  99.         if(key_time<=6)           //防止密碼輸入超過6位
  100.         {
  101.                 code_new_pad[key_time-1]=key_num;
  102.                 gotoxy(2,key_time-1);
  103.                 w_dat_lcd(code_new_pad[key_time-1]);
  104.         }
  105. }

  106. void input_save_code()        //將輸入的密碼存入code_input_pad
  107. {
  108.         if(key_time<=6)
  109.         {
  110.                 code_input_pad[key_time-1]=key_num;                 //注意key_time的控制須好好把握
  111.                 gotoxy(2,key_time-1);
  112.                 w_dat_lcd(code_input_pad[key_time-1]);               
  113.         }        
  114. }


  115. uint compare_code()   //輸入密碼與設置密碼對比
  116. {
  117.         uint i=0;
  118.         for(i=0;i<6;i++)
  119.         {
  120.                 if(code_input_pad[i]==code_new_pad[i])
  121.                 {
  122.                         if(i==5)
  123.                                 code_compare=1;
  124.                         else continue;
  125.                 }
  126.                 else
  127.                 {
  128.                         code_compare=0;        
  129.                         break;                        //只要有一位密碼不對就跳出循環
  130.                 }        
  131.         }
  132.         return code_compare;
  133. }


  134. void key_serve()                                //鍵盤服務程序
  135. {
  136.         if(key_pd==1)                                 //判斷是否有鍵被按下
  137.         {
  138.                 key_pd=0;
  139.                 if(key_num==11)                         //是否按下刪除鍵
  140.                 {
  141.                         gotoxy(2,key_time-2);
  142.                         w_dat_lcd(' ');                 //刪除當前數字
  143.                         key_time=key_time-2;
  144.                 }
  145.                 else if(key_num==10&&temp==0)         //是否按下設置密碼時的確定鍵
  146.                 {
  147.                         if(code_new_pad[5]!=' ')           //判斷是否輸入了第六個密碼
  148.                         {                  
  149.                                 key_time=0;
  150.                                 w_com_lcd(0x01);                  //清屏指令
  151.                                 desplay_set_succ();        
  152.                                 delaylong(500);
  153.                                 desplay_input_code();
  154.                                 temp=1;         
  155.                         }                                                         
  156.                         else                                          //沒有輸入6位密碼
  157.                         {
  158.                                 key_time=0;        
  159.                                 w_com_lcd(0x01);         
  160.                                 desplay_set_error();
  161.                                 delaylong(500);
  162.                                 desplay_set_code();                                                        
  163.                         }
  164.                 }
  165.                 else
  166.                 {
  167.                         if(temp==0)                        //利用temp的數值判斷將鍵盤密碼存入那個數組中                                 
  168.                                 new_save_code();
  169.                         else if(temp==1)
  170.                         {
  171.                                 input_save_code();
  172.                                 if(code_input_pad[5]!=' ')        //判斷是否輸入了6位密碼
  173.                                 {
  174.                                         if(key_num==10)
  175.                                         {
  176.                                                 compare_code();           //密碼判斷函數
  177.                                                 if(code_compare==1)
  178.                                                 {        
  179.                                                         w_com_lcd(0x01);
  180.                                                         desplay_input_succ();
  181.                                                         led_r=1;
  182.                                                         play_buzzer(20,88);
  183.                                                 }
  184.                                                 else
  185.                                                 {
  186.                                                         w_com_lcd(0x01);
  187.                                                         desplay_input_error();
  188.                                                         led_l=1;
  189.                                                         play_buzzer(20,50);
  190.                                                         led_l=0;
  191.                                                         desplay_input_code();
  192.                                                         key_time=0;
  193.                                                 }
  194.                                         }               
  195.                                 }
  196.                         }
  197.                 }
  198.         }
  199. }

  200. void main()                  //主函數
  201. {
  202.         led_r=0;
  203.         led_l=0;        
  204.         init_lcd();
  205.         init_T1();
  206.         desplay_set_code();
  207.         for(;;)
  208.         {        
  209.                 key_serve();        
  210.         }
  211. }


  212. void timer1() interrupt 3          // 定時器1中斷服務
  213. {
  214.         TH1=(65536-1000)/256;         
  215.         TL1=(65536-1000)%256;
  216.         key_scan();                                             //按鍵掃描程序放入中斷提高掃描速度
  217. }



復制代碼
電子密碼鎖.rar (110.47 KB, 下載次數: 579)





作者: 朗朗繁星    時間: 2013-7-9 14:41
好好學習一下
作者: 大眼瞪小眼    時間: 2013-7-17 21:05
謝謝分享
作者: 李強    時間: 2013-7-21 18:39
好好學習 啊
作者: absjkl    時間: 2013-7-23 18:59
下了,最近正好做這個,借鑒一下
作者: 心隨雪飄    時間: 2013-8-10 16:55
太棒了   夠我好好消化一段時間了
作者: zjh    時間: 2013-8-12 19:14
學習下
作者: asn60    時間: 2013-10-4 02:15
做個玩玩,感謝!
作者: toy2man    時間: 2013-10-20 12:49
好喲,頂你了

作者: bglhf    時間: 2013-10-27 15:58
非常詳細,謝謝
作者: 滴落52521    時間: 2013-12-25 17:54
不錯  不錯    非常不粗     樓主 辛苦了
作者: 易冷    時間: 2013-12-25 18:15
謝謝!拿走了
作者: zhangxiaoljs    時間: 2014-2-14 00:04
學習。。。。。。。。。
作者: 宇宙風暴    時間: 2014-2-19 11:48
謝謝...............
作者: yhu168    時間: 2014-3-11 19:44
不錯,收藏了
作者: zhou920017    時間: 2014-3-14 17:22
多謝分享,好好學習下
作者: 鑫源99    時間: 2014-3-14 21:06
下了,學習一下
作者: latter    時間: 2014-4-5 23:05
不錯了!
作者: keepit    時間: 2014-4-5 23:57
謝謝分享,很好很強大
作者: xi_chang    時間: 2014-5-2 19:48
謝謝你的分享!
作者: 07700114    時間: 2014-5-26 12:17
萬分感激樓主分享。
作者: 周安松    時間: 2014-9-13 09:17
謝謝樓主分享
作者: T29    時間: 2014-9-14 02:03
很好  學習  謝謝
作者: lingting13    時間: 2014-12-20 00:31
感謝樓主分享!
作者: 大小說家    時間: 2015-1-7 09:39
為什么密碼正確之后退不出那個界面
作者: 會飛的魚32    時間: 2015-1-15 18:50
感謝分享。。。。。。。。。。。。。。。。。。。。!
作者: 會飛的魚32    時間: 2015-1-15 19:05
感謝分享。。。。。。。。。。。。。。。。。。。。!
作者: zengmiao    時間: 2015-3-24 16:01
很好的資料,辛苦了,謝謝!
作者: abb200628    時間: 2015-3-30 16:17
很好,
謝謝分享
作者: rockk7476    時間: 2015-3-30 16:46
很不錯
作者: uva2015    時間: 2015-3-30 18:31
不錯的資料,謝謝分享。
作者: hlywhp    時間: 2015-4-26 15:25
這個東西好
作者: ZZ2322028284    時間: 2015-5-2 14:47
用什么軟件才能打開啊
作者: eastli    時間: 2015-5-3 21:23
多謝分享,學習了
作者: dgghnn    時間: 2015-5-10 09:57
謝謝啦
作者: weiliang    時間: 2015-7-12 01:23
不錯不錯
作者: LZJ1113    時間: 2015-7-12 14:43
厲害按  真是
作者: beautiful-life    時間: 2015-7-20 13:45
厲害,不過都是圖片形式嗎?
作者: ludaijin    時間: 2015-9-18 11:15
太強了

作者: AYAYA    時間: 2015-11-20 21:11
不錯的資料,謝謝分享。
作者: linx    時間: 2015-11-25 18:15
有點復雜。。。
作者: 我叫路人8    時間: 2015-11-30 14:54
感謝分享,問一下需要什么元件
作者: 科_技    時間: 2016-3-30 00:41
很好····································
作者: 科_技    時間: 2016-3-30 00:42
很好很不錯························
作者: 菲兒    時間: 2016-4-18 23:43
心隨雪飄 發表于 2013-8-10 16:55
太棒了   夠我好好消化一段時間了

謝謝分享 拿走了大神
作者: hongshun325    時間: 2016-5-7 22:13
仿真文件我看了,效果非常炫,看來壇子里真是高手如云。
作者: 七秒鐘的記憶    時間: 2016-5-12 14:03
為甚么  運行不出來啊  運行出來是這樣    求大神指教

MAIN.C(26): error C202: 'P2': undefined identifier
MAIN.C(27): error C202: 'P2': undefined identifier
MAIN.C(34): error C202: 'EA': undefined identifier
MAIN.C(35): error C202: 'ET1': undefined identifier
MAIN.C(36): error C202: 'TMOD': undefined identifier
MAIN.C(37): error C202: 'TH1': undefined identifier
MAIN.C(38): error C202: 'TL1': undefined identifier
MAIN.C(39): error C202: 'TR1': undefined identifier
MAIN.C(50): error C202: 'buzzer': undefined identifier
Target not created
作者: 七秒鐘的記憶    時間: 2016-5-12 14:03
MAIN.C(26): error C202: 'P2': undefined identifier
MAIN.C(27): error C202: 'P2': undefined identifier
MAIN.C(34): error C202: 'EA': undefined identifier
MAIN.C(35): error C202: 'ET1': undefined identifier
MAIN.C(36): error C202: 'TMOD': undefined identifier
MAIN.C(37): error C202: 'TH1': undefined identifier
MAIN.C(38): error C202: 'TL1': undefined identifier
MAIN.C(39): error C202: 'TR1': undefined identifier
MAIN.C(50): error C202: 'buzzer': undefined identifier
Target not created
為什么運行出來是這樣    求大神指教
作者: taotao342832    時間: 2016-5-14 16:28
我也要來好好學習
作者: 北狼的天堂    時間: 2016-5-24 16:55
謝謝樓主
作者: 渣渣z    時間: 2016-6-2 11:09
好,可以看看。
作者: 愛玩單片機    時間: 2016-6-3 12:30
能用嗎是用的4*4 鍵盤還是多少的鍵盤
作者: LIUWEIMIN    時間: 2016-6-3 21:07
程序錯的,大神
作者: qzhyjd    時間: 2016-6-4 10:43
學習下,謝謝分享
作者: 18382497728    時間: 2016-6-6 16:30
樓主,密碼多少。如何改密碼。
作者: gutianyu    時間: 2017-1-19 13:39
下了,學習一下

作者: lth977    時間: 2017-9-23 11:19
很棒的一個分享




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1