第一篇:萬(wàn)年歷單片機(jī)綜合實(shí)驗(yàn)
綜合實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)題目: 萬(wàn)年歷
學(xué)生班級(jí): 學(xué)生姓名: 學(xué)生學(xué)號(hào): 指導(dǎo)教師: 實(shí)驗(yàn)時(shí)間:
摘要
本設(shè)計(jì)是電子萬(wàn)年歷。具備三個(gè)功能:能顯示:年、月、日、時(shí)、分、秒及星期信息,并具有可調(diào)整日期和時(shí)間功能。
我選用的是單片機(jī)STC89C52來(lái)實(shí)現(xiàn)電子萬(wàn)年歷的功能。該電子萬(wàn)年歷能夠成功實(shí)現(xiàn)時(shí)鐘運(yùn)行,調(diào)整,顯示年月日時(shí)分秒等信息。
該電子萬(wàn)年歷使用12MHZ晶振與單片機(jī)STC89C52相連接,通過(guò)軟件編程的方法實(shí)現(xiàn)了以24小時(shí)為一個(gè)周期,同時(shí)顯示小時(shí)、分鐘和秒的要求。利用單片機(jī)定時(shí)器及計(jì)數(shù)器產(chǎn)生定時(shí)效果通過(guò)編程形成數(shù)字鐘效果,再利用數(shù)碼管動(dòng)態(tài)掃描顯示單片機(jī)內(nèi)部處理的數(shù)據(jù)。同時(shí)通過(guò)端口讀入當(dāng)前外部控制狀態(tài)來(lái)改變程序的不同狀態(tài),實(shí)現(xiàn)不同功能。
電子萬(wàn)年歷設(shè)計(jì)與制作可采用數(shù)字電路實(shí)現(xiàn),也可以采用單片機(jī)來(lái)完成。若用數(shù)字電路完成,所設(shè)計(jì)的電路相當(dāng)復(fù)雜,大概需要十幾片數(shù)字集成塊,其功能也主要依賴(lài)于數(shù)字電路的各功能模塊的組合來(lái)實(shí)現(xiàn),焊接的過(guò)程比較復(fù)雜,成本也非常高。若用單片機(jī)來(lái)設(shè)計(jì)制作完成,由于其功能的實(shí)現(xiàn)主要通過(guò)軟件編程來(lái)完成,這樣一來(lái)就降低了硬件電路的復(fù)雜性,從而使得其成本降低,更適合我們大學(xué)生自主研發(fā)。所以在該設(shè)計(jì)與制作中我選用了單片機(jī)STC89C52,它是低功耗、高性能的CMOS型8位單片機(jī)。片內(nèi)帶有4KB的Flash存儲(chǔ)器,且允許在系統(tǒng)內(nèi)改寫(xiě)或用編程器編程。另外, 單片機(jī)STC89C52的指令系統(tǒng)和引腳與8051完全兼容,片內(nèi)有128B 的RAM、32條I/O口線、2個(gè)16位定時(shí)計(jì)數(shù)器、5個(gè)中斷源、一個(gè)全雙工串行口等。
因此,采用單片機(jī)STC89C52原理制作的電子萬(wàn)年歷,不僅僅在原理上能夠成功實(shí)現(xiàn)計(jì)時(shí)等功能,也更經(jīng)濟(jì),更適用,更符合我們實(shí)際生活的需要,對(duì)我們大學(xué)生來(lái)說(shuō)也更加有用。
關(guān)鍵詞:STC89S52,DS1302,LCD,PROTEUS
目錄
一、實(shí)驗(yàn)要求:...............................................................................................................................3
1.1基本要求:.........................................................................................................................3 1.2拓展要求:.........................................................................................................................3
二、方案論證:...............................................................................................................................3
2.1.顯示部分:...........................................................................................................................3 2.2.數(shù)字時(shí)鐘:.........................................................................................................................3
三、總體方案:...............................................................................................................................4
四、系統(tǒng)硬件設(shè)計(jì):.......................................................................................................................4
4.1.時(shí)間設(shè)置模塊:...............................................................................................................4 4.2.時(shí)鐘模塊:...........................................................................................................................4 4.3.整點(diǎn)報(bào)時(shí)電路.....................................................................................................................5 4.4.LCD液晶顯示模塊:.......................................................................................................5
五、整體電路:...............................................................................................................................6
5.1.電路.....................................................................................................................................6
六、數(shù)字時(shí)鐘使用說(shuō)明:...............................................................................................................7
七、心得體會(huì):...............................................................................................................................7
八、程序代碼:...............................................................................................................................7
一、實(shí)驗(yàn)要求:
1.1基本要求:
1、能動(dòng)態(tài)顯示年、月、日、星期、小時(shí)、分鐘、秒。
2、可用鍵盤(pán)進(jìn)行日期時(shí)間的修改。1.2拓展要求:
3、具有鬧鐘功能:可設(shè)定鬧鐘時(shí)間,在時(shí)間到達(dá)后,發(fā)出報(bào)警時(shí)間,持續(xù)5秒。
二、方案論證:
2.1.顯示部分: 顯示部分是本次設(shè)計(jì)的重要部分,一般有以下兩種方案: 方案一:
采用LED顯示,分靜態(tài)顯示和動(dòng)態(tài)顯示。對(duì)于靜態(tài)顯示方式,所需的譯碼驅(qū)動(dòng)裝置很多,引線多而復(fù)雜,且可靠性也較低。而對(duì)于動(dòng)態(tài)顯示方式,雖可以避免靜態(tài)顯示的問(wèn)題,但設(shè)計(jì)上如果處理不當(dāng),易造成亮度低,有閃爍等問(wèn)題。方案二:
采用LCD顯示。LCD液晶顯示具有豐富多樣性、靈活性、電路簡(jiǎn)單、易于控制而且功耗小等優(yōu)點(diǎn),對(duì)于信息量多的系統(tǒng),是比較適合的。
鑒于上述原因,我們采用方案二。2.2.數(shù)字時(shí)鐘:
數(shù)字時(shí)鐘是本設(shè)計(jì)的核心的部分。根據(jù)需要可采用以下兩種方案實(shí)現(xiàn): 方案一:
方案完全用軟件實(shí)現(xiàn)數(shù)字時(shí)鐘。原理為:在單片機(jī)內(nèi)部存儲(chǔ)器設(shè)三個(gè)字節(jié)分別存放時(shí)鐘的時(shí)、分、秒信息。利用定時(shí)器與軟件結(jié)合實(shí)現(xiàn)1秒定時(shí)中斷,每產(chǎn)生一次中斷,存儲(chǔ)器內(nèi)相應(yīng)的秒值加1;若秒值達(dá)到60,則將其清零,并將相應(yīng)的分字節(jié)值加1;若分值達(dá)到60,則清零分字節(jié),并將時(shí)字節(jié)值加1;若時(shí)值達(dá)到24,則將時(shí)字節(jié)清零。該方案具有硬件電路簡(jiǎn)單的特點(diǎn),但當(dāng)單片機(jī)不上電,程序?qū)⒉粓?zhí)行。而且由于每次執(zhí)行程序時(shí),定時(shí)器都要重新賦初值,所以該時(shí)鐘精度不高。
方案二:
方案采用Dallas公司的專(zhuān)用時(shí)鐘芯片DS1302。該芯片內(nèi)部采用石英晶體振蕩器,其芯片精度不大于10ms/年,且具有完備的時(shí)鐘鬧鐘功能,因此,可直接對(duì)其以用于顯示或設(shè)置,使得軟件編程相對(duì)簡(jiǎn)單。為保證時(shí)鐘在電網(wǎng)電壓不足或突然掉電等突發(fā)情況下仍能正常工作,芯片內(nèi)部包含鋰電池。當(dāng)電網(wǎng)電壓不足或突然掉電時(shí),可使系統(tǒng)自動(dòng)轉(zhuǎn)換到內(nèi)部鋰電池供電系統(tǒng)。而且即使系統(tǒng)不上電,程序不執(zhí)行時(shí),鋰電池也能保證芯片的正常運(yùn)行,以備隨 時(shí)提供正確的時(shí)間。
基于時(shí)鐘芯片的上述優(yōu)點(diǎn),本設(shè)計(jì)采用方案二完成數(shù)字時(shí)鐘的功能。
三、總體方案:
本設(shè)計(jì)采用STC89C52RC單片機(jī)作為本系統(tǒng)的控制模塊。單片機(jī)可把由DS1302、LCD液晶顯示模塊中的數(shù)據(jù)利用軟件來(lái)進(jìn)行處理,從而把數(shù)據(jù)傳輸?shù)斤@示模塊,實(shí)現(xiàn)日歷和修改的顯示。以LCD液晶顯示器為顯示模塊,把單片機(jī)傳來(lái)的數(shù)據(jù)顯示出來(lái),并且顯示多樣化。在顯示電路中,主要靠按鍵來(lái)實(shí)現(xiàn)日期的修改和選擇。
四、系統(tǒng)硬件設(shè)計(jì):
4.1.時(shí)間設(shè)置模塊:
時(shí)間設(shè)置模塊通過(guò)四個(gè)按鍵實(shí)現(xiàn)萬(wàn)年歷的時(shí)間調(diào)整設(shè)置。KEY1鍵進(jìn)入時(shí)間設(shè)置模式,KEY2鍵實(shí)現(xiàn)設(shè)置內(nèi)容選擇,KEY3鍵實(shí)現(xiàn)設(shè)置內(nèi)容加1,KEY4鍵實(shí)現(xiàn)設(shè)置內(nèi)容減1。
圖1.時(shí)間設(shè)置模塊
4.2.時(shí)鐘模塊: 時(shí)鐘模塊采用DS1302芯片,DS1302是DALLAS公司推出的涓流充電時(shí)鐘芯片內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM通過(guò)簡(jiǎn)單的串行接口與單片機(jī)進(jìn)行通信實(shí)時(shí)時(shí)鐘/日歷電路提供秒分時(shí)日日期月年的信息每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整時(shí)鐘操作可通過(guò) 4 AM/PM指示決定采用24或12小時(shí)格式DS1302與單片機(jī)之間能簡(jiǎn)單地采用同步串行的方式進(jìn)行通信僅需用到三個(gè)口線:
RST復(fù)位、I/O數(shù)據(jù)線、SCLK串行時(shí)鐘。時(shí)鐘/RAM的讀/寫(xiě)數(shù)據(jù)以一個(gè)字節(jié)或多達(dá)31個(gè)字節(jié)的字符組方式通信。DS1302工作時(shí)功耗很低,保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW,其接線電路如圖2所示:
圖2.時(shí)鐘模塊
4.3.整點(diǎn)報(bào)時(shí)電路
整點(diǎn)報(bào)時(shí)電路由一個(gè)NPN三極管和蜂鳴器組成,當(dāng)時(shí)間走到整點(diǎn)時(shí)分,會(huì)每間隔一秒發(fā)出一次報(bào)時(shí),連響五次。
圖3.報(bào)時(shí)電路
4.4.LCD液晶顯示模塊: LCD液晶顯示模塊采用LCD1602型號(hào),具有很低的功耗,正常工作時(shí)電流僅2.0mA/5.0V。通過(guò)編程實(shí)現(xiàn)自動(dòng)關(guān)閉屏幕能夠更有效的降低功耗。LCD1602分兩行顯示,每行可顯示多達(dá)16個(gè)字符。LCD1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,通過(guò)內(nèi)部指令可實(shí)現(xiàn)對(duì)其顯示多樣的控制,并且還能利用空余的空間自定義字符。其接線如圖4所示:
圖4.LCD液晶顯示
五、整體電路:
5.1.電路
圖5.整體電路
六、數(shù)字時(shí)鐘使用說(shuō)明:
調(diào)整時(shí)間設(shè)定:在時(shí)間顯示界面中按KEY1鍵后,進(jìn)入時(shí)間調(diào)整,通過(guò)KEY2選擇需要修改的或設(shè)定的時(shí)間。按KEY2鍵對(duì)應(yīng)內(nèi)容向右移動(dòng),KEY3鍵加1,KEY4鍵減1,設(shè)置完畢,自動(dòng)退出設(shè)置功能。
七、心得體會(huì):
通過(guò)這一周的課程設(shè)計(jì),加深了我對(duì)于單片機(jī)和數(shù)字電路的認(rèn)識(shí),通過(guò)查閱大量的資料,我獲得了以前在課堂上學(xué)不到的東西,我想這對(duì)于以后的畢業(yè)設(shè)計(jì),或者工作也好,都是很有幫助的。在設(shè)計(jì)電路中,往往是先仿真后連接實(shí)物圖,但有時(shí)候仿真和電路連接并不是完全一致的,例如仿真的連接示意圖中,往往沒(méi)有接高電平的16腳或14腳以及接低電平的7腳或8腳,因此在實(shí)際的電路連接中往往容易遺漏。在設(shè)計(jì)的過(guò)程中遇到了很多問(wèn)題,本來(lái)自己的單片機(jī)基礎(chǔ)就比較弱,又是第一次做這樣的設(shè)計(jì),難免會(huì)遇到過(guò)各種各樣的問(wèn)題。同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,比如對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,對(duì)單片機(jī)匯編語(yǔ)言掌握得不好。此次的電子萬(wàn)年歷設(shè)計(jì)重在于仿真和接線,雖然能把電路圖接出來(lái),并能正常顯示,但對(duì)于電路本身的原理并不是十分熟悉.總的來(lái)說(shuō),通過(guò)這次的設(shè)計(jì)實(shí)驗(yàn)更進(jìn)一步地增強(qiáng)了實(shí)驗(yàn)的動(dòng)手能力。
八、程序代碼:
#include “reg51.h” #include “intrins.h” typedef unsigned char uint8;typedef unsigned int uint16;
#define LED_Y P2 #define LCD_DATA 1 #define LCD_COMMAND 0 #define WORDNUU 11
sbit ALARM=P2^0;sbit LCD_RS=P1^5;sbit LCD_RW=P1^6;sbit LCD_EN=P1^7;sbit RTC_SDA=P3^6;sbit RTC_SCL=P3^5;sbit RTC_RST=P3^4;sbit KEY1=P1^0;sbit KEY2=P1^1;sbit KEY3=P1^2;sbit KEY4=P1^3;
#define LCD_PORT P0 uint8 LCD_NO;uint16 i1,i2;uint8 bdata AA;sbit AA7 = AA^7;#define READ_SECOND #define WRITE_SECOND #define READ_MINE
#define WRITE_MINE
#define READ_HOUR
#define WRITE_HOUR #define READ_DAY #define WRITE_DAY #define READ_MONTH #define WRITE_MONTH #define READ_WEEK #define WRITE_WEEK #define READ_YEAR
#define WRITE_YEAR
uint8 SET;uint8 PRE_HOUR;uint8 DATE[16];uint8 TIME[16];
0x81 0x80 0x83 0x82 0x85 0x84 0x87 0x86 0x89 0x88 0x8b 0x8a 0x8d 0x8c 8
void delaynus(uint8 n){
uint8 i;
for(i=0;i } void RTC_Write(uint8 dat){ uint8 i; RTC_SCL=0; //拉低SCLK,為脈沖上升沿寫(xiě)入數(shù)據(jù)做好準(zhǔn)備 delaynus(2); //稍微等待,使硬件做好準(zhǔn)備 for(i=0;i<8;i++) //連續(xù)寫(xiě)8個(gè)二進(jìn)制位數(shù)據(jù) { RTC_SDA=dat&0x01; //取出dat的第0位數(shù)據(jù)寫(xiě)入1302 delaynus(2); //稍微等待,使硬件做好準(zhǔn)備 RTC_SCL=1; //上升沿寫(xiě)入數(shù)據(jù) delaynus(2); //稍微等待,使硬件做好準(zhǔn)備 RTC_SCL=0; //重新拉低SCLK,形成脈沖 dat>>=1; //將dat的各數(shù)據(jù)位右移1位,準(zhǔn)備寫(xiě)入下一個(gè)數(shù)據(jù)位 } } uint8 RTC_Read(){ uint8 i,dat; delaynus(2); //稍微等待,使硬件做好準(zhǔn)備 for(i=0;i<8;i++) //連續(xù)讀8個(gè)二進(jìn)制位數(shù)據(jù) { dat>>=1; //將dat的各數(shù)據(jù)位右移1位,因?yàn)橄茸x出的是字節(jié)的最低位 if(RTC_SDA==1) //如果讀出的數(shù)據(jù)是1 dat|=0x80; //將1取出,寫(xiě)在dat的最高位 RTC_SCL=1; //將SCLK置于高電平,為下降沿讀出 delaynus(2);//稍微等待 RTC_SCL=0; //拉低SCLK,形成脈沖下降沿 delaynus(2);//稍微等待 } return dat; //將讀出的數(shù)據(jù)返回 } void RTC_Write_Byte(uint8 addr,uint8 dat){ RTC_RST=0; //禁止數(shù)據(jù)傳遞 RTC_SCL=0; //確保寫(xiě)數(shù)居前SCLK被拉低 RTC_RST=1; //啟動(dòng)數(shù)據(jù)傳輸 delaynus(2); //稍微等待,使硬件做好準(zhǔn)備 RTC_Write(addr); //寫(xiě)入命令字 RTC_Write(dat); //寫(xiě)數(shù)據(jù) RTC_SCL=1; //將時(shí)鐘電平置于已知狀態(tài) RTC_RST=0; //禁止數(shù)據(jù)傳遞 } uint8 RTC_Read_Byte(uint8 addr){ uint8 dat; RTC_RST=0; //拉低RST RTC_SCL=0; //確保寫(xiě)數(shù)居前SCLK被拉低 RTC_RST=1; //啟動(dòng)數(shù)據(jù)傳輸 RTC_Write(addr); //寫(xiě)入命令字 dat=RTC_Read(); //讀出數(shù)據(jù) RTC_SCL=1; //將時(shí)鐘電平置于已知狀態(tài) RTC_RST=0; //禁止數(shù)據(jù)傳遞 return dat; //將讀出的數(shù)據(jù)返回 } typedef struct __SYSTEMTIME__ { uint8 Second;uint8 Mine;uint8 Hour;uint8 Day;uint8 Month;uint8 Week;uint8 Year;}SYSTEMTIME; static SYSTEMTIME TIMETYPE; void CurrentTime(SYSTEMTIME *dat){ uint8 TimeValue; TimeValue=RTC_Read_Byte(READ_SECOND);dat->Second=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_MINE);dat->Mine=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_HOUR);dat->Hour=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_DAY);dat->Day=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_MONTH);dat->Month=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_WEEK);dat->Week=(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_YEAR);dat->Year=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);} bit LCD_BUSY(){ bit result;LCD_RS=0;LCD_RW=1;LCD_EN=1;_nop_();_nop_();result=(bit)(LCD_PORT&0x80);LCD_EN=0;return result;} void LCD_Write(uint8 dat,uint8 type) //LCD寫(xiě)字符 { uint8 i;while((LCD_BUSY()&&i<100)){i++;} if(i>99)LCD_NO=1;LCD_RS=type;LCD_RW=0;LCD_EN=0;_nop_();_nop_();_nop_();_nop_();LCD_PORT=dat;_nop_();_nop_();_nop_();_nop_();LCD_EN=1;_nop_();_nop_();_nop_();_nop_();LCD_EN=0;} void LCD_INITIALIZE() //LCD初始化 { LCD_Write(0x06,LCD_COMMAND);LCD_Write(0x38,LCD_COMMAND);LCD_Write(0x0c,LCD_COMMAND);LCD_Write(0x01,LCD_COMMAND);} void LCD_Prints(uint8 *dat,uint8 add) //LCD打印函數(shù) { LCD_Write(add|0x80,LCD_COMMAND);while(*dat!='
主站蜘蛛池模板:
女人与公人强伦姧人妻完电影|
97色伦午夜国产亚洲精品|
综合成人亚洲网友偷自拍|
亚洲成aⅴ人片在线观|
26uuu另类亚洲欧美日本|
少妇高潮无套内谢麻豆传|
国产免费无码一区二区|
国产中文欧美日韩在线|
亚洲午夜国产精品无码老牛影视|
18禁无遮挡啪啪无码网站|
黑人大战亚洲人精品一区|
国产喷水福利在线视频|
人妻夜夜爽天天爽三区麻豆av网站|
色综合久久蜜芽国产精品|
亚洲精品揄拍自拍首页一|
激情内射亚洲一区二区三区爱妻|
曰本女人牲交全视频免费播放|
亚洲日韩∨a无码中文字幕|
亚洲老妇色熟女老太|
亚洲综合色区在线观看|
在线永久免费观看黄网站|
动漫精品中文无码卡通动漫|
中文无码日韩欧av影视|
成人欧美一区二区三区视频|
久久天天躁夜夜躁狠狠躁2022|
亚洲中文字幕精品久久|
免费人成小说在线观看网站|
国产成人无码综合亚洲日韩|
大学生被内谢粉嫩无套|
国产av午夜精品一区二区三区|
精品无码日韩一区二区三区不卡|
18禁免费观看网站|
秋霞成人午夜鲁丝一区二区三区|
老熟女高潮一区二区三区|
啦啦啦www在线观看免费视频|
亚洲男同志gay 片可播放|
色成人精品免费视频|
亚洲欧美在线x视频|
十八禁在线观看视频播放免费|
久久精品久久精品中文字幕|
2020国产精品永久在线|