資源簡(jiǎn)介
這是本人自己平時(shí)閑暇時(shí)編寫的,設(shè)計(jì)一個(gè)電子密碼鎖,設(shè)計(jì)報(bào)告包含16頁(yè),嚴(yán)肅哦文件中包含KEIL編程,PROTEUS仿真和設(shè)計(jì)報(bào)告。非常詳細(xì),5分絕對(duì)值得,我不會(huì)像有些人那樣敲詐大家的呵呵。覺(jué)得不錯(cuò)的話記得好評(píng)啊,就是想要個(gè)好評(píng)呵呵。。。

代碼片段和文件信息
#include
#include
#define?uchar?unsigned?char
#define?uint?unsigned?int
#define?lcd1602_data?P0 ???//Lcd1602的位定義
sbit?rs=P3^0;
sbit?rw=P3^1;
sbit?en=P3^2;
sbit?BJ=P1^7;//報(bào)警位定義,當(dāng)密碼輸入錯(cuò)誤時(shí)報(bào)警位置1
sbit?QD=P3^3;
uchar?key;?//存鍵值
uchar?count=0;//用于記錄輸入的密碼位數(shù)
uchar?mima[6]={0};//存密碼值
uchar?mimabuf[6]={0};?//存輸入的數(shù)字
uchar?gongneng_flag=0;//功能選擇位標(biāo)志,為1時(shí)為Set,為2時(shí)為Open密碼正確打開(kāi)
bit?key_flag=0; ?//有按鍵按下標(biāo)志位
bit?mima_error=0;//密碼輸入錯(cuò)誤標(biāo)志位
uchar?code?table1[]=“Welcome...??????“;
uchar?code?table2[]=“Select?Mode...??“;
uchar?code?table3[]=“1:?SET??2:?OPEN?“;
uchar?code?table4[]=“Previous?number?“;
uchar?code?table5[]=“New?number?is:??“;
uchar?code?table6[]=“Number?is?“;
uchar?code?table7[]=“?It?is?wrong!!!?“;
uchar?code?table8[]=“Set?is?OK?!!!???“;
uchar?code?table9[]=“The?number?is?OK“;
//判斷LCD1602的狀態(tài)即狀態(tài)字最高位STA7
uchar?Lcd1602Busy(void) ??
{
register?unsigned?char?lcdbusy;
rs=0;
rw=1;
en=1;
_nop_();
lcdbusy=lcd1602_data;
_nop_();
en=0;
return(lcdbusy&0x80);
}
//向LCD1602內(nèi)寫命令
void?WriteCmdLcd1602(unsigned?char?command)
{
while(Lcd1602Busy());
rs=0;
rw=0;
en=1;
_nop_();
lcd1602_data=command;
_nop_();
en=0;
}
//向LCD1602內(nèi)寫數(shù)據(jù)
void?WriteDatLcd1602(unsigned?char?dat)
{
while(Lcd1602Busy());
rs=1;
rw=0;
en=1;
_nop_();
lcd1602_data=dat;
_nop_();
en=0;
}
//將坐標(biāo)定位在第row行第column列
void?Goto_xy(unsigned?char?rowunsigned?char?column)
{
if(row==1)
WriteCmdLcd1602(0x80+column-1);
else?if(row==2)
WriteCmdLcd1602(0x80+0x40+column-1);
}
//延時(shí)約1S
void?delay(void)
{
uchar?ijk;
for(i=0;i<20;i++)
for(j=0;j<125;j++)
for(k=0;k<250;k++);
}
//初始化函數(shù)
void?InitLcd1602(void)
{
WriteCmdLcd1602(0x38);
WriteCmdLcd1602(0x01);
WriteCmdLcd1602(0x0f);
WriteCmdLcd1602(0x06);
}
//在液晶上顯示字符串
void?PutStrLcd1602(char?*string)
{
unsigned?char?i;
for(i=0;string[i]!=‘\0‘;i++)
{
WriteDatLcd1602(string[i]);
_nop_();
}
}
//延時(shí)10ms
void?delay10ms(void)
{
uchar?ij;
for(i=0;i<25;i++)
for(j=0;j<250;j++);
}
void?KeyScan(void)?//鍵盤掃描程序,key應(yīng)定義為全局無(wú)符號(hào)字符型
{
uchar?itemptemp1=0xfe;
for(i=0;i<4;i++)
{
P2=temp1;
temp=P2&0xf0;
if(temp!=0xf0)
{
delay10ms();
temp=P2&0xf0;
if(temp!=0xf0)
{
while((P2&0XF0)!=0xf0);
switch(temp)
{
case?0xe0:key=4*i+0;break;
case?0xd0:key=4*i+1;break;
case?0xb0:key=4*i+2;break;
case?0x70:key=4*i+3;break;
}
key_flag=1;
break;
}
}
temp1=(temp1<<1)|0x01;
}
}
//狀態(tài)1,在第一行輸出“Welcome...”
void?state1(void)
{
uchar?i;
Goto_xy(11);
PutStrLcd1602(table1);
Goto_xy(21);
for(i=0;i<16;i++)
{
WriteDatLcd1602(‘?‘);
_nop_();
}
}
//狀態(tài)2,第一行輸出“Select?Mode...??”,第二行輸出“1:?SET??2:?OPEN?”
void?state2(void)
{
Goto_xy(11);
PutStrLcd1602(table2);
Goto_xy(21);
PutStrLcd1602(table3);
}
//狀態(tài)3,第一行輸出“Previous?number?”,并將下一個(gè)輸出字符定位在第二行第一列
void?state3(void)
{
WriteCmdLcd1602(0x01);
Goto_xy(11);
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????14307??2011-08-02?00:50??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì)
?????文件???????5704??2011-08-02?00:50??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).c
?????文件???????3197??2011-08-02?00:50??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).hex
?????文件?????????88??2011-08-02?00:50??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).lnp
?????文件??????14764??2011-08-02?00:50??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).LST
?????文件??????23078??2011-08-02?00:50??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).M51
?????文件??????17252??2011-08-02?00:50??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).OBJ
?????文件????????199??2011-08-04?00:19??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).plg
????.......?????55321??2011-08-04?00:22??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).uvopt
????.......?????13337??2011-07-31?23:44??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).uvproj
????.......?????55317??2011-08-02?11:10??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì)_uvopt.bak
????.......?????13333??2011-07-31?17:34??基于51的電子密碼鎖設(shè)計(jì)\Keil\基于51單片機(jī)的電子密碼鎖設(shè)計(jì)_uvproj.bak
?????文件?????109751??2011-08-02?00:24??基于51的電子密碼鎖設(shè)計(jì)\proteus\Last?Loaded?基于51單片機(jī)的電子密碼鎖設(shè)計(jì).DBK
?????文件?????109751??2011-08-02?00:51??基于51的電子密碼鎖設(shè)計(jì)\proteus\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).DSN
?????文件???????1078??2011-08-02?16:14??基于51的電子密碼鎖設(shè)計(jì)\proteus\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).PWI
?????文件?????435200??2011-08-02?11:08??基于51的電子密碼鎖設(shè)計(jì)\基于51單片機(jī)的電子密碼鎖設(shè)計(jì).doc
?????目錄??????????0??2011-08-04?00:22??基于51的電子密碼鎖設(shè)計(jì)\Keil
?????目錄??????????0??2011-08-02?16:14??基于51的電子密碼鎖設(shè)計(jì)\proteus
?????目錄??????????0??2011-08-02?11:10??基于51的電子密碼鎖設(shè)計(jì)
-----------?---------??----------?-----??----
???????????????871677????????????????????19
評(píng)論
共有 條評(píng)論