基于51單片機的萬年歷的設計_第1頁
基于51單片機的萬年歷的設計_第2頁
基于51單片機的萬年歷的設計_第3頁
基于51單片機的萬年歷的設計_第4頁
基于51單片機的萬年歷的設計_第5頁
免費預覽已結束,剩余41頁可下載查看

下載本文檔

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

文檔簡介

1、單片機課程實訓SCM PRACTICAL TRAINING實訓設計題目Title Of Training萬年歷的設計分院(系別)Department專 業(yè)Speciality設計作者Author組 別Team班級Class完成日期Date指導教師Advisor第一部分 課程設計任務書 0一、課程設計題目 0二、課程設計時間 0三、實訓提交方式 0四、設計要求 0第二部分 課程設計報告1一、單片機發(fā)展概況 1二、MCS-51單片機系統(tǒng)簡介.1231. 總體設計 32. 晶振電路 33. 復位電路 44. DS1302時鐘電路45. 溫度采集系統(tǒng)電路 56. 按鍵調整電路 67. 鬧鐘提示電路 6

2、五、軟件設計框圖 7六、程序源代碼 91. 主程序 92. 溫度控制程序 153. 日歷設置程序 184. 時鐘控制程序 275. 顯示設置程序 32七、結束語38八、課程設計小組分工 38九、參考文獻38第一部分 課程設計任務書一、課程設計題目用中小規(guī)模集成芯片設計制作萬年歷。二、課程設計時間五天三、實訓提交方式提交實訓設計報告電子版與紙質版四、設計要求( 1)顯示年、月、日、時、分、秒和星期,并有相應的農(nóng)歷顯示。( 2)可通過鍵盤自動調整時間。( 3)具有鬧鐘功能。( 4)能夠顯示環(huán)境溫度,誤差小于±15)計時精度:月誤差小于 20 秒。第二部分 課程設計報告一、單片機發(fā)展概況單

3、片機誕生于20 世紀 70年代末,它的發(fā)展史大致可分為三個階段:第一階段( 1976-1978) : 初級單片機微處理階段。 該時期的單片機具有8 位CPU, 并行 I/O 端口、 8 位時序同步計數(shù)器, 尋址范圍 4KB , 但是沒有串行口。第二階段(1978-1982):高性能單片機微機處理階段,該時期的單片機具有I/O 串行端口,有多級中斷處理系統(tǒng), 15 位時序同步技術器, RAM、 ROM 容量加大,尋址范圍可達64KB。第三階段( 1982-至今)位單片機微處理改良型及16 位單片機微處理階段民用電子產(chǎn)品、計算機系統(tǒng)中的部件控制器、智能儀器儀表、工業(yè)測控、網(wǎng)絡與通信的職能接口、軍工

4、領域、辦公自動化、集散控制系統(tǒng)、并行多機處理系統(tǒng)和局域網(wǎng)絡系統(tǒng)。二、MCS-51單片機系統(tǒng)簡介MCS-51系列單片機產(chǎn)品都是以Intel公司最早的典型產(chǎn)品8051為核心構成的。MCS-51單片機由CPU、RAM、ROM、I/O接口、定時器/計數(shù)器、中斷系統(tǒng)、內(nèi)部總線等部件組成。 8051 單片機的基本性能有:8 位 CPU;布爾代數(shù)處理器,具有位尋址能力;128B 內(nèi)部 RAM , 21 個專用寄存器;4KB 內(nèi)部掩膜 ROM;2個 16位可編程二進制加1 定時器 / 計數(shù)器;32個(4X 8位)雙向可獨立尋址的I/O 口;1 個全雙工UART (異步串行通信口);9 個中斷源,兩級中斷結構

5、;片內(nèi)振蕩器及時鐘電路,晶振頻率為1.2MHz12MHz;外部程序 / 數(shù)據(jù)存儲器尋址空間均為 64KB ;111條指令,大部分為單字節(jié)指令;單一 +5V 電源供電,雙列直插40 引腳 DIP 封裝。三、設計思想整體設計以單片機技術為核心,采用 C 語言進行軟件設計,增加了程序的可讀性和可移植性, 為了便于擴展和更改, 軟件的設計采用模塊化結構。 程序先向 LCD 更新時鐘芯片的時間與溫度傳感器的時間,然后進行初始化工作。程序由一個主函數(shù), 兩個定時器中斷程序, 一個時鐘設置子程序, 一個農(nóng)歷設置子程序,一個溫度設置子程序,一個延時子程序,一個調時子程序,一個顯示子程序構成。程序通過按鍵掃描程

6、序來確定是否調用中斷程序來對時間進行調整。用一子程序完成時分的調整, 通過循環(huán)掃描四個按鍵的電平變化來判斷對應按鍵是否按下,并帶有去抖動功能,四個按鍵分別有增加,減小,退出與功能選擇的作用。 通過功能選擇時鐘設置與鬧鐘設置, 使用加或減按鍵進行預置, 完成后可點退出鍵完成操作。可分為以下幾個功能模塊:1)主程序:定時器中斷初始化、時鐘與溫度更新程序與鍵盤監(jiān)控。2)計時:為定時器中斷服務子程序,完成刷新計時緩沖區(qū)的功能。3)農(nóng)歷:由陰歷換算對照表得出陽歷并顯示。4)鬧鐘:采用定時器中斷方式實現(xiàn)鬧鐘與整點報時。5) 溫度:由溫度傳感器將溫度傳送到 LCD 顯示。6)設置:由按鍵設置鬧鐘時間或時鐘時

7、間。7)鍵盤掃描:判斷是否有鍵按下,并確定鍵號。8) LCD 顯示:完成8 位動態(tài)顯示。編輯版 word四、硬件電路設計1.總體設計系統(tǒng)包括單片機主控模塊,溫度傳感器采集模塊,日歷時鐘模塊,按鍵調整模塊,蜂鳴器模塊,鬧鐘模塊。如圖1所示為系統(tǒng)設計圖。日歷時鐘芯片DS1302溫度傳感器DS18B20AT89C單片才51幾按鍵調整電路蜂鳴器鬧鐘LCD12864圖1系統(tǒng)設計圖71*如圖2所示為系統(tǒng)仿真圖。圖2系統(tǒng)仿真圖2.晶振電路如圖3所示,51單片機的內(nèi)部有一個用于構成振蕩器的高增益反相放大器,它的輸入端為XTAL1引腳,輸出端為XTAL2引腳,兩個跨接石英晶體及兩個電編輯版word容就可以構成穩(wěn)

8、定的自激振蕩器。電容器通常取30pF左右圖4復位電路3 .復位電路往單片機的復位引腳上輸入24個時鐘周期以上的高電平,即執(zhí)行復位操作。按鍵復位是指系統(tǒng)在運行時,按下一個開關,就能在 RST引腳產(chǎn)生一段時間的 高電平,使系統(tǒng)復位,常見的按鍵復位電路如圖 4所示。對12MHz晶振頻率而 言,電路中C取10pF, R取1KQ。4 . DS1302時鐘電路DS1302是一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時 鐘信號或RAM數(shù)據(jù)。DS13

9、02內(nèi)部有一個31 X 8的用于臨時性存放數(shù)據(jù)的 RAM 寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后 背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。圖5示出DS1302的引腳排列,其中Vcc1為后備電源,Vcc2為主電源。在主電源關閉的情況下,也能保持時鐘的連續(xù)運行。 DS1302由Vcc1或Vcc2兩者 中的較大者供電。當 Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST是復位/片選線,通過把RST輸入驅動置高電平

10、來啟動所有的數(shù)據(jù)傳送。RST 輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存 器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對 DS1302進行操作。如果在傳送過程中 RSTS 置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電動行時,在Vcc大于等于2.5V之前,RST必須保持低電平。中有在SCLK為低電平時,才能 將RST置為高電平,I/O為串行數(shù)據(jù)輸入端(雙向)。SCLK始終是輸入端。圖5 DS1302時鐘芯片5.溫度采集系統(tǒng)電路在本萬年歷當中溫度的采集采用數(shù)字溫度傳感器DS18B2Q它屬于單總線

11、器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡 單,在一根通信線,可以掛很多這樣的數(shù)字溫度計,十分方便。具有如下的經(jīng)濟特點:(1)只要求一個端口即可實現(xiàn)通信。(2)在DS18B20中的每個器件 上都有獨一無二的序列號。(3)實際應用中不需要外部任何元器件即可實現(xiàn)測 溫。(4)測量溫度范圍在55。C到+12S C之間。(5)數(shù)字溫度計的分辨率 用戶可以從9位到12位選擇。(6)內(nèi)部有溫度上、下限告警設置。如圖6所示cBUZ6.按鍵調整電路按鍵采用4個獨立的按鍵,一個功能鍵、一個退出鍵、一個加按鍵、一個減按鍵通過這四個按鍵可以來合理的設置時鐘的調整和鬧鈴的設置等。如圖7所

12、示與51單片機的P0.0P0.3的連接示意圖圖7按鍵調整電路7.鬧鐘提示電路當?shù)竭_整點時或者當前的時間等于51單片機中設置鬧鐘時間時蜂鳴器便會發(fā)出聲音進行提示。與單片機 P0.5引腳的連接電路如圖8所示8. LCD顯示電路在本萬年歷當中12864液晶顯示當前的實時時間重要的陰陽歷節(jié)日等功能12864液晶具有如下的特性:LCD1圖8鬧鐘提示電路圖9 LCD顯示電路3/Arin T 4ZAI>4 .E>/AUS .B/ADG.rv< QiIk PNF1)提供 8 位, 4 位并行接口及串行接口可選2)并行接口適配M6800 時序3)自動電源啟動復位功能4)內(nèi)部自建振蕩源64X 1

13、6位字符顯示 RAM (DDRAM 最多16字符X 4行,LCD顯示范圍16X2行)(改為半角輸入)2M位中文字型ROM (CGROM),總共提供8192個中 文字型(16X 16點陣)16K位半寬字型ROM(HCGROM),總共提供126個西文 字型(16X 8點陣)64X 16位字符產(chǎn)生 RAM (CGRAM) 15X 16位總共240點 的 ICONRAM ( ICONRAM )其與單片機的連接電路如圖9 所示。五、軟件設計框圖1. 主程序流程圖:編輯版 word編輯版word2.陰陽歷轉換流程圖:+置陽歷忠天數(shù)六、程序源代碼1.主程序#include < reg52.h >

14、#include < nongli.h >#include < Icd.h >#include < shezhi.h >#include < time.h>#include < wendu.h >#include < key.h > #define uchar unsigned char#define uint unsigned int/*sbit bell = P2 A 0; /定義蜂鳴器端口/*定時器設置整點報時*/ void Timer0_Service() interrupt 1static uchar count

15、 = 0;static uchar flag = 0; /記錄鳴叫的次數(shù) count = 0;TR0 = 0;/ 關閉 Timer0TH0 = 0x3c;TL0 = 0XB0;/ 延時 50 msTR0 = 1 ;/ 啟動 Timer0count +;if( count = 20 ) / 鳴叫 1 秒bell = bell;count = 0;flag +;編輯版 wordif( flag = 6 )flag = 0;TR0 = 0;/ 關閉 Timer0/*整點報時 一分鐘*/ uchar HexNum_Convert(uchar HexNum)將 16 進制數(shù)轉換成十進制數(shù)uchar Nu

16、mtemp;Numtemp=(HexNum>>4)*10+(HexNum&0X0F);return Numtemp;/*函數(shù)名稱: main()功 能:入口參數(shù):出口參數(shù):*/ void main( void )/ 定義時uchar clock_time6 = 0X00,0X59,0X23,0X09,0X04,0X11;間變量 秒 分 時 日 月 年uchar alarm_time2 = 10, 06; / 鬧鐘設置alarm_time0: 分鐘alarm_time1 小時:uchar temperature2; / 定 義 溫 度 變 量 temperature0 低 8

17、 位temperature1 高8位Lcd_Initial(); /LCD 初始化Clock_Fresh( clock_time ); /時間刷新Clock_Initial( clock_time ); / 時鐘初試化/* 中斷初始化 */EA = 1; / 開總中斷ET0 = 1; /Timer0 開中斷ET2 = 1; /Timer2 開中斷TMOD = 0x01 ; /Timer0 工作方式 1RCAP2H = 0x3c;RCAP2L = 0xb0; /Timer2 延時 50 ms while( 1 )switch( Key_Scan() )/ 按鍵掃描case up_array:Ke

18、y_Idle(); / 檢測按鍵松開break;case down_array:Key_Idle();/ 檢測按鍵松開break;case clear_array:Key_Idle(); / 檢測按鍵松開break;case function_array:Key_Function( clock_time, alarm_time );case null:Clock_Fresh( clock_time ); /時間刷新Lcd_Clock( clock_time ); / 時間顯示Sensor_Fresh( temperature ); 溫度更新/Lcd_Temperture( temperatur

19、e ); /溫度顯示Calendar_Convert( 0 , clock_time );Week_Convert( 0, clock_time );/ 整點報時if( ( * clock_time = 0x59 ) && ( * ( clock_time + 1 ) = 0x59 ) )bell = 0;TR2 = 1; / 啟動 Timer2/ 鬧鐘報警if( * alarm_time = HexNum_Convert(* ( clock_time + 1 ) )/ 分鐘相吻 if( *( alarm_time + 1 ) = HexNum_Convert(*( clock

20、_time + 2 ) ) / 小時相吻合bell = 0;TR2 = 1; / 啟動 Timer2break;2. 溫度控制程序#ifndef SENSOR#define SENSOR#define uchar unsigned char#define uint unsigned int/*DS18B20 管腳配置 */sbit dq = P2 A 1;/*DS18B20件延時專用*/void Sensor_Delay(uchar count)施時函數(shù)while(count-);/*從 DS18B20讀一個字節(jié)*/uchar Sensor_Read_Byte(void)uchar i = 0

21、;uchar temp = 0;for(i=8;i>0;i-)dq = 0; / 給脈沖信號temp >>= 1;dq = 1; / 給脈沖信號if(dq)temp |= 0x80;Sensor_Delay(20);return (temp);DS18B20/*寫一個字節(jié)*/ void Sensor_Write_Byte(uchar temp)uchar i = 0;for(i=8;i>0;i-)dq = 0;dq = temp&0x01;Sensor_Delay(20);dq = 1;temp>>=1;/*DS18B20初始化*/uchar Sen

22、sor_Initial(void)uchar i = 0;dq = 1;Sensor_Delay(1);dq = 0;Sensor_Delay(100);dq = 1;Sensor_Delay(6);i = dq;若 x=1 則初始化失敗Sensor_Delay(130);return (i);/ DQ 復位/ 稍做延時/ 單片機將 DQ 拉低/ 精確延時,大于480us/ 拉高總線/ 稍做延時后/ 若 x=0 則初始化成功,*/*讀取并顯示溫度*void Sensor_Fresh(uchar * temperature )Sensor_Initial();/ 跳過讀序號列號的操作/ 啟動溫度

23、轉換/ 跳過讀序號列號的操作/ 讀取溫度寄存器/ 低位/ 高位Sensor_Write_Byte( 0xCC );Sensor_Write_Byte( 0x44 );Sensor_Initial();Sensor_Write_Byte( 0xCC );Sensor_Write_Byte( 0xBE );temperature 0 = Sensor_Read_Byte();temperature 1 = Sensor_Read_Byte();#endif3. 日歷設置程序#ifndef _SUN_MOON #define _SUN_MOON /*/ #define uchar unsigned

24、char#define uint unsigned int#include < shezhi.h >#include < lcd.h >/* 功能 : 讀取數(shù)據(jù)表中農(nóng)歷的大月或小月 ,如果大月返回1, 小月返回 0*bit get_moon_day( uchar month_p,uint calendar_address )uchar temp,temp1;temp1=(month_p+3)/8;temp=0x80>>(month_p+3)%8);temp=year_codecalendar_address+temp1&temp;if(temp=0)

25、return(0);elsereturn(1);/* 功能 : 輸入 BCD 的陽歷數(shù)據(jù), 輸出 BCD 陰歷數(shù)據(jù) ( 1901 - 2099 )c_flag陽歷的世紀標志clock_time:時鐘地址* 說明 : c_flag = 0 :21世紀 c_flag = 1 :19世紀*/void Calendar_Convert( uchar c_flag, uchar * clock_time )bit flag_month, flag_year;uchar year, month, day, month_point; /定義/年 月 天uchar temp1, temp2, temp3;ui

26、nt calendar_address; /定義農(nóng)歷地址/uint day_number;uchar clock_moon3; /定義陰歷clock_time += 3; / 指向日day = ( * clock_time >> 4 ) * 10 + ( *clock_time & 0x0f ); /BCD 轉換十進制clock_time +; / 指向月month = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f ); /BCD 轉換十進制clock_time +; / 指向年year = ( *

27、 clock_time >> 4 ) * 10 + ( * clock_time & 0x0f ); /BCD 轉換十進制/ 定位日歷地址if( c_flag = 0 )calendar_address = ( year + 99 ) * 3;elsecalendar_address = ( year - 1 ) * 3;/ 春節(jié) (正月初一)所在的陽歷月份temp1 = year_code calendar_address +2 & 0x60; /Bit6Bit5: 春節(jié)所在的陽歷月份temp1 >>= 5 ;/ 春節(jié) (正月初一)所在的陽歷日期tem

28、p2 = year_code calendar_address + 2 & 0x1f; /Bit4 Bit0# 節(jié)所在的陽歷日期/ 計算春節(jié)(正月初一)離當年元旦 1 月 1 日 (陽歷 ) 的天數(shù); 春節(jié)只會在陽歷1月 或 2月/*if( temp1 = 1 )temp3 = temp2 - 1;elsetemp3 = temp2 + 31 - 1;*/temp3=temp2-1;if(temp1!=1) temp3+=0x1f;/ 計算陽歷月離當年元旦 1 月 1 日 (陽歷 ) 的天數(shù)if( month < 10 )day_number = day_code1 month

29、- 1 + day ;elseday_number = day_code2 month - 10 + day ;/ 如果陽歷的月大于2 且該年的 2 月為閏月,天數(shù)加1/ 閏年指的就是陽歷有閏日或陰歷有閏月的一年;/ 陽歷四年一閏,在二月加一天,這一天叫做閏日:/ 農(nóng)歷三年一閏, 五年兩閏, 十九年七閏, 每逢閏年所加的一個月叫做閏月。if( ( month <= 2 ) | ( year % 0x04!= 0) ) day_number-=1;/ day_number +;/if (month<2)|(year%0x04!=0)/day_number-=1;/ 判斷陽歷日 在春節(jié)

30、(正月初一) 之前 還是 之后if( day_number >= temp3 ) / 陽歷在春節(jié)之后 或者 春節(jié)當日day_number -= temp3;month = 1;month_point = 1; / month_point 為月份指向,陽歷日在春季前就是春季flag_month = get_moon_day( month_point, calendar_address ); /檢查該陰歷月的大小 大月返回 1 小月返回 0flag_year = 0;/* if( flag_month )temp1 = 30; / 大月 30 天elsetemp1 = 29; / 小月 29

31、 天*/if (flag_month=0) temp1=29; elsetemp1=30;/ 閏月所在的月分temp2 = year_code calendar_address & 0xf0;temp2 >>= 4; / 提取高四位假如是 0 表示沒有閏月while( day_number >= temp1 )day_number -= temp1;month_point +;if( month = temp2 )flag_year = flag_year;if( flag_year = 0 )month +=1;elsemonth + ;flag_month = g

32、et_moon_day( month_point, calendar_address );if( flag_month )temp1 = 30;elsetemp1 = 29;day = day_number + 1;else / 陽歷在春節(jié)之前使用以下代碼進行運算temp3 -= day_number;if( year = 0 ) year = 0xe3; c_flag = 1; elseyear -= 1;calendar_address -= 3;month = 0xc;temp2 = year_code calendar_address & 0xf0;temp2 >>

33、= 4; / 提取高 4 位flag_year=0;if( temp2 = 0 )month_point = 12;elsemonth_point = 13;/flag_year = 0;flag_month = get_moon_day( month_point, calendar_address );if( flag_month )temp1 = 30;elsetemp1 = 29;while( temp3 > temp1 )temp3 -= temp1;month_point -;if( flag_year = 0 )month -=1;if( month = temp2 )fla

34、g_year = flag_year;flag_month = get_moon_day( month_point, calendar_address );if( flag_month )temp1 = 0x1e;elsetemp1 = 0x1d;day = temp1 - temp3 + 1;/HEX->BCD , 運算結束后,把數(shù)據(jù)轉換為BCD 數(shù)據(jù)temp1 = year / 10;temp1 <<= 4;clock_moon2 = temp1 | ( year % 10 );temp1 = month / 10;temp1 <<= 4;clock_moon

35、1 = temp1 | ( month % 10 );temp1 = day / 10;temp1 <<= 4;clock_moon0 = temp1 | ( day % 10 );Lcd_Lunar_Calendar( clock_moon );/*算法 : ( 日期 + 年份 + 所過閏年 + 月校正 ) / 7 的余數(shù)就是星期 如果是閏年又不到 3 月份上述之和 要減一天 再*/void Week_Convert( bit c, uchar * clock_time )uchar year, month, day; /定義/年 月 天uchar temp;clock_time

36、 += 3; / 指向日day = ( * clock_time >> 4 ) * 10 + ( *clock_time & 0x0f ); /BCD 轉換十進制clock_time +; / 指向月month = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f );clock_time +; / 指向年year = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f );if( c = 0 ) / 如果為 21 世紀 ,年份數(shù)加

37、100year += 100;temp = year / 4; / 所過閏年數(shù)只算1900年之后的temp = year + temp;temp = temp % 0x07;為節(jié)省資源,先進行一次取余,避免數(shù)大于0xff,避免使用整型數(shù)據(jù)temp = temp + day + table_week month - 1 ;if( ( year % 4 = 0 ) && ( month <3) )temp -=1;Lcd_Week( temp % 7 );/*/ #endif4. 時鐘控制程序#ifndef REALTIMERDS1302 #define REALTIMERD

38、S1302 /* 預定義 */ #define uchar unsigned char管腳配置#define uint unsigned int/*DS1302 */ sbit clock_rst = P2 A4;sbit clock_io = P2A3;sbit clock_sclk= P2A2;/* 為了編程方便定義的位變量*/ sbit ACC0 = ACC A 0;sbit ACC7 = ACC A 7;#define second_address 0x80#define minuteaddress 0x82 #define houraddress 0x84 #define day_a

39、ddress 0x86 #define monthaddress 0x88 #define year_address0x8C /*功 能:向時鐘DS1302寫入一個字節(jié)*/ void Clock_Write_Byte(uchar temp)uchar i;ACC=temp;for(i=8; i>0; i-)clock_io = ACC0;/ 相當于匯編中的RRCclock_sclk = 1;clock_sclk = 0;ACC = ACC >> 1;/*功 能:從時鐘DS1302讀取一個字節(jié)*uchar Clock_Read_Byte(void)uchar i;for(i=8

40、; i>0; i-)ACC = ACC >>1;/ 相當于匯編中的 RRCACC7= clock_io;clock_sclk = 1;clock_sclk = 0;return(ACC);/*功 能:向時鐘DS1302寫入一個時間*/ void Clock_Write_Time(uchar address, uchar temp)clock_sclk=0;clock_rst=0;clock_rst=1;Clock_Write_Byte(address);Clock_Write_Byte(temp);clock_rst=0;clock_sclk=1;*功 能:從時鐘DS1302

41、讀出一個時間*uchar Clock_Read_Time(uchar address)uchar temp=0;clock_sclk=0;clock_rst=0;clock_rst=1;Clock_Write_Byte( address|0x01 );temp=Clock_Read_Byte();clock_rst=0;clock_sclk=1;return(temp);* 功 能:時鐘初始化*void Clock_Initial(uchar *clock_time ) Clock_Write_Time(0x8e,0x00);/WP=0 寫操作*clock_time &= 0x7f;/

42、 最高位為 0 時鐘芯片工作Clock_Write_Time( second_address, * clock_time ); / 秒clock_time +;Clock_Write_Time( minute_address, * clock_time ); / 分clock_time +;Clock_Write_Time( hour_address, * clock_time );/ 時clock_time +;Clock_Write_Time( day_address, * clock_time );/ 日clock_time +;Clock_Write_Time( month_address, * clock_time); / 月clock_time +;Clock_Write_Time( year

溫馨提示

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

評論

0/150

提交評論