12864密码锁
這個程序真的花了我好長的時間調試,終于寫好了,大家可以看看我的密碼鎖,有點花哨嘔!!
下面是密碼鎖簡約版本:
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;//ó?à′???????yê?è?μ??ü??μ???êyuchar mimatemp[5];init_12864();lcd_pos(0,2);write_string("welcom!!");delay1ms(2);lcd_pos(1,0);write_string("PSW:");write_cmd(0x0f);//′ò?a1a±ê f3:while(1){i=0;if(inputtimes>=1)//ê?è?′í?óoóμ??¢μ÷?êìa {lcd_pos(1,2);write_string(" ");lcd_pos(1,2);}while(1){f: num=keyscan();if(num!=0xff){if(num==15)//?¨ò??aè·è?break;if(num==16)//?a????·¨?éò?êμ???à2?í??? {i--;//±íê??°??ê?è?μ?êy?Y?TD§ lcd_pos(1,2);write_string(" ");lcd_pos(1,2);if(i==-1)//±ü?a?à′?°′???ì3ébugi=0;for(itouch=0;itouch<i;itouch++)write_string("*");goto f;}if(num==14)//±íê?òaDT???ü?? {flaggaimima = 1;break;}if(num!=16)//16?¨ò??a??3μ£???3y?°??ò???êy?Y {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)//?¨ò??aè·è?±íê?DT???ü???áê? {lcd_pos(1,2);write_string(" ");lcd_pos(1,2);break;}if(num==16)//?a????·¨?éò?êμ???à2?í??? {i--;//±íê??°??ê?è?μ?êy?Y?TD§ lcd_pos(1,2);write_string(" ");lcd_pos(1,2);if(i==-1)//±ü?a?à′?°′???ì3ébugi=0;for(itouch=0;itouch<i;itouch++)write_string("*");goto f1;}if(num!=16)//16?¨ò??a??3μ£???3y?°??ò???êy?Y {mima[i]=num;i++;length = i;write_string("*");//write_date(num+0x30); }}}goto f3 ;//±íê???D??aê? }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?±ê????μèóú1£?±íê??a??3é1| {flagkaimeng = 1;//±íê?′ò?a2???μ??úμ?±íê??????ˉlcd_pos(2,1);write_string(" ");lcd_pos(2,2);write_string("open!");write_cmd(0x0c);break;//í?ê±ì?3??-?· }else //·??òμ??°£?±íê??a??ê§°ü {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)//?a??3é1|μ?2ù×÷ {write_cmd(0x01);lcd_pos(1,2);write_string("3?è???°2£?");lcd_pos(2,2);write_string("??ó-???ò£?");JDQ();}while(1);} View Code12864.c
#include"12864.h" #include<reg52.h>sbit lcdrs = P2^4;//êy?Y?1ê???á????????ú sbit lcdwr = P2^5;//?áD′???????ú sbit lcden = P2^6;//ê1?ü???ú sbit PSB = P2^1;//′?2¢?ú???????ú/*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)//?óê±oˉêy {uint i,j;for(i= x;i>0;i--)for(j=110;j>0;j--); }void write_cmd(uchar cmd)//D′??á?oˉêy {lcdrs = 0;lcdwr = 0;P0 = cmd;lcden = 1;delay1ms(5);// lcden = 0; }void write_date(uchar date)//D′êy?Yoˉêy {lcdrs = 1;lcdwr = 0;P0 = date;lcden = 1;delay1ms(5);// lcden = 0; }void write_string(uchar *str)//D′è?×?·?′?oˉêy {for(;*str!='\0';str++){write_date(*str);delay1ms(2);}}void init_12864() {PSB = 1;//2¢?ú·?ê?′??íêy?Ywrite_cmd(0x30);//?ù±???á?2ù×÷write_cmd(0x0c);//?a??ê?£?1?1a±êwrite_cmd(0x01);//??3ylcdμ???ê??úèY }void lcd_putpic(unsigned char code *img)//?-í?oˉêy {uint i,j;//?-í?é?°?2?·?for(i = 0;i<32;i++){write_cmd(0x80+i);// write_cmd(0x80);// for(j=0;j<16;j++){write_date(*img);img++;}}//?-??2?·?μ??á?? for(i = 0;i<32;i++){write_cmd(0x80+i);//éè?¨áDwrite_cmd(0x88);//′óμúèyDD?aê??-í?for(j=0;j<16;j++){write_date(*img);img++;}} }void setpic()//éè?¨?-í?1|?üμ?oˉêy {write_cmd(0x36);//éè?¨?-í????-í?1|?üdelay1ms(5); }void lcd_pos(uchar x,uchar y)//éè?¨??ê?????μ?oˉêy {uchar pos;if(x==0)x=0x80;else if(x==1)x=0x90;else if(x==2)x=0x88;else if(x==3)x=0x98;pos=x+y;write_cmd(pos); } View Codekeyscan.c
#include<reg52.h> #include "12864.h"uchar num,num1,temp; uchar keyscan() {P3 = 0xfe;//1111 1110temp = P3;temp = temp&0xf0;//11110000while(temp!=0xf0)//?????? {delay1ms(5);//????P3?temp = P3;temp = temp&0xf0;while(temp!=0xf0){temp = P3; switch(temp){case 0x7e:num = 1;break;case 0xbe:num = 2;//10break;case 0xde:num = 3;//11break;case 0xee:num = 4;//110break;}while(temp!=0xf0)//???? {temp = P3;temp = temp&0xf0;}return num;}}P3 = 0xfd;//1111 1101temp = P3;temp = temp&0xf0;//11110000while(temp!=0xf0)//?????? {delay1ms(5);//????P3?temp = P3;temp = temp&0xf0;while(temp!=0xf0){temp = P3; switch(temp){case 0x7d:num = 5;//101break;case 0xbd:num = 6;//110break;case 0xdd:num = 7;//111break;case 0xed:num = 8;//1000break;}while(temp!=0xf0)//???? {temp = P3;temp = temp&0xf0;}return num;}}P3 = 0xfb;//1111 1011temp = P3;temp = temp&0xf0;//11110000while(temp!=0xf0)//?????? {delay1ms(5);//????P3?temp = P3;temp = temp&0xf0;while(temp!=0xf0){temp = P3; switch(temp){case 0x7b:num = 9;//1001break;case 0xbb:num = 10;//10break;case 0xdb:num = 11;//11break;case 0xeb:num = 12;//12break;}while(temp!=0xf0)//???? {temp = P3;temp = temp&0xf0;}return num;}}P3 = 0xf7;//1111 0111temp = P3;temp = temp&0xf0;//11110000while(temp!=0xf0)//?????? {delay1ms(5);//????P3?temp = P3;temp = temp&0xf0;while(temp!=0xf0){temp = P3; switch(temp){case 0x77:num = 13;//13break;case 0xb7:num = 14;//14break;case 0xd7:num = 15;//15break;case 0xe7:num = 16;//16break;}while(temp!=0xf0)//???? {temp = P3;temp = temp&0xf0;}return num;}}return 0xff;} View Codebaojin.c
#include<reg52.h> #include"baojin.h" #include"12864.h" sbit jdq = P1^0; sbit led = P1^1;sbit fen = P1^2;void feng() {while(1){delay1ms(10); fen = ~fen;} }void JDQ() {led = 0;jdq = 1;//′ò?a?ìμ??÷ }void step() {unsigned int i;while(1){P1 = 0x01;for(i=0;i<510;i++);P1 = 0x02;for(i=0;i<510;i++);P1 = 0x04;for(i=0;i<510;i++);P1 = 0x08;for(i=0;i<510;i++);} } View Code12864.h
#ifndef __12864_H__ #define _12864_H__#include<reg52.h> #define uint unsigned int #define uchar unsigned char/*extern uchar code table1[] ; extern uchar code table2[] ; extern uchar code table3[] ; extern uchar code table4[] ; extern uchar code table5[] ;*/extern unsigned char code pic1[]; void delay1ms(uint x);//?óê±oˉêy void write_cmd(uchar cmd);//D′??á?oˉêy void write_date(uchar date);//D′êy?Yoˉêyvoid init_12864(); void lcd_putpic(unsigned char code *img);//?-í?oˉêy void setpic();//éè?¨?-í?1|?üμ?oˉêy void lcd_pos(uchar x,uchar y);//éè?¨??ê?????μ?oˉêy void write_string(uchar *str); #endif View Codebaojin.h
#ifndef __BAOJIN_H__ #define __BAOJIN_H__void feng(); void step(); void JDQ();//?ìμ??÷?a???a1?#endif View Code至于復雜的版本呢,大家可以在12864.c上進行添加
注意這里還有4個警告,是因為有幾個畫圖的函數我沒有調用,為的是讓大家能夠在本程序的基礎上進行添加
?
豪華版本:http://download.csdn.net/detail/generoius/6404009
版權所有,轉載請注明鏈接地址http://www.cnblogs.com/fengdashen/p/3357651.html
?
轉載于:https://www.cnblogs.com/fengdashen/p/3357651.html
總結
- 上一篇: 生成随机码,保存随机文件.
- 下一篇: mysql 数学函数