我现在的代码可以可以实现一部分功能,然后想增加一个密码修改的功能,代码如下。乱码的地方是因为用的keil5写的程序,粘贴下来就变成乱码了,应该对程序没有影响。
```c
#include <reg52.h>
//#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define GPIO_KEY P1
sbit RS = P2^2; //Òº¾§ÏÔʾÆ÷¿ØÖƶ˿Ú
sbit RW = P2^3;
sbit E = P3^7;
sbit shuchu=P2^0; //¼ÌµçÆ÷¿ØÖƶ˿Ú
sbit beep=P2^1; //±¨¾¯Æ÷¶Ë¿Ú
sbit DoorBell=P3^6; //ÃÅÁå¶Ë¿Ú
uchar upxs[16]={"Password:"}; //ÉÏÅÅ´æ·ÅÊý×é
uchar dwxs[16]={""}; //ÏÂÅÅ´æ·ÅÊý×é
int tempword[8]={0}; //ÁÙʱÃÜÂëÊý×é
int password[8]={1,2,3,4};//³õʼÃÜÂë
uint now=0; //Êý×éµÈЧָÕë
uint key=0; //ÃÜÔ¿
uint KeyValue=16; //ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼üÖµ
uint warn=0; //´íÎóÀÛ¼Æ
uint time=0; //ÓÃÓÚ¶¨Ê±
uint time1=0; //ÓÃÓÚ¶¨Ê±
uint time2=0; //ÓÃÓÚ¶¨Ê±
uint moshi=0; //¶¨Ê±Æ÷ÄÚ²¿Ä£Ê½
//*********************************************************************************************************************************
//Òº¾§Çý¶¯ÏÔʾģ¿é//
void delay(uint dell)//ºÁÃëÑÓʱ//
{
uchar x;
for(dell;dell>0;dell--)
for(x=110;x>0;x--);
}
void wr_com(uchar temp)//дָÁî//
{
RS=0;
RW=0;
P0=temp;
E=1;
E=0;
}
void wr_data(uchar num)//дÊý¾Ý//
{
RS=1;
RW=0;
P0=num;
E=1;
E=0;
}
void disp_lcd(uchar addr,char *templ)//ÏÔʾº¯Êý//
{
uchar i;
wr_com(addr);
delay(50);
for(i=0;i<16;i++)
{
wr_data(templ[i]);
delay(50);
}
}
void lcd_init()//³õʼ»¯Òº¾§//
{
wr_com(0x30);
delay(50);
wr_com(0x38);
delay(50);
wr_com(0x01);
delay(50);
wr_com(0x06);
delay(50);
wr_com(0x0c);
delay(50);
}
void lcdxianshi(void)//Òº¾§×ÜÏÔʾ//
{
disp_lcd(0x80,upxs);
disp_lcd(0xc0,dwxs);
}
//*********************************************************************************************************************************
//°´¼üɨÃèÄ£¿é//
void Delay10ms(void)//ÑÓʱº¯Êý//
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
void KeyDown(void)//¼üÅ̼ì²âº¯Êý//
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f) //¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
{
Delay10ms(); //ÑÓʱ10ms½øÐÐÏû¶¶
if(GPIO_KEY!=0x0f) //Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
{
//¼ì²âÁÐ
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//¼ì²âÐÐ
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<10)&&(GPIO_KEY!=0xf0))//°´¼üËÉÊÖ¼ì²â
{
Delay10ms();
a++;
}
}
}
}
//*******************************************************************************************************************************
//Êý¾Ý´¦ÀíÄ£¿é//
void keysend(void)//¼üÖµ´«µÝ//
{
switch(KeyValue)
{
case 0:{dwxs[now]='0';tempword[now]=0;now++;break;}
case 1:{dwxs[now]='1';tempword[now]=1;now++;break;}
case 2:{dwxs[now]='2';tempword[now]=2;now++;break;}
case 3:{dwxs[now]='3';tempword[now]=3;now++;break;}
case 4:{dwxs[now]='4';tempword[now]=4;now++;break;}
case 5:{dwxs[now]='5';tempword[now]=5;now++;break;}
case 6:{dwxs[now]='6';tempword[now]=6;now++;break;}
case 7:{dwxs[now]='7';tempword[now]=7;now++;break;}
case 8:{dwxs[now]='8';tempword[now]=8;now++;break;}
case 9:{dwxs[now]='9';tempword[now]=9;now++;break;}
case 14:{
upxs[12]='S';
upxs[13]='U';
upxs[14]='R';
upxs[15]='E';
break;
}
case 12:
{
upxs[12]='M';
upxs[13]='O';
upxs[14]='D';
break;
}
case 15:{
TR0=1; //¶¨Ê±Æ÷0´ò¿ª
moshi=1; //ģʽ1ΪÃÅÁåģʽ
KeyValue=16; break;//¼üÖµ»º´æÇåÁã
}
}
if(now==8) now=0; //Ö»ÏÔʾ°Ëλ
}
void sure(void)//ÃÜÂëÈÏÖ¤º¯Êý//
{
uchar i;
if(KeyValue==14)
{
for(i=0;i<8;i++)
{
if(password[i]!=tempword[i])//¶Ô±ÈÃÜÂë
{
key++;
}
}
if(key==0) //ÃÜÂëÕýÈ·£¬Êä³öOK
{
dwxs[13]='O';
dwxs[14]='K';
shuchu=1; //¿ªÃÅ
TR1=1; //¶¨Ê±Æ÷1´ò¿ª£¬Æô¶¯µ¹¼ÆÊ±
moshi=0; //ÊäÈëÕýÈ·ÃÜÂë¿É¹Ø±Õ±¨¾¯Ä£Ê½
beep=0; //·äÃùÆ÷¸´Î»
TR0=0; //²¢Çҹرն¨Ê±Æ÷0
}
if(key!=0) //ÃÜÂë´íÎ󣬴ÎÊýÀÛ¼Ó
{
dwxs[12]='E';
dwxs[13]='R';
dwxs[14]='O';
dwxs[15]='R';
warn++;
if(warn==3) //ÊäÈë´íÎó3´Î£¬±¨¾¯
{
TR0=1; //¶¨Ê±Æ÷0Æô¶¯
moshi=2; //ģʽ2Æô¶¯±¨¾¯
warn=0; //ÀÛ¼ÆÇåÁã
}
}
}
}
void MOD(void)//ÃÜÂëÐ޸ĺ¯Êý//
{
uchar i;
if(KeyValue==12)
{
for(i=0;i<8;i++)
{
if(password[i]!=tempword[i])//¶Ô±ÈÃÜÂë
{
key++;
}
}
if(key==0)
{
dwxs[12]='n';
dwxs[13]='e';
dwxs[14]='w';
password[i]=0;
condition_delete();
tempword[i]=password[i];
}
}
}
void delete(void)//Çå³ýº¯Êý//
{
uchar i;
for(i=0;i<16;i++)
{
dwxs[i]=0x20; //ÃÜÂë×Ö·ûÇåÁã
}
for(i=0;i<8;i++)
{
tempword[i]=0; //ÃÜÂ뻺´æÊý×éÇåÁã
}
upxs[12]=0x20; //SUREÏÔʾÇåÁã
upxs[13]=0x20;
upxs[14]=0x20;
upxs[15]=0x20;
now=0; //ÀàÖ¸Õ븴λ
key=0; //ÃÜÔ¿ÇåÁã
KeyValue=16; //¼üÖµ»º´æÇåÁã
}
void condition_delete(void) //Ìõ¼þÇå³ý
{
if(KeyValue==11)
{
delete(); //°´ÏÂDELE¼üÇå³ýÊý¾Ý
}
KeyValue=16; //¼üÖµ»º´æÇåÁã
}
//********************************************************************************************************************************8
//¶¨Ê±Ä£¿é//
void timer0() interrupt 1 //¶¨Ê±Æ÷0ÓÃÓÚÃÅÁå
{
switch(moshi)
{
case 1:{
DoorBell=~DoorBell;
time++;
if(time<400) //ÈôÐèÒªÍϳ¤ÉùÒô£¬¿ÉÒÔµ÷Õû 400 ºÍ 800
{
TH0=(8192-700)/32; //700us ¶¨Ê±
TL0=(8192-700)%32;
}
else if(time<800)
{
TH0=(8192-1000)/32; //1ms ¶¨Ê±
TL0=(8192-1000)%32;
}
else
{
time=0; //¼ÆÊýÇåÁã
TR0=0; //¹Ø±Õ¶¨Ê±Æ÷
moshi=0; //Ìø³öģʽ1
}
break;
}
case 2:{
beep=~beep;
time++;
if(time<400) //ÈôÐèÒªÍϳ¤ÉùÒô£¬¿ÉÒÔµ÷Õû 400
{
TH0=(8192-700)/32; //700us ¶¨Ê±
TL0=(8192-700)%32;
}
else
{
time=0; //¼ÆÊýÇåÁã
}
break;
}
}
}
void timer1() interrupt 3 //¶¨Ê±Æ÷1ÓÃÓÚ×Ô¶¯¹ØÃÅ
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time1++;
if(time1==20)//Ò»Ãë
{
time2++;
time1=0;
}
}
//**********************************************************************************************************************************
//Ö÷º¯Êý//
void main(void)//Ö÷º¯Êý
{
TMOD=0x10; //0001 0000//¶¨Ê±Æ÷1·½Ê½1£¬¶¨Ê±Æ÷0·½Ê½0
TH0=(8192-700)/32; //¶¨Ê±Æ÷0 700us ¶¨Ê±
TL0=(8192-700)%32;
TH1=(65536-50000)/256; //¶¨Ê±Æ÷1 50ms
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
shuchu=0; //ÃÅËø³õʼ»¯
beep=0; //¾¯±¨³õʼ»¯
DoorBell=0; //ÃÅÁå³õʼ»¯
lcd_init(); //Òº¾§³õʼ»¯
while(1)
{
KeyDown(); //°´¼ü¼ì²â
keysend(); //Êý¾Ý´«µÝ
lcdxianshi(); //ÊäÈëÏÔʾ
sure(); //ÃÜÂëÈÏÖ¤
MOD(); //ÃÜÂëÐÞ¸Ä
condition_delete(); //°´¼üÇå³ý
if(time2==4) //ÃÅËø´ò¿ªºó4Ãë¹Ø±Õ
{
shuchu=0;
time2=0;
delete(); //×Ô¶¯Çå³ý
TR1=0; //¹Ø±Õ¶¨Ê±Æ÷1
}
}
}
```
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。
不知道你这个问题是否已经解决, 如果还没有解决的话: