1)設(shè)計(jì)任務(wù):設(shè)計(jì)一個(gè)能?顯示當(dāng)前的年、月、日、時(shí)、分、秒,具有鬧鐘功能的的電子時(shí)鐘。
2)指標(biāo)要求
(1)可實(shí)現(xiàn)12小時(shí)制和24小時(shí)制轉(zhuǎn)換。
(2)年、月、日、時(shí)、分均可以單獨(dú)設(shè)置,設(shè)置時(shí)該項(xiàng)目閃爍。?
(3)計(jì)時(shí)精度誤差:≤1秒/日。
(4)液晶顯示。?
(5)能實(shí)現(xiàn)鬧鐘功能。
(6)電源:1節(jié)5號(hào)干電池(1.5V)。
一、Protues仿真圖(添加溫度顯示功能):
二、Protues仿真圖(12-24進(jìn)制轉(zhuǎn)換):
三、程序源碼(添加溫度顯示功能):
因?yàn)樽⑨尫浅5娜@里就不再進(jìn)行講解了。
/*******************************************************************************
================================================================================
【平 臺(tái)】STC89C51平臺(tái)
【編 寫】Sumjess
【E-mail 】1371129880@qq.com
【軟件版本】V2.0
【最后更新】2018年09月06日
【相關(guān)信息參考下列地址】
【網(wǎng) 站】
Sumejss博客 https://blog.csdn.net/qq_38351824
電子發(fā)燒友 http://bbs.elecfans.com/zhuti_mcu_1.html
中國電子網(wǎng) http://bbs.21ic.com/icfilter-typeid-11-214.html
---------------------------------------------------------------------------------
【dev.env.】MDK4.14及以上版本
【Target 】STC89C51
第一次修訂:2019/05/23
第二次修訂:2018/05/24
第三次修訂:2018/05/26
================================================================================
********************************************************************************/
#include #define uchar unsigned char //無符號(hào)字符型 宏定義 變量范圍0~255 #define uint unsigned int //無符號(hào)整型 宏定義 變量范圍0~65535 #include "E2PROM52_Sumjess.h" #include "Dateconversion_Sumjess.h" #include "intrins.h" bit flag_200ms ; bit flag_100ms ; sbit beep = P1^4; //蜂鳴器定義 bit flag_beep_en; uint clock_value; //用作鬧鐘用的 sbit dq = P2^0; //18b20 IO口的定義 uint temperature ; //溫度變量 uchar flag_nl; //農(nóng)歷 陽歷顯示標(biāo)志位 uchar menu_1,menu_2; uchar key_time,flag_value; //用做連加的中間變量 bit key_500ms ; uchar n_nian,n_yue,n_ri; //農(nóng)歷顯示的函數(shù) #include "DS1302_Sumjess.h" #include "LCD1602_Sumjess.h" /******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/ void write_eeprom() { SectorErase(0x2000); byte_write(0x2000, fen1); byte_write(0x2001, shi1); byte_write(0x2002, open1); byte_write(0x2058, a_a); } /******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來*****************/ void read_eeprom() { fen1 = byte_read(0x2000); shi1 = byte_read(0x2001); open1 = byte_read(0x2002); a_a = byte_read(0x2058); } /**************開機(jī)自檢eeprom初始化*****************/ void init_eeprom() { read_eeprom(); //先讀 if(a_a != 1) //新的單片機(jī)初始單片機(jī)內(nèi)問eeprom { fen1 = 3; shi1 = 8; open1 = 1; a_a = 1; write_eeprom(); //保存數(shù)據(jù) } } /***********************18b20初始化函數(shù)*****************************/ void init_18b20() { bit q; dq = 1; //把總線拿高 delay_uint(1); //15us dq = 0; //給復(fù)位脈沖 delay_uint(80); //750us dq = 1; //把總線拿高 等待 delay_uint(10); //110us q = dq; //讀取18b20初始化信號(hào) delay_uint(20); //200us dq = 1; //把總線拿高 釋放總線 } /*************寫18b20內(nèi)的數(shù)據(jù)***************/ void write_18b20(uchar dat) { uchar i; for(i=0;i<8;i++) { //寫數(shù)據(jù)是低位開始 dq = 0; //把總線拿低寫時(shí)間隙開始 dq = dat & 0x01; //向18b20總線寫數(shù)據(jù)了 delay_uint(5); // 60us dq = 1; //釋放總線 dat >>= 1; } } /*************讀取18b20內(nèi)的數(shù)據(jù)***************/ uchar read_18b20() { uchar i,value; for(i=0;i<8;i++) { dq = 0; //把總線拿低讀時(shí)間隙開始 value >>= 1; //讀數(shù)據(jù)是低位開始 dq = 1; //釋放總線 if(dq == 1) //開始讀寫數(shù)據(jù) value |= 0x80; delay_uint(5); //60us 讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間 } return value; //返回?cái)?shù)據(jù) } /*************讀取溫度的值 讀出來的是小數(shù)***************/ uint read_temp() { uint value; uchar low; //在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到18b20的時(shí)序 init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過64位ROM write_18b20(0x44); //啟動(dòng)一次溫度轉(zhuǎn)換命令 delay_uint(50); //500us init_18b20(); //初始化18b20 write_18b20(0xcc); //跳過64位ROM write_18b20(0xbe); //發(fā)出讀取暫存器命令 EA = 0; low = read_18b20(); //讀溫度低字節(jié) value = read_18b20(); //讀溫度高字節(jié) EA = 1; value <<= 8; //把溫度的高位左移8位 value |= low; //把讀出的溫度低位放到value的低八位中 value *= 0.625; //轉(zhuǎn)換到溫度值 小數(shù) return value; //返回讀出的溫度 帶小數(shù) } ----由于篇幅的問題,只顯示一部分,請(qǐng)下載后自行觀看,程序非常的全----- -----關(guān)注公眾號(hào)免費(fèi)下載----- 四、程序源碼(12-24進(jìn)制轉(zhuǎn)換): 因?yàn)樽⑨尫浅5娜@里就不再進(jìn)行講解了。 /******************************************************************************* ================================================================================ 【平 臺(tái)】STC89C51平臺(tái) 【編 寫】Sumjess 【E-mail 】1371129880@qq.com 【軟件版本】V2.0 【最后更新】2018年09月06日 【相關(guān)信息參考下列地址】 【網(wǎng) 站】 Sumejss博客 https://blog.csdn.net/qq_38351824 電子發(fā)燒友 http://bbs.elecfans.com/zhuti_mcu_1.html 中國電子網(wǎng) http://bbs.21ic.com/icfilter-typeid-11-214.html --------------------------------------------------------------------------------- 【dev.env.】MDK4.14及以上版本 【Target 】STC89C51 第一次修訂:2019/05/23 第二次修訂:2018/05/24 第三次修訂:2018/05/26 ================================================================================ ********************************************************************************/ #include #define uchar unsigned char //無符號(hào)字符型 宏定義 變量范圍0~255 #define uint unsigned int //無符號(hào)整型 宏定義 變量范圍0~65535 #include "E2PROM52_Sumjess.h" #include "Dateconversion_Sumjess.h" #include "intrins.h" bit flag_200ms ; bit flag_100ms ; sbit beep = P1^4; //蜂鳴器定義 bit flag_beep_en; uint clock_value; //用作鬧鐘用的 uchar flag_nl,flag_n2; //農(nóng)歷 陽歷顯示標(biāo)志位 uchar menu_1,menu_2; uchar key_time,flag_value; //用做連加的中間變量 bit key_500ms ; uchar n_nian,n_yue,n_ri; //農(nóng)歷顯示的函數(shù) #include "DS1302_Sumjess.h" #include "LCD1602_Sumjess.h" /******************把數(shù)據(jù)保存到單片機(jī)內(nèi)部eeprom中******************/ void write_eeprom() { SectorErase(0x2000); byte_write(0x2000, fen1); byte_write(0x2001, shi1); byte_write(0x2002, open1); byte_write(0x2058, a_a); } /******************把數(shù)據(jù)從單片機(jī)內(nèi)部eeprom中讀出來*****************/ void read_eeprom() { fen1 = byte_read(0x2000); shi1 = byte_read(0x2001); open1 = byte_read(0x2002); a_a = byte_read(0x2058); } /**************開機(jī)自檢eeprom初始化*****************/ void init_eeprom() { read_eeprom(); //先讀 if(a_a != 1) //新的單片機(jī)初始單片機(jī)內(nèi)問eeprom { fen1 = 3; shi1 = 8; open1 = 1; a_a = 1; write_eeprom(); //保存數(shù)據(jù) } } /******************1ms 延時(shí)函數(shù)*******************/ void delay_1ms(uint q) { uint i,j; for(i=0;i } /******************寫星期函數(shù)*******************/ void write_week(uchar hang,uchar add,uchar week)//寫星期函數(shù) { if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); switch(week) { case 1:write_data('M');//星期數(shù)為1時(shí),顯示 write_data('O'); write_data('N'); break; case 2:write_data('T');//星期數(shù)據(jù)為2時(shí)顯示 write_data('U'); write_data('E'); break; case 3:write_data('W');//星期數(shù)據(jù)為3時(shí)顯示 write_data('E'); write_data('D'); break; case 4:write_data('T');//星期數(shù)據(jù)為4是顯示 write_data('H'); write_data('U'); break; case 5:write_data('F');//星期數(shù)據(jù)為5時(shí)顯示 write_data('R'); write_data('I'); break; case 6:write_data('S');//星期數(shù)據(jù)為6時(shí)顯示 write_data('T'); write_data('A'); break; case 7:write_data('S');//星期數(shù)據(jù)為7時(shí)顯示 write_data('U'); write_data('N'); break; } } /*************時(shí)鐘顯示***************/ void init_1602_ds1302() { if(flag_n2 == 0) //顯示24 { write_sfm2_ds1302(1,1,shi); //顯示時(shí) write_sfm2_ds1302(1,4,fen); //顯示分 write_sfm2_ds1302(1,7,miao); //顯示秒 write_week(2,12,week); } else { if(shi==0x20) shi=0x08; else if(shi==0x13) shi=0x01; else if(shi==0x14) shi=0x02; else if(shi==0x15) shi=0x03; else if(shi==0x16) shi=0x04; else if(shi==0x17) shi=0x05; else if(shi==0x18) shi=0x06; else if(shi==0x19) shi=0x07; else if(shi==0x21) shi=0x09; else if(shi==0x22) shi=0x10; else if(shi==0x23) shi=0x11; write_sfm2_ds1302(1,1,shi); //顯示時(shí) write_sfm2_ds1302(1,4,fen); //顯示分 write_sfm2_ds1302(1,7,miao); //顯示秒 write_week(2,12,week); } if(flag_nl == 0) //顯示陽歷 { write_sfm2_ds1302(2,2,nian); //顯示年 write_sfm2_ds1302(2,5,yue); //顯示月 write_sfm2_ds1302(2,8,ri); //顯示日 } else //顯示農(nóng)歷 { write_sfm2_ds1302(2,2,n_nian); //顯示年 write_sfm2_ds1302(2,5,n_yue); //顯示月 write_sfm2_ds1302(2,8,n_ri); //顯示日 } } /*************定時(shí)器0初始化程序***************/ void init_time0() { EA = 1; //開總中斷 TMOD = 0X01; //定時(shí)器0、工作方式1 ET0 = 1; //開定時(shí)器0中斷 TR0 = 1; //允許定時(shí)器0定時(shí) } /*************鬧鐘報(bào)警函數(shù)***************/ void menu_dis() { static uchar mm,value; if(flag_100ms == 1) //100ms執(zhí)行一次 { flag_100ms = 0; if(open1 == 1) //如果鬧鐘打開 { if((miao == 0) && (fen == fen1) && (shi == shi1)) { flag_beep_en = 1; //有報(bào)警 打開蜂鳴器響的標(biāo)志位 } if(flag_beep_en == 1) //鬧鐘以被打開 { clock_value++; if(clock_value <= 30) beep = ~beep; //蜂鳴器叫3秒 else if(clock_value > 30) { beep = 1; //蜂鳴器停1秒 if(clock_value > 40) { clock_value = 0; } } // 1 分鐘后自動(dòng)關(guān)閉鬧鐘 value ++; if(value >= 10) { value = 0; mm++; if(mm >= 60) { mm = 0; for(j=0;j<120;j++);
上一篇:課程設(shè)計(jì)題二:7人多數(shù)表決器
下一篇:課程設(shè)計(jì)題一:八人搶答器
推薦閱讀
史海拾趣
隨著國內(nèi)市場的逐漸飽和,Don Connex Electronics開始尋求海外市場的拓展。公司組建了一支專業(yè)的國際市場團(tuán)隊(duì),積極參加國際電子展會(huì),與國際客戶建立聯(lián)系。通過不斷努力,公司成功打入歐洲和北美市場,并與多家國際知名企業(yè)建立了長期合作關(guān)系。這一舉措不僅提升了公司的品牌影響力,也極大地促進(jìn)了公司的銷售業(yè)績。
作為薄膜開關(guān)的先驅(qū)和專家,EECO Switch公司在該領(lǐng)域擁有超過30年的豐富經(jīng)驗(yàn)。公司憑借其精湛的制造工藝和嚴(yán)格的品質(zhì)控制,成功打造出了眾多優(yōu)質(zhì)的薄膜開關(guān)產(chǎn)品。這些產(chǎn)品廣泛應(yīng)用于醫(yī)療設(shè)備、航空電子設(shè)備、軍用產(chǎn)品和工業(yè)控制等領(lǐng)域,贏得了眾多客戶的信任和好評(píng)。
品質(zhì)是電子行業(yè)的生命線,BCD Semi公司深知這一點(diǎn)。因此,公司始終將品質(zhì)管理放在首位,建立了完善的品質(zhì)管理體系和質(zhì)量控制流程。公司從原材料采購、生產(chǎn)制造到產(chǎn)品出廠,每一個(gè)環(huán)節(jié)都進(jìn)行嚴(yán)格的質(zhì)量把控,確保產(chǎn)品的高品質(zhì)和穩(wěn)定性。同時(shí),BCD Semi還不斷引進(jìn)先進(jìn)的生產(chǎn)設(shè)備和技術(shù),優(yōu)化生產(chǎn)流程,提高生產(chǎn)效率,為客戶提供更優(yōu)質(zhì)的產(chǎn)品和服務(wù)。
面對(duì)電子行業(yè)供應(yīng)鏈日益復(fù)雜的挑戰(zhàn),F(xiàn)lamar公司高度重視供應(yīng)鏈管理和優(yōu)化工作。公司通過引入先進(jìn)的供應(yīng)鏈管理系統(tǒng),實(shí)現(xiàn)了對(duì)原材料采購、生產(chǎn)制造、物流配送等各個(gè)環(huán)節(jié)的精準(zhǔn)控制。同時(shí),公司還積極與上下游企業(yè)建立長期穩(wěn)定的合作關(guān)系,共同構(gòu)建高效的供應(yīng)鏈生態(tài)體系。這些措施有效降低了公司的運(yùn)營成本,提高了生產(chǎn)效率和產(chǎn)品質(zhì)量,進(jìn)一步增強(qiáng)了公司的市場競爭力。
隨著全球?qū)Νh(huán)保問題的日益關(guān)注,Elcoma公司也積極響應(yīng),將環(huán)保理念融入到企業(yè)的發(fā)展戰(zhàn)略中。他們采用環(huán)保材料和工藝,減少生產(chǎn)過程中的污染排放,同時(shí)推出了一系列環(huán)保型電子產(chǎn)品,滿足消費(fèi)者對(duì)環(huán)保產(chǎn)品的需求。這種對(duì)環(huán)保的重視不僅提升了Elcoma的品牌形象,也為企業(yè)帶來了可持續(xù)發(fā)展的動(dòng)力。
隨著電子設(shè)備的日益復(fù)雜,對(duì)內(nèi)部連接件的要求也越來越高。Deltrol Controls意識(shí)到,傳統(tǒng)的連接方式已經(jīng)無法滿足行業(yè)的需求。為此,公司投入大量資金研發(fā)新型軟管組件,該組件不僅具有優(yōu)異的耐溫、耐壓性能,而且安裝簡便、維護(hù)方便。這一突破性的產(chǎn)品迅速贏得了客戶的青睞,Deltrol Controls在電子行業(yè)的影響力也進(jìn)一步擴(kuò)大。
RS232 起始位 停止位 校驗(yàn)位 需要自己實(shí)現(xiàn)嗎? ModBus幀格式為:從機(jī)地址(1字節(jié)),功能碼(1字節(jié)),起始地址(2字節(jié)),數(shù)據(jù)長度(2字節(jié)),CRC碼(2字節(jié)) 然后數(shù)據(jù)傳輸方式規(guī)定為串行異步:1位起始位,8位數(shù)據(jù)位,1偶校驗(yàn)位,1位停止位。 我的疑問是: 1)CRC只對(duì)數(shù)據(jù)位進(jìn)行校驗(yàn),那就是 ...… 查看全部問答∨ |
我添加了兩個(gè)用戶,于是在/home下有兩個(gè)目錄: my2410和xjli。 其中在my2410目錄下建一個(gè)腳本文件env_sh, 內(nèi)容如下: # !/bin/bash PRJROOT=~/ KERNEL=$PRJROOT/kernel ROOTFS=$PRJROOT/rootfs TMP=$PRJROOT/tmp export PRJROOT KERNEL ROOTF ...… 查看全部問答∨ |
各位: 我的產(chǎn)品做高低溫測試實(shí)驗(yàn)時(shí) 只要到-19度就會(huì)出錯(cuò) 請(qǐng)問各位,可能出現(xiàn)問題的地方都哪些呢 謝謝啦… 查看全部問答∨ |
|
系統(tǒng)符號(hào)表創(chuàng)建過程如下代碼,而symTblCreate 函數(shù)參數(shù)SYM_TBL_HASH_SIZE_LOG2被定義為8 ,難道只有8 power of 2 =256 個(gè)符號(hào)表?xiàng)l目? 如果不是,那么符號(hào)表最長有多少?如果module中的symbols 太多添加進(jìn)去使之溢出 ...… 查看全部問答∨ |
如何讓開發(fā)的驅(qū)動(dòng)程序和應(yīng)用程序一一對(duì)應(yīng)呢 我開發(fā)一個(gè)驅(qū)動(dòng)程序.sys和一個(gè)應(yīng)用程序.exe,應(yīng)用程序可以調(diào)用加載到內(nèi)核的驅(qū)動(dòng) 程序,我看資料說驅(qū)動(dòng)程序的派遣函數(shù)是運(yùn)行在應(yīng)用程序的進(jìn)線程的上下文中了,那 么我可以獲得應(yīng)用程序的模式(PE加載到內(nèi)核中)的資料么?然后再驅(qū)動(dòng)里做點(diǎn)東西 可 ...… 查看全部問答∨ |
我現(xiàn)在有個(gè)AMD的風(fēng)扇沒用,我想拿來做電機(jī)用,風(fēng)扇有4根線,都是些什么線?AMD風(fēng)扇是三相異步電機(jī)嗎?怎么讓他轉(zhuǎn)?負(fù)載能力多大?都沒有這方面的資料,高手指教下… 查看全部問答∨ |
|
臺(tái)式電腦怎樣無線上網(wǎng)?2種無線上網(wǎng)方法介紹 臺(tái)式電腦怎么無線上網(wǎng)?隨著無線上網(wǎng)的流行,目前不少地方都有無線網(wǎng)絡(luò)信號(hào)覆蓋,對(duì)于我們熟悉的筆記本電腦,平板電腦,以及智能手機(jī)都可以輕松實(shí)現(xiàn)無線或 wifi無線上網(wǎng),那么對(duì)于我們比較傳統(tǒng)的臺(tái)式電腦怎么無線上網(wǎng)呢?近日QQ群中有人問“臺(tái)式 ...… 查看全部問答∨ |
上位機(jī)VB編程無線傳輸數(shù)據(jù)給avr單片機(jī)的數(shù)據(jù)格式問題 上位機(jī)我用VB編程,使用無線傳輸模塊,傳輸控制信號(hào)給單片機(jī),來實(shí)現(xiàn)控制。 我的疑問是,在VB6.0里面,十六進(jìn)制用的前綴是&H,在avr128單片機(jī)里面,用的十六進(jìn)制前綴是0X。比如我用上位機(jī)發(fā)送一個(gè)十六進(jìn)制數(shù)據(jù)(如&HAA)到單片機(jī),單片機(jī)能直 ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 人形機(jī)器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機(jī)器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計(jì)
- 小型傾轉(zhuǎn)旋翼機(jī)的無刷直流電機(jī)驅(qū)動(dòng)器設(shè)計(jì)
- 超高速攝影機(jī)電控系統(tǒng)設(shè)計(jì)
- 基于GPS自動(dòng)授時(shí)的無線智能控制器的設(shè)計(jì)
- 基于PTR2000的無線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- 3核A7+單核M0多核異構(gòu),米爾全新低功耗RK3506核心板發(fā)布
- 自動(dòng)化控制中智能技術(shù)的應(yīng)用研究
- OEM機(jī)器制造商利用仿真軟件提高效率
- 基于機(jī)器視覺的帶鋼焊縫定位
- 米爾RK3576核心板適配多種系統(tǒng),解鎖多樣化應(yīng)用
- 實(shí)時(shí)控制和通信領(lǐng)域的IT/OT融合如何推動(dòng)工業(yè)自動(dòng)化
- IXD0579M高壓側(cè)和低壓側(cè)柵極驅(qū)動(dòng)器提供緊湊型即插即用解決方案
- 如何讓自動(dòng)化領(lǐng)域的串口設(shè)備具備聯(lián)網(wǎng)能力?
- MBD應(yīng)用于霍爾組件位置選定
- 村田汽車和工業(yè)設(shè)備用PoC系統(tǒng)靜噪對(duì)策:難點(diǎn)及攻略全解析,別錯(cuò)過
- Microchip直播:單片機(jī)編程不再難, 利用MPLAB®代碼配置器(MCC)實(shí)現(xiàn)快速開發(fā)
- 【EEWORLD第二十三屆】2011年02月社區(qū)明星人物揭曉!
- 走近 AI 重磅新品 STM32N6,解鎖在 MCU 部署高性能、節(jié)能型邊緣 AI!答題有好禮~還有開發(fā)板等你拿!
- 有獎(jiǎng)直播:Microchip適用于CryptoAuthentication™系列的可信任平臺(tái)
- 直播已結(jié)束--STM32全球線上峰會(huì) | 新品STM32N6重磅發(fā)布,50+開發(fā)板等你抽!
- 【已結(jié)束】 電感應(yīng)用知識(shí)分享|MPS 有獎(jiǎng)直播
- TI有獎(jiǎng)直播:伺服驅(qū)動(dòng)器中電流和電壓測量解決方案
- 學(xué)AM335X課程,贏超值BB-Black團(tuán)購資格,更有DIY大獎(jiǎng)賽預(yù)熱中!
- 有獎(jiǎng)評(píng)測:平頭哥RISC-V低功耗板——RVB2601
- 榮耀9i傳聞匯:外觀清新,或搭載“嚇人的技術(shù)”
- 華為事件,致聯(lián)發(fā)科P90產(chǎn)品的ASP較高
- 三星偷偷發(fā)布新機(jī) A9 Star過來圍觀一下
- 華為手機(jī)出貨問題對(duì)大部分供應(yīng)商中長期影響不大
- iPhone SE2設(shè)計(jì)草圖曝光 有劉海無線充電
- stm32發(fā)送16進(jìn)制的數(shù)組總結(jié)
- STM32 串口通訊 發(fā)送 接收
- STM32 串口發(fā)送配置流程
- STM32小白入門(第六天)-------串口通信
- 使用STM32的串口進(jìn)行大量數(shù)據(jù)傳輸