1樓:匿名使用者
#include
#define uint unsigned int
#define uchar unsigned char
#define bin(a,b,c,d,e,f,g,h) ((a<<7)+(b<<6)+(c<<5)+(d<<4)+(e<<3)+(f<<2)+(g<<1)+(h<<0))
//下面的code表示陣列存放在rom中,因為這個陣列的值不需要改寫
uchar code keycode[16]=;//值為m*(n+1)的乘積,用於key()
uchar dis[6];
msdelay(uint x)//延時子函式}}
//鍵盤子程式一,鍵盤值與陣列值對比得到
uchar key(void)
while(!temp);
matrix=m*(n+1);/*為避免乘積重複,n+1*/
for(k=0;k<16;k++) //keycode:見前
return(16);
} //if loop
}//j loop
}//i loop
}//key end
//用switch...case語句得到鍵盤值*/
uchar key1(void)
while(!temp);
matrix=m*(n+1);
switch(matrix) //此方法的基本思路:
//switch end
} //if loop
}//j loop
}//i loop
}//key end
//依次掃描16個按鍵
uchar key2(void)
while(!temp);
return(1);}
p1=0x1d; /*p1=0001 1101,行一為高,列二為低,掃描第二個按鍵,下面掃描其餘按鍵*/
temp=p1&0xf0;
if (!temp) while(!temp);
return(2);}
p1=0x1b;
temp=p1&0xf0;
if (!temp) while(!temp);
return(3);}
p1=0x17;
temp=p1&0xf0;
if (!temp) while(!temp);
return(4);}
p1=0x2e;
temp=p1&0xf0;
if (!temp) while(!temp);
return(5);}
p1=0x2d;
temp=p1&0xf0;
if (!temp) while(!temp);
return(6);}
p1=0x2b;
temp=p1&0xf0;
if (!temp) while(!temp);
return(7);}
p1=0x27;
temp=p1&0xf0;
if (!temp) while(!temp);
return(8);}
p1=0x4e;
temp=p1&0xf0;
if (!temp) while(!temp);
return(9);}
p1=0x4d;
temp=p1&0xf0;
if (!temp) while(!temp);
return(0);}
p1=0x4b;
temp=p1&0xf0;
if (!temp) while(!temp);
return(10);}
p1=0x47;
temp=p1&0xf0;
if (!temp) while(!temp);
return(11);}
p1=0x8e;
temp=p1&0xf0;
if (!temp) while(!temp);
return(12);}
p1=0x8d;
temp=p1&0xf0;
if (!temp) while(!temp);
return(13);}
p1=0x8b;
temp=p1&0xf0;
if (!temp) while(!temp);
return(14);}
p1=0x87;
temp=p1&0xf0;
if (!temp) while(!temp);
return(15);}
return(16); //掃描all按鍵都未按下,則輸出16
}//key2 end.
////////時鐘中斷顯示子程式
void t0_int() interrupt 1
p0=5-i;
p0=p0|(dis[i]<<4);
i++;
tl0=0;
th0=252;}
void distri(uint disnum)
main()
while(1);}
2樓:酒璞伊新語
首先得說明我這個可是自己原創手打的,但是沒去**了,程式可能有錯誤,你自己修改下吧
#include
typedef
unsigned
char
uchar;
typedef
unsigned
intuint;
sbit
key1=p0^0;
sbit
key2=p0^1;
sbit
key3=p0^2;
sbit
key4=p0^3;
sbit
wela=p2^0;//位鎖存端
#define
smgp1
sbit
led=p3^0;//低電平亮
uchar
code
table=;//共陽數碼管
p,euchar
chushi_mima=;
uchar
shuru_mima[3];
uchar
index;//控制輸入密碼的位數
uchar
flag_3s=0;//3s標誌位
uchar
keydown;//確定按鍵變數
#define
times
15//去抖時間15ms
uchar
key1_count,key2_count,key3_count,key4_count;
void
init()
void
main()
flag_3s=0;
for(i=0;i<3;i++)
}else}}
}}void
timer0()
interrupt
1/*********1ms中斷掃描按鍵(包含去抖程式)********/
if(!key1&&key1_count!=0)}else
if(!key1)
key1_count=times;
//key2,key3,key4你自己寫吧}
3樓:旗淼狄採夢
假設晶振為12m,數碼管共陰,且由p1口控制器;led高電平點亮。
#include
void
delay(int);
/*延時程式*/
sbit
p3_0=p3^0;
intmain()
p1=0x73;
/*密碼正確,數碼管顯示為p*/
delay(3);
/*延時大約3秒*/
p3_0=1;
/*led點亮,密碼鎖解開*/
.../*解鎖後的其他任務*/
return0;}
void
delay(intt)
求51微控制器控制的電子密碼鎖c語言程式
4樓:我在哪我是誰
給你個參考資料吧,沒有程式,希望對你能有一點點幫助!我給你發郵箱裡吧。
求基於51微控制器的電子密碼鎖的c語言程式。急!!!!
5樓:不會飛
//例項80:矩陣式鍵盤實現的電子密碼鎖
#include//包含51微控制器暫存器定義的標頭檔案
sbit p14=p1^4; //將p14位定義為p1.4引腳
sbit p15=p1^5; //將p15位定義為p1.5引腳
sbit p16=p1^6; //將p16位定義為p1.6引腳
sbit p17=p1^7; //將p17位定義為p1.7引腳
sbit sound=p3^7; //將sound位定義為p3.7
unsigned char keyval; //儲存按鍵值
函式功能:延時輸出音訊
void delay(void)
函式功能:軟體延時子程式
void delay20ms(void)
函式功能:主函式
void main(void)
; //設定密碼
ea=1; //開總中斷
et0=1; //定時器t0中斷允許
tmod=0x01; //使用定時器t0的模式1
th0=(65536-500)/256; //定時器t0的高8位賦初值
tl0=(65536-500)%256; //定時器t0的高8位賦初值
tr0=1; //啟動定時器t0
keyval=0xff; //按鍵值初始化
while(keyval!=d[0]) //第一位密碼輸入不正確,等待
;while(keyval!=d[1]) //第二位密碼輸入不正確,等待
;while(keyval!=d[2]) //第三位密碼輸入不正確,等待
; while(keyval!=d[3]) //第四位密碼輸入不正確,等待
;while(keyval!=d[4]) //第五位密碼輸入不正確,等待
;while(keyval!=d[5]) //第六位密碼輸入不正確,等待
;while(keyval!=d[6]) //沒有輸入「ok」,等待
;p3=0xfe; //p3.0引腳輸出低電平,點亮led
函式功能:定時器0的中斷服務子程式,進行鍵盤掃描,判斷鍵位
void time0_interserve(void) interrupt 1 using 1 //定時器t0的中斷編號為1,使用第一組暫存器
}tr0=1; //開啟定時器t0
th0=(65536-500)/256; //定時器t0的高8位賦初值
tl0=(65536-500)%256; //定時器t0的高8位賦初值}
51微控制器資料搬運c語言程式,51微控制器訪問片內資料儲存器某單元的內容用c語言怎麼寫???
aa i bb i 51微控制器訪問片內資料儲存器某單元的內容用c語言怎麼寫?方法1 char data p 定義一個指向片內ram地址的指標 p 0x30 片內ram地址為0x30 p 0x12 向0x30內寫入立即數0x12 方法2 include char x x dbyte 0x30 將片內...
微控制器程式設計中什麼意思,51微控制器C語言中和的意思是什麼
在微控制器c語言程式設計中,是先加再賦值的意思。例如 test 5 相當於test test 5 51微控制器c語言中 和 的意思是什麼?u8 data 1 相當於 u8 data u8 data 1,u8 data u8temp 相當於 u8 data u8 data u8temp。類似的還有 這...
51微控制器的分時複用,80c51微控制器p0口地址資料分時複用如何實現的
51微控制器的分時來複用51微控制器的分源 時複用功能,最直接的就bai是movx指令du,用這個指令就是在分時復zhi用p0口,執dao行 movx a,dptr,那麼首先要送地址a0 a7給p0口,ale有效,鎖存在373上,再將這個地址的資料從p0口讀入傳給a。下面是p0口既送數碼管段訊號,又...