|
這是我做的密碼鎖,包含所有東西,希望和有經(jīng)驗(yàn)的人士交流,代碼程序不是很好,有待大家的 改進(jìn)。
密碼鎖的發(fā)射部分proteus仿真原理圖:
0.png (19.45 KB, 下載次數(shù): 40)
下載附件
2017-6-8 16:29 上傳
密碼鎖的接受部分proteus仿真原理圖:
0.png (30.89 KB, 下載次數(shù): 37)
下載附件
2017-6-8 16:28 上傳
單片機(jī)源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar duan[11]={0xbf,0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //所需的段的位碼
- //uchar wei[6]={0X80,0X40,0X20,0X10,0x08,0x04}; //位的控制端 (仿真)
- uchar wei[6]={0X7f,0Xbf,0Xdf,0Xef,0xf7,0xfb}; //位的控制端 (開發(fā)板)
- uchar mbuf[6];//密碼位
- uchar count;
- uchar CLK;
- sbit fmq=P3^7;
- uchar QX;
- /******************************************************************
- 延時(shí)函數(shù)
- ******************************************************************/
- void delay(uchar t)
- {
- uchar i,j;
- for(i=0;i<t;i++)
- {
- for(j=1000;j>0;j--);
- { ;
- }
- }
- }
- /******************************************************************
- 延時(shí)函數(shù)
- ******************************************************************/
- void delay1(uchar p)
- {
- unsigned char i,j,k;
- for(i=p;i>0;i--)
- for(j=20;j>0;j--)
- for(k=248;k>0;k--);
- }
- /**********************************************************************
- 數(shù)碼管動態(tài)掃描
- *********************************************************************/
- void xianshi()
- {
- /*****************數(shù)據(jù)轉(zhuǎn)換*****************************/
-
- P2=wei[0];
- P0=duan[mbuf[0]];
- delay(1);
- P2=wei[1];
- P0=duan[mbuf[1]];
- delay(1);
- P2=wei[2];
- P0=duan[mbuf[2]];
- delay(1);
- P2=wei[3];
- P0=duan[mbuf[3]];
- delay(1);
- P2=wei[4];
- P0=duan[mbuf[4]];
- delay(1);
- P2=wei[5];
- P0=duan[mbuf[5]];
- delay(1);
- }
- /*************************************************************************
- 取鍵值
- **************************************************************************/
- uchar getkey(void)///得到鍵值
- {
- uchar h,l,k;
- while(P1!=0x0f)
- {
- h=P1&0x0f;
- P1=0xf0;
- l=P1&0xf0;
- k=h|l;
- return(k);
- }
- }
- /*************************************************************************
- 判斷鍵值
- **************************************************************************/
- void Getch (uchar i)
- {
- switch (i) //判斷鍵值(那一個(gè)鍵按下)
- {
- case 0xe7: if (count<6) { mbuf[count]=1; count++;SBUF=0x55;while(!TI);TI=0;}break;
- case 0xd7: if (count<6) { mbuf[count]=2; count++;SBUF=0Xf9;while(!TI);TI=0;}break;
- case 0xb7: if (count<6) { mbuf[count]=3; count++;SBUF=0xa4;while(!TI);TI=0;}break;
- case 0x77: if (count<6) { mbuf[count]=4; count++;SBUF=0xb0;while(!TI);TI=0;}break;
- case 0xeb: if (count<6) { mbuf[count]=5; count++;SBUF=0x99;while(!TI);TI=0;}break;
- case 0xdb: if (count<6) { mbuf[count]=6; count++;SBUF=0Xf9;while(!TI);TI=0;}break;
- case 0xbb: if (count<6) { mbuf[count]=7; count++;SBUF=0x82;while(!TI);TI=0;}break;
- case 0x7b: if (count<6) { mbuf[count]=8; count++;SBUF=0xf8;while(!TI);TI=0;}break;
- case 0xed: if (count<6) { mbuf[count]=9; count++;SBUF=0x80;while(!TI);TI=0;}break;
- case 0xdd: if (count<6) { mbuf[count]=10;count++;SBUF=0x90;while(!TI);TI=0;}break;
- case 0xbd: if (count==6) {SBUF=75;while(!TI);TI=0;}break;
- case 0x7d: if (count<=6) {count=0;QX=1;}break;
- } }
- /*************************************************************************
- 串口初始化,波特率9600,方式1
- **************************************************************************/
- void initTimer(void)
- {
- TMOD=0x1;
- TH0=0xdc;
- TL0=0x32;
- }
- void initUart(void)
- {
- TMOD|=0x20;
- SCON=0x50;
- TH1=0xfd;
- TL1=0xfd;
- TR1=1;
- }
- /*************************************************************************
- 主函數(shù)
- **************************************************************************/
- void main()
- {
- uchar key;
- initTimer();
- initUart();
- count=0;
- P1=0X0F;
- while(1)
- {
- if(P1!=0X0F)
- {
- key=getkey(); //取鍵值
- Getch(key); //求值
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png (42.86 KB, 下載次數(shù): 50)
下載附件
2017-6-8 16:35 上傳
0.png (4.41 KB, 下載次數(shù): 20)
下載附件
2017-6-8 16:35 上傳
所有資料51hei提供下載:
密碼鎖.rar
(154.65 KB, 下載次數(shù): 14)
2017-6-8 07:08 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|