单片机源程序如下:
- #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)
|