stc12 密碼鎖 基於EEPROM

2021-09-21 17:40:23 字數 3222 閱讀 9230

是照著清翔微控制器資源改過來的.(大一剛來時 人生買的第乙個開發板)

i2c.c

#include"i2c.h"

#include"lcd12864.h"

bit ack; //用於暫存應答位的值

uchar ad_value; //儲存ad轉換回的數字量

void delay5us()

void delay1us()

void i2c_init()

void i2c_start()

void i2c_stop()

/************************************=

函式:master_ack(bit i)

引數:i 為0時傳送非應答 為1時傳送應答

描述:i2c主機傳送應答

***********************************=*/

void master_ack(bit i)

else

delay1us();//穩定

scl=1; //拉高scl,讓從機從sda上讀走主機的應答訊號

delay1us();

scl=0; //拉低scl,占用匯流排繼續通訊

delay1us();

sda=1;

delay1us(); //釋放資料

}bit test_ack()

else }

bit i2c_write_byte(uchar dat) //i2c匯流排寫(傳送send)操作,dat為待寫入位元組,返回值為從機應答位的值

sda=1; //8位資料傳送完後,主機釋放sda,以檢測從機應答。

delay5us();

ack=sda; //讀取此時的sda值,即為從機的應答值

delay5us();

scl=0; //再拉低scl完成應答位,並保持住匯流排

return 0;}

uchar i2c_read_byte() //i2c匯流排讀取乙個位元組

delay5us();

scl=1; //拉高scl

delay5us();

scl=0; //再拉低scl完成非應答位,並保持住匯流排

return dat;

} bit i2c_transmitdata(unsigned char addr, dat) /*eeprom傳送資料*/

i2c_write_byte(addr);

if (!test_ack())

i2c_write_byte(dat);

if (!test_ack())

i2c_stop();

return(1);

}/*eeprom接收資料*/

uchar i2c_receivedata(unsigned char addr)

i2c_write_byte(addr);

master_ack(0);

i2c_start();

i2c_write_byte(0xa1);

if (!test_ack())

dat = i2c_read_byte();

master_ack(0);

i2c_stop();

return(dat);

} /*dac輸出*/

/*bit dac_out(uchar dat)

*//*讀ad資料

輸入引數 con 表示需要轉換的通道,範圍從0-3

返回值範圍0-255

*/uchar adc_read(uchar con)

i2c_write_byte(0x40|con);

master_ack(0);

i2c_start();

i2c_write_byte(addrd);

if (!test_ack())

ad_value = i2c_read_byte();

master_ack(0);

i2c_stop();

return ad_value;

}

按鍵程式在這:

主程式

#include"lcd12864.h"

#include"key.h"

#include"i2c.h"

uchar old1,old2,old3; //定義初始密碼

uchar new1,new2,new3; //用於設定儲存新密碼

bit allow,genggai,ok=0,wanbi,retry,close; //各個狀態位

uchar key,wei; //wei用於每位密碼儲存位判斷

void ks()

if(key_v==2)

if(key_v==3)

if(key_v==5)

if(key_v==6)

if(key_v==7)

if(key_v==9)

if(key_v==10)

if(key_v==11)

if(key_v==13)

if(key_v==4) //s4用於更密碼

if(key_v==8) //s8更改完密碼後確認

if(key_v==12) //重試密碼

if(key_v==16) //取消輸入密碼

} }}void shumima()

}}void yanzheng()

else dis(0,3,"密碼錯誤!"); }}

void chushimima()

void dis1()

void mimafc() //密碼功能模組

if(genggai) //當s4按下時更改密碼}}

} if(ok) //更改完密碼按下此鍵會顯示開鎖成功

if(retry) //當重試按鍵被按下,retry會被置位

if(close) //當關閉密碼鎖按鍵被按下,close會被置位

}void main()

}

話說我一直沒嘗試加過游標閃爍之類的指示,感覺麻煩些,而且最近一直沒用51寫東西作開發了。都是以前寫的舊模組,分享給大一和別的學校同學用

基於ATMEGA128的密碼鎖

密碼鎖題目要求 使用微控制器實現簡易密碼鎖,通過輸入密碼,實現門鎖的開啟 控制繼電器 具體要求如下 1 當輸入正確密碼後,繼電器開啟。2 當三次輸入錯誤密碼後,密碼鎖禁止輸入 10 秒鐘,並進行相應的提示。3 在輸入正確的密碼後,可修改密碼和查詢 清除門開啟的次數。4 自製繼電器電路模組。5 實現密...

uoj 181 UR 12 密碼鎖 搜尋

給出一張 n n 個點的完全圖,現在要給這個完全圖的每一條邊隨機定向成乙個有向圖。對於一條邊 i j i role presentation style position relative i,j i i,j i,這條邊的方向是 i i 到j role presentation style posi...

基於51微控制器的密碼鎖

本次的專案是基於51微控制器的密碼鎖,適合用來作為課程設計 主要實現了 密碼鎖功能,通過矩陣按鍵輸入密碼,輸入範圍為0 f,共有四位 同時,也可以使用更改按鍵更改密碼,在更改時需要輸入原密碼來進入更改模式,四位密碼顯示h標識,成功修改後,紅綠指示燈會同時閃爍 在輸入密碼正確後,綠色指示燈點亮,舵機啟...