#include #include #include #include #include #include #define uchar unsigned char #define uint unsigned int //上次按键和当前按键序号,该矩阵中序号范围 0~ 15,16 表示无按键 uchar pre_keyno=16,keyno=16; uchar code Title_Text[]="your password...";//标题字符串 uchar DSY_BUFFER[16]=" ";//显示缓冲 uchar userpassword[7]=" ";//用户输入的密码 uchar IIC_Password[7]; uchar IS_Valid_User = 0; uchar i = 0; void Beep(); uchar Clear_Password(); sbit LED_OPEN = P2^0;//开锁灯亮 sbit BEEP = P3^7;//蜂鸣器 //=================================================== //延时................ void delay(uint x) { uchar i; while (x--) for(i=0;i<120;i++); } //蜂鸣器子程序 void beep() { uchar i; for(i=0;i<100;i++) { BEEP=~ BEEP; } BEEP=0; } // 清除密码 void clear_password() { uchar i; for(i=0; i<6; i++) { userpassword[i] =' '; DSY_BUFFER[i] =' '; } } // 主程序初始化 void init_main() { P0 = 0xFF; P1 = 0xFF; P2 = 0xFF; TMOD = 0x02; //T0 设置为8 位自动重装模式 TH0 = 175; TL0 = 175; TR0 = 1; //启动T0 delay(10); lcd_init(); IIC_24C04_Init(); //初始化24C04 } // 键盘执行功能 void key_main() { P1 = 0xF0; if(P1 != 0xF0) keyno = keys_scan(); //扫描键盘获取键序号KeyNo if(pre_keyno != keyno) { if(i<=6) { switch ( keyno ) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: //if ( i<= 6 ) //密码限制在6 位以内 // { //如果i 为0 则执行一次清屏 if (i == 0) display_string(" ",0x40); userpassword[i] = keyno + '0'; userpassword[i+1] = ' '; //DSY_BUFFER[i] = userpassword[i]; DSY_BUFFER[i] = '*'; DSY_BUFFER[i+1] = ' '; display_string(DSY_BUFFER,0x40); i++; // } break; case 10: //按A 键开锁 if (strcmp(userpassword,IIC_Password) == 0) { LED_OPEN = 0; //点亮LED Clear_Password(); display_string("Unl...