帶溫度顯示的萬年歷_第1頁
帶溫度顯示的萬年歷_第2頁
帶溫度顯示的萬年歷_第3頁
帶溫度顯示的萬年歷_第4頁
帶溫度顯示的萬年歷_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機(jī)課程設(shè)計報告題目: 帶溫度顯示的萬年歷 院系: 電氣信息工程系 專業(yè): 通信工程 組長: 學(xué)號: 組員1: 學(xué)號: 組員2: 學(xué)號: 組員3: 學(xué)號: 組員4: 學(xué)號: 指導(dǎo)教師: 201*年12月18日 帶溫度顯示的萬年歷 設(shè)計報告一、選題目的和意義:二十一世紀(jì)的今天,最具代表性的計時產(chǎn)品就是電子萬年歷,它是近代世界鐘表業(yè)界的第三次革命。第一次是擺和擺輪游絲的發(fā)明,相對穩(wěn)定的機(jī)械振蕩頻率源使鐘表的走時差從分級縮小到秒級,代表性的產(chǎn)品就是帶有擺或擺輪游絲的機(jī)械鐘或表。第二次革命是石英晶體振蕩器的應(yīng)用,發(fā)明了走時精度更高的石英電子鐘表,使鐘表的走時月差從分級縮小到秒級。第三次革命就是單片機(jī)

2、數(shù)碼計時技術(shù)的應(yīng)用(電子萬年歷),使計時產(chǎn)品的走時日差從分級縮小到1/600萬秒,從原有傳統(tǒng)指針計時的方式發(fā)展為人們?nèi)粘8鼮槭煜さ囊构鈹?shù)字顯示方式,直觀明了,并增加了全自動日期、星期、溫度以及其他日常附屬信息的顯示功能,它更符合消費者的生活需求!因此,電子萬年歷的出現(xiàn)帶來了鐘表計時業(yè)界跨躍性的進(jìn)步我國生產(chǎn)的電子萬年歷有很多種,總體上來說以研究多功能電子萬年歷為主,使萬年歷除了原有的顯示時間,日期等基本功能外,還具有鬧鈴,報警等功能。商家生產(chǎn)的電子萬年歷更從質(zhì)量,價格,實用上考慮,不斷的改進(jìn)電子萬年歷的設(shè)計,使其更加的具有市場。通過本次課程設(shè)計,可以培養(yǎng)我們獨立思考綜合運用所學(xué)有關(guān)知識的能力。更

3、好的鞏固單片機(jī)原理及接口技術(shù)課程學(xué)習(xí)的內(nèi)容。掌握工程軟件的設(shè)計方法,強(qiáng)化上級動手編程能力。做到理論與實踐相結(jié)合。更加了解單片機(jī)知識的好處和其可用性。同時增加了同學(xué)之間的團(tuán)隊合作精神,更加體會的以后在工作中團(tuán)隊合作的重要性和必要性。學(xué)生姓名任務(wù)分工學(xué)生姓名任務(wù)分工學(xué)生姓名任務(wù)分工程序設(shè)計搜集資料焊接原件采購制作課件二、主要研究內(nèi)容:本設(shè)計為軟件,硬件相結(jié)合的一組設(shè)計。在軟件設(shè)計過程中,應(yīng)對硬件部分有相關(guān)了解,這樣有助于對設(shè)計題目的更深了解,有助于軟件設(shè)計?;镜囊私庖恍┲饕骷幕竟δ芎妥饔?。本設(shè)計以STC89C52單片機(jī)為控制核心,將時間數(shù)據(jù)通過LCD1602顯示出來,同時通過相應(yīng)的按鍵調(diào)

4、整相應(yīng)的值。通過溫度傳感器將采集到的溫度實時的顯示在顯示屏上。本設(shè)計可分為以下模塊進(jìn)行設(shè)計:顯示模塊,時間計算模塊,設(shè)置模塊,溫度采集模塊。顯示模塊采用用液晶顯示器LCD1602顯示,通過P2.0、P2.1、P2.2和P0給1602送指令和數(shù)據(jù)來控制想要顯示的位置和數(shù)據(jù);時間計算模塊使用時鐘芯片DS1302來進(jìn)行時間和日期的計算,采用的是SPI總線,單片機(jī)通過模擬SPI接口來與它進(jìn)行通信,他只有三條線與單片機(jī)連接,其他接晶振、電源和地線;設(shè)置模塊為鍵盤模塊,有兩個按鍵分別接到單片機(jī)的外部中斷,其他三個采用的是鍵盤掃描,并且在程序中進(jìn)行了按鍵消抖,溫度采集模塊使用的是DS18B20,它直接將模擬

5、的溫度量轉(zhuǎn)換為數(shù)字量,采用單總線與單片機(jī)相連,這樣可以省出大量的I/O口,供給其他芯片使用,在電路中還加入了鬧鐘的功能,鬧鐘的程序采用定時器控制,這樣在顯示時間和日期的同時,鬧鐘同時起作用。三、設(shè)計的方法及步驟:1、整個系統(tǒng)由主控模塊和顯示模塊兩大模塊組成,主控模塊包括主控芯片、溫度檢測、實時時鐘電路及鍵盤接口電路,系統(tǒng)構(gòu)成框圖如下圖(1)所示。LCD液晶顯示鍵盤DS1302時鐘芯片DS18B20溫度采集STC89C52控制器圖(1) 系統(tǒng)框圖2、設(shè)計步驟(1)將LCD液晶的數(shù)據(jù)口接到P0口,P0口接上拉電阻,P2.0、P2.1、P2.2分別接到1602的RS、RW和E端口。(2)將DS130

6、2的SCLK,I/O,復(fù)位鍵接到P1.0,P1.1,P1.2;(3)將溫度芯片DS18B20接到P2.3。(4)按鍵接到P3口上,通過P3.7來控制蜂鳴器的發(fā)聲,起到鬧鐘的目的。四、實驗設(shè)計(相關(guān)原理框圖):1、主程序流程圖(2)開始初始化按下h?(y)溫度顯示(n)時間顯示菜單?(y)時間調(diào)整圖(2) 主程序流程圖時間調(diào)整部分的設(shè)計流程圖(3):開始Gongneng是多少2調(diào)分1調(diào)秒3調(diào)時4調(diào)號7調(diào)分8調(diào)時5調(diào)月6調(diào)年加減減減加加加加加加加減減減減減Gongneng為0 返回時間顯示圖(3) 時間調(diào)整主程序:#include <reg52.h> #include <intr

7、ins.h>#include "ds1302.h" #include "LCD1602.h" #include "ds18b20.h"#define uchar unsigned char#define uint unsigned int sbit gon=P34 ;sbit e=P33 ;sbit xiang=P37;sbit jia=P36 ;sbit jian=P35 ; sbit a1=P13; sbit a2=P14 ; sbit a3=P15 ; sbit a4=P16 ; sbit a5=P17 ; void go

8、ng_neng();void dingshi(); void key(); uchar times9; uchar date9; uchar huan;uchar tp=0,temp1=0,temp2=0,temp3=0,temp4=0,temp5=0,neng=0,d_shi=0,d_fen=5,d_shi_g=0, d_fen_g=5,d_shi_s=0,d_fen_s=0,d_flag=0,kai=0,s_flag=0,mingzi=0,temp6=0,temp7=0; uint deng=0; void change() / 時間的轉(zhuǎn)換 times0=time_13022/10+

9、9;0' times1=time_13022%10+'0' times2=':' times3=time_13021/10+'0' times4=time_13021%10+'0' times5=':' times6=time_13020/10+'0' times7=time_13020%10+'0' / 日期的轉(zhuǎn)換 date0=time_13026/10+'0' date1=time_13026%10+'0' date2='-'

10、; date3=time_13024/10+'0' date4=time_13024%10+'0' date5='-' date6=time_13023/10+'0' date7=time_13023%10+'0' void xiangling(); void Disp_Temperature() display4=temp_data0&0x0f; display0=ditabdisplay4+0x30; /查表得小數(shù)位的值 display4=(temp_data0&0xf0)>>4)|

11、(temp_data1&0x0f)<<4); display3=display4/100+0x30; display1=display4%100; display2=display1/10+0x30; display1=display1%10+0x30;if(display3=0x30) /高位為0,不顯示 display3=0x20; if(display2=0x30) /次高位為0,不顯示 display2=0x20; gotoxy(11,1) ; /在LCD第一行顯示LCD_write_data(display3); /百位數(shù)顯示 gotoxy(12,1) ; LCD

12、_write_data(display2); /十位數(shù)顯示 gotoxy(13,1) ; LCD_write_data(display1); gotoxy(14,1) ; LCD_write_data(0x2e); /xiao數(shù)顯示 gotoxy(15,1) ; LCD_write_data(display0);gotoxy(14,2) ; LCD_write_data(0xdf); gotoxy(15,2) ; LCD_write_data('C'); void main() EA=1;EX0=1;IT0=1;EX1=1;IT1=1;ET0=1;TMOD=0X01;TH0=(

13、65535-5000)/256; TL0=(65535-5000)%256;TR0=1;LCD_init();/LCD初始化 init_1302(time_1302); gotoxy(0,1); LCD_display("s:"); gotoxy(0,2); LCD_display("r:"); times8='0'/ date8='0' huan=1;P3=0xff;xiang=0; if(kai=0) gotoxy(11,1); LCD_write_data(0xef); while(1) while(huan=1)

14、gong_neng();key();gotoxy(0,1); LCD_display("t:"); gotoxy(0,2); LCD_display("d:"); get_1302(time_1302); change(); gotoxy(2,1); LCD_display(times); gotoxy(2,2); LCD_display(date); if(huan=2)LCD_init();dingshi(); if(!(kai) gotoxy(11,1); LCD_write_data(0xef); else gotoxy(11,1); LCD_w

15、rite_data(0x20); while(huan=2) if(mingzi=1) gotoxy(0,1);LCD_display("yu tong"); gotoxy(0,2); LCD_display("he guang hao"); if(mingzi=3) gotoxy(0,1); LCD_display("z m,shaob"); gotoxy(0,2); LCD_display("sun yan xiu"); if(mingzi=5) gotoxy(0,1);LCD_display("xi

16、e xie"); gotoxy(0,2); LCD_display(" !"); Read_Temperature();Disp_Temperature();delay(2);if(huan=1)LCD_init(); void key() while(neng!=0) gong_neng(); if(neng=1)LCD_write_command(0x80+9);LCD_write_command(0x0f);if(jia=0) delay(17); if(jia=0) while(!jia);w_1302(0x8e,0x00);tp=r_1302(0x81)

17、; tp+;s_flag=1;if(tp&0x0f)>9)tp=tp+6;if(tp&0x7f)>0x59)tp=0;w_1302(ds1302_second,tp|0x80); if(jian=0) delay(17); if(jian=0) while(!jian);tp=r_1302(0x81); tp-; if(tp=0)tp=0x59; if(tp&0x0f)>9)tp=tp-6;s_flag=1;w_1302(ds1302_second,tp|0x80); if(s_flag=1) LCD_init();get_1302(time_1302

18、); change(); gotoxy(2,1); LCD_display(times); gotoxy(2,2); LCD_display(date);s_flag=0; if(neng=2) LCD_write_command(0x80+6);LCD_write_command(0x0f);tp=r_1302(0x81);w_1302(ds1302_second,tp|0x80);if(jia=0) delay(17);if(jia=0) s_flag=1;while(!jia);temp1=r_1302(0x83); temp1+;if(temp1&0x0f)>9)temp

19、1=temp1+6;if(temp1&0x7f)>0x59)temp1=0; w_1302(ds1302_minute,temp1); if(jian=0) delay(17);if(jian=0)s_flag=1;while(!jian);temp1=r_1302(0x83); temp1-;if(temp1&0x0f)>9)temp1=temp1-6;if(temp1=0)temp1=0x59; w_1302(ds1302_minute,temp1); if(neng=3) LCD_write_command(0x80+3);LCD_write_command(

20、0x0f);tp=r_1302(0x81);w_1302(ds1302_second,tp|0x80); if(jia=0) delay(17); if(jia=0) s_flag=1;while(!jia);temp2=r_1302(0x85); temp2+;if(temp2&0x0f)>9)temp2=temp2+6;if(temp2&0x7f)>0x23)temp2=0;w_1302(ds1302_hour,temp2); if(jian=0) delay(17); if(jian=0) while(jian=0); s_flag=1;while(!jian

21、);temp2=r_1302(0x85); temp2-;if(temp2&0x0f)>9)temp2=temp2-6;if(temp2=0)temp2=0x23;w_1302(ds1302_hour,temp2); if(neng=4) LCD_write_command(0x80+0x40+9);LCD_write_command(0x0f);tp=r_1302(0x81);w_1302(ds1302_second,tp|0x80);if(jia=0) delay(17);if(jia=0)s_flag=1;while(!jia);temp3=r_1302(0x87); te

22、mp3+;if(temp3&0x0f)>9)temp3=temp3+6; if(temp3&0x7f)>0x31)temp3=0; w_1302(ds1302_day,temp3); if(jian=0) delay(17);if(jian=0)s_flag=1;while(!jian);temp3=r_1302(0x87); temp3-;if(temp3&0x0f)>9)temp3=temp3-6;if(temp3=0)temp3=0x31; w_1302(ds1302_day,temp3); if(neng=5) LCD_write_comman

23、d(0x80+0x40+6);LCD_write_command(0x0f);tp=r_1302(0x81);w_1302(ds1302_second,tp|0x80);if(jia=0) delay(17);if(jia=0)s_flag=1;while(!jia);temp4=r_1302(0x89); temp4+;if(temp4&0x0f)>9)temp4=temp4+6;if(temp4&0x7f)>0x12)temp4=0; w_1302(ds1302_month,temp4); if(jian=0) delay(17);if(jian=0)s_fla

24、g=1;while(!jian);temp4=r_1302(0x89); temp4-;if(temp4&0x0f)>9)temp4=temp4-6;if(temp4=0)temp4=0x12; w_1302(ds1302_month,temp4); if(neng=6) LCD_write_command(0x80+0x40+3);LCD_write_command(0x0f);tp=r_1302(0x81);w_1302(ds1302_second,tp|0x80);if(jia=0) delay(17);if(jia=0)s_flag=1;while(!jia);temp5

25、=r_1302(0x8d); temp5+;if(temp5&0x0f)>9)temp5=temp5+6; if(temp5&0x7f)>0x31)temp5=0; w_1302(ds1302_year,temp5); if(jian=0) delay(17);if(jian=0)s_flag=1;while(!jian);temp5=r_1302(0x8d); temp5-;if(temp5&0x0f)>9)temp5=temp5-6;if(temp5=0)temp5=0x99; w_1302(ds1302_year,temp5); if(neng=

26、7) LCD_write_command(0x01);while(neng=7) gotoxy(2,2); LCD_display("fen:"); gotoxy(7,2); LCD_write_data(d_fen_s+0x30);gotoxy(8,2); LCD_write_data(d_fen_g+0x30); LCD_write_command(0x0c); gong_neng();if(neng!=7)break;if(jia=0) delay(17);if(jia=0)d_flag=1;while(!jia);d_fen+;if(d_fen=60)d_fen=0

27、;d_fen_s=d_fen/10;d_fen_g=d_fen%10; if(jian=0) delay(17);if(jian=0)d_flag=1;while(!jian);d_fen-;if(d_fen=-1)d_fen=59;d_fen_s=d_fen/10;d_fen_g=d_fen%10; if(d_flag=1) gotoxy(7,2); LCD_write_data(d_fen_s+0x30);gotoxy(8,2); LCD_write_data(d_fen_g+0x30); d_flag=0; if(neng=8) LCD_write_command(0x01); whil

28、e(neng=8) gotoxy(2,1); LCD_display("shi:"); gotoxy(7,1); LCD_write_data(d_shi_s+0x30); gotoxy(8,1); LCD_write_data(d_shi_g+0x30); LCD_write_command(0x0c); gong_neng();if(neng!=8)break;if(jia=0) delay(17);if(jia=0)d_flag=1;while(!jia);d_shi+;if(d_shi=24)d_shi=0;d_shi_s=d_shi/10;d_shi_g=d_sh

29、i%10; if(jian=0) delay(17); if(jian=0) d_flag=1;while(!jian);d_shi-;if(d_shi=-1)d_shi=23;d_shi_s=d_shi/10;d_shi_g=d_shi%10; if(d_flag=1) gotoxy(7,1); LCD_write_data(d_shi_s+0x30); gotoxy(8,1); LCD_write_data(d_shi_g+0x30); d_flag=0; w_1302(0x8e,0x00);tp=r_1302(0x81);w_1302(ds1302_second,tp&0x7f)

30、; w_1302(0x8e,0x80);void gong_neng() if(gon=0) delay(17);if(gon=0)neng+;while(gon=0);if(neng=9) neng=0; LCD_init(); void dingshi()if(e=0)kai+;if(kai=2)kai=0; if(kai=0)temp7=r_1302(0x85); temp7=(temp7&0x70)>>4)*10+(temp7&0x0f ) ;temp6=r_1302(0x83); temp6=(temp6&0x70)>>4)*10+(t

31、emp6&0x0f);if(d_shi=temp7)&&(d_fen=temp6)xiang=1;else xiang=0; void temer(void) interrupt 0 huan+;if(huan=3)huan=1;LCD_init();LCD_write_command(0x01);delay_15us(40);mingzi+;if(mingzi=6)mingzi=0; void ta(void) interrupt 1 if(kai=0) if(d_shi=temp7)&&(d_fen=temp6) deng+; if(deng<

32、30) a1=0; a2=0; a3=0; a4=0; a5=1; if(deng>30)&&(deng<60) a1=0; a2=0; a3=0; a4=1; a5=0; if(deng>60)&&(deng<90) a1=1; a2=0; a3=0; a4=0; a5=0; if(deng>90)&&(deng<120) a1=0; a2=1; a3=1; a4=0; a5=0; if(deng>150)&&(deng<180) a1=0; a2=0; a3=0; a4=0; a

33、5=0; if(deng>180)&&(deng<210) a1=1; a2=1; a3=1; a4=1; a5=1; if(deng>210)&&(deng<240) a1=0; a2=0; a3=0; a4=0; a5=0; if(deng>240)&&(deng<300) a1=1; a2=1; a3=1; a4=1; a5=1; if(deng>300) a1=0; a2=0; a3=0; a4=0; a5=0; if(deng=330) deng=0; else a1=0; a2=0; a3=0

34、; a4=0; a5=0; TH0=(65535-5000)/256; TL0=(65535-5000)%256; TR0=1; void t(void) interrupt 2 while(!e);kai+;if(kai=1)xiang=0;if(kai=2)kai=0; 2、對于時鐘芯片DS1302,公歷日期時間顯示只需從DS1302各寄存器讀出年、月、日、時、分、秒、星期,再加處理即可。在首次對DS1302進(jìn)行操作之前,必須進(jìn)行初始化,然后從中讀出數(shù)據(jù),經(jīng)過處理后,送給顯示緩沖單元。1302的流程圖(4)如下:開始從1302中讀出年月日,時分秒初始化13021302開始震蕩將讀出的數(shù)據(jù)進(jìn)

35、行轉(zhuǎn)換圖(4) 1302流程圖DS1302部分程序:#ifndef _ds1302_h_#define _ds1302_H_#define uchar unsigned char uchar time_13027=0x00,0x00,0x00,0x22,0x12,0x11,0x11;/設(shè)置時間初始值數(shù)組 / 秒分時號月份星期年 #define ds1302_second 0x80#defineds1302_minute 0x82#defineds1302_hour 0x84#define ds1302_week 0x8a#defineds1302_day 0x86#defineds1302_m

36、onth 0x88#define ds1302_year 0x8csbit T_IO=P11; /與硬件相關(guān)的連線clk為DS1302的時鐘信號線 sbit T_CLK=P10; /DAT為DS1302的I/O數(shù)據(jù)線 sbit T_RST=P12; /RST為DS1302的RST信號線 uchar bdata datbyte; sbit datbyte0=datbyte0; sbit datbyte7=datbyte7; void get_1302(uchar time); void write_ds1302(uchar dat); uchar r_1302(uchar add); void w_1302(uchar add,uchar dat); uchar read_ds1302(void); void init_1302(uchar *time); /*= D S 1 3 0 2 初始化 =*/ void init_1302(uchar *time) uchar i, add; add=0x80;/0寫入,1讀出 w_1302(0x8e,0x00); for(i=0;i<7;i+) w_1302(add,*time); add+=

溫馨提示

  • 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

提交評論