proteus仿真的51單片機(jī)基于lgm12641制作出來(lái)的實(shí)物圖如下:
219f9f1f36eb9095841bd55d259c834.jpg (63.26 KB, 下載次數(shù): 63)
下載附件
實(shí)物結(jié)果
2018-12-21 21:52 上傳
d52f5aa588ea81c3b48c74c0cb53777.jpg (61 KB, 下載次數(shù): 53)
下載附件
實(shí)物結(jié)果
2018-12-21 21:52 上傳
電路原理圖如下:
微信截圖_20181221215128.png (45.95 KB, 下載次數(shù): 71)
下載附件
仿真圖:
2018-12-21 21:52 上傳
單片機(jī)程序源碼:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- int t,key,wei=0;
- sbit rst=P2^5;
- sbit lcden=P2^4;
- sbit lcdrw=P2^3;
- sbit lcdrs=P2^2;
- sbit cs2=P2^1;
- sbit cs1=P2^0;
- sbit flag=P0^7;
- /*存儲(chǔ)輸入密碼*/
- uchar w_pwd[]={-1,-1,-1};
- /* !*2_ */
- uchar code num[]={0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,
- 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,
- 0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80};
- /*位密碼鎖*/
- uchar code dis[]={0x00,0x80,0x60,0xF8,0x07,0x10,0x90,0x10,0x11,0x16,0x10,0x10,0xD0,0x10,0x00,0x00,0x01,0x00,0x00,0xFF,0x40,0x40,0x41,0x5E,0x40,0x40,0x70,0x4E,0x41,0x40,0x40,0x00,
- 0x10,0x8C,0x44,0x04,0xE4,0x04,0x95,0xA6,0x44,0x24,0x14,0x84,0x44,0x94,0x0C,0x00,0x02,0x02,0x7A,0x41,0x41,0x43,0x42,0x7E,0x42,0x42,0x42,0x43,0xF8,0x00,0x00,0x00,
- 0x04,0x84,0xE4,0x5C,0x44,0xC4,0x00,0x02,0xF2,0x82,0x82,0x82,0xFE,0x80,0x80,0x00,0x02,0x01,0x7F,0x10,0x10,0x3F,0x00,0x08,0x08,0x08,0x08,0x48,0x88,0x40,0x3F,0x00,
- 0x20,0x10,0x2C,0xE7,0x24,0x24,0x00,0xE2,0x2C,0x20,0xBF,0x20,0x28,0xE6,0x00,0x00,0x01,0x01,0x01,0x7F,0x21,0x11,0x80,0x4F,0x20,0x10,0x0F,0x10,0x20,0x4F,0x80,0x00};
- /*請(qǐng)輸入*/
- uchar code dis1[]={0x40,0x42,0xCC,0x00,0x00,0x44,0x54,0x54,0x54,0x7F,0x54,0x54,0x54,0x44,0x40,0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x15,0x15,0x15,0x55,0x95,0x7F,0x00,0x00,0x00,
- 0x88,0x68,0x1F,0xC8,0x08,0x10,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,0x09,0x19,0x09,0xFF,0x05,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x80,0x00};
- /*正確錯(cuò)誤*/
- uchar code rg[]={0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
- 0x04,0x84,0xE4,0x5C,0x44,0xC4,0x20,0x10,0xE8,0x27,0x24,0xE4,0x34,0x2C,0xE0,0x00,0x02,0x01,0x7F,0x10,0x10,0x3F,0x80,0x60,0x1F,0x09,0x09,0x3F,0x49,0x89,0x7F,0x00,
- 0x40,0x30,0xEF,0x24,0x64,0x48,0x48,0x7F,0x48,0x48,0x48,0x7F,0x48,0x48,0x40,0x00,0x01,0x01,0x7F,0x21,0x11,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,
- 0x40,0x42,0xCC,0x00,0x00,0x80,0x9E,0x92,0x92,0x92,0x92,0x92,0x9E,0x80,0x00,0x00,0x00,0x00,0x7F,0x20,0x94,0x84,0x44,0x24,0x14,0x0F,0x14,0x24,0x44,0x84,0x84,0x00};
- void delay(uint k)
- {
- uint i,j;
- for(i=0;i<k;i++)
- for(j=0;j<125;j++);
- }
- void left()
- {
- cs1=1;
- cs2=0;
- }
- void right()
- {
- cs1=0;
- cs2=1;
- }
- void busy()
- {
- do
- {
- lcden=0;
- lcdrs=0;
- lcdrw=1;
- P0=0xff;
- lcden=1;
- lcden=0;
- }while(flag);
- }
- void write_lcdcom(uchar com)
- {
- busy();
- lcdrs=0;
- lcdrw=0;
- P0=com;
- lcden=1;
- lcden=0;
- }
- void write_lcddata(uchar date)
- {
- busy();
- lcdrs=1;
- lcdrw=0;
- P0=date;
- lcden=1;
- lcden=0;
- }
- void f_page(uchar page)
- {
- uchar i;
- i=page;
- page=i|0xb8;
- busy();
- write_lcdcom(page);
- }
- void f_line(uchar line)
- {
- uchar i;
- i=line;
- line=i|0x40;
- busy();
- write_lcdcom(line);
- }
- void lcd_ready()
- {
- uchar i,j;
- left();
- for(i=0;i<8;i++)
- {
- f_page(i);
- f_line(0x00);
- for(j=0;j<64;j++)
- {
- write_lcddata(0x00);
- }
- }
- right();
- for(i=0;i<8;i++)
- {
- f_page(i);
- f_line(0x00);
- for(j=0;j<64;j++)
- {
- write_lcddata(0x00);
- }
- }
- }
- void lcd_1(uchar *s,uchar page,uchar line)
- {
- uchar i,j;
- f_page(page);
- f_line(line);
- for(i=0;i<16;i++)
- {
- write_lcddata(*s);
- s++;
- }
- f_page(page+1);
- f_line(line);
- for(j=0;j<16;j++)
- {
- write_lcddata(*s);
- s++;
- }
- }
- void lcd_2(char *s,uchar page,uchar line)
- {
- uchar i,j;
- f_page(page);
- f_line(line);
- for(i=0;i<8;i++)
- {
- write_lcddata(*s);
- s++;
- }
- f_page(page+1);
- f_line(line);
- for(j=0;j<8;j++)
- {
- write_lcddata(*s);
- s++;
- }
- }
- void display()//顯示2位密碼鎖 歡迎使用!
- {
- left();
- lcd_2(num+32,0x00,23);
- lcd_1(dis,0x00,31);
- lcd_1(dis+32,0x00,47);
- right();
- lcd_1(dis+64,0x00,0);
- lcd_1(dis+96,0x00,16);
- left();
- lcd_1(dis1,0x04,15);
- lcd_1(dis1+32,0x04,31);
- lcd_1(dis1+64,0x04,47);
- right();
- lcd_1(dis+32,0x04,0);
- lcd_1(dis+64,0x04,16);
- lcd_2(num,0x04,32);
- }
- void display1(uint i)//顯示密碼判斷結(jié)果 正確or錯(cuò)誤
- {
- if(i==1)
- {
- left();
- lcd_1(rg,0x04,15);
- lcd_1(rg+32,0x04,31);
- }
- else
- {
- left();
- lcd_1(rg+64,0x04,15);
- lcd_1(rg+94,0x04,31);
- }
- delay(1500);
- }
- void display2()//顯示輸入密碼時(shí)狀態(tài) *_
- {
- left();
- lcd_2(num+32,0x00,23);
- lcd_1(dis,0x00,31);
- lcd_1(dis+32,0x00,47);
- right();
- lcd_1(dis+64,0x00,0);
- lcd_1(dis+96,0x00,16);
- if(wei==0)
- {
- left();
- lcd_2(num+48,0x04,15);
- }
- if(wei==1)
- {
- left();
- lcd_2(num+16,0x04,15);
- lcd_2(num+48,0x04,31);
- }
- if(wei==2)
- {
- left();
- lcd_2(num+16,0x04,15);
- lcd_2(num+16,0x04,31);
- }
- }
- void w_pw()//密碼顯示函數(shù)
- {
- lcd_ready();
- display2();
- }
- void w_res()//結(jié)果函數(shù) 初始密碼:00
- {
- if(w_pwd[1]==0&&w_pwd[2]==0)
- display1(1);
- else
- display1(0);
- }
- void keyscan()//鍵盤(pán)掃描獲取函數(shù)
- {
- key=-1;
- P1=0xfe;
- t=P1;
- t&=0xf0;
- if(t!=0xf0)
- {
- delay(1);
- if(t!=0xf0)
- {
- t=P1;
- switch(t)
- {
- case 0xee:key=1;wei++;break;
- case 0xde:key=2;wei++;break;
- case 0xbe:key=3;wei++;break;
- }
- if(wei<0)wei=0;if(wei>2)wei=2;
- if(key>=0&&key<10)w_pwd[wei]=key;
- if(wei>-1)
- w_pw();
- while(t!=0xf0)
- {
- t=P1;
- t=t&0xf0;
- }
- }
- }
- P1=0xfd;
- t=P1;
- t&=0xf0;
- if(t!=0xf0)
- {
- delay(1);
- if(t!=0xf0)
- {
- t=P1;
- switch(t)
- {
- case 0xed:key=4;wei++;break;
- case 0xdd:key=5;wei++;break;
- case 0xbd:key=6;wei++;break;
- }
- if(wei<0)wei=0;if(wei>2)wei=2;
- if(key>=0&&key<10)w_pwd[wei]=key;
- if(wei>-1)
- w_pw();
- while(t!=0xf0)
- {
- t=P1;
- t=t&0xf0;
- }
- }
- }
- P1=0xfb;
- t=P1;
- t&=0xf0;
- if(t!=0xf0)
- {
- delay(1);
- if(t!=0xf0)
- {
- t=P1;
- switch(t)
- {
- case 0xeb:key=7;wei++;break;
- case 0xdb:key=8;wei++;break;
- case 0xbb:key=9;wei++;break;
- }
- if(wei<0)wei=0;if(wei>2)wei=2;
- if(key>=0&&key<10)w_pwd[wei]=key;
- if(wei>-1)
- w_pw();
- while(t!=0xf0)
- {
- t=P1;
- t=t&0xf0;
- }
- }
- }
- P1=0xf7;
- t=P1;
- t&=0xf0;
- if(t!=0xf0)
- {
- delay(1);
- if(t!=0xf0)
- {
- t=P1;
- switch(t)
- {
- case 0xe7:key=10;wei--;break;
- case 0xd7:key=0;wei++;break;
- case 0xb7:key=11;wei++;break;
- }
- if(wei<0)wei=0;if(wei>2)wei=2;
- if(key>=0&&key<10)w_pwd[wei]=key;
- if(wei>-1)
- w_pw();
- while(t!=0xf0)
- {
- t=P1;
- t=t&0xf0;
- }
- }
- }
- }
- void main()
- {
- rst=1; //開(kāi)顯示屏
- lcd_ready();
- display();
- while(1)
- {
- keyscan();
- if(key==11)//11代表確定鍵 10表示取消鍵
- {
- w_res();
- break;
- }
- }
- }
復(fù)制代碼
密碼鎖全部資料51hei下載地址:
lgm12641_suo.rar
(80.67 KB, 下載次數(shù): 22)
2018-12-21 21:53 上傳
點(diǎn)擊文件名下載附件
程序,仿真文件 下載積分: 黑幣 -5
|