日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式大雜燴
[導(dǎo)讀]作者| strongerHuang微信公眾號|嵌入式專欄這是一款基于AVR128DA48的超低功耗LCD時鐘,能夠使用CR2032紐扣電池或太陽能電池運(yùn)行三年以上:它使用AVR128DA48的片上溫度傳感器,用ADC讀取其自身的電源電壓。還有一個I2C接口,你可以連接一...




作者 | strongerHuang


微信公眾號 | 嵌入式專欄



這是一款基于 AVR128DA48 的超低功耗 LCD 時鐘,能夠使用 CR2032 紐扣電池或太陽能電池運(yùn)行三年以上:



它使用 AVR128DA48 的片上溫度傳感器,用 ADC 讀取其自身的電源電壓。還有一個 I2C 接口,你可以連接一個外部傳感器,如濕度傳感器。
介紹


盡管LCD液晶顯示是相對較舊的技術(shù),但與新型顯示器相比,它們?nèi)跃哂卸囗?xiàng)優(yōu)勢,包括低功耗、低成本和可讀性。
1.硬件電路LCD 時鐘的電路:


基于 AVR128DA48單片機(jī)





LCD顯示LCD顯示器為四位七段靜態(tài)LCD,40引腳,可顯示溫濕度,LCD 顯示器安裝在電路板的正面,元件在背面。



MCU處理器該處理器是采用 TQFP-48 封裝的 AVR128DA48,但該 PCB 可與一系列其他 48 引腳處理器配合使用,比如選擇內(nèi)存容量更低、價格更低的一些MCU代替。



電池(電源)
這里采用CR2032 或類似電池為其供電,或者使用太陽能電池,附加超級電容來供電:



I2C接口為方便擴(kuò)展,這里添加了I2C接口,這里可以添加溫濕度傳感器,或者其他I2C從設(shè)備。

源碼


這里先分享一些主要源碼內(nèi)容,最后提供源碼鏈接。
1.IO配置
void PortSetup () { for (int p=0; p<4; p ) Digit[p]->DIR = 0xFF; // All pins outputs PORTE.DIR = PIN0_bm | PIN1_bm; // COMs outputs, PE0 and PE1 PORTF.DIR = PIN5_bm | PIN4_bm; // 1A, colon}
2.時鐘這里節(jié)省成本,并非使用時鐘芯片或模塊,用單片機(jī)定時器計(jì)數(shù)實(shí)現(xiàn)時鐘的功能。
利用定時器中斷實(shí)現(xiàn)時鐘計(jì)數(shù)、更新:
ISR(RTC_PIT_vect) { static uint8_t cycles = 0; static unsigned long halfsecs; RTC.PITINTFLAGS = RTC_PI_bm; // Clear interrupt flag // Toggle segments for (int p=0; p<4; p ) Digit[p]->OUTTGL = 0xFF; // Toggle all PORTA,B,C,D pins PORTE.OUTTGL = PIN0_bm | PIN1_bm; // Toggle COMs, PE0 and PE1 PORTF.OUTTGL = PIN5_bm | PIN4_bm; // Toggle segment 1A, Colon
cycles ; if (cycles < 32) return; cycles = 0;
// Update time halfsecs = (halfsecs 1) % 172800; // 24 hours uint8_t ticks = halfsecs % 120; // Half-second ticks if (MinsButton()) halfsecs = ((halfsecs/7200)*60 (halfsecs/120 1)%60)*120; if (HoursButton()) halfsecs = halfsecs 7200;
if (MinsButton() || HoursButton() || ticks < 108) DisplayTime(halfsecs); else if (ticks == 108) DisplayVoltage(); else if (ticks == 114) DisplayTemp();}
3.顯示時間LCD顯示部分就LCD有關(guān):
void DisplayTime (unsigned long halfsecs) { uint8_t minutes = (halfsecs / 120) % 60; #ifdef TWELVEHOUR uint8_t hours = (halfsecs / 7200) % 12 1; #else uint8_t hours = (halfsecs / 7200) % 24; #endif Digit[0]->OUT = Char[hours/10]; Digit[1]->OUT = Char[hours%10]; Digit[2]->OUT = Char[minutes/10]; uint8_t units = Char[minutes%10]; Digit[3]->OUT = units; uint8_t colon = (halfsecs
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉