高分求完整的微控制器密碼鎖程式

2021-12-19 15:20:12 字數 6031 閱讀 5874

1樓:匿名使用者

/*變數的定義:

show_val[6]: 顯示的值

init_val[6]: 密碼初始值

key_val: 返回按鍵的值 255-表示無按鍵按下

key_index: 當前按鍵是哪一位密碼

t1_cnt: 定時器計數溢位數

cnt_val_15s: 報警計時的數值

cnt_val_5s: 待機時間計時

cnt_val_4s: 輸入正確,等待4秒清除開鎖訊號

cnt_state: 計時狀態

error_num: 錯誤次數

led_seg_code:數碼管7段碼

*/#include "reg51.h"

/*說明key0=p1^0; key1=p1^1;key2=p1^2; key3=p1^3;key4=p1^4;key5=p1^5;enter=p1^6;esc=p1^7;*/

sbit relay_open=p3^0; //電磁鎖開鎖驅動

sbit pw_error=p3^1; //密碼錯誤訊號

sbit alarm_out=p3^2; //報警輸出

sbit open_lock=p3^3; //已開鎖指示訊號

sbit audio_out=p3^4; //有源蜂鳴器

unsigned char data cnt_val_15s,cnt_val_5s,cnt_val_4s,cnt_state;

unsigned int data t1_cnt;

unsigned char data key_val,key_index,key_val_old;

unsigned char data state_val,error_num;

unsigned char data show_val[6];

char code init_val[6]=;

char code led_seg_code[11]=;

//led_seg_code[0-9]代表0-9 led_seg_code[10]=0x00數碼管不顯示任何內容

//--------延時程式----------------

void delay(unsigned int i)//延時

//--------清除輸入內容----------

void init_variant()

//---------按鍵掃瞄---------------

unsigned char scan_key()

//無鍵按下

else //有鍵按下

else}}

return k;

}//---------數碼管顯示---------------

void led_show()

//--------定時器t1中斷服務程式-----------------

void timer1() interrupt 3 //t1中斷

else

break;

case 1://密碼輸入正確,需要計時4s

if(cnt_val_4s<4)

else

break;

case 2: //密碼輸入錯誤3次,計時15s

if(cnt_val_15s<15)

else

break;

} }}

//--------判斷鍵盤輸入內容與密碼是否一致------

unsigned char check_input_pw()

return k;

}//---------主程式----------------

main()

break;

case 6: //確認鍵

if(check_input_pw())

else

else //輸入錯誤次數超過3次

}break;

case 7://取消鍵

init_variant();

break;}}

}led_show();}}

//-----程式結束-----------------

2樓:人來瘋

#include

#define uint unsigned int

#define uchar unsigned char

void key_scan();

uchar count0,count1,count3,num,n=0,temp,a,j,count4;

uchar mima[8]; //初始密碼儲存區

uchar tab_key[50]; //輸入密碼儲存區

uchar code table=;

bit enterflag; //確認鍵按下與否的標誌

bit mimaflag; //密碼正確與否的標誌

bit xiugaiflag; //修改密碼標誌

bit enter1flag; //修改密碼確認鍵標誌

sbit red=p3^7;

sbit bell=p3^6;

sbit rs=p2^0;

sbit rw=p2^1;

sbit lcden=p2^2;

sbit scl=p3^4;

sbit sda=p3^5;

uchar code table1="input the passco";

uchar code table2="de: --------";

uchar code table3="*";

uchar code table4="right (^_^) ";

uchar code table5="first error!!!!";

uchar code table6="second error!!!!";

uchar code table7="third error see ";

uchar code table8="u tomorrow (^_^)";

uchar code table9="define the passc";

uchar code table10="ode: --------";

uchar code table11="code is new";

void delay1()

void delay2(uchar x)

void delay(uint z)

void start() //開始訊號

void stop() //停止

void respond()

void write_byte(uchar date)

scl=0;

delay1();

sda=1;//匯流排釋放

delay1();

uchar read_byte()

return k;

void write_add(uchar address,uchar date)

uchar read_add(uchar address)

void write_com(uchar com)

void write_date(uchar date)

bit mimacmp()

}return(flag); //返回flag

void lcd_display()

//** 0 ** 1 **2 ** 3**

//** 4** 5** 6 **7 **

//**8** 9** 確認(a) **無效(b)

//**取消(c)**修改密碼鍵(d)**確認修改鍵(e)**無效(f)

void key_manage1()

}void key_manage2()

}void key_manage3()

}void key_manage4()

}void key_manage5()

}void key_manage6()

}void key_manage7()

}void key_manage8()

}void key_manage9()

}void key_manage10()

void key_manage11()

tr1=1; //開啟計數器1

count1=0; //定時器1由50ms累計到1s所用的計數器

if(mimaflag==1)

}else

write_com(0x01);

write_com(0x80);

for(count3=0;count3<16;count3++)

tr1=1;

}if(a==2)

write_com(0x01);

write_com(0x80);

for(count3=0;count3<16;count3++)

tr1=1;

}if(a==3)

write_com(0x01);

write_com(0x80);

for(count3=0;count3<16;count3++)

write_com(0x80+0x40);

for(count3=0;count3<16;count3++)

tr1=0;}}

}}void key_manage12()

void key_manage13()

write_com(0x80+0x40);

for(count3=0;count3<16;count3++)

void key_manage14()

write_com(0x80+0x40);

for(count3=0;count3<16;count3++)

tr0=1;

void key_manage15()

write_com(0x01);

write_com(0x80);

for(count3=0;count3<16;count3++)

tr1=1;

count1=0;}}

void key_manage16()

//****************************************定時器1的50ms,共延時1秒*****************************

void time_1() interrupt 3

else //計時到1s

write_com(0x80+0x40);

for(count3=0;count3<16;count3++)}}

void time_0() interrupt 1

else

}//初始化函式

void init()

for(i=0;i<8;i++)

}void main()

write_com(0x80+0x40);

for(count3=0;count3<16;count3++)

while(1)

void key_scan()

while(temp!=0xf0)}}

p1=0xfd;

temp=p1;

temp=temp&0xf0;

if(temp!=0xf0)

while(temp!=0xf0)}}

p1=0xfb;

temp=p1;

temp=temp&0xf0;

if(temp!=0xf0)

while(temp!=0xf0)}}

p1=0xf7;

temp=p1;

temp=temp&0xf0;

if(temp!=0xf0)

while(temp!=0xf0)}}

} ** 0 ** 1 **2 ** 3**

** 4** 5** 6 **7 **

**8** 9** 確認(a) **未定義(b)

**取消(c)**修改密碼鍵(d)**確認修改鍵(e)**未定義(f)

微控制器實現十進位制數減1的程式設計,求微控制器組合語言怎樣程式設計才能實現將乙個十六進製制數轉換為十進位制數

51微控制器的運算都 copy是十六進製制的,唯一的十進位制調整指令da a,也只能用在add addc指令之後,所以要做十進位制的減法運算,也必須轉換為加法運算,然後再做十進位制調整。十進位制減1運算程式clr cmov a,50h add a,99h a e9hda a a 49h mov b,...

微控制器試卷的幾道題(求大神解答)

1.乙個微控制器應用系統用led數碼管顯示字元 8 的段碼是80h,可以斷定該顯示系統用的是 b 62616964757a686964616fe59b9ee7ad9431333332623338 a 不加反相驅動的共陰極數碼管 b 加反相驅動的共陰極數碼管或不加反相驅動的共陽極數碼管 c 加反相驅動...

求微控制器中圍繞中斷的程式題目?急求

嘻哈海棠 找了幾個定時 計數器的題目,外部中斷應該很簡單。1 利用定時 計數器t0從p1.0輸出週期為1s的方波,讓發光二極體以1hz閃爍,設晶振頻率為12mhz。2 利用定時 計數器t1產生定時時鐘,由p1口控制8個發光二極體,使8個指示燈依次一個一個閃動,閃動頻率為10次 秒 8個燈依次亮一遍為...