课上所做的行列式键盘的设计应用--密码锁的设计
设计4*4的行列式键盘,输入六位密码后按确定键,当密码正确时绿灯亮,当密码错误时红灯亮。
包含keil软件书写的源程序代码、proteus绘制的电路原理图以及整体文档压缩文件。
单片机源码:
- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code table[]={0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x08};
- uchar data dis_num[6]={2,4,6,7,8,0};
- uchar data in_num[6]={10,10,10,10,10,10};
- uchar num,num1;
- void key();
- void display();
- void delay(uint);
- void compare();
- void rst();
- sbit relay=P1^0;
- sbit L0=P3^0;
- sbit L1=P3^1;
- sbit L2=P3^2;
- sbit L3=P3^3;
- sbit C0=P3^4;
- sbit C1=P3^5;
- sbit C2=P3^6;
- sbit C3=P3^7;
- main()
- {
- while(1)
- {
- key();
- if(num==10) compare();
- else if(num==11) rst();
- display();
- }
- }
- void rst()
- {
- uchar x;
- for(x=0;x<6;x++) in_num[x]=10;
- num1=0;
- relay=1;
- }
- void compare()
- {
- uchar x,y=0;
- for(x=0;x<6;x++)
- {
- if(in_num[x]!=dis_num[x]) y++;
- if(y!=0) break;
- }
- if(y==0) relay=0;
- else rst();
- }
- void key()
- {
- P3=0x0f;
- if((P3&0x0f)!=0x0f)
- {
- delay(15);
- if((P3&0x0f)!=0x0f)
- {
- if(L0==0) num=0;
- else if(L1==0) num=1;
- else if(L2==0) num=2;
- else num=3;
-
- P3=0xf0;
- if(C0==0) num=0+num*4;
- else if(C1==0) num=1+num*4;
- else if(C2==0) num=2+num*4;
- else num=3+num*4;
- P3=0x0f;
- while((P3&0X0f)!=0x0f);
- }
- if(0<=num<9)
- {
- if(num1<6) in_num[num1++]=num;
- }
- }
- }
- void display()
- {
- uchar i;
- P2=0xbf;
- for(i=0;i<6;i++)
- {
- P0=table[in_num[i]];
- P2=_cror_(P2,1);
- delay(1);
- P0=0x00;
- }
- }
- void delay(uint x)
- {
- uint a,b;
- for(a=x;a>0;a--)
- for(b=110;b>0;b--);
- }
复制代码
全部资料51hei下载地址:
密码锁.zip
(49.6 KB, 下载次数: 94)
|