QQ圖片20180210203225.png (8.95 KB, 下載次數: 47)
下載附件
2018-2-10 20:32 上傳
單片機源程序如下:
- #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; //正轉
- sbit reversal=P1^6; //反轉
- sbit braking=P1^7; //制動
- 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位密碼數
- //***延時函數***//
- void delay(int time)
- {
- int t=0;
- for(;time>0;time--)
- for(t=0;t<300;t++);
- }
- //=====鍵盤部分=====//
- keyscan()
- {
- temp=P2&0xf0; //第1行鍵盤數,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行鍵盤數
- 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行鍵盤數
- 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行鍵盤數
- 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液晶部分=====//
- //***寫指令函數***//
- void LCDWrite(uchar com)//顯示
- {
- P0=com; //送出指令
- RS=0;RW=0;EN=1; //寫指令時序
- delay(10);
- EN=0;
- }
- //***寫數據函數***//
- void LCDData(uchar dat)//輸入
- {
- P0=dat; //送出數據
- RS=1;RW=0;EN=1; //寫數據時序
- delay(10);
- EN=0;
- }
- //***屏幕初始化函數***//
- void init()
- {
- LCDWrite(0x01); //清屏
- LCDWrite(0x38); //設置16*2顯示,5*7點陣,8位數據接口
- LCDWrite(0x0f); //開顯示,光標閃爍,顯示光標
- LCDWrite(0x06); //地址加1,整屏右移
- }
- //***數字變為'*'函數***//
- change(int m) //輸入數字延時后變為*
- {
- delay(200);
- LCDWrite(m);
- LCDData('*');
- }
-
- //***字幕顯示調用函數***//
- void ps() //輸入密碼界面"Enter PS:"
- {
- char d1;
- LCDWrite(0x80); //第1行第1個字符開始顯示
- for(d1=0;d1<9;d1++)
- {
- LCDData(table2[d1]);
- }
- }
- void error() //密碼錯誤時調用顯示"Unlock Failed"
- { char d1; //液晶屏幕第1行
- LCDWrite(0x01); //清屏
- LCDWrite(0x81); //第1行第1個字符開始顯示
- for(d1=0;d1<13;d1++) //字符字數
- {
- LCDData(table0[d1]); //顯示調用table0
- }
-
- }
- void error1() //密碼錯誤時調用顯示"Wrong Password"
- { char d2; //液晶屏幕第2行
- LCDWrite(0xc1); //第2行第2個字符開始顯示
- for(d2=0;d2<14;d2++) //字符字數
- {
- LCDData(table3[d2]); //顯示調用table3
- }
- }
- void open() //密碼正確時調用顯示"Unlock Successed"
- {
- char d2;
- LCDWrite(0xc0); //第2行第1個字符開始顯示
- for(d2=0;d2<16;d2++)
- {
- LCDData(table1[d2]);
- }
- }
- //===步進電機部分===//
- //***緊急制動子程序***//
- void stop()
- {
- if(braking==0)
- {
- if(braking==0)
- while(!braking)
- {P3=0xff;}
- }
- }
- //===正反轉子程序===//
- void zfz()
- { int i;
- if(!forward&&ledg==1) //正轉
- { delay(10);
- while(!forward)
- { stop();
- for(i=0,P3=0x01;i<4;i++)
- { delay(90);
- P3=P3<<1;
- }
- }
- }
- if(!reversal&&ledg==1) //反轉
- { delay(10);
- while(!reversal)
- { stop();
- for(i=0,P3=0xf7;i<4;i++)
- { delay(90);
- P3=P3>>1;
- }
- }
- }
- }
- //=====主函數=====//
- //***程序初始化***//
- void main()
- {
- RW=0;
- ledg=0; //綠燈
- ledr=0; //紅燈
- init();
- stop();
- zfz();
- delay(5);
- ps();
- //***按鍵,屏幕關聯函數***//
- //*密碼1*//
- LCDWrite(0x89); //第1行第10個字符位置顯示
- while(keyscan()==p)
- {
- delay(3);
- keyscan();
- }
- LCDData(keyscan()); //第1行第10個字符位置輸入
- n0=keyscan(); //第1個密碼
- ch=p;
- change(0x89); //數字變*函數調用
- 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黑下載附件…………
復制代碼
所有資料51hei提供下載:
程序及仿真.zip
(43.75 KB, 下載次數: 28)
2018-2-10 20:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|