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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于stm32f103+UCOSII的電子密碼鎖源程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:263449 發表于 2018-1-15 02:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"                           
  5. #include "lcd.h"
  6. #include "key.h"
  7. #include "move.h"
  8. #include "beep.h"
  9. #include "touch.h"   
  10. #include "includes.h"
  11. #include "24cxx.h"
  12. #include "exti.h"         
  13. #include "timer.h"         
  14. #include "rtc.h"
  15. #include "joypad.h"

  16. u8 save[4];
  17. u8 save1[4];
  18. u8 save2[4];
  19. //u8 key_point[4];
  20. /////////////////////////UCOSII任務設置///////////////////////////////////
  21. //START 任務
  22. //設置任務優先級
  23. #define START_TASK_PRIO                      10 //開始任務的優先級設置為最低
  24. //設置任務堆棧大小
  25. #define START_STK_SIZE                                  64
  26. //任務堆棧        
  27. OS_STK START_TASK_STK[START_STK_SIZE];
  28. //任務函數
  29. void start_task(void *pdata);        

  30. //設置密碼任務
  31. //設置任務優先級
  32. #define MAIN_TASK_PRIO                               4
  33. //設置任務堆棧大小
  34. #define MAIN_STK_SIZE                                          128
  35. //任務堆棧        
  36. OS_STK MAIN_TASK_STK[MAIN_STK_SIZE];
  37. //任務函數
  38. void main_task(void *pdata);

  39. //顯示時間任務
  40. //設置任務優先級
  41. #define RTC_TASK_PRIO                               7
  42. //設置任務堆棧大小
  43. #define RTC_STK_SIZE                                          64
  44. //任務堆棧        
  45. OS_STK RTC_TASK_STK[RTC_STK_SIZE];
  46. //任務函數
  47. void rtc_task(void *pdata);

  48. //解碼后任務
  49. //設置任務優先級
  50. #define SHOW_TASK_PRIO                               9
  51. //設置任務堆棧大小
  52. #define SHOW_STK_SIZE                                          64
  53. //任務堆棧        
  54. OS_STK SHOW_TASK_STK[SHOW_STK_SIZE];
  55. //任務函數
  56. void show_task(void *pdata);

  57. //按鍵掃描任務
  58. //設置任務優先級
  59. #define KEY_TASK_PRIO                               3
  60. //設置任務堆棧大小
  61. #define KEY_STK_SIZE                                          64
  62. //任務堆棧        
  63. OS_STK KEY_TASK_STK[KEY_STK_SIZE];
  64. //任務函數
  65. void key_task(void *pdata);

  66. //報警任務
  67. //設置任務優先級
  68. #define BEEP_TASK_PRIO                       8
  69. //設置任務堆棧大小
  70. #define BEEP_STK_SIZE                                          64
  71. //任務堆棧        
  72. OS_STK BEEP_TASK_STK[BEEP_STK_SIZE];
  73. //任務函數
  74. void beep_task(void *pdata);

  75. //輸入密碼
  76. //設置任務優先級
  77. #define put_TASK_PRIO                       5
  78. //設置任務堆棧大小
  79. #define put_STK_SIZE                                          64
  80. //任務堆棧        
  81. OS_STK put_TASK_STK[put_STK_SIZE];
  82. //任務函數
  83. void put_task(void *pdata);

  84. //重設任務
  85. //設置任務優先級
  86. #define CHANGE_TASK_PRIO                       6
  87. //設置任務堆棧大小
  88. #define CHANGE_STK_SIZE                                          64
  89. //任務堆棧        
  90. OS_STK CHANGE_TASK_STK[CHANGE_STK_SIZE];
  91. //任務函數
  92. void change_task(void *pdata);


  93. //數字表
  94. const u8* kbd_tbl[9]={"1","2","3","4","5","6","7","8","9",};
  95. void py_load_ui(u16 x,u16 y);
  96. void py_key_staset(u16 x,u16 y,u8 keyx,u8 sta);
  97. void PWM(void);
  98. //void readfromBKP(void);
  99. //void writetoBKP(void);        
  100. //得到觸摸屏的輸入
  101. //x,y:鍵盤坐標
  102. //返回值:按鍵鍵值(1~9有效;0,無效)
  103. u8 py_get_keynum(u16 x,u16 y)
  104. {
  105.         u16 i,j;
  106.         static u8 key_x=0;//0,沒有任何按鍵按下;1~9,1~9號按鍵按下
  107.         u8 key=0;
  108.         tp_dev.scan(0);                  
  109.         if(tp_dev.sta&TP_PRES_DOWN)                        //觸摸屏被按下
  110.         {        
  111.                 for(i=0;i<3;i++)
  112.                 {
  113.                         for(j=0;j<4;j++)
  114.                         {
  115.                                  if(tp_dev.x<(x+j*60+60)&&tp_dev.x>(x+j*60)&&tp_dev.y<(y+i*40+40)&&tp_dev.y>(y+i*40))
  116.                                 {        
  117.                                         key=i*3+j+1;         
  118.                                         break;                           
  119.                                 }
  120.                         }
  121.                         if(key)
  122.                         {           
  123.                                 if(key_x==key)key=0;
  124.                                 else
  125.                                 {
  126.                                         py_key_staset(x,y,key_x-1,0);
  127.                                         key_x=key;
  128.                                         py_key_staset(x,y,key_x-1,1);
  129.                                 }
  130.                                 break;
  131.                         }
  132.                 }  
  133.         }else if(key_x)
  134.         {
  135.                 py_key_staset(x,y,key_x-1,0);
  136.                 key_x=0;
  137.           }
  138.         return key;
  139. }
  140.                                                 


  141. //////////////////////////////////////////////////////////////////////////////
  142. OS_EVENT * msg_key;                        //按鍵郵箱事件塊指針
  143. OS_EVENT * sem_beep;                //蜂鳴器信號量指針                  
  144. object  move;   //移動函數時使用

  145. //加載主界面   
  146. //void ucos_load_main_ui(void)
  147. //{
  148. //}        

  149. int main(void)
  150. {
  151.         delay_init();                     //延時函數初始化         
  152.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
  153.         uart_init(115200);                 //串口初始化為115200

  154.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
  155.         PWR_BackupAccessCmd(ENABLE);
  156.   LED_Init();                                  //初始化與LED連接的硬件接口
  157.   BEEP_Init();                        //蜂鳴器初始化        
  158.         KEY_Init();                                //按鍵初始化
  159.         LCD_Init();         //初始化LCD
  160.         TP_Init();    //初始化觸摸屏
  161.   EXTIX_Init();                         //外部中斷初始化        
  162.   JOYPAD_Init();
  163.         TIM5_Int_Init(59999,7199);//10Khz的計數頻率,計數到60000為6s
  164.   TIM3_PWM_Init(899,0);         //不分頻。PWM頻率=72000000/900=80Khz         
  165. //        ucos_load_main_ui();        //加載主界面        
  166.          RTC_Init();
  167.          //顯示時間
  168.          POINT_COLOR=BLUE;//設置字體為藍色
  169.         LCD_ShowString(60,250,200,16,16,"    -  -  ");           
  170.         LCD_ShowString(60,282,200,16,16,"  :  :  ");               
  171.   OSInit();                                   //初始化UCOSII
  172.   OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//創建起始任務
  173.         OSStart();
  174. }

  175. //開始任務
  176. void start_task(void *pdata)
  177. {
  178.     OS_CPU_SR cpu_sr=0;
  179.         pdata = pdata;                  
  180.         msg_key=OSMboxCreate((void*)0);        //創建消息郵箱
  181.         sem_beep=OSSemCreate(0);                //創建信號量                                          
  182.         OSStatInit();                                        //初始化統計任務.這里會延時1秒鐘左右        
  183.          OS_ENTER_CRITICAL();                        //進入臨界區(無法被中斷打斷)                                                         
  184.          OSTaskCreate(main_task,(void *)0,(OS_STK*)&MAIN_TASK_STK[MAIN_STK_SIZE-1],MAIN_TASK_PRIO);                                            
  185.          OSTaskCreate(key_task,(void *)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO);                                 
  186.         OSTaskCreate(beep_task,(void *)0,(OS_STK*)&BEEP_TASK_STK[BEEP_STK_SIZE-1],BEEP_TASK_PRIO);        
  187.         OSTaskCreate(put_task,(void *)0,(OS_STK*)&put_TASK_STK[put_STK_SIZE-1],put_TASK_PRIO);        
  188.         OSTaskCreate(rtc_task,(void *)0,(OS_STK*)&RTC_TASK_STK[RTC_STK_SIZE-1],RTC_TASK_PRIO);
  189.   OSTaskCreate(show_task,(void *)0,(OS_STK*)&SHOW_TASK_STK[SHOW_STK_SIZE-1],SHOW_TASK_PRIO);        
  190.         OSTaskCreate(change_task,(void *)0,(OS_STK*)&CHANGE_TASK_STK[CHANGE_STK_SIZE-1],CHANGE_TASK_PRIO);
  191.          OSTaskSuspend(START_TASK_PRIO);        //掛起起始任務.
  192.         OSTaskSuspend(9);         //掛起顯示任務
  193.         OS_EXIT_CRITICAL();                                //退出臨界區(可以被中斷打斷)
  194. }         
  195. //RTC時間顯示任務

  196. void rtc_task(void *pdata)
  197. {
  198.   u8 t=0;
  199. while(1)
  200.         {                        
  201.                 if(t!=calendar.sec)
  202.                 {
  203.                         t=calendar.sec;
  204.                         LCD_ShowNum(60,250,calendar.w_year,4,16);                                                                          
  205.                         LCD_ShowNum(100,250,calendar.w_month,2,16);                                                                          
  206.                         LCD_ShowNum(124,250,calendar.w_date,2,16);         
  207.                         switch(calendar.week)
  208.                         {
  209.                                 case 0:
  210.                                         LCD_ShowString(60,266,200,16,16,"Sunday   ");
  211.                                         break;
  212.                                 case 1:
  213.                                         LCD_ShowString(60,266,200,16,16,"Monday   ");
  214.                                         break;
  215.                                 case 2:
  216.                                         LCD_ShowString(60,266,200,16,16,"Tuesday  ");
  217.                                         break;
  218.                                 case 3:
  219.                                         LCD_ShowString(60,266,200,16,16,"Wednesday");
  220.                                         break;
  221.                                 case 4:
  222.                                         LCD_ShowString(60,266,200,16,16,"Thursday ");
  223.                                         break;
  224.                                 case 5:
  225.                                         LCD_ShowString(60,266,200,16,16,"Friday   ");
  226.                                         break;
  227.                                 case 6:
  228.                                         LCD_ShowString(60,266,200,16,16,"Saturday ");
  229.                                         break;  
  230.                         }
  231.                         LCD_ShowNum(60,282,calendar.hour,2,16);                                                                          
  232.                         LCD_ShowNum(84,282,calendar.min,2,16);                                                                          
  233.                         LCD_ShowNum(108,282,calendar.sec,2,16);
  234.                 }        
  235.                 delay_ms(10);                                                                  
  236.         }
  237. }


  238. //蜂鳴器任務
  239. void beep_task(void *pdata)
  240. {
  241.         u8 err;
  242.         while(1)
  243.         {
  244.                 OSSemPend(sem_beep,0,&err);
  245.                 BEEP=1;
  246.                 delay_ms(60);
  247.                 BEEP=0;
  248.                 delay_ms(940);
  249.         }                                                                        
  250. }         

  251. //游戲任務
  252. void show_task(void *pdata)
  253. {         
  254.     u8 k;        
  255.     delay_ms(10);
  256.                 move.position_x=100;
  257.           move.position_y=150;
  258.           move.size=7;
  259.           move.color=RED;
  260.           LCD_Draw_Circle(move.position_x,move.position_y, move.size);
  261.           POINT_COLOR=RED;
  262.           LCD_DrawLine(0, 248,240, 248);
  263.     LCD_DrawLine(0,25,240,25);
  264.           LCD_DrawLine(1,25,1, 248);
  265.     LCD_DrawLine(239,25,239,248);
  266.         
  267.     gui_fill_circle(50,80,7,BLUE);
  268.           gui_fill_circle(40,40,4,RED);
  269.           gui_fill_circle(80,200,10,GREEN);        
  270.          
  271.                  while(1)        
  272.         {
  273.                         k=JOYPAD_Read();
  274.                 switch(k)
  275.                 {
  276.                         case 254:
  277.                         move=move_right(move);break;
  278.                         case 253:
  279.                         move=move_left(move);break;
  280.                   case 247:
  281.                         move=move_forward(move);break;
  282.                   case 251:
  283.                         move=move_back(move);break;
  284.                 }
  285.                 if(move.position_y-move.size==25)
  286.                 {BEEP=1;
  287.                   delay_ms(60);
  288.                   BEEP=0;
  289.                   delay_ms(940);
  290.                         move=move_back(move);
  291.                         LCD_DrawLine(0,25,240,25);
  292.                 }
  293.                 if(move.position_y+move.size==248)
  294.                 {BEEP=1;
  295.                   delay_ms(60);
  296.                   BEEP=0;
  297.                   delay_ms(940);
  298.                         move=move_forward(move);
  299.                         LCD_DrawLine(0, 248,240, 248);
  300.                 }
  301.                 if(move.position_x-move.size==1)
  302.                 {BEEP=1;
  303.                   delay_ms(60);
  304.                   BEEP=0;
  305.                   delay_ms(940);
  306.                         move=move_right(move);
  307.                         LCD_DrawLine(1,25,1, 248);
  308.                 }
  309.                 if(move.position_x+move.size==239)
  310.                 {BEEP=1;
  311.                   delay_ms(60);
  312.                   BEEP=0;
  313.                   delay_ms(940);
  314.                         move=move_left(move);
  315.                         LCD_DrawLine(239,25,239,248);
  316.                 }
  317.                
  318.         }
  319. }
  320. //設置密碼任務
  321. void main_task(void *pdata)
  322. {
  323.             int m;
  324.       u32 key1=0;        
  325.                   u8 err;
  326.             u8 i=0;                                 
  327.              u8 key;
  328.             u8 inputstr[3];                //最大輸入6個字符+結束符
  329.              u8 inputlen;                //輸入長度
  330.       POINT_COLOR=BLUE;   //電量界面
  331.             LCD_DrawRectangle(198,2,239,22);
  332.             LCD_DrawRectangle(195,7,198,17);

  333.             LCD_Fill(200,3,208,21,GREEN);
  334.              LCD_Fill(210,3,218,21,GREEN);
  335.             LCD_Fill(220,3,228,21,GREEN);
  336.             LCD_Fill(230,3,238,21,GREEN);
  337.             OSTaskSuspend(6);        //掛起起始任務.               
  338.       m=BKP_ReadBackupRegister(BKP_DR6);
  339.             if(m==1)
  340.                                 {
  341.                                  OSTaskSuspend(4);        //掛起起始任務.  
  342.                                 }
  343.             OSTaskSuspend(5);        //掛起起始任務.                                
  344.             py_load_ui(20,75);
  345.                    inputlen=0;        
  346.             POINT_COLOR=RED;
  347.             LCD_ShowString(10,10,110,16,24,"Please set ");
  348.             LCD_ShowString(20,50,110,16,24,"your code ");
  349.         
  350.             POINT_COLOR=BLUE;
  351.             
  352.                   while(1)
  353.           {  
  354.                           i++;
  355.                    delay_ms(10);
  356.                    key=py_get_keynum(20,75);
  357.                    if(key)
  358.                   {
  359.                             key1=(u32)OSMboxPend(msg_key,10,&err);   
  360.                                         if(key1==4)//刪除
  361.                            {
  362.                                       if(inputlen)inputlen--;
  363.                                      inputstr[inputlen]='\0';//添加結束符
  364.                                            Show_Str(140,55,35,16,inputstr,16,0);        //顯示有效的數字串
  365.                            }
  366.                              if(inputlen<4)
  367.                                     {
  368.                                              save[inputlen]=key;
  369.                                        inputstr[inputlen]=key+'0';//輸入字符
  370.                                              inputlen++;
  371.                               }        
  372.                                LCD_DrawRectangle(138,53,175,73);
  373.              Show_Str(140,55,35,16,inputstr,16,0);        //顯示有效的數字串
  374.                               if(inputlen==4)
  375.                              {
  376.                                                  BKP_WriteBackupRegister(BKP_DR6,1);
  377.                                                 
  378.                                                  BKP_WriteBackupRegister(BKP_DR2,save[0]);
  379.                                                  BKP_WriteBackupRegister(BKP_DR3,save[1]);
  380.                                                  BKP_WriteBackupRegister(BKP_DR4,save[2]);
  381.                                                  BKP_WriteBackupRegister(BKP_DR5,save[3]);
  382.                                                  OSTaskResume (5);  //解掛
  383.                          OSTaskSuspend(4);         //掛起起始任務.
  384.                                        
  385.                              }
  386.                 }                        
  387.         }                                                                                                                     
  388. }


  389. //按鍵掃描任務
  390. void key_task(void *pdata)
  391. {        
  392.          u32 key1;                                                                     
  393.         while(1)
  394.         {
  395.                 key1=KEY_Scan(0);   
  396.                 if(key1)OSMboxPost(msg_key,(void*)key1);//發送消息
  397.                  delay_ms(10);
  398.         }
  399. }


  400. //后加
  401. //加載鍵盤界面
  402. //x,y:界面起始坐標
  403. void py_load_ui(u16 x,u16 y)
  404. {
  405.         u16 i;
  406.   LCD_Fill(0,50,240,200,WHITE);        
  407.         LCD_Fill(0,0,190,50,WHITE);//清屏
  408.         POINT_COLOR=RED;   //鍵盤界面
  409.         LCD_DrawRectangle(x,y,x+180,y+120);                                   
  410.         LCD_DrawRectangle(x+60,y,x+120,y+120);                                                   
  411.         LCD_DrawRectangle(x,y+40,x+180,y+80);
  412.   
  413.         POINT_COLOR=BLUE;  //在鍵盤上加載數字
  414.         for(i=0;i<9;i++)
  415.         {
  416.                 Show_Str_Mid(x+(i%3)*60,y+4+40*(i/3),(u8*)kbd_tbl[i],24,60);               
  417.         
  418.         }

  419. }

  420. //按鍵狀態設置
  421. //x,y:鍵盤坐標
  422. //key:鍵值(0~11)
  423. //sta:狀態,0,松開;1,按下;
  424. void py_key_staset(u16 x,u16 y,u8 keyx,u8 sta)
  425. {                  
  426.         u16 i=keyx/3,j=keyx%3;
  427.         if(keyx>9)return;
  428.         if(sta)LCD_Fill(x+j*60+1,y+i*40+1,x+j*60+59,y+i*40+39,GREEN);
  429.         else LCD_Fill(x+j*60+1,y+i*40+1,x+j*60+59,y+i*40+39,WHITE);
  430.   Show_Str_Mid(x+j*60,y+4+40*i,(u8*)kbd_tbl[keyx],24,60);               
  431.                  
  432. }


  433. //輸入密碼任務
  434. void put_task(void *pdata)
  435. {
  436.       u32 key1=0;        
  437.                   u8 err;                          
  438.              u8 key;
  439.             u8 inputstr[3];                //最大輸入6個字符+結束符
  440.              u8 inputlen;                //輸入長度        
  441.       u8 t=0;        
  442.       u8 T[3];        
  443.             py_load_ui(20,75);
  444.                    inputlen=0;        
  445.            
  446.                 while(1)
  447.         {  
  448.                 delay_ms(10);
  449.                  PWM();
  450.                   if(c)
  451.                         {
  452.                          OSTaskResume (6);  //解掛
  453.                          LED1=!LED1;        
  454.                          OSTaskSuspend(5);        //掛起起始任務.
  455.                         }
  456.                         POINT_COLOR=RED;
  457.             LCD_ShowString(10,10,140,16,24,"Please input ");
  458.             LCD_ShowString(20,50,110,16,24,"your code ");
  459.                         LCD_Fill(138,53,175,73,WHITE);
  460.             POINT_COLOR=BLUE;
  461.                   key=py_get_keynum(20,75);
  462.                
  463.        if(key)
  464.                    {
  465.                             key1=(u32)OSMboxPend(msg_key,10,&err);   
  466.                                         if(key1==4)//刪除
  467.                           {
  468.                                    if(inputlen)inputlen--;
  469.                                   inputstr[inputlen]='\0';//添加結束符
  470.                           }
  471.                         if(inputlen<4)
  472.                                 {
  473.                                         save1[inputlen]=key;
  474.                                   inputstr[inputlen]=key+'0';//輸入字符
  475.                      inputlen++;
  476.                           }
  477.                           Show_Str(140,55,35,16,inputstr,16,0);        //顯示有效的數字串
  478.                                 LCD_DrawRectangle(138,53,175,73);
  479.                                 if(t<4)
  480.                                 {
  481.                                         T[t]='*';//顯示*
  482.                                         t++;
  483.                                 }
  484.                                 Show_Str(140,55,35,16,T,16,0);        //顯示成* 的形式
  485.                         }

  486.                     if(a)   //中斷判斷
  487.                    {
  488.                                         LCD_DrawRectangle(138,53,175,73);
  489.                                         Show_Str(140,55,35,16,inputstr,16,0);        //顯示有效的數字串
  490.                                 }
  491.                          else
  492.                          {
  493.                                  LCD_DrawRectangle(138,53,175,73);
  494.                                  Show_Str(140,55,35,16,T,16,0);        //顯示成* 的形式
  495.                          }
  496.                          if(inputlen==4)
  497.                                 {
  498.                                           save2[0]=BKP_ReadBackupRegister(BKP_DR2);
  499.                                           save2[1]=BKP_ReadBackupRegister(BKP_DR3);
  500.                                           save2[2]=BKP_ReadBackupRegister(BKP_DR4);
  501.                                           save2[3]=BKP_ReadBackupRegister(BKP_DR5);
  502.                                        
  503.                                                 key1=(u32)OSMboxPend(msg_key,0,&err);   
  504.                                                 if(key1==2)//確定
  505.                             {  
  506.                                                          if(save2[0]==save1[0]&&save2[1]==save1[1]&&save2[2]==save1[2]&&save2[3]==save1[3])
  507.                                            {
  508.                LED1=!LED1;
  509.                                                    LCD_Fill(0,50,240,200,WHITE);        
  510.                      LCD_Fill(0,0,190,50,WHITE);//清屏
  511.                                                          USART_SendData(USART1, 1);//向串口1發送數據
  512.                                                    OSTaskSuspend(5);        //掛起起始任務.
  513.                                                  }
  514.               else
  515.                     {
  516.                                                                   LED0=!LED0;
  517.                                                 OSSemPost(sem_beep);
  518.                                                                   USART_SendData(USART1, 2);//向串口1發送數據
  519.                                                       delay_ms(1000);
  520.                                                                 OSTaskSuspend(5);        //掛起起始任務.
  521.                                        }
  522.                                                  }
  523.                            }
  524.                 }
  525.         }

  526. void PWM(void)  //PWM呼吸燈
  527. {
  528.                           u8 dir=1;        
  529.               u16 led0pwmval=0;
  530.               if(b==1)
  531.                                 {        
  532.                                  while(1)
  533.                                         {        
  534.                  delay_ms(10);         
  535.                        if(dir)led0pwmval++;
  536.                        else led0pwmval--;

  537.                         if(led0pwmval>300)dir=0;
  538.                        if(led0pwmval==0)dir=1;                                                                                 
  539.                        TIM_SetCompare2(TIM3,led0pwmval);        
  540.                                         }                                                
  541.                                 }
  542. }

  543. //重新設置密碼任務
  544. void change_task(void *pdata)
  545. {
  546.       u32 key1=0;        
  547.                   u8 err;                          
  548.              u8 key;
  549.             u8 inputstr[3];                //最大輸入6個字符+結束符
  550.              u8 inputlen;                //輸入長度
  551.       POINT_COLOR=RED;   //電量界面
  552.             LCD_DrawRectangle(198,2,239,22);
  553.             LCD_DrawRectangle(195,7,198,17);

  554.             LCD_Fill(200,3,208,21,GREEN);
  555.              LCD_Fill(210,3,218,21,GREEN);
  556.             LCD_Fill(220,3,228,21,GREEN);
  557.             LCD_Fill(230,3,238,21,GREEN);
  558.         
  559.             py_load_ui(20,75);
  560.                    inputlen=0;        
  561.             POINT_COLOR=RED;
  562.             LCD_ShowString(10,10,110,16,24,"Please set ");
  563.             LCD_ShowString(20,50,110,16,24,"your code ");
  564.         
  565.             POINT_COLOR=BLUE;
  566.             
  567.                   while(1)
  568.           {  
  569.                    delay_ms(10);
  570.                    key=py_get_keynum(20,75);
  571.                    if(key)
  572.                   {
  573.                             key1=(u32)OSMboxPend(msg_key,10,&err);   
  574.                                         if(key1==4)//刪除
  575.                            {
  576.                                       if(inputlen)inputlen--;
  577.                                      inputstr[inputlen]='\0';//添加結束符
  578.                                            Show_Str(140,55,35,16,inputstr,16,0);        //顯示有效的數字串
  579.                            }
  580.                              if(inputlen<4)
  581.                                     {
  582.                                              save[inputlen]=key;
  583.                                        inputstr[inputlen]=key+'0';//輸入字符
  584.                                              inputlen++;
  585.                               }        
  586.                                LCD_DrawRectangle(138,53,175,73);
  587.              Show_Str(140,55,35,16,inputstr,16,0);        //顯示有效的數字串
  588.                               if(inputlen==4)
  589.                              {
  590.                                                  BKP_WriteBackupRegister(BKP_DR6,1);
  591.                                                 
  592.                                                  BKP_WriteBackupRegister(BKP_DR2,save[0]);
  593.                                                  BKP_WriteBackupRegister(BKP_DR3,save[1]);
  594.                                                  BKP_WriteBackupRegister(BKP_DR4,save[2]);
  595.                                                  BKP_WriteBackupRegister(BKP_DR5,save[3]);
  596.                                                  c=0;
  597.                                                  OSTaskResume (5);  //解掛
  598.                                                  LED1=!LED1;        
  599.                          OSTaskSuspend(6);         //掛起起始任務.
  600.                                        
  601.                              }
  602.                 }                        
  603.         }                                                                                                                                                                             
  604. }
復制代碼

所有資料51hei提供下載:
ARM實驗密碼鎖.rar (530.04 KB, 下載次數: 133)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:277444 發表于 2018-1-26 17:50 | 只看該作者
大佬!!我這個矩陣按鍵程序單獨按一個鍵好用,但我現在想把它弄成密碼的樣子,利用FOR循環在主程序里,可是for循環只會掃描到我的一次按鍵,六次循環就結束了,,該用什么辦法解決呢?
回復

使用道具 舉報

板凳
ID:478085 發表于 2019-9-16 10:52 | 只看該作者
謝謝,正學習UCOS,
回復

使用道具 舉報

地板
ID:798329 發表于 2020-7-8 18:08 | 只看該作者
有這個密碼鎖的proues電路圖可以傳一下嗎,大佬,
回復

使用道具 舉報

5#
ID:286719 發表于 2020-10-20 09:28 | 只看該作者
有原理圖可以參考下嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黑人巨大精品 | av网站免费| 国产精品久久久久久238 | 亚洲国产精品久久久久秋霞不卡 | 亚洲在线看| 91视频导航 | 亚洲欧美日韩一区 | 欧美日韩三级 | 91性高湖久久久久久久久_久久99 | 一区二区三区视频在线观看 | 特级丰满少妇一级aaaa爱毛片 | 欧美成人一区二区三区 | 国产视频第一页 | 欧美成人一级 | 日本成人在线免费视频 | 欧美一区二区三区高清视频 | 99热这里都是精品 | 久久久久久久久中文字幕 | 国产精品1区 | 青娱乐一区二区 | 国产成人福利在线 | 国产精品久久久久久久午夜片 | 91一区二区三区在线观看 | 日本精品视频在线观看 | 欧美综合久久久 | 久久久久久久久久久一区二区 | 欧美人成在线视频 | 国产欧美视频一区 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 欧美又大粗又爽又黄大片视频 | 国产女人精品视频 | 手机av免费在线 | 日本福利一区 | gogo肉体亚洲高清在线视 | 国产电影一区二区在线观看 | 在线成人免费视频 | 天天干天天干 | 国产精品视频久久久久 | 大陆一级毛片免费视频观看 | 色久伊人 | 国产精品1区 |