|
向各位大佬匯報(bào)一下目前的情況:用下面的代碼,在不接入任何輸入的情況下,開(kāi)機(jī)就顯示滿屏的“0”,按鍵按下,顯示一大串對(duì)應(yīng)的鍵值而不是單個(gè)鍵值。注釋掉按鍵代碼,顯示一大串字符。請(qǐng)教一下各位大佬,這個(gè)如何解?
#include <STC8.H>
//#include <string.h>
//#include <EEPROM.h>
#include <LCD1602.h>
#define MAIN_Fosc 24000000L //定義主時(shí)鐘
sbit ALAM = P3^4; //報(bào)警
sbit KEY = P3^2; //開(kāi)鎖
sbit dtmf_ok = P1^1; //雙音頻接收
sbit d0 = P1^2;
sbit d1 = P1^3;
sbit d2 = P1^4;
sbit d3 = P1^5;
unsigned char KeyNum,Count=0;
unsigned int Password=0;
unsigned char code initpassword[4]={5,6,7,8}; //初始密碼
unsigned char dat[]="0123456789*#ABCD";
/***************************************************************************
函數(shù): unsigned char MatrixKey()
描述: dtmf取值函數(shù)
參數(shù): 將DTMF解碼數(shù)據(jù)編碼為數(shù)值
返回: K
版本: VER1.0
日期: 2024-4-23
備注:
***************************************************************************/
unsigned char MatrixKey()
{
unsigned char k=0;
unsigned char Temp = (P1>>2) & 0x0F;
if(dtmf_ok==1)
{
switch(Temp)
{
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)
{
KeyNum=MatrixKey();
LCD_WriteData(dat[KeyNum]);
/*if(KeyNum)
{
if(KeyNum<=10) //如果0-9按鍵按下,輸入密碼
{
if(Count<4) //如果輸入次數(shù)小于4
{
Password*=10; //密碼左移一位
Password+=KeyNum%10; //獲取一位密碼
Count++; //計(jì)次加一
}
LCD_ShowNum(2,1,Password,4); //更新顯示
}
if(KeyNum=='#') //如果#按鍵按下,確認(rèn)
{
if(Password==initpassword[4]) //如果密碼等于正確密碼
{
LCD_ShowString(1,11,"PassOK "); //顯示OK
KEY=~KEY; //打開(kāi)繼電器
Password=0; //密碼清零
Count=0; //計(jì)次清零
LCD_ShowNum(2,1,Password,4); //更新顯示
}
else //否則
{
LCD_ShowString(1,12,"error"); //顯示ERR
Password=0; //密碼清零
Count=0; //計(jì)次清零
LCD_ShowNum(2,1,Password,4); //更新顯示
}
}
if(KeyNum=='*') //如果*按鍵按下,取消
{
Password=0; //密碼清零
Count=0; //計(jì)次清零
LCD_ShowNum(2,1,Password,4); //更新顯示
}
}*/
}
}
|
|