基于51單片機(jī)的TFT彩屏顯示的萬年歷_第1頁
基于51單片機(jī)的TFT彩屏顯示的萬年歷_第2頁
基于51單片機(jī)的TFT彩屏顯示的萬年歷_第3頁
基于51單片機(jī)的TFT彩屏顯示的萬年歷_第4頁
基于51單片機(jī)的TFT彩屏顯示的萬年歷_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于51單片機(jī)的TFT彩屏顯示的萬年歷 單片機(jī)課程設(shè)計 學(xué) 院:信息工程專 業(yè):通信工程班 級: 10級(3)班姓名學(xué)號:劉偉斌3110003144指導(dǎo)老師:劉震宇制作日期:2013年6月16日星期日基于單片機(jī)的的萬年歷的設(shè)計摘要:電子萬年歷是一種非常廣泛日常計時工具。它可以對年、月、日、周、時、秒進(jìn)行精確計時,同時可顯示閏年農(nóng)歷溫度信息,在日常生活中極為實用,DS1302是常用的時鐘芯片,幾個低廉,精度高且對于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,還具有時間校準(zhǔn)等功能。本設(shè)計是基于51 系列的單片機(jī)進(jìn)行的電子萬年歷設(shè)計,可以顯示年、月、日、時、分、秒及周信息,具有可用串口調(diào)整日期和時間功能。而且

2、還具有溫度顯示功能。關(guān)鍵詞:單片機(jī) 時鐘 DS1302 溫度 DS18B20 串口 一,設(shè)計要求與方案設(shè)計1.1 設(shè)計要求: (1) 萬年歷能計算陽歷年、月、日、時、分、秒。(注意閏年)(2) 有時間設(shè)置按鈕,能重新設(shè)定時間,并按新時間計算。(3) 時間的顯示有兩個方案: a、板上LCD 顯示;b、通過串行口在PC 機(jī)上顯示。1.2 電路設(shè)計:綜上設(shè)計要求所述,對此次作品的方案選定: 采用STC89C52 作為主控制系統(tǒng); DS1302 提供時鐘; DS18B20作為數(shù)字式溫度傳感器;TFT彩屏作為顯示;MAX232模塊的串口通過與計算機(jī)通信來修改時間參數(shù)并可以下載程序。二,系統(tǒng)的硬件設(shè)計與實

3、現(xiàn)2.0 電路整體設(shè)計框圖與整體原理圖2.1 89C52主控制器模塊STC89C52單片機(jī)為40引腳雙列直插芯片,有四個I/O口P0,P1,P2,P3, MCS-51單片機(jī)共有4個8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨(dú)立地作輸出或輸入。單片機(jī)的最小系統(tǒng)如下圖所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出. 2.2 DS1302時鐘模塊采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、

4、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計數(shù),而且精度高,位的RAM做為數(shù)據(jù)暫存區(qū),工作電壓2.5V5.5V范圍內(nèi),2.5V時耗電小于300nA.DS1302 與單片機(jī)連接電路如下:2.3 DS18B20溫度模塊在本萬年歷當(dāng)中溫度的采集采用數(shù)字溫度傳感器DS18B20。它屬于單總線器件,具有線路簡單,體積小的特點(diǎn)。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計,十分方便。DS18B20 與單片機(jī)連接電路如下:2.4 TFT彩屏顯示模塊TFT屏(Thin Film Transistor)是薄膜晶體管型液晶顯示屏,它的每一個象素點(diǎn)都是由集成在其后的薄膜晶體管來驅(qū)動的,這樣不僅提高

5、了顯示屏的響應(yīng)速度,同時可以精確控制顯示色階,所以TFT液晶的色彩更逼真。TFT彩屏顯示模塊與單片機(jī)連接電路如下:2.5 MAX232串口通信模塊MAX232串口通信模塊可以用來單片機(jī)下載程序和串口通信修改時間參數(shù)與單片機(jī)連接如下圖:2.6 電源模塊電源模塊電路中加一個LED二極管電路可以防止電源正負(fù)極接反,從而保護(hù)芯片不被燒毀;還可以當(dāng)電源指示燈用。電源與系統(tǒng)版連接如下圖:三,PCB圖(用protel軟件設(shè)計)四,實物制作過程4.1 硫酸紙打印 4.2 顯影4.3 腐蝕 4.4 鉆孔4.5 焊接 4.6實物效果圖五,程序設(shè)計思路與實現(xiàn)軟件設(shè)計是本設(shè)計的關(guān)鍵,軟件程序編寫的好壞直接影響著系統(tǒng)運(yùn)

6、行情況的良好。因本程序涉及的模塊較多,所以程序編寫也采用模塊化設(shè)計,C語言具有編寫靈活、移植方便、便于模塊化設(shè)計的特點(diǎn),所以本系統(tǒng)的軟件采用C51編寫。程序框圖如下:判斷是否有按鍵按下時間、日期、上限溫度、鬧鐘設(shè)置模塊沒有按鍵按下 溫度檢測模塊主程序如下:#include<reg52.h>#include"ds1302.h"#include"ILI9163.h"#include "18b20.h"#define TOP 9#define BOTTOM 10#define LEFT 14#define RIGHT 10#de

7、fine DISTANCE 20#define CCOLOR 0x001f#define BCOLOR 0xff00unsigned int temp; /溫度臨時變量unsigned char TempH,TempL;bit SetFlag; /更新時間標(biāo)志位/sbit p=P17;unsigned char time_buf216;unsigned char timeold;/void disp(void);/void UART_Init(void) SCON = 0x50; /* SCON: 模式 1, 8-bit UART, 使能接收 */ TMOD |= 0x20; /* TMOD:

8、 timer 1, mode 2, 8-bit reload */ TH1 = 0xFD; /* TH1: reload value for 9600 baud 11.0592MHz */ TR1 = 1; /* TR1: timer 1 run */ EA = 1; /*打開總中斷*/ ES = 1; /*打開串口中斷*/main() unsigned char i; UART_Init(); ds1302_init(); /*DS302初始化函數(shù)*/ /ds1302_write_time(); Ini_ILI9163(); /初始化LCD CLR_Screen(BCOLOR); /用背景色

9、清屏 /畫矩形框 Rectangle(LEFT,TOP+8,LEFT+100,TOP+134,CCOLOR); Rectangle(LEFT+1,TOP+9,LEFT+99,TOP+133,CCOLOR); Rectangle(8,TOP+2,LEFT+106,TOP+140,CCOLOR); Rectangle(9,TOP+3,LEFT+105,TOP+139,CCOLOR); Rectangle(2,TOP-4,LEFT+112,TOP+146,CCOLOR); Rectangle(3,TOP-3,LEFT+111,TOP+145,CCOLOR); /LCD_PutString(LEFT,

10、0,"當(dāng)前日期:",CCOLOR,BCOLOR); LCD_PutString(LEFT+10,DISTANCE*4+TOP+10,"劉偉斌制作",0x0000,BCOLOR); LCD_PutString(LEFT+10,TOP+10,"彩屏萬年歷",CCOLOR,BCOLOR); LCD_PutString(LEFT+25,DISTANCE*3+TOP+10,"星期",CCOLOR,BCOLOR); LCD_PutString(LEFT+7,DISTANCE*5+TOP+12,"溫度: . "

11、;,0xf800,BCOLOR); /畫中間間隔線 Line(LEFT,TOP+DISTANCE+8,LEFT+100,TOP+DISTANCE+8,CCOLOR); Line(LEFT,TOP+DISTANCE*2+8,LEFT+100,TOP+DISTANCE*2+8,CCOLOR); Line(LEFT,TOP+DISTANCE*3+8,LEFT+100,TOP+DISTANCE*3+8,CCOLOR); Line(LEFT,TOP+DISTANCE*4+8,LEFT+100,TOP+DISTANCE*4+8,CCOLOR); Line(LEFT,TOP+DISTANCE*5+8,LEF

12、T+100,TOP+DISTANCE*5+8,CCOLOR); while(1) timeold=time_buf16; / 用于檢查時鐘是否改變 ds1302_read_time();/讀取時鐘信息if(timeold!=time_buf16) temp=ReadTemperature();/讀取溫度 TempH=temp>>4; TempL=temp&0x0F; TempL=TempL*6/10;/小數(shù)近似處理 disp(); /液晶顯示時間信息 / KeyPro(); if(SetFlag) /如果接收到串口信息則更新時鐘 for(i=0;i<8;i+) tim

13、e_buf1i=time_buf22*i*10+time_buf22*i+1;/數(shù)據(jù)整合,如2個數(shù) 1和5整合成15 ds1302_write_time(); SetFlag=0; /時鐘信息更新后標(biāo)志位清零 /*/* 串口中斷程序 */*/void UART_SER (void) interrupt 4 /串行中斷服務(wù)程序 unsigned char Temp; /定義臨時變量 unsigned char i; if(RI) /判斷是接收中斷產(chǎn)生 RI=0; /標(biāo)志位清零 Temp=SBUF; /讀入緩沖區(qū)的值 time_buf2i=Temp&0x0F; i+; if(i=16) /

14、連續(xù)接收16個字符信息 i=0;SetFlag=1; /接收完成標(biāo)志位置1 SBUF=Temp; /把接收到的值再發(fā)回電腦端 /P1=Temp&0x0F; /調(diào)試時候顯示 if(TI) /如果是發(fā)送標(biāo)志位,清零 TI=0; void disp(void) unsigned char TempData10; TempData0='2' TempData1='0' TempData2='0'+time_buf11/10; TempData3='0'+time_buf11%10; TempData4='-' Te

15、mpData5='0'+time_buf12/10; TempData6='0'+time_buf12%10; TempData7='-' TempData8='0'+time_buf13/10; TempData9='0'+time_buf13%10; LCD_PutString(LEFT+10,DISTANCE*1+TOP+10,TempData,CCOLOR,BCOLOR); TempData0='0'+time_buf14/10; TempData1='0'+time_buf

16、14%10; TempData2=':' TempData3='0'+time_buf15/10; TempData4='0'+time_buf15%10; TempData5=':' TempData6='0'+time_buf16/10; TempData7='0'+time_buf16%10; TempData8=' ' TempData9=' 'LCD_PutString(LEFT+18,DISTANCE*2+TOP+10,TempData,CCOLOR,BC

17、OLOR);switch(time_buf17) case 1:LCD_PutString(LEFT+57,DISTANCE*3+TOP+10,"一",CCOLOR,BCOLOR);break; case 2:LCD_PutString(LEFT+57,DISTANCE*3+TOP+10,"二",CCOLOR,BCOLOR);break; case 3:LCD_PutString(LEFT+57,DISTANCE*3+TOP+10,"三",CCOLOR,BCOLOR); LCD_PutString(LEFT+78,DISTANCE*3

18、+TOP+10," ",CCOLOR,BCOLOR);break; case 4:LCD_PutString(LEFT+57,DISTANCE*3+TOP+10,"四",CCOLOR,BCOLOR);break; case 5:LCD_PutString(LEFT+57,DISTANCE*3+TOP+10,"五",CCOLOR,BCOLOR);break; case 6:LCD_PutString(LEFT+57,DISTANCE*3+TOP+10,"六",CCOLOR,BCOLOR);break; case 7:

19、LCD_PutString(LEFT+57,DISTANCE*3+TOP+10,"日",CCOLOR,BCOLOR);break; default:break; TempData6='0'+(TempH%100)/10; TempData7='0'+(TempH%100)%10; /這里只使用2位整數(shù)部分TempData8='.' TempData9='0'+TempL;LCD_PutString(LEFT+47,DISTANCE*5+TOP+12,&TempData6,0xf800,BCOLOR);六

20、,串口設(shè)計思路通過串口調(diào)試軟件更新時間。更新方式如下:在發(fā)送欄填寫時間信息,格式如下2013061623595007 表示:2013年6月16日 23點(diǎn)59分50秒 星期日,然后通過串口以字符格式發(fā)送,注意中間不能有空格。代碼如下:/*/* 串口中斷程序 */*/void UART_SER (void) interrupt 4 /串行中斷服務(wù)程序 unsigned char Temp; /定義臨時變量 unsigned char i; if(RI) /判斷是接收中斷產(chǎn)生 RI=0; /標(biāo)志位清零 Temp=SBUF; /讀入緩沖區(qū)的值 time_buf2i=Temp&0x0F; i+; if

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論