欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)入門級密碼鎖的實(shí)現(xiàn)仿真+注釋詳細(xì)的源碼
[打印本頁]
作者:
awr
時(shí)間:
2018-5-16 10:40
標(biāo)題:
單片機(jī)入門級密碼鎖的實(shí)現(xiàn)仿真+注釋詳細(xì)的源碼
實(shí)現(xiàn)一個(gè)簡單地密碼鎖設(shè)計(jì),適合入門級。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(16.76 KB, 下載次數(shù): 25)
下載附件
2018-5-16 18:03 上傳
0.jpg
(30.7 KB, 下載次數(shù): 22)
下載附件
2018-5-16 18:03 上傳
單片機(jī)源程序如下(帶有詳細(xì)的代碼注釋):
//程序:ex4_12.c
//功能:一位數(shù)碼管顯示的密碼鎖,假定密碼為8,可以輸入的數(shù)字有0~9 ,A~F
#include <reg51.h> //包含頭文件reg51.h,定義51單片機(jī)的專用寄存器
char scan_key (void); //鍵盤掃描函數(shù)
void delay (unsigned int i); //延時(shí)函數(shù)聲明
sbit P30=P3^0; //位定義,控制發(fā)光二極管,其亮滅表示鎖的打開和鎖定狀態(tài)
void main() //主函數(shù)
{
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //0~9、A~F的共陽極顯示碼
unsigned char led1[]={0xbf,0x8c,0x86}; //" "、"P"和"E"的共陽極顯示碼
unsigned char i;
P1=led1[0]; //數(shù)碼管顯示" "
P30=1; //開鎖指示燈關(guān)閉
P0=0xff; //P0口低四位做輸入口,先輸出全1
while(1)
{
i=scan_key(); //調(diào)用鍵盤函數(shù)
if(i==-1)continue; //沒有鍵按下,繼續(xù)循環(huán)
else if(i!=8){ //按鍵不是密碼8
P1=led[i]; //顯示按下鍵的數(shù)字號
delay(10000); //延時(shí)
P1=led1[2]; //顯示E
delay(50000); //延時(shí)
P1=led1[0]; //顯示" "
}
else //按鍵是密碼8
{
P1=led[i]; //顯示按下鍵的數(shù)字號
delay(10000); //延時(shí)
P1=led1[1]; //顯示P
P30=0; //開鎖
delay(50000); //延時(shí)
P1=led1[0]; //數(shù)碼管顯示" "
P30=1; //開鎖指示燈關(guān)閉
}
}
}
//函數(shù)名:scan_key
//函數(shù)功能:判斷是否有鍵按下,如果有鍵按下,逐列掃描法得到鍵值
//形式參數(shù):無
//返回值:鍵值0~15,-1表示無鍵按下
char scan_key ( )
{
char i, temp,m,n;
bit find=0; //有鍵按下標(biāo)志位
P2=0xf0; //向所有的列線上輸出低電平
i=P0; //讀入行值
i&=0x0f; //屏蔽掉高四位
if(i!=0x0f) //行值不為全1,有鍵按下
{
delay(1200); //延時(shí)消抖
i=P0; //再次讀入行值
i&=0x0f; //屏蔽掉高四位
if(i!=0x0f)
{ //第二次判斷有鍵按下
for(i=0;i<4;i++)
{
P2=0xfe<<i; //逐列送出低電平
temp=~P0; //讀行值,并取反,全1→全0
temp=temp&0x0f; //屏蔽掉行值高4位
if(temp!=0x00) //判斷有無鍵按下,為0則無鍵按下,否則有鍵按下
{ m=i; //保存列號至m變量
find=1; //置找到按鍵標(biāo)志
switch(temp) //判斷哪一行有鍵按下,記錄行號到n變量
{ case 0x01:n=0;break; //第0行有鍵按下
case 0x02: n=1;break; //第1行有鍵按下
case 0x04: n=2;break; //第2行有鍵按下
case 0x08: n=3;break; //第3行有鍵按下
default:break;
}
break; //有鍵按下,退出for循環(huán)
}
}
}
}
if(find==0) return -1; //無鍵按下則返回-1
else return(n*4+m); //否則返回鍵值,鍵值=列號*4+行號
}
//函數(shù)名:delay
//函數(shù)功能:實(shí)現(xiàn)軟件延時(shí)
//形式參數(shù):無符號整型變量i,控制空循環(huán)的循環(huán)次數(shù)
//返回值:無
void delay(unsigned int i) //延時(shí)函數(shù)
{
unsigned int k;
for(k=0;k<i;k++);
}
復(fù)制代碼
所有資料51hei提供下載:
密碼鎖.rar
(48.94 KB, 下載次數(shù): 16)
2018-5-16 10:39 上傳
點(diǎn)擊文件名下載附件
實(shí)現(xiàn)一個(gè)簡單的密碼鎖程序設(shè)計(jì)
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1