本程序適用于:1:會C語言,玩過STM32,懂得STM32外部電路的并且會舉一反三的同學
? ??2:會C或者C++語言,玩過界面,只需把按鍵按下變成界面按鈕按下,存eeprom變成讀寫文件即可
? ? ? ? ? ? ? ? ? ??3:如果只會C語言,了解一下思想、
? ? ? ? ? ? ? ? ? ??4:如果只會硬件,沒問題,軟件學學也沒想象中的那么難
void set_password(void) { char i,j = 0; char password_buf[6] = {0};
//臨時存儲,為了把密碼存儲到eeprom int m=0; //用作密碼成功判斷 int k = -1;//密碼,范圍0~9 char store[50]
= {0}; //為了lcd顯示存儲的數據 _REINPUT: delay(MSec(80));
//延時函數,需自己封裝,如帶操作系統,根據系統性質編寫,如若無系統,兩個for循環也行
LCD_Show("請按鍵設置密碼:");//LCD顯示函數,需自己封裝 j = 0; m = 0; while(1) { k = -1;
if(scan_key_down("PE1")) //判斷按鍵按下函數,自己根據STM32的IO性質以及實際硬件電路編寫 { delay(MSec(50));
if(scan_key_down("PE1")) { for(i=0;i<300;i++) { delay(MSec(100));
if(((i%5)==0)&&(i!=0)) //5的倍數才能進if,也起延時作用 { k++; if(k>9) { k = 0; //限制密碼范圍為9以內
} sprintf(store,"密碼第%d位: %d",j+1,k); // 配合LCD輸出 LCD_Show(store); }
if(read_IO("PE1")==1) //檢測松開按鍵函數,松開按鍵跳出循環,k為密碼的一位 { break; } } m++;
password_buf[j] = k; //密碼存儲 j++; if(j>5) //限制密碼位數 { j=0; k=-1; } } }
if(scan_key_down("PE2"))//按下按鍵選定模式,用另一個按鍵 { delay(MSec(50));
if(scan_key_down("PE2")) { if(m%6==0&&m!=0) { LCD_Show("密碼設置OK!");
for(i=0;i<6;i++) { printf("密碼第%d位:%d\n",i+1,passwordBuf[i]);
eeprom_wr8((char)password_buf[i],900+i); //密碼寫進eeprom delay(MSec(10)); }
delay(Sec(2)); } else { LCD_Show("密碼設置NG!"); LCD_Show("請重新輸入密碼!");
delay(Sec(2)); goto _REINPUT; //調回開始重新執行 } break; } } delay(MSec(20)); } }
歡迎愛技術的小伙伴一起交流,如有錯誤,希望告知,一起改正,共同進步。
今日推薦