久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機按鍵密碼鎖源代碼
[打印本頁]
作者:
niujia
時間:
2015-7-15 23:08
標題:
單片機按鍵密碼鎖源代碼
電路圖:
http://www.zg4o1577.cn/f/51hei-5.pdf
源代碼:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define KeyPort P1
sbit Dula=P2^2; //段選
sbit Wela=P2^3; //位選
sbit Led =P2^0;
uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段碼
uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位碼
uchar password[8];
uchar dis_smg[8];
bit Flag=0;
uchar KeyScan(void);
uchar KeyPro(void);
/**********************************************************************************
************************* 延 時 函 數 ******************************************
***********************************************************************************/
void delayus(uchar t)
{
while(--t);
}
void delayms(uchar t)
{
while(t--)
{
delayus(245);
delayus(245);
}
}
/**********************************************************************************
************************* 顯 示 函 數 ******************************************
***********************************************************************************/
void Display(uchar Firstbit ,uchar Num)
{
static uchar i;
P0=0x00;
Dula=1;Dula=0;
P0=smg_we[i+Firstbit];
Wela=1;Wela=0;
P0=dis_smg[i];
Dula=1;Dula=0;
i++;
if(i==Num)
i=0;
}
/**********************************************************************************
*************************** 定時初始化 ******************************************
***********************************************************************************/
void Timer0_Init(void)
{
TMOD|=0X01;
TR0=1;
ET0=1;
EA=1;
}
/**********************************************************************************
************************* 設 置 密 碼 ******************************************
***********************************************************************************/
void SetPassword(uchar KeyNum)
{
static uchar i=0;
uchar j,n;
uchar tempcode[8];
if((KeyNum>=0)&&(KeyNum<=9))
{
Led=1;
if(i==0)
{
for(j=0;j<8;j++)
tempcode[j]=0;
}
if(i<8)
{
tempcode[i]=smg_du[KeyNum];
for(j=0;j<=i;j++)
dis_smg[7-i+j]=tempcode[j];
}
i++;
if(i==8)
i=0;
}
if(KeyNum==15) //密碼修改確認鍵
{
KeyNum=0xff;
for(n=0;n<8;n++)
{
password[n]=tempcode[n];
dis_smg[n]=0;
}
dis_smg[0]=0x3f;
dis_smg[1]=0x76;
Flag=0;
i=0; //靜態變量清零,下次進入時可以從新開始
}
}
/**********************************************************************************
************************* 輸 入 密 碼 ******************************************
***********************************************************************************/
void KeyControl(uchar Keynum)
{
static uchar i=0;
uchar j;
uchar temp[8];
bit flag;
if((Keynum>=0)&&(Keynum<=9)) //數字輸入按鍵
{
Led=0;
if(i==0)
{
for(j=0;j<8;j++)
dis_smg[j]=0;
}
if(i<8)
{
temp[i]=smg_du[Keynum];
for(j=0;j<=i;j++)
dis_smg[7-i+j]=temp[j];
}
i++;
if(i==8)
i=0;
}
if(Keynum==15) //確認鍵
{
Keynum=0xff;
flag=1;
for(j=0;j<8;j++)
{
flag=flag&&(temp[j]==password[j]);//比較八位密碼數字是否全正確
dis_smg[j]=0;
}
if(flag)
{
dis_smg[0]=0x3f; // "o"
dis_smg[1]=0x73; // "p"
dis_smg[2]=0x79; // "E"
dis_smg[3]=0x37; // "n"
}
else
{
dis_smg[0]=0x79; // "E"
dis_smg[1]=0x50; // "r"
dis_smg[2]=0x50; // "r"
}
i=0; //清零,準備下次輸入密碼
}
if(Keynum==14) //修改密碼鍵
{
Flag=1;
for(i=0;i<8;i++)
{
dis_smg[i]=0x40;
}
i=0; //靜態變量清零,下次進入時可以從新開始
}
}
/**********************************************************************************
************************* 控 制 函 數 ******************************************
***********************************************************************************/
void Dominate(void)
{
uchar keynum;
keynum=KeyPro();
if(keynum!=0xff)
{
if(Flag==0)
KeyControl(keynum);
else
SetPassword(keynum);
}
}
/**********************************************************************************
************************* main 函 數 ******************************************
***********************************************************************************/
void main()
{
Timer0_Init();
while(1)
{
Dominate();
}
}
/**********************************************************************************
************************* 中斷服務函數 ******************************************
***********************************************************************************/
void Timer0(void) interrupt 1
{
TH0=0XF8;
TL0=0X30; //2ms
Display(0,8);
}
/**********************************************************************************
************************* 按 鍵 掃 描(反復式掃描法) **************************
***********************************************************************************/
uchar KeyScan(void)
{
uchar cord_h,cord_l;
KeyPort=0x0f;
cord_l=KeyPort&0x0f;
if(cord_l!=0x0f)
{
delayms(10);
if((KeyPort&0x0f)!=0x0f)
{
cord_l=KeyPort&0x0f;
KeyPort=cord_l|0xf0;
cord_h=KeyPort&0xf0;
while((KeyPort&0xf0)!=0xf0);
return (cord_h+cord_l);
}
}return (0xff);
}
uchar KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 0;break;//0 按下相應的鍵顯示相對應的碼值
case 0x7d:return 1;break;//1
case 0x7b:return 2;break;//2
case 0x77:return 3;break;//3
case 0xbe:return 4;break;//4
case 0xbd:return 5;break;//5
case 0xbb:return 6;break;//6
case 0xb7:return 7;break;//7
case 0xde:return 8;break;//8
case 0xdd:return 9;break;//9
case 0xdb:return 10;break;//a
case 0xd7:return 11;break;//b
case 0xee:return 12;break;//c
case 0xed:return 13;break;//d
case 0xeb:return 14;break;//e
case 0xe7:return 15;break;//f
default:return 0xff;break;
}
}
復制代碼
作者:
changfeng4hao
時間:
2015-11-23 08:49
那原始密碼是多少?程序一進去的是輸入密碼而不是設置密碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
精品国产乱码久久久久久图片
|
日韩成人在线播放
|
日韩视频一区二区
|
亚洲午夜精品一区二区三区
|
嫩草视频在线免费观看
|
中文字幕乱码一区二区三区
|
亚洲区中文字幕
|
国产一极毛片
|
欧洲亚洲视频
|
亚洲成人一区二区在线
|
日韩在线国产
|
亚洲精品第一国产综合野
|
蜜桃臀av一区二区三区
|
91精品国产综合久久国产大片
|
欧美成人免费在线
|
免费在线观看毛片
|
天堂av免费观看
|
在线一级片
|
四虎在线视频
|
99精品免费久久久久久日本
|
精品国产99
|
h视频免费在线观看
|
欧美精品导航
|
九九热免费视频在线观看
|
又黑又粗又长的欧美一区
|
久久一区二区三区电影
|
在线一区
|
国产精品福利在线观看
|
亚洲欧洲一区二区
|
av大片在线观看
|
99精品国产成人一区二区
|
成人精品毛片国产亚洲av十九禁
|
91精品www
|
欧州一区二区三区
|
日韩精品亚洲专区在线观看
|
91影片
|
91精品国产一区二区三区
|
久久九九99
|
日本久久久一区二区三区
|
欧美 日韩 国产 成人
|
日本不卡免费新一二三区
|