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