这个程序真的花了我好长的时间调试,终于写好了,大家可以看看我的密码锁,有点花哨呕!!
下面是密码锁简约版本:
main.c

#include<reg52.h> #include"12864.h" #include"keyscan.h" #include"baojin.h" uchar mima[5]={1,2,3,4,5}; main() { uchar length,i,flag,inputtimes,flagkaimeng;//tempÊÇÃÜÂëµÄÁÙʱ±äÁ¿ uchar itouch,flaggaimima;//ÓÃÀ´¼Ç¼ÕæÕýÊäÈëµÄÃÜÂëµÄ¸öÊý uchar mimatemp[5]; init_12864(); lcd_pos(0,2); write_string("welcom!!"); delay1ms(2); lcd_pos(1,0); write_string("PSW:"); write_cmd(0x0f);//´ò¿ª¹â±ê f3: while(1) { i=0; if(inputtimes>=1)//ÊäÈë´íÎóºóµÄ΢µ÷ÎÊÌâ { lcd_pos(1,2); write_string(" "); lcd_pos(1,2); } while(1) { f: num=keyscan(); if(num!=0xff) { if(num==15)//¶¨ÒåΪȷÈÏ break; if(num==16)//Õâ¸öËã·¨¿ÉÒÔʵÏֶಽÍ˸ñ { i--;//±íʾǰÃæÊäÈëµÄÊý¾ÝÎÞЧ lcd_pos(1,2); write_string(" "); lcd_pos(1,2); if(i==-1)//±ÜÃâ¶à´Î°´ÏÂÔì³Ébug i=0; for(itouch=0;itouch<i;itouch++) write_string("*"); goto f; } if(num==14)//±íʾҪÐÞ¸ÄÃÜÂë { flaggaimima = 1; break; } if(num!=16)//16¶¨ÒåΪ»Ø³µ£¬Ïû³ýÇ°ÃæÒ»¸öÊý¾Ý { mimatemp[i]=num; i++; length = i; write_string("*"); //write_date(num+0x30); } } } if(flaggaimima==1) { flaggaimima = 0; while(1) { f1: num=keyscan(); if(num!=0xff) { if(num==15)//¶¨ÒåΪȷÈϱíʾÐÞ¸ÄÃÜÂë½áÊø { lcd_pos(1,2); write_string(" "); lcd_pos(1,2); break; } if(num==16)//Õâ¸öËã·¨¿ÉÒÔʵÏֶಽÍ˸ñ { i--;//±íʾǰÃæÊäÈëµÄÊý¾ÝÎÞЧ lcd_pos(1,2); write_string(" "); lcd_pos(1,2); if(i==-1)//±ÜÃâ¶à´Î°´ÏÂÔì³Ébug i=0; for(itouch=0;itouch<i;itouch++) write_string("*"); goto f1; } if(num!=16)//16¶¨ÒåΪ»Ø³µ£¬Ïû³ýÇ°ÃæÒ»¸öÊý¾Ý { mima[i]=num; i++; length = i; write_string("*"); //write_date(num+0x30); } } } goto f3 ;//±íʾÖØпªÊ¼ } flag = 1; if(length == sizeof(mima))//±È½ÏÊäÈëµÄÃÜÂëÊÇ·ñÒ»Ñù { for(i=0;i<length;i++) { flag=flag&&(mimatemp[i]==mima[i]); //write_date(mimatemp[i]+0x30); } } else { flag=0; } if(flag ==1)//Èç¹û±ê־λµÈÓÚ1£¬±íʾ¿ªËø³É¹¦ { flagkaimeng = 1;//±íʾ´ò¿ª²½½øµç»úµÄ±íʾλÆô¶¯ lcd_pos(2,1); write_string(" "); lcd_pos(2,2); write_string("open!"); write_cmd(0x0c); break;//ͬʱÌø³öÑ»· } else //·ñÔòµÄ»°£¬±íʾ¿ªËøʧ°Ü { lcd_pos(2,1); write_string("error,again!"); inputtimes++; if(inputtimes==3) { lcd_pos(2,1); write_string("error 3 times!"); write_cmd(0x0c); feng(); } } } if(flagkaimeng==1)//¿ªÃųɹ¦µÄ²Ù×÷ { write_cmd(0x01); lcd_pos(1,2); write_string("³öÈëƽ°²£¡"); lcd_pos(2,2); write_string("»¶Ó»Ø¼Ò£¡"); JDQ(); } while(1); }
12864.c

#include"12864.h" #include<reg52.h> sbit lcdrs = P2^4;//Êý¾Ý»¹ÊÇÖ¸ÁîÑ¡Ôñ¶Ë¿Ú sbit lcdwr = P2^5;//¶ÁдѡÔñ¶Ë¿Ú sbit lcden = P2^6;//ʹÄÜ¶Ë¿Ú sbit PSB = P2^1;//´®²¢¿ÚÑ¡Ôñ¶Ë¿Ú /*uchar code table1[]={"Welcome!!"}; uchar code table2[]={"Psw:"}; uchar code table3[] ={"Open"}; uchar code table4[] ={"Error try again!"}; uchar code table5[] ={"Error 3 times!!"};*/ unsigned char code pic1[] = { 0x01, }; void delay1ms(uint x)//ÑÓʱº¯Êý { uint i,j; for(i= x;i>0;i--) for(j=110;j>0;j--); } void write_cmd(uchar cmd)//дָÁÊý { lcdrs = 0; lcdwr = 0; P0 = cmd; lcden = 1; delay1ms(5);// lcden = 0; } void write_date(uchar date)//дÊý¾Ýº¯Êý { lcdrs = 1; lcdwr = 0; P0 = date; lcden = 1; delay1ms(5);// lcden = 0; } void write_string(uchar *str)//дÈë×Ö·û´®º¯Êý { for(;*str!='