第5組萬年歷實(shí)驗(yàn)報(bào)告_第1頁
第5組萬年歷實(shí)驗(yàn)報(bào)告_第2頁
第5組萬年歷實(shí)驗(yàn)報(bào)告_第3頁
第5組萬年歷實(shí)驗(yàn)報(bào)告_第4頁
第5組萬年歷實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、北京郵電大學(xué)單片機(jī)小學(xué)期實(shí)驗(yàn)報(bào)告 2012年9月12日目錄1硬件設(shè)計(jì)-3 1.1設(shè)計(jì)要求-3 1.2 硬件框圖-3 1.3 硬件選擇-32軟件設(shè)計(jì)-6 2.1編程環(huán)境及語言-6 2.2 程序框圖-63電路設(shè)計(jì)-6 3.1 DS1302電路-6 3.2 LCD1602電路-7 3.3 4*4鍵盤電路-73.4 蜂鳴器電路-8 3.5 綜合電路-84 程序設(shè)計(jì)-95 操作方法-376 運(yùn)行結(jié)果-377實(shí)驗(yàn)過程排錯(cuò)-388 心得體會(huì)及建議-38 8.1 心得體會(huì)-38 8.2建議-389 附錄-38 9.1 組內(nèi)分工-38 9.2 參考文獻(xiàn)-381硬件設(shè)計(jì) 1.1設(shè)計(jì)要求實(shí)現(xiàn)年月日、時(shí)分秒、星期的顯

2、示功能,鬧鈴功能。用鍵盤來實(shí)現(xiàn)日期和時(shí)間的調(diào)整功能,調(diào)整要求星期能自動(dòng)更新,能實(shí)現(xiàn)位調(diào),且閏年時(shí)2月份的天數(shù)自動(dòng)變?yōu)?9。顯示格式:四位年,兩位月,兩位日,星期顯示數(shù)字,兩位時(shí),兩位分,兩位秒。比如:YYYY-MM-DD XHH:MM:SS鬧鈴要求用鍵盤定時(shí)間,到時(shí)間后蜂鳴器響5s左右。 1.2 硬件框圖芯片atmega16液晶屏鍵盤時(shí)鐘芯片蜂鳴器日期時(shí)間由硬件軟件結(jié)合產(chǎn)生;鍵盤完成當(dāng)前日期時(shí)間的調(diào)整和鬧鈴定時(shí)功能。過程與結(jié)果由控制芯片分別輸出到顯示器上,鬧鈴鈴聲設(shè)為蜂鳴器鳴叫。 1.3 硬件選擇1).顯示模塊由于八段數(shù)碼管連線多且復(fù)雜,因此選擇的是ds1602液晶顯示屏。八段數(shù)碼管的優(yōu)點(diǎn):亮

3、度高,顯示大。驅(qū)動(dòng)部份的軟件簡單;缺點(diǎn):與液晶相比,耗電及體積大。數(shù)碼管只能單純的顯示數(shù)字,不能生動(dòng)的表達(dá)各個(gè)參數(shù)的信息,消耗電力也比led液晶顯示器大。LCD液晶顯示器它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊,在單片機(jī)系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個(gè)優(yōu)點(diǎn):顯示質(zhì)量高,由于液晶顯示器每一個(gè)點(diǎn)在收到信號(hào)后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點(diǎn)。因此,液晶顯示器畫質(zhì)高且不會(huì)閃爍。數(shù)字式接口,液晶顯示器都是數(shù)字式的,和單片機(jī)系統(tǒng)的接口更加簡單可靠,操作更加方便。體積小、重量輕,液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達(dá)

4、到顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。功耗低,相對而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng)IC上,因而耗電量比其它顯示器要少得多。Lcd液晶能一屏把本設(shè)計(jì)所要顯示的信息表達(dá)完整。而且lcd耗電小,體積小很適合與室內(nèi)使用。本設(shè)計(jì)的要求日期時(shí)間以數(shù)字表示、星期用3位英文字符表示共21個(gè)字符,lcd1602能顯示32個(gè)字符,足以完成顯示功能。Lcd1602有16個(gè)引腳,各個(gè)引腳功能見下表:引腳號(hào)引腳名電平輸入/輸出作用1VSS電源地2VDDVcc電源(+5v)3VEE對比調(diào)整電壓4RS0/1輸入0=輸入指令,1=輸入數(shù)據(jù)5R/W0/1輸入0=向lcd寫入數(shù)據(jù)或指令1=從

5、lcd讀取數(shù)據(jù)6E1,1-0輸入使能信號(hào),1=讀取信息1-0(下降沿)執(zhí)行指令7DB00/1輸入/輸出數(shù)據(jù)總線line08DB10/1輸入/輸出數(shù)據(jù)總線line19DB20/1輸入/輸出數(shù)據(jù)總線line210DB30/1輸入/輸出數(shù)據(jù)總線line311DB40/1輸入/輸出數(shù)據(jù)總線line412DB50/1輸入/輸出數(shù)據(jù)總線line513DB60/1輸入/輸出數(shù)據(jù)總線line614DB70/1輸入/輸出數(shù)據(jù)總線line715AVccLcd背光正極14KLcd背光負(fù)極表 1-1 lcd1602引腳及功能2).控制芯片學(xué)校提供的Atmega16芯片高性能、低功耗的8位AVR微處理器先進(jìn)的RISC

6、結(jié)構(gòu)131條指令大多數(shù)指令執(zhí)行時(shí)間為單個(gè)時(shí)鐘周期32個(gè)8位通用工作寄存器全靜態(tài)工作工作于16MHz時(shí)性能高達(dá)16MIPS只需兩個(gè)時(shí)鐘周期的硬件乘法器非易失性程序和數(shù)據(jù)存儲(chǔ)器16K 字節(jié)的系統(tǒng)內(nèi)可編程Flash,擦寫壽命: 10,000次具有獨(dú)立鎖定位的可選Boot代碼區(qū),通過片上Boot程序?qū)崿F(xiàn)系統(tǒng)內(nèi)編程,真正的同時(shí)讀寫操作512 字節(jié)的EEPROM,擦寫壽命: 100,000次1K字節(jié)的片內(nèi)SRAM可以對鎖定位進(jìn)行編程以實(shí)現(xiàn)用戶程序的加密JTAG 接口( 與IEEE 1149.1 標(biāo)準(zhǔn)兼容)符合JTAG 標(biāo)準(zhǔn)的邊界掃描功能支持?jǐn)U展的片內(nèi)調(diào)試功能通過JTAG 接口實(shí)現(xiàn)對Flash、EEPROM

7、、熔絲位和鎖定位的編程ATMEGA16的管腳3).日期時(shí)間生成模塊低功耗時(shí)鐘芯片DS1302可以對年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)榷喾N功能。DS1302用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄上,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄。這種記錄對長時(shí)間的連續(xù)測控系統(tǒng)結(jié)果的分析以及對異常數(shù)據(jù)出現(xiàn)的原因的查找有重要意義。采用DS1302作為記錄測控系統(tǒng)中的數(shù)據(jù)記錄,其軟硬件設(shè)計(jì)簡單,時(shí)間記錄準(zhǔn)確,既避免了連續(xù)記錄的大工作量,又避免了定時(shí)記錄的盲目性,給連續(xù)長時(shí)間的測量、控制系統(tǒng)的正常運(yùn)行及檢查都來了很大的方便,可廣泛應(yīng)用于長時(shí)間連續(xù)的測控系統(tǒng)中。在測量控制系統(tǒng)中,特別是長

8、時(shí)間無人職守的測控系統(tǒng)中,經(jīng)常需要記錄某些具有特殊意義的數(shù)據(jù)及其出現(xiàn)的時(shí)間。記錄及分析這些特殊意義的數(shù)據(jù),對測控系統(tǒng)的性能分析及正常運(yùn)行具有重要的意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時(shí)采樣或定時(shí)采樣,沒有具體的時(shí)間記錄,因此只能記錄數(shù)據(jù)而無法準(zhǔn)確記錄其出現(xiàn)的時(shí)間;若采用單片機(jī)計(jì)時(shí),一方面需要采用計(jì)數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而且某些測控系統(tǒng)可能不允許。而在系統(tǒng)中采用DS1302則能很好地解決這個(gè)問題圖3-4 DS1302內(nèi)部結(jié)構(gòu)圖2軟件設(shè)計(jì) 2.1編程環(huán)境及語言本設(shè)計(jì)是在ICCV7AVR中編程的,然后通過AVR studio下載的。2.2 程序框圖4*4鍵盤

9、驅(qū)動(dòng)程序LCD1602驅(qū)動(dòng)程序DS1302驅(qū)動(dòng)程序Delay函數(shù)Main函數(shù)3電路設(shè)計(jì) 3.1 DS1302電路圖3-1 ds1302與單片機(jī)接口電路 3.2 LCD1602電路圖3-2 1602液晶與單片機(jī)接口電路 3.3 4*4鍵盤電路圖3-3 4*4key與單片機(jī)接口電路 3.4蜂鳴器電路圖3-4 蜂鳴器與單片機(jī)接口電路 3.5綜合電路4 程序設(shè)計(jì) 代碼分析Yj1602函數(shù):/*/void LCD1602_sendbyte(uchar DatCmd, uchar dByte)if (DatCmd = iCmd)/指令操作LCDa_CLR_RS;elseLCDa_SET_RS;LCDa_C

10、LR_RW;/寫操作LCDa_SET_E;LCDa_DO = dByte;/寫入數(shù)據(jù)Delayms(1);LCDa_CLR_E;/*函數(shù)名稱: LCD1602_sendstr功 能: 向1602液晶寫入一個(gè)字符串參 數(shù): ptString-字符串指針返回值 : 無/*/void LCD1602_sendstr(uchar *ptString)while(*ptString)!=0) /字符串未結(jié)束LCD1602_sendbyte(iDat, *ptString+);/*函數(shù)名稱: LCD1602_clear功 能: 1602液晶清屏參 數(shù): 無返回值 : 無/*/void LCD1602_cl

11、ear(void)LCD1602_sendbyte(iCmd,LCDa_CLS);Delayms(2);/ 清屏指令寫入后,2ms 的延時(shí)是很必要的!/*函數(shù)名稱: LCD1602_readBF功 能: 1602液晶清屏參 數(shù): 無返回值 : busy-為1時(shí)忙,為0時(shí)可以接收指令/*/uchar LCD1602_readBF(void) uchar busy;busy=LCD1602_readbyte(iCmd);/讀回BF標(biāo)志和地址if(busy&0x80)/忙busy=1;else /不忙,可以寫入busy=0;return busy;/*函數(shù)名稱: LCD1602_gotoXY功 能:

12、 移動(dòng)到指定位置參 數(shù): Row-指定的行 Col-指定的列返回值 : 無/*/void LCD1602_gotoXY(uchar Row, uchar Col)switch (Row) /選擇行case 2:LCD1602_sendbyte(iCmd, LCDa_L2 + Col); break;/寫入第2行的指定列default:LCD1602_sendbyte(iCmd, LCDa_L1 + Col); break;/寫入第1行的指定列/*函數(shù)名稱: LCD1602_initial功 能: 1602液晶初始化參 數(shù): 無返回值 : 無/*/void LCD1602_initial(voi

13、d)Delayms(100);/ 等待內(nèi)部復(fù)位LCD1602_portini();/端口初始化LCD1602_sendbyte(iCmd, LCDa_FUNCTION);/ 功能、模式設(shè)定while(LCD1602_readBF();LCD1602_sendbyte(iCmd, LCDa_ON);/打開顯示while(LCD1602_readBF();LCD1602_clear();/清屏while(LCD1602_readBF();LCD1602_sendbyte(iCmd, LCDa_ENTRY);/ 輸入模式設(shè)定Ds1302函數(shù):/*RTC常量*/#define RTC_CLK PD7

14、/PC0 PB7#define RTC_DATA PD0 /PC1 PB5#define RTC_CS PC7#define RTC_DDR DDRD /DDRB#define RTC_PORT PORTD /PORTB#define RTC_PIN PIND /PINB#define RTC_CS_DDR DDRC#define RTC_CS_PORT PORTC#define RTC_CS_PIN PINC#define LCDg_DDR_ON DDRD |= BIT(1); /LCD背光設(shè)置#define LCDg_ON PORTD |= BIT(1); /LCD背光開啟#define

15、LCDg_OFF PORTD &=BIT(1); /LCD背光關(guān)閉/命令#define RD 0x01#define WR 0x00#define C_SEC0x80/秒#define C_MIN0x82/分#define C_HR0x84/時(shí)#define C_DAY0x86/日#define C_MTH0x88/月#define C_WK0x8A/星期 DATE#define C_YR0x8C/年#define C_WP0x8E/控制(寫保護(hù))#define C_CHARGE0x90/涓流充電#define C_BURST0xBE/時(shí)鐘多字節(jié)/配置#define CLK_HALT0x80/

16、停止時(shí)鐘控制位 SECONDbit7#define CLK_START0x00/啟動(dòng)時(shí)鐘#define M12_240x80/12/24小時(shí)值選擇位 HOURbit7 #define PROTECT0x80/寫保護(hù)控制位 CONTROLbit7 #define UPROTECT0x00/寫保護(hù)控制位 CONTROLbit7 /涓流充電控制常量#define TC_D1R20xA5/high 1 Diode +2K Resistors #define TC_D2R80xAB/low 2 Diodes+8K Resistors #define TC_DISABLED0x00/Disabled(TC

17、S1010 or DS=00 or RS=00)/RAM 命令#define C_RAMBASE0xC0/RAM0RAM301 地址需左移一位 /*函數(shù)名稱: DS1302_init功 能: 初始化DS1302的數(shù)據(jù)接口參 數(shù): 無返回值 : 無/*/void DS1302_portinit(void) RTC_DDR|=BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS);/將時(shí)鐘端(RTC_CLK)數(shù)據(jù)端(RTC_DATA)片選端(RTC_CS)設(shè)置為輸出/RTC_CS_DDR|=BIT(RTC_CS);/*函數(shù)名稱: DS1302_writeB功 能: 向DS13

18、02寫入一個(gè)字節(jié)數(shù)據(jù)(沒有RST操作)參 數(shù): byte-要寫入的數(shù)據(jù)返回值 : 無/*/void DS1302_writeB(uchar byte)uchar i;for(i=0;i=1; /數(shù)據(jù)右移1位,為送出新數(shù)據(jù)位做準(zhǔn)備/*函數(shù)名稱: DS1302_readB功 能: 從DS1302讀出一個(gè)字節(jié)數(shù)據(jù)(沒有RST操作)參 數(shù): 無返回值 : byte-讀出的數(shù)據(jù)/*/uchar DS1302_readB(void)uchar i,byte=0;RTC_DDR&=BIT(RTC_DATA); /將數(shù)據(jù)端口設(shè)置為輸入 RTC_PORT&=BIT(RTC_DATA); /無上拉電阻for(i=

19、0;i=1; /保存讀入的數(shù)據(jù)位RTC_PORT|=BIT(RTC_CLK); /時(shí)鐘上升沿Delayus(10); /延時(shí),調(diào)整時(shí)鐘脈沖寬度RTC_PORT&=BIT(RTC_CLK); /時(shí)鐘下降沿,DS1302輸出數(shù)據(jù)位Delayus(10); /等待數(shù)據(jù)變化(MEGA16太快,必須等待DS1302的數(shù)據(jù)位輸出,否則不能正確讀出)if(RTC_PIN&BIT(RTC_DATA) /當(dāng)前位是否是高電平byte|=BIT(RTC_CLK); /是高電平就將返回?cái)?shù)據(jù)的當(dāng)前位置1elsebyte&=BIT(RTC_CLK); /是低電平就將返回?cái)?shù)據(jù)的當(dāng)前位置0RTC_DDR|=BIT(RTC_D

20、ATA); /最后將數(shù)據(jù)端口設(shè)置為輸出return byte; /返回讀出的數(shù)據(jù)/*函數(shù)名稱: DS1302_writeD功 能: 向DS1302的某個(gè)地址寫入一個(gè)字節(jié)數(shù)據(jù)參 數(shù): addr-地址值(寄存器或RAM)data-要寫入的地址返回值 : 無/*/void DS1302_writeD(uchar addr,uchar data)RTC_CS_PORT &=BIT(RTC_CS); /拉低片選端RTC_PORT &=BIT(RTC_CLK); /拉低時(shí)鐘端Delayus(10);RTC_CS_PORT |= BIT(RTC_CS); /拉高片選端Delayus(10); /調(diào)整片選脈沖

21、DS1302_writeB(addr); /寫入操作命令(地址)Delayus(10);RTC_PORT &=BIT(RTC_CLK); /拉低時(shí)鐘端Delayus(10);DS1302_writeB(data); /寫入數(shù)據(jù)RTC_PORT &=BIT(RTC_CLK); /拉低時(shí)鐘端Delayus(10); /調(diào)整片選脈沖RTC_CS_PORT &=BIT(RTC_CS); /拉低片選端/*函數(shù)名稱: DS1302_readD功 能: 從DS1302的某個(gè)地址讀出一個(gè)字節(jié)數(shù)據(jù)參 數(shù): addr-地址值(寄存器或RAM)返回值 : data-讀出的數(shù)據(jù)/*/uchar DS1302_read

22、D(uchar addr)uchar data;RTC_CS_PORT&=BIT(RTC_CS); /拉低片選端RTC_PORT &=BIT(RTC_CLK); /拉低時(shí)鐘端Delayus(10);RTC_CS_PORT|=BIT(RTC_CS); /拉高片選端Delayus(10); /調(diào)整片選脈沖DS1302_writeB(addr); /寫入操作命令(地址)Delayus(10);data=DS1302_readB(); /讀出數(shù)據(jù)Delayus(10);RTC_PORT&=BIT(RTC_CLK); /拉低時(shí)鐘端RTC_CS_PORT&=BIT(RTC_CS); /拉低片選端retur

23、n data; /返回讀出的數(shù)據(jù)/*函數(shù)名稱: DS1302_setT功 能: 設(shè)置DS1302的時(shí)間參 數(shù): ptTimeD-設(shè)置時(shí)間數(shù)組指針返回值 : 無/*/void DS1302_setT(uchar ptTimeD) uchar i; uchar addr = 0x80; /寫入地址從秒寄存器開始 DS1302_writeD(C_WP|WR,UPROTECT); /控制命令,WP位為0,允許寫操作Delayms(5); for(i=0;i7;i+) DS1302_writeD(addr|WR,ptTimeDi); / 秒 分 時(shí) 日 月 星期 年 addr+=2;Delayms(1)

24、; DS1302_writeD(C_WP|WR,PROTECT); /控制命令,WP位為1,不允許寫操作/*函數(shù)名稱: DS1302_getT功 能: 讀取DS1302的當(dāng)前時(shí)間參 數(shù): time-讀取的時(shí)間數(shù)組返回值 : 無/*/void DS1302_getT(uchar time) uchar i;/下面的是單次讀寫/* uchar addr = 0x80; /讀取地址從秒寄存器開始 for(i=0;i7;i+) timei=DS1302_readD(addr|RD); / 秒 分 時(shí) 日 月 星期 年 addr+=2;*/下面是多字節(jié)讀取/ RTC_CS_PORT&=BIT(RTC_C

25、S); /拉低片選端Delayus(10);RTC_CS_PORT|=BIT(RTC_CS); /拉高片選端Delayus(10); /調(diào)整片選脈沖DS1302_writeB(0xbf); / 0xbf:時(shí)鐘多字節(jié)讀取命令 for (i=0;i8;i+) /時(shí)間數(shù)據(jù)的存放格式是: /秒,分,時(shí),日,月,星期,年,控制timei=DS1302_readB(); /【7個(gè)數(shù)據(jù)(BCD格式)+1個(gè)控制】 RTC_CS_PORT&=BIT(RTC_CS); /拉低片選端/RTC_PORT&=BIT(RTC_CLK); /拉低時(shí)鐘端(時(shí)鐘端在不操作時(shí)為低)/*函數(shù)名稱: DS1302_check功 能:

26、 檢測DS1302是否正常工作參 數(shù): 無返回值 : exist-為TRUE為檢測到DS1302,為FALSE為沒檢測到/*/uchar DS1302_check(void)uchar exist; DS1302_writeD(C_WP|WR,UPROTECT); /寫入寫允許命令 DS1302_writeD(C_RAMBASE|WR,0xA5); /RAM0寫入0xA5 exist=DS1302_readD(C_RAMBASE|RD); /讀取RAM0 if(exist=0xA5)exist=TRUE; /如果讀取值與寫入值相等,返回TRUE else exist=FALSE; /如果讀取值

27、與寫入值不相等,返回FALSEreturn exist;/*函數(shù)名稱: DS1302_init功 能: 初始化DS1302參 數(shù): 無返回值 : 無/*/void DS1302_init(void)DS1302_writeD(C_WP|WR,UPROTECT); /寫入寫允許命令DS1302_writeD(C_SEC|WR,CLK_START);/啟動(dòng)振蕩器,DS1302開始工作DS1302_writeD(C_WP|WR,PROTECT); /控制命令,WP位為1,不允許寫操作 /*函數(shù)名稱: BCD_ASCII功 能: 將壓縮BCD碼轉(zhuǎn)換成ascii碼參 數(shù): BCD-將要轉(zhuǎn)換的壓縮BCD碼

28、ptasc-轉(zhuǎn)換后的ASCII碼數(shù)組指針返回值 : 無/*/void BCD_ASCII(uchar BCD,uchar ptasc) ptasc0=BCD/16|0x30;/0X5835 38 /轉(zhuǎn)換十位ptasc1=BCD&0x0F|0x30; /轉(zhuǎn)換個(gè)位/*函數(shù)名稱: ASCII_BCD功 能: 將ascii碼轉(zhuǎn)換成壓縮BCD碼參 數(shù): 返回值 : 無/*/uchar ASCII_BCD(uchar LCDstrh,uchar LCDstrl) uchar LCDstr = (LCDstrh * 16) | (LCDstrl & 0x0f);return LCDstr;/*函數(shù)名稱: G

29、et_change功 能: 將輸入的時(shí)間數(shù)據(jù)匹配成gettime數(shù)組中的形式參 數(shù): LCDstr,gettime返回值 : 無/*/void Get_change(uchar * time,uchar * LCDstr) uchar i,asc2;for(i = 0;i 3;i+) BCD_ASCII(time2-i,asc); LCDstr7 + i*2 = asc0; LCDstr8 + i*2 = asc1;BCD_ASCII(time6,asc); LCDstr0=asc0;LCDstr1=asc1;BCD_ASCII(time4,asc);LCDstr2=asc0;LCDstr3=

30、asc1;BCD_ASCII(time3,asc);LCDstr4=asc0;LCDstr5=asc1;BCD_ASCII(time5,asc);LCDstr6=asc1;/*函數(shù)名稱: Input_change(LCDstr,gettime)功 能: 將輸入的時(shí)間數(shù)據(jù)匹配成gettime數(shù)組中的形式參 數(shù): LCDstr,gettime返回值 : 無/*/void Input_change(uchar * LCDstr,uchar * gettime) uchar i,week;uint day,month,year;for(i = 0;i 13;i+) switch(LCDstri) ca

31、se 1:LCDstri = 0x01;break;case 2:LCDstri = 0x02;break;case 3:LCDstri = 0x03;break;case 4:LCDstri = 0x04;break;case 5:LCDstri = 0x05;break;case 6:LCDstri = 0x06;break;case 7:LCDstri = 0x07;break;case 8:LCDstri = 0x08;break;case 9:LCDstri = 0x09;break;case 0:LCDstri = 0x00;break; gettime0 = ASCII_BCD(

32、LCDstr11,LCDstr12);gettime1 = ASCII_BCD(LCDstr9,LCDstr10);gettime2 = ASCII_BCD(LCDstr7,LCDstr8);gettime3 = ASCII_BCD(LCDstr4,LCDstr5);gettime4 = ASCII_BCD(LCDstr2,LCDstr3);gettime5 = LCDstr6;gettime6 = ASCII_BCD(LCDstr0,LCDstr1);day = (gettime3&0xF0)/16*10 + (gettime3&0x0F);month = (gettime4&0xF0)/1

33、6*10 + (gettime4&0x0F);year = (gettime6&0xF0)/16*10 + (gettime6&0x0F);week = (day + 2*month + 3*(month + 1)/5 + year + year/4 - year/100 + year/400) % 7 + 1;gettime5 = (week % 10)&0x0F;/*函數(shù)名稱: Noisein_change功 能: 將輸入的時(shí)間數(shù)據(jù)匹配成gettime數(shù)組中的形式參 數(shù): LCDstr,gettime返回值 : 無/*/void Noisein_change(uchar * LCDstr,

34、uchar * time) uchar i;for(i = 0;i 13;i+) switch(LCDstri) case 1:LCDstri = 0x01;break;case 2:LCDstri = 0x02;break;case 3:LCDstri = 0x03;break;case 4:LCDstri = 0x04;break;case 5:LCDstri = 0x05;break;case 6:LCDstri = 0x06;break;case 7:LCDstri = 0x07;break;case 8:LCDstri = 0x08;break;case 9:LCDstri = 0x

35、09;break;case 0:LCDstri = 0x00;break; time0 = ASCII_BCD(LCDstr4,LCDstr5);time1 = ASCII_BCD(LCDstr2,LCDstr3);time2 = ASCII_BCD(LCDstr0,LCDstr1);/*函數(shù)名稱: Disp_time功 能: 在1602液晶上顯示當(dāng)前時(shí)間(第1行格式:年-月-日 星期;第2行格式:時(shí)-分-秒)參 數(shù): time-時(shí)間數(shù)組返回值 : 無/*/#define LCDa_RS PC0/定義三個(gè)控制引腳/#define LCDa_RW PC1/#define LCDa_E PC6vo

36、id write_com(uchar com) PORTC&=BIT(0); PORTC&=BIT(1); PORTA=com; PORTC|=BIT(6); Delayus(10); PORTC&=BIT(6);void write_date(uchar date) PORTC|=BIT(0); PORTC&=BIT(1); PORTA=date; PORTC|=BIT(6); Delayus(10); PORTC&=BIT(6); void Disp_time(uchar time) uchar i,asc2; uchar line1=0,0,-,0,0,-,0,0, , , , , , , , ;/顯示第1行的字符數(shù)組 uchar line29=0,0,:,0,0,:,0,0,0; /顯示第2行的字符數(shù)組 write_com(0x40);/自定義字符寫入CGRAM BCD_ASCII(time6,asc); /為第1行的年賦值line10=asc0;line11=asc1;BCD_ASCII(time4,asc); /為第1行的月賦值line13=asc0;line14=asc1;BCD_ASCII(time3,asc); /為第1行的日賦值line16=asc0;line17=asc1; swit

溫馨提示

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

評論

0/150

提交評論