是照著清翔微控制器資源改過來的.(大一剛來時 人生買的第乙個開發板)
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標識,成功修改後,紅綠指示燈會同時閃爍 在輸入密碼正確後,綠色指示燈點亮,舵機啟...