|
QQ圖片20180210203225.png (8.95 KB, 下載次數(shù): 47)
下載附件
2018-2-10 20:32 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit RS = P1^0;
- sbit RW = P1^1;
- sbit EN = P1^2;
- sbit ledg=P1^3; //綠燈
- sbit ledr=P1^4; //紅燈
- sbit forward=P1^5; //正轉(zhuǎn)
- sbit reversal=P1^6; //反轉(zhuǎn)
- sbit braking=P1^7; //制動(dòng)
- char table0[]=" Unlock Failed ";
- char table1[]="Unlock Successed";
- char table2[]="Enter PS:";
- char table3[]="Wrong Password";
- int temp,ch,p;
- int n0,n1,n2,n3,n4,n5,n6; //6位密碼數(shù)
- //***延時(shí)函數(shù)***//
- void delay(int time)
- {
- int t=0;
- for(;time>0;time--)
- for(t=0;t<300;t++);
- }
- //=====鍵盤部分=====//
- keyscan()
- {
- temp=P2&0xf0; //第1行鍵盤數(shù),P2輸入
- P2=0xfe;
- delay(1);
- temp=P2&0xf0;
- while(temp!=0xf0)
- {
- switch(temp)
- {
- case 0xe0:ch='1';break;
- case 0xd0:ch='2';break;
- case 0xb0:ch='3';break;
- default:ch=p; break;
- }
- while(temp!=0xf0)
- {
- temp=P2;
- temp=temp&0xf0;
- }
- }
- P2=0xfd; //第2行鍵盤數(shù)
- delay(1);
- temp=P2&0xf0;
- while(temp!=0xf0)
- {
- switch(temp)
- {
- case 0xe0:ch='4';break;
- case 0xd0:ch='5';break;
- case 0xb0:ch='6';break;
- default:ch=p;break;
- }
- while(temp!=0xf0)
- {
- temp=P2;
- temp=temp&0xf0;
- }
- }
- P2=0xfb; //第3行鍵盤數(shù)
- delay(1);
- temp=P2&0xf0;
- while(temp!=0xf0)
- {
- switch(temp)
- {
- case 0xe0:ch='7';break;
- case 0xd0:ch='8';break;
- case 0xb0:ch='9';break;
- default:ch=p;break;
- }
- while(temp!=0xf0)
- {
- temp=P2;
- temp=temp&0xf0;
- }
- }
- P2=0xf7; //第4行鍵盤數(shù)
- delay(1);
- temp=P2&0xf0;
- while(temp!=0xf0)
- {
- switch(temp)
- {
- case 0xe0:ch='*';break;
- case 0xd0:ch='0';break;
- case 0xb0:ch='#';break;
- default:ch=p;break;
- }
- while(temp!=0xf0)
- {
- temp=P2;
- temp=temp&0xf0;
- }
- }
- return ch;
- }
- //=====LCD液晶部分=====//
- //***寫指令函數(shù)***//
- void LCDWrite(uchar com)//顯示
- {
- P0=com; //送出指令
- RS=0;RW=0;EN=1; //寫指令時(shí)序
- delay(10);
- EN=0;
- }
- //***寫數(shù)據(jù)函數(shù)***//
- void LCDData(uchar dat)//輸入
- {
- P0=dat; //送出數(shù)據(jù)
- RS=1;RW=0;EN=1; //寫數(shù)據(jù)時(shí)序
- delay(10);
- EN=0;
- }
- //***屏幕初始化函數(shù)***//
- void init()
- {
- LCDWrite(0x01); //清屏
- LCDWrite(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
- LCDWrite(0x0f); //開顯示,光標(biāo)閃爍,顯示光標(biāo)
- LCDWrite(0x06); //地址加1,整屏右移
- }
- //***數(shù)字變?yōu)?*'函數(shù)***//
- change(int m) //輸入數(shù)字延時(shí)后變?yōu)?
- {
- delay(200);
- LCDWrite(m);
- LCDData('*');
- }
-
- //***字幕顯示調(diào)用函數(shù)***//
- void ps() //輸入密碼界面"Enter PS:"
- {
- char d1;
- LCDWrite(0x80); //第1行第1個(gè)字符開始顯示
- for(d1=0;d1<9;d1++)
- {
- LCDData(table2[d1]);
- }
- }
- void error() //密碼錯(cuò)誤時(shí)調(diào)用顯示"Unlock Failed"
- { char d1; //液晶屏幕第1行
- LCDWrite(0x01); //清屏
- LCDWrite(0x81); //第1行第1個(gè)字符開始顯示
- for(d1=0;d1<13;d1++) //字符字?jǐn)?shù)
- {
- LCDData(table0[d1]); //顯示調(diào)用table0
- }
-
- }
- void error1() //密碼錯(cuò)誤時(shí)調(diào)用顯示"Wrong Password"
- { char d2; //液晶屏幕第2行
- LCDWrite(0xc1); //第2行第2個(gè)字符開始顯示
- for(d2=0;d2<14;d2++) //字符字?jǐn)?shù)
- {
- LCDData(table3[d2]); //顯示調(diào)用table3
- }
- }
- void open() //密碼正確時(shí)調(diào)用顯示"Unlock Successed"
- {
- char d2;
- LCDWrite(0xc0); //第2行第1個(gè)字符開始顯示
- for(d2=0;d2<16;d2++)
- {
- LCDData(table1[d2]);
- }
- }
- //===步進(jìn)電機(jī)部分===//
- //***緊急制動(dòng)子程序***//
- void stop()
- {
- if(braking==0)
- {
- if(braking==0)
- while(!braking)
- {P3=0xff;}
- }
- }
- //===正反轉(zhuǎn)子程序===//
- void zfz()
- { int i;
- if(!forward&&ledg==1) //正轉(zhuǎn)
- { delay(10);
- while(!forward)
- { stop();
- for(i=0,P3=0x01;i<4;i++)
- { delay(90);
- P3=P3<<1;
- }
- }
- }
- if(!reversal&&ledg==1) //反轉(zhuǎn)
- { delay(10);
- while(!reversal)
- { stop();
- for(i=0,P3=0xf7;i<4;i++)
- { delay(90);
- P3=P3>>1;
- }
- }
- }
- }
- //=====主函數(shù)=====//
- //***程序初始化***//
- void main()
- {
- RW=0;
- ledg=0; //綠燈
- ledr=0; //紅燈
- init();
- stop();
- zfz();
- delay(5);
- ps();
- //***按鍵,屏幕關(guān)聯(lián)函數(shù)***//
- //*密碼1*//
- LCDWrite(0x89); //第1行第10個(gè)字符位置顯示
- while(keyscan()==p)
- {
- delay(3);
- keyscan();
- }
- LCDData(keyscan()); //第1行第10個(gè)字符位置輸入
- n0=keyscan(); //第1個(gè)密碼
- ch=p;
- change(0x89); //數(shù)字變*函數(shù)調(diào)用
- delay(1);
- //*密碼2*//
- LCDWrite(0x8a);
- while(keyscan()==p)
- {
- delay(3);
- keyscan();
- }
- LCDData(keyscan());
- n1=keyscan();
- ch=p;
- change(0x8a);
- delay(1);
- //*密碼3*//
- LCDWrite(0x8b);
- while(keyscan()==p)
- {
- delay(3);
- keyscan();
- }
- LCDData(keyscan());
- n2=keyscan();
- ch=p;
- change(0x8b);
- delay(1);
- //*密碼4*//
- LCDWrite(0x8c);
- while(keyscan()==p)
- {
- delay(3);
- keyscan();
- }
- LCDData(keyscan());
- n3=keyscan();
- ch=p;
- change(0x8c);
- delay(1);
- //*密碼5*//
- LCDWrite(0x8d);
- while(keyscan()==p)
- {
- delay(3);
- keyscan();
- }
- LCDData(keyscan());
- n4=keyscan();
- ch=p;
- change(0x8d);
- delay(1);
- //*密碼6*//
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
程序及仿真.zip
(43.75 KB, 下載次數(shù): 28)
2018-2-10 20:35 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|