課上所做的行列式鍵盤的設計應用--密碼鎖的設計
設計4*4的行列式鍵盤,輸入六位密碼后按確定鍵,當密碼正確時綠燈亮,當密碼錯誤時紅燈亮。
包含keil軟件書寫的源程序代碼、proteus繪制的電路原理圖以及整體文檔壓縮文件。
360截圖20180213135949594.jpg (109.46 KB, 下載次數: 75)
下載附件
2018-2-13 14:09 上傳
單片機源碼:
- #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)
2018-2-13 14:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|