|
51單片機電子密碼鎖 仿真和程序源代碼都有電路原理圖可以下載附件打開仿真文件即可看到
0.png (34.81 KB, 下載次數: 472)
下載附件
2016-1-2 00:57 上傳
1.png (30.38 KB, 下載次數: 383)
下載附件
2016-1-2 00:57 上傳
51單片機源程序:
- //-----------------------------------------------------------------
- //原始程序中相鄰兩位密碼不能相同.
- //本壓縮包中的HEX由修改后的新程序編譯生成,允許輸入任意密碼.
- //-----------------------------------------------------------------
- //實訓100例中本例內的main函數可用以下代碼替換.
- //改動的主要是main函數中while循環內的代碼.
- //-----------------------------------------------------------------
- // 主程序
- //-----------------------------------------------------------------
- void main()
- {
- uchar i = 0;
- uchar IIC_Password[10];
- uchar IS_Valid_User = 0;
- P0 = 0xFF;
- P1 = 0xFF;
- P2 = 0xFF;
- TMOD = 0x02; //T0設置為8位自動重裝模式
- TH0 = 175;
- TL0 = 175;
- TR0 = 1; //啟動T0
- DelayMS(10);
- LCD_Init(); //初始化LCD
-
- IIC_24C04_Init(); //初始化24C04
-
- Display_String(Title_Text,0x00); //在第1行顯示標題
-
- //24C04的內容已由初始化BIN文件導入
- //將24C04中預先寫入的密碼讀入pass
- RecString(0xa0, 0 , IIC_Password, 6);
- IIC_Password[6] = '\0';
- while(1)
- {
- P1 = 0xF0;
- if(P1 != 0xF0) KeyNo = Keys_Scan(); //掃描鍵盤獲取鍵序號KeyNo
-
- switch ( KeyNo )
- {
- case 0: case 1: case 2: case 3: case 4:
- case 5: case 6: case 7: case 8: case 9:
-
- if ( i<= 5 ) //密碼限制在6位以內
- {
- //如果i為0則執行一次清屏
- if (i ==0) Display_String(" ",0x40);
-
- UserPassword[i] = KeyNo + '0';
- UserPassword[i+1] = '\0';
-
- DSY_BUFFER[i] = '*';
- DSY_BUFFER[i+1] = '\0';
-
- Display_String(DSY_BUFFER,0x40);
-
- i++;
- }
- break;
-
- case 10: //按A鍵開鎖
- if (strcmp(UserPassword,IIC_Password) == 0)
- {
- LED_OPEN = 0; //點亮LED
- Clear_Password();
- Display_String("Unlock OK! ",0x40);
- IS_Valid_User = 1;
- }
- else
- {
- LED_OPEN =1; //關閉LED
- Clear_Password();
- Display_String("ERROR ! ",0x40);
- IS_Valid_User = 0;
- }
- i = 0;
- break;
-
- case 11: //按B鍵上鎖
- LED_OPEN =1;
- Clear_Password();
- Display_String(Title_Text,0x00);
- Display_String(" ",0x40);
- i = 0;
- IS_Valid_User = 0;
- break;
-
- case 12: //按C鍵設置新密碼
- //如果是合法用戶則提示輸入新密碼
- if ( !IS_Valid_User ) Display_String("No rights !",0x40);
- else
- {
- i = 0;
- Display_String("New Password: ",0x00);
- Display_String(" ",0x40);
- }
-
- break;
-
- case 13: //按D鍵保存新密碼
- if ( !IS_Valid_User ) Display_String("No rights !",0x40);
- else
- {
- SendString(0xa0, 0 , UserPassword, 6);
-
- //重新讀入剛寫的密碼
- RecString(0xa0, 0 , IIC_Password, 6);
- IIC_Password[6] = '\0';
-
- i = 0;
- Display_String(Title_Text,0x00);
- Display_String("Password Saved! ",0x40);
- }
-
- break;
-
- case 14: //按E鍵消除所有輸入
- i = 0;
- Clear_Password();
- Display_String(" ",0x40);
- }
-
- Beep();
- DelayMS(100);
- P1= 0xF0;
- while (P1 != 0xF0); //如果有鍵未釋放則等待
- while (P1 == 0xF0); //如果沒有再次按下按鍵則等待
- }
- }
復制代碼
|
評分
-
查看全部評分
|