基於51微控制器的密碼鎖程式

時間 2021-08-31 20:02:20

1樓:匿名使用者

用stc52編的,下面是c程式,除錯已經成功,自己看程式吧……

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define lcd_data p0

sbit sda=p3^5;

sbit scl=p3^4;//24c08控制口設定

sbit lcd_rs = p3^3; //暫存器選擇輸入

sbit lcd_rw = p3^6; //液晶讀/寫控制

sbit lcd_en = p3^7; //液晶使能控制

sbit lcd_psb = p3^2; //串/並方式控制

sbit fm=p2^4;//蜂鳴器控制口

sbit rs=p2^5;

sbit t_clk = p2^0; //實時時鐘時鐘線引腳 //

sbit t_io = p2^1; //實時時鐘資料線引腳 //

sbit t_rst = p2^2; //實時時鐘復位線引腳 //

sbit ds=p2^3;

sbit en=p2^6;

sbit zz=p2^7;

sbit fz=p3^1;

sbit acc0=acc^0;

sbit acc7=acc^7;

uint temp1,s_temp; //定義整形變數

float f_temp; //定義浮點型變數

uchar time=" : : ";

uchar day=" 20 / / ( ) ";

uchar temp0=" 溫度: . 度 ";

uchar num,num1,flag,count,a,b;

uchar unlock_i;//解密標誌位

uchar t[4];

uchar t1[4];

void delay_ms(uint z)//長延時

void delay() //短延時,大約5us

void reshi()

else

}uchar code mima=;

void lcd_xieping0(uchar x,uchar y,uchar date);

void lcd_xieping(uchar x,uchar y,uchar *str);

// 開機顯示

void kjxs()

lcd_xieping(3,0," ");}}

// 12864顯示

void write_cmd(uchar cmd)

void write_dat(uchar dat)

void lcd_xieping0(uchar x,uchar y,uchar date)

write_dat(date);

}void lcd_xieping(uchar x,uchar y,uchar *str)

while (*str)

}void lcd_init()

// 鍵盤掃描函式

uchar keyscan1() //矩陣鍵盤掃描函式

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)

//等待按鍵釋放}}

}return(num); //返回值

}uchar keyscan2()

while(temp!=0xf0)

//等待按鍵釋放}}

}return(num1);

// 直流電機

void dianjizz()

void dianjifz()

void dianji_stop()

// epprom

void start() //啟動訊號

void stop() //停止訊號

void respons() //響應訊號

void writebyte(uchar date) //寫一個位元組

scl=0;

delay();

sda=1; //釋放匯流排

delay();

}uchar readbyte() //讀一個位元組

delay();

return(k);

}void write(uchar add,uchar date) //在一個地址寫一個位元組

uchar read(uchar add) //在一個地址讀一個位元組

// 時間日期函式

void v_wtinputbyte(uchar ucda)

}uchar uc_rtoutputbyte(void)

return(acc);

}void v_w1302(uchar ucaddr, uchar ucda)

uchar uc_r1302(uchar ucaddr)

void init1302(void)

void donetime(void)

// 溫度檢測函式

void dsreset(void) //18b20復位,初始化函式

bit tempreadbit(void) //讀1位函式

uchar tempread(void) //讀1個位元組

return(dat);

}void tempwritebyte(uchar dat) //向18b20寫一個位元組資料

else}}

void tempchange(void) //ds18b20 開始獲取溫度並轉換

void get_temp() //讀取暫存器中儲存的溫度資料

// 解密函式

void unlock()

//輸密碼

}in=keyscan1();

if(in==12)//in-確定鍵標誌位

else}}

// 修改密碼函式

void xiugaimima()

im=keyscan1();

if(im==12)//im,in,ib,同為確定鍵標誌位

}ib=keyscan1();

if(ib==12)

//24c08寫資料

delay_ms(1000);

}else}}

// 顯示函式

void xianshi()

// 開鎖函式

void kaisuo()

dianjizz();

delay_ms(10000);

dianji_stop();

lcd_xieping(2,0,"—開鎖過程結束—");

lcd_xieping(3,0," 請開門 ");

delay_ms(5000);

dianjifz();

delay_ms(10000);

dianji_stop();

flag=0;

// 主函式

void main()

//24c08讀資料

while(1)

else

if(flag==1)

if(a==2)}}}

基於51微控制器轉速測量的程式,望高手幫我解釋一下。

include include define fosc unsigned int speed unsigned char key unsigned char led table 10 long speed count,speed count1 unsigned char speed check un...

51微控制器外部中斷實驗程式,51微控制器外部中斷實驗程式

做51微控制器外部中斷實驗,應該有主程式 中斷服務程式。樓主所說這些的亮滅,那些的主程式的?那些是中斷程式的?請問你這個觸發中斷是一個按鍵?你觸發的方式是長時間按下還是瞬間按下?我覺得你應該是長時間按下的。回到正題,你這個中斷服務函式裡只有一句 那麼中斷服務函式執行的速度會很快的,所以如果你只按了一...

基於51微控制器的交通燈控制設計,基於51微控制器控制交通燈的電路圖與C語言程式

這個設計完了 可以在proteus下 的啊 可以交流 include define uchar unsigned char define uint unsigned intsbit red a p0 0 東西向燈sbit yellow a p0 1 sbit green a p0 2 sbit re...