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

標(biāo)題: 用STM32F103C6芯片編寫密碼鎖程序 [打印本頁]

作者: xiongyud    時(shí)間: 2019-8-29 08:51
標(biāo)題: 用STM32F103C6芯片編寫密碼鎖程序
設(shè)計(jì)制作一個(gè)具備開鎖、密碼設(shè)置、密碼清除等功能的密碼鎖實(shí)現(xiàn):
(1) 使用適當(dāng)?shù)?font face="宋體">顯示裝置LCMOLED、數(shù)碼管等)實(shí)現(xiàn)系統(tǒng)的操作顯示;
(2) 系統(tǒng)初始化密碼123456”,在輸入密碼時(shí)可以實(shí)現(xiàn)開鎖功能輸入非法的密碼是可以通過顯示屏、蜂鳴器等發(fā)出報(bào)警;
(3) 可通過密碼設(shè)置功能實(shí)現(xiàn)修改密碼和設(shè)置密碼,至多可設(shè)置6密碼
(4) 開鎖密碼具備不同的操作權(quán)限,分別為永久有效、約定次數(shù)有效約定時(shí)長有效其中約定次數(shù)有效需要設(shè)定操作次數(shù),例如設(shè)定10,那么在操作時(shí),本密碼有效使用10以后失效,約定時(shí)長有效需要設(shè)置使用時(shí)間,例如設(shè)定202011那么本密碼202011前可以開門,在此日期之后,密碼失效

單片機(jī)源程序如下:
  1. /****************************************
  2. * 文件名  :key4x4.c
  3. * 描述    :按鍵應(yīng)用函數(shù)庫        
  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. * 函數(shù)名:Key_GPIO_Config
  20. * 描述  :配置按鍵用到的I/O口
  21. * 輸入  :無
  22. * 輸出  :無
  23. */
  24. void Key4x4_GPIO_Config(void)
  25. {
  26.           GPIO_InitTypeDef GPIO_InitStructure;
  27.          
  28.           /*開啟按鍵端口的時(shí)鐘*/
  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); //讀出整個(gè)口得到的值
  46.         temp=temp&0xf000;    //屏蔽低4位
  47.         if (temp!=0xf000)      //假如高4位不全是1
  48.         {
  49.                 delay_ms(20);      // 延時(shí)消抖再讀
  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)   //等待按鍵放開,初始必然被執(zhí)行
  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); //讀出整個(gè)口得到的值
  77.         temp=temp&0xf000;    //屏蔽低4位
  78.         if (temp!=0xf000)      //假如高4位不全是1
  79.         {
  80.                 delay_ms(20);      // 延時(shí)消抖再讀
  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); //讀出整個(gè)口得到的值
  108.         temp=temp&0xf000;    //屏蔽低4位
  109.         if (temp!=0xf000)      //假如高4位不全是1
  110.         {
  111.                 delay_ms(20);      // 延時(shí)消抖再讀
  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); //讀出整個(gè)口得到的值
  139.         temp=temp&0xf000;    //屏蔽低4位
  140.         if (temp!=0xf000)      //假如高4位不全是1
  141.         {
  142.                 delay_ms(20);       // 延時(shí)消抖再讀
  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. }
復(fù)制代碼

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




作者: HWL0541    時(shí)間: 2020-3-7 11:51
下載了學(xué)習(xí)學(xué)習(xí)
作者: haha456    時(shí)間: 2020-6-8 14:45
有仿真么?
作者: zxla    時(shí)間: 2020-6-9 17:07
有仿真嗎




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久久久黄 | 亚洲免费婷婷 | 亚洲一区二区视频 | 久久国产精品亚洲 | 精品在线一区 | 国产伦精品一区二区 | 国产在线精品一区二区 | 国产精品久久99 | 黄视频国产 | 色综合久久天天综合网 | 欧美精品一区在线 | 一区二区成人 | 99re视频在线| 精彩视频一区二区三区 | 久久精品亚洲国产奇米99 | 久久综合久久自在自线精品自 | 久久国产一区二区 | 成人精品免费视频 | 欧美h版| 国产精品久久久久一区二区三区 | 亚洲一二三区不卡 | 在线高清免费观看视频 | 欧美精品一区二区三区在线播放 | 久久av资源网 | 手机在线不卡av | 欧美色综合一区二区三区 | 日韩欧美一级 | 久久久久久久久久影视 | 91色视频在线观看 | 国产激情免费视频 | 久久精品99 | 中文字幕日本一区二区 | 九九爱这里只有精品 | 国产线视频精品免费观看视频 | 欧美成人精品激情在线观看 | 99综合| 81精品国产乱码久久久久久 | 欧美精品一区二区三区一线天视频 | 欧美精品在线观看 | 日韩精品一区二区三区中文在线 | 中文字幕在线观看 |