【項(xiàng)目15-任務(wù)20-小組18】按鍵調(diào)表

項(xiàng)目15-任務(wù)20-小組18

DS3231?+?LCD顯示?+?按鍵調(diào)表(畫出電路圖屯烦,寫出包含完整注釋的代碼舔株,連接幾個(gè)按鍵洁灵,實(shí)現(xiàn)從運(yùn)行狀態(tài)到調(diào)表狀態(tài)切換饱岸、年月日時(shí)分秒字段的切換、數(shù)值的增減等)


LCD1602

工業(yè)字符型液晶徽千,能夠同時(shí)顯示16x02即32個(gè)字符苫费。(16列2行)1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)双抽。

1602液晶也叫1602字符型液晶百框,它是一種專門用來顯示字母、數(shù)字牍汹、符號等的點(diǎn)陣型液晶模塊铐维。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符慎菲,每位之間有一個(gè)點(diǎn)距的間隔嫁蛇,每行之間也有間隔,起到了字符間距和行間距的作用露该,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形睬棚。


LCD實(shí)物圖
LCD引腳圖

LCD引腳說明

第1腳:VSS為電源地

第2腳:VCC接5V電源正極

第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱解幼,接地電源時(shí)對比度最高(對比度過高時(shí)會

產(chǎn)生“鬼影”抑党,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度)。

第4腳:RS為寄存器選擇书幕,高電平1時(shí)選擇數(shù)據(jù)寄存器新荤、低電平0時(shí)選擇指令寄存器。

第5腳:RW為讀寫信號線台汇,高電平(1)時(shí)進(jìn)行讀操作苛骨,低電平(0)時(shí)進(jìn)行寫操作篱瞎。

第6腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳變時(shí)執(zhí)行指令痒芝。

第7~14腳:D0~D7為8位雙向數(shù)據(jù)端俐筋。

第15~16腳:空腳或背燈電源。15腳背光正極严衬,16腳背光負(fù)極澄者。

按鍵調(diào)表實(shí)驗(yàn)


fritzing電路圖

實(shí)驗(yàn)代碼

#include <DS3231.h> //時(shí)鐘模塊的庫

#include <LiquidCrystal.h> //1602庫文件

#define Key1 8 //設(shè)置按鍵

#define Key2 9 //加按鍵

#define Key3 10 //減按鍵

LiquidCrystal lcd(7,6,5,4,3,2); //定義1602腳位

DS3231 Clock;

byte count = 0; //設(shè)置按鍵按下次數(shù)

bool Century=false;

bool h12;

bool APM;

byte year, month, date, hour, minute, second; //時(shí)間變量

void setup() {

Wire.begin(); //IIC初始化

lcd.begin(16,2); //1602初始化

Serial.begin(115200); //串口波特率115200

pinMode(Key1,INPUT_PULLUP);

pinMode(Key2,INPUT_PULLUP); //按鍵設(shè)置為輸入上拉模式,默認(rèn)高電平 pinMode(Key3,INPUT_PULLUP);

}

void loop() { //主程序

KeyPress(); //按鍵掃描

if(count==0){ //如果設(shè)置鍵未按下

ReadDS3231(); //正常走時(shí)

}

}

void LIMIT(byte &x,byte Min,byte Max) //用于限制最大最小值

{

if(x < Min)x = Max;

else if(x > Max)x = Min;

else x;

}

void KeyPress() //按鍵掃描

{ if(!digitalRead(Key1)) //設(shè)置按鍵按下

{ delay(5); //消抖

if(!digitalRead(Key1))

{

count>5 ? count=0 : count++; //計(jì)數(shù)值+1请琳,最大到6

switch(count){

case1:lcd.clear();lcd.setCursor(0,0);lcd.print("SetYear");lcd.setCursor(9,0);lcd.print(2000+year);break; //顯示界面相應(yīng)變化

case2:lcd.clear();lcd.setCursor(0,0);lcd.print("SetMonth");lcd.setCursor(9,0);lcd.print(month);break;

case3:lcd.clear();lcd.setCursor(0,0);lcd.print("SetDate");lcd.setCursor(9,0);lcd.print(date);break;

case4:lcd.clear();lcd.setCursor(0,0);lcd.print("SetHour");lcd.setCursor(9,0);lcd.print(hour);break;

case5:lcd.clear();lcd.setCursor(0,0);lcd.print("SetMinu");lcd.setCursor(9,0);lcd.print(minute);break;

case6:lcd.clear();lcd.setCursor(0,0);lcd.print("SetSec");lcd.setCursor(9,0);lcd.print(second);break;

default:Clock.setYear(year); //將調(diào)整后的時(shí)間寫到時(shí)鐘芯片中

Clock.setMonth(month);

Clock.setDate(date);

Clock.setHour(hour);

Clock.setMinute(minute);

Clock.setSecond(second);

break;

}

while(!digitalRead(Key1)); //等待松開按鍵

}

}

if(!digitalRead(Key2)) //+按鍵按下

{

delay(5);

if(!digitalRead(Key2))

{

switch(count){

case1:year++;LIMIT(year,0,99);lcd.clear();lcd.setCursor(0,0);lcd.print("SetYear");lcd.setCursor(9,0);lcd.print(2000+year);break;//年份+1并顯示

case2:month++;LIMIT(month,1,12);lcd.clear();lcd.setCursor(0,0);lcd.print("SetMonth");lcd.setCursor(9,0);lcd.print(month);break; //月份+1粱挡,以下同理

case3:date++;LIMIT(date,1,31);lcd.clear();lcd.setCursor(0,0);lcd.print("SetDate");lcd.setCursor(9,0);lcd.print(date);break;

case4:hour++;LIMIT(hour,0,23);lcd.clear();lcd.setCursor(0,0);lcd.print("SetHour");lcd.setCursor(9,0);lcd.print(hour);break;

case5:minute++;LIMIT(minute,0,59);lcd.clear();lcd.setCursor(0,0);lcd.print("SetMinu");lcd.setCursor(9,0);lcd.print(minute);break;

case6:second++;LIMIT(second,0,59);lcd.clear();lcd.setCursor(0,0);lcd.print("SetSec");lcd.setCursor(9,0);lcd.print(second);break; default:break; }

while(!digitalRead(Key2));

}

}

if(!digitalRead(Key3)) //-按鍵按下

{

delay(5);

if(!digitalRead(Key3))

{

switch(count){

case1:year-;LIMIT(year,0,99);lcd.clear();lcd.setCursor(0,0);lcd.print("SetYear");lcd.setCursor(9,0);lcd.print(2000+year);break;//年份-1并顯示,以下同理

case2:month-;LIMIT(month,1,12);lcd.clear();lcd.setCursor(0,0);lcd.print("SetMonth");lcd.setCursor(9,0);lcd.print(month);break;

case3:date-;LIMIT(date,1,31);lcd.clear();lcd.setCursor(0,0);lcd.print("SetDate");lcd.setCursor(9,0);lcd.print(date);break;

case4:hour-;LIMIT(hour,0,23);lcd.clear();lcd.setCursor(0,0);lcd.print("SetHour");lcd.setCursor(9,0);lcd.print(hour);break;

case5:minute-;LIMIT(minute,0,59);lcd.clear();lcd.setCursor(0,0);lcd.print("SetMinu");lcd.setCursor(9,0);lcd.print(minute);break;

case6:second-;LIMIT(second,0,59);lcd.clear();lcd.setCursor(0,0);lcd.print("SetSec");lcd.setCursor(9,0);lcd.print(second);break; default:break; }

while(!digitalRead(Key3));

}}

}

void ReadDS3231() //從時(shí)鐘芯片讀取時(shí)間

{

second=Clock.getSecond();

minute=Clock.getMinute();

hour=Clock.getHour(h12,APM);

date=Clock.getDate();

month=Clock.getMonth(Century);

year=Clock.getYear();

lcd.clear(); //清屏幕

lcd.setCursor(3,0); //設(shè)置顯示位置

lcd.print(2000+year); //顯示年份俄精,以下同理

lcd.print('-');

lcd.print(month);

lcd.print('-');

lcd.print(date);

lcd.setCursor(4,1);

lcd.print(hour);

lcd.print(':');

lcd.print(minute);

lcd.print(':');

lcd.print(second);

Serial.print("20"); //串口輸出時(shí)間询筏,方便調(diào)試程序,可以刪除

Serial.print(year,DEC);

Serial.print('-');

Serial.print(month,DEC);

Serial.print('-');

Serial.print(date,DEC);

Serial.print(' ');

Serial.print(hour,DEC);

Serial.print(':');

Serial.print(minute,DEC);

Serial.print(':');

Serial.print(second,DEC);

Serial.print('\n'); delay(250); //延時(shí)800毫秒竖慧,防止屏幕刷新太快顯示不清楚

}


實(shí)驗(yàn)成果


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫌套,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子圾旨,更是在濱河造成了極大的恐慌踱讨,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砍的,死亡現(xiàn)場離奇詭異痹筛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)挨约,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門味混,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诫惭,你說我怎么就攤上這事翁锡。” “怎么了夕土?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵馆衔,是天一觀的道長。 經(jīng)常有香客問我怨绣,道長角溃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任篮撑,我火速辦了婚禮减细,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赢笨。我一直安慰自己未蝌,他們只是感情好驮吱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萧吠,像睡著了一般左冬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纸型,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天拇砰,我揣著相機(jī)與錄音,去河邊找鬼狰腌。 笑死除破,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的癌别。 我是一名探鬼主播皂岔,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼展姐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剖毯,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤圾笨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后逊谋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擂达,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年胶滋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了板鬓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡究恤,死狀恐怖俭令,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情部宿,我是刑警寧澤抄腔,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站理张,受9級特大地震影響赫蛇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雾叭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一悟耘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧织狐,春花似錦暂幼、人聲如沸掘殴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奏寨。三九已至,卻和暖如春鹰服,著一層夾襖步出監(jiān)牢的瞬間病瞳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工悲酷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留套菜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓设易,卻偏偏與公主長得像逗柴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子顿肺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容