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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用STM32F103C6芯片編寫密碼鎖程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:604979 發表于 2019-8-29 08:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
設計制作一個具備開鎖、密碼設置、密碼清除等功能的密碼鎖實現:
(1) 使用適當的顯示裝置LCMOLED、數碼管等)實現系統的操作顯示;
(2) 系統初始化密碼123456”,在輸入密碼時可以實現開鎖功能輸入非法的密碼是可以通過顯示屏、蜂鳴器等發出報警;
(3) 可通過密碼設置功能實現修改密碼和設置密碼,至多可設置6密碼
(4) 開鎖密碼具備不同的操作權限,分別為永久有效、約定次數有效約定時長有效其中約定次數有效需要設定操作次數,例如設定10,那么在操作時,本密碼有效使用10以后失效,約定時長有效需要設置使用時間,例如設定202011那么本密碼202011前可以開門,在此日期之后,密碼失效

單片機源程序如下:
  1. /****************************************
  2. * 文件名  :key4x4.c
  3. * 描述    :按鍵應用函數庫        
  4. * 硬件連接:-------------------------
  5. *          | PB8  - H4          |
  6. *          | PB9  - H3                         |
  7. *          | PB10 - H2          |
  8. *          | PB11 - H1                     |
  9. *          | PB12 - L4          |
  10. *          | PB13 - L3                     |
  11. *          | PB14 - L2          |
  12. *          | PB15 - L1                         |
  13. *           -------------------------
  14. * 庫版本  :ST3.5.0
  15. **********************************************************************************/

  16. #include "key4x4.h"
  17. #include "delay.h"

  18. /*
  19. * 函數名:Key_GPIO_Config
  20. * 描述  :配置按鍵用到的I/O口
  21. * 輸入  :無
  22. * 輸出  :無
  23. */
  24. void Key4x4_GPIO_Config(void)
  25. {
  26.           GPIO_InitTypeDef GPIO_InitStructure;
  27.          
  28.           /*開啟按鍵端口的時鐘*/
  29.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

  30.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  31.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  32.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  33.         GPIO_Init(GPIOB, &GPIO_InitStructure);

  34.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;       
  35.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
  36.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  37.           GPIO_Init(GPIOB, &GPIO_InitStructure);
  38. }

  39. u8 Key_Scan(void)
  40. {
  41.         u16 temp;
  42.         u8 ucBackValue=0;
  43.         //====掃描第一列==========
  44.         GPIO_Write(GPIOB,0xfe00);
  45.         temp=GPIO_ReadInputData(GPIOB); //讀出整個口得到的值
  46.         temp=temp&0xf000;    //屏蔽低4位
  47.         if (temp!=0xf000)      //假如高4位不全是1
  48.         {
  49.                 delay_ms(20);      // 延時消抖再讀
  50.                 temp=GPIO_ReadInputData(GPIOB);
  51.                 temp=temp&0xf000;
  52.                 if (temp!=0xf000)     //消抖后如果再次高4位確定不是全1
  53.                 {
  54.                         temp=GPIO_ReadInputData(GPIOB)&0xff00; //讀出此次按鍵的值
  55.                         switch(temp)
  56.                         {
  57.                                 case 0xee00:
  58.                                 ucBackValue = 1;break;
  59.                                 case 0xde00:
  60.                                 ucBackValue = 5;break;
  61.                                 case 0xbe00:
  62.                                 ucBackValue = 9;break;
  63.                                 case 0x7e00:
  64.                                 ucBackValue = 13;break;
  65.                                 default:break;
  66.                         }
  67.                         while(temp!=0xf000)   //等待按鍵放開,初始必然被執行
  68.                         {
  69.                                 temp=GPIO_ReadInputData(GPIOB);
  70.                                 temp=temp&0xf000;
  71.                         }

  72.                 }
  73.         }

  74.         //====第二列送0==========
  75.         GPIO_Write(GPIOB,0xfd00);
  76.         temp=GPIO_ReadInputData(GPIOB); //讀出整個口得到的值
  77.         temp=temp&0xf000;    //屏蔽低4位
  78.         if (temp!=0xf000)      //假如高4位不全是1
  79.         {
  80.                 delay_ms(20);      // 延時消抖再讀
  81.                 temp=GPIO_ReadInputData(GPIOB);
  82.                 temp=temp&0xf000;
  83.                 if (temp!=0xf000)     //消抖后如果再次高4位確定不是全1
  84.                 {
  85.                         temp=GPIO_ReadInputData(GPIOB)&0xff00; //讀出此次按鍵的值
  86.                         switch(temp)
  87.                         {
  88.                                 case 0xed00:
  89.                                         ucBackValue = 2; break;
  90.                                 case 0xdd00:
  91.                                         ucBackValue = 6; break;
  92.                                 case 0xbd00:
  93.                                         ucBackValue = 10; break;
  94.                                 case 0x7d00:
  95.                                         ucBackValue = 14; break;
  96.                                 default:break;
  97.                 }
  98.                         while(temp!=0xf000)   //等待按鍵放開
  99.                         {
  100.                                 temp=GPIO_ReadInputData(GPIOB);
  101.                                 temp=temp&0xf000;
  102.                         }
  103.                 }
  104.         }
  105.         //====第3列送0==========
  106.         GPIO_Write(GPIOB,0xfb00);
  107.         temp=GPIO_ReadInputData(GPIOB); //讀出整個口得到的值
  108.         temp=temp&0xf000;    //屏蔽低4位
  109.         if (temp!=0xf000)      //假如高4位不全是1
  110.         {
  111.                 delay_ms(20);      // 延時消抖再讀
  112.                 temp=GPIO_ReadInputData(GPIOB);
  113.                 temp=temp&0xf000;
  114.                 if (temp!=0xf000)     //消抖后如果再次高4位確定不是全1
  115.                 {
  116.                         temp=GPIO_ReadInputData(GPIOB)&0xff00; //讀出此次按鍵的值
  117.                         switch(temp)
  118.                         {
  119.                                 case 0xeb00:
  120.                                 ucBackValue = 3; break;
  121.                                 case 0xdb00:
  122.                                 ucBackValue = 7; break;
  123.                                 case 0xbb00:
  124.                                 ucBackValue = 11; break;
  125.                                 case 0x7b00:
  126.                                 ucBackValue = 15; break;
  127.                                 default:break;
  128.                 }
  129.                 while(temp!=0xf000)   //等待按鍵放開
  130.                 {
  131.                         temp=GPIO_ReadInputData(GPIOB);
  132.                         temp=temp&0xf000;
  133.                 }
  134.                 }
  135.         }
  136.         //====第4列送0==========
  137.         GPIO_Write(GPIOB,0xf700);
  138.         temp=GPIO_ReadInputData(GPIOB); //讀出整個口得到的值
  139.         temp=temp&0xf000;    //屏蔽低4位
  140.         if (temp!=0xf000)      //假如高4位不全是1
  141.         {
  142.                 delay_ms(20);       // 延時消抖再讀
  143.                 temp=GPIO_ReadInputData(GPIOB);
  144.                 temp=temp&0xf000;
  145.                 if (temp!=0xf000)     //消抖后如果再次高4位確定不是全1
  146.                 {
  147.                         temp=GPIO_ReadInputData(GPIOB)&0xff00;
  148.                         switch(temp)
  149.                         {
  150.                                 case 0xe700:
  151.                                 ucBackValue = 4; break;
  152.                                 case 0xd700:
  153.                                 ucBackValue = 8; break;
  154.                                 case 0xb700:
  155.                                 ucBackValue = 12; break;
  156.                                 case 0x7700:
  157.                                 ucBackValue = 16; break;
  158.                                 default:break;
  159.                         }
  160.                         while(temp!=0xf000)   //等待按鍵放開
  161.                         {
  162.                                 temp=GPIO_ReadInputData(GPIOB);
  163.                                 temp=temp&0xf000;
  164.                         }
  165.                 }
  166.         }
  167.         return ucBackValue;
  168. }
復制代碼

所有資料51hei提供下載:
矩陣鍵盤.7z (139.52 KB, 下載次數: 110)



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

使用道具 舉報

沙發
ID:91165 發表于 2020-3-7 11:51 | 只看該作者
下載了學習學習
回復

使用道具 舉報

板凳
ID:772838 發表于 2020-6-8 14:45 來自觸屏版 | 只看該作者
有仿真么?
回復

使用道具 舉報

地板
ID:774190 發表于 2020-6-9 17:07 來自觸屏版 | 只看該作者
有仿真嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲www啪成人一区二区麻豆 | 97久久久久久| 91色视频在线观看 | 高清一区二区三区 | 久久精品一级 | 亚洲不卡av在线 | 精品国产一区二区三区免费 | 91av视频 | 国产一区二区三区在线 | 天天搞天天操 | 久久久亚洲一区 | 亚洲成人免费电影 | 日韩欧美国产精品一区二区 | 在线中文视频 | 黄色毛片在线观看 | 国产综合精品一区二区三区 | 欧美一级艳情片免费观看 | 国产成人高清视频 | 久久国产一区二区三区 | 91欧美精品成人综合在线观看 | 国产伦精品一区二区三区照片91 | 成人国产精品一级毛片视频毛片 | 99精品亚洲国产精品久久不卡 | 国产精品一区二区三区免费观看 | 羞羞视频免费在线 | 国产精品美女在线观看 | 亚洲成人av在线 | 天天看天天干 | 成人动慢| 日本在线一区二区三区 | 91精品国产91久久久久久吃药 | 在线欧美小视频 | 亚洲精品久久久久中文字幕欢迎你 | 久久国产一区二区三区 | 精品国产一区二区国模嫣然 | 久久午夜精品福利一区二区 | 国产精品无码专区在线观看 | 九九精品热 | 紧缚调教一区二区三区视频 | 久久精品一区二区视频 | 亚洲一区二区三区视频免费观看 |