微机课程设计 单片机课程设计 电子密码锁 - 图文 下载本文

idata uchar thirdB[]=\新密码输入提示 idata uchar mm0[6]={7,7,7,7,7,7};//初始密码 idata uchar mm[6];//输入密码 idata uchar Xmm1[6];//新密码1 idata uchar Xmm2[6];//新密码2 uchar flag; //密码配对正确标志 sbit key=P3^2;//室内开门键 sbit rs=P2^6; //指令或数据口 sbit rw=P2^5; //读或写状态口 sbit e=P2^7; //LCD使能口 sbit GLed=P3^4;//定义绿灯 sbit YLed=P3^5;//定义黄灯 sbit RLed=P3^6; //定义红灯 sbit buzzer=P3^0;//定义蜂鸣器 void delay(uint xms); void lcd_init();

void write_com(uchar com); void write_data(uchar dat); void alarm();

void lcd_display1(uchar tab[],uchar l); void lcd_display2(uchar tab1[],uchar tab2[]); uchar keyscan(); uchar KeyPro(void);

void zhijie(void) interrupt 0 //外部中断,用以室内开锁 { delay(20); if(key==0) { delay(20); while(1) { if(key==1) {

delay(10); //防抖

13

if(key==1) { GLed=0; //绿灯亮1秒,表示开门

delay(1000); GLed=1; break;

}

}

}

}

}

void delay(uint xms)//延时程序 x ms { uint i,j;

for(i=xms;i>0;i--) for(j=112;j>0;j--);

}

bit lcd_busy() //判断是否忙 { P0= 0xff; rs=0;

//写指令

rw=1; //表示读状态 e=0; _nop_(); e=1;

return (bit)(P0 & 0x80);

}

void write_data(uchar dat)//LCD写数据程序 { lcd_busy(); //判断LCD是否忙碌

rs=1; rw=0;

P0=dat;

14

delay(10); e=1; delay(10); e=0;

}

void write_com(uchar com)//LCD写指令程序 { lcd_busy();//判断LCD是否忙碌 rs=0; rw=0; P0=com; delay(10); e=1; delay(10); e=0;

}

void lcd_pos(uchar pos)//显示位置程序 { write_com(pos|0x80);

}

void lcd_init() //LCD初始化程序 { write_com(0x38); //开显示

write_com(0x0e); //开显示不显示光标 write_com(0x06); //写一个指针加1 write_com(0x01); //清屏

write_com(0x80); //设置数据指针起点

}

void lcd_display1(uchar tab[],uchar h)//选择性单行显示子程序{ uchar i;

lcd_init();//初始化LCD

delay(10);

15

if(h==1) //第一行显示 { lcd_pos(0x01); }

if(h==2) //第二行显示 { lcd_pos(0x42);

} i=0;

while(tab[i] != '\\0') { write_data(tab[i]);//显示字符 i++;

}

}

void lcd_display2(uchar tab1[],uchar tab2[])//双行显示子程序 { uchar i,j; lcd_init(); //初始化LCD

delay(10); lcd_pos(0x01); //从第一行显示 i=0;

while(tab1[i] != '\\0') { write_data(tab1[i]);//显示字符 i++; }

lcd_pos(0x42); //从第二行显示 j=0;

while(tab2[j] != '\\0') { write_data(tab2[j]);//显示字符 j++;

}

16