#include <STC8.H>//#include <string.h>
//#include <EEPROM.h>
#include <LCD1602.h>
#define MAIN_Fosc 24000000L //定義主時鐘
sbit ALAM = P3^4; //報警
sbit KEY = P3^2; //開鎖
//sbit dtmf_ok = P1^1; //雙音頻接收
sbit d0 = P1^2;
sbit d1 = P1^3;
sbit d2 = P1^4;
sbit d3 = P1^5;
unsigned char k,KeyNum,Count=0;
unsigned int Password=0;
unsigned char code initpassword[4]={5,6,7,8}; //初始密碼
/***************************************************************************
函數: unsigned char MatrixKey()
描述: dtmf取值函數
參數: 將DTMF解碼數據編碼為數值
返回: K
版本: VER1.0
日期: 2024-4-23
備注:
***************************************************************************/
unsigned char MatrixKey()
{
switch((P1>>2)&0x0f)
{
case 0x01: k='1'; break;
case 0x02: k='2'; break;
case 0x03: k='3'; break;
case 0x04: k='4'; break;
case 0x05: k='5'; break;
case 0x06: k='6'; break;
case 0x07: k='7'; break;
case 0x08: k='8'; break;
case 0x09: k='9'; break;
case 0x0A: k='0'; break;
case 0x0B: k='*'; break;
case 0x0C: k='#'; break;
case 0x0D: k='A'; break;
case 0x0E: k='B'; break;
case 0x0F: k='C'; break;
case 0x00: k='D'; break;
default: k=0xff; break;
}
return k;
}
void main()
{
P1M0 &= ~0x3f;
P1M1 &= ~0x3f;
P3M0 &= ~0xfc;
P3M1 &= ~0xfc;
//P1=0xff;
LCD_Init();
LCD_ShowString(1,1,"Password:");
while(1)
{
if(K<=9) //如果S1~S10按鍵按下,輸入密碼
{
if(Count<4) //如果輸入次數小于4
{
Password*=10; //密碼左移一位
Password+=K%10; //獲取一位密碼
Count++; //計次加一
}
LCD_ShowNum(2,1,Password,4); //更新顯示
}
if(K=='#') //如果#按鍵按下,確認
{
if(Password==initpassword[4]) //如果密碼等于正確密碼
{
LCD_ShowString(1,11,"PassOK "); //顯示OK
KEY=~KEY; //打開繼電器
Password=0; //密碼清零
Count=0; //計次清零
LCD_ShowNum(2,1,Password,4); //更新顯示
}
else //否則
{
LCD_ShowString(1,12,"error"); //顯示ERR
Password=0; //密碼清零
Count=0; //計次清零
LCD_ShowNum(2,1,Password,4); //更新顯示
}
}
if(k=='*') //如果*按鍵按下,取消
{
Password=0; //密碼清零
Count=0; //計次清零
LCD_ShowNum(2,1,Password,4); //更新顯示
}
}
}
|