基于51單片機(jī)與DS1302時(shí)鐘芯片和LCD1602液晶顯示的數(shù)字時(shí)鐘(共9頁(yè))_第1頁(yè)
基于51單片機(jī)與DS1302時(shí)鐘芯片和LCD1602液晶顯示的數(shù)字時(shí)鐘(共9頁(yè))_第2頁(yè)
基于51單片機(jī)與DS1302時(shí)鐘芯片和LCD1602液晶顯示的數(shù)字時(shí)鐘(共9頁(yè))_第3頁(yè)
基于51單片機(jī)與DS1302時(shí)鐘芯片和LCD1602液晶顯示的數(shù)字時(shí)鐘(共9頁(yè))_第4頁(yè)
基于51單片機(jī)與DS1302時(shí)鐘芯片和LCD1602液晶顯示的數(shù)字時(shí)鐘(共9頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上PROTEUS仿真圖:KEIL C程序:#include <REGX52.H>#include "LCD1602.h"#include "DS1302.h"void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);main()SYSTEMTIME CurrentTime;LCD_Initial();Initial_DS1302();GotoXY(0,0);Print(" tian

2、ma dian zi");GotoXY(0,1);Print("Time: ");while(1)DS1302_GetTime(&CurrentTime);TimeToStr(&CurrentTime);GotoXY(6,1);Print(CurrentTime.TimeString);Delay1ms(400);#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#include <intrins.h>/Port Definitions*sbit LcdRs= P20

3、;sbit LcdRw= P21;sbit LcdEn = P22;sfr DBPort = 0x80;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口/內(nèi)部等待函數(shù)*unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();/while(DBPort&0x80);/在用Proteus仿真時(shí),注意用屏蔽此語(yǔ)句,在調(diào)用GotoXY()時(shí),會(huì)進(jìn)入死循環(huán), /可能在寫(xiě)該控制字時(shí),該模塊沒(méi)有返回寫(xiě)入完備命令,即DBPort&0x80=0x80 /實(shí)際硬件時(shí)打開(kāi)此語(yǔ)句LcdEn=0;r

4、eturn DBPort;/向LCD寫(xiě)入命令或數(shù)據(jù)*#define LCD_COMMAND0 / Command#define LCD_DATA1 / Data#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_HOMING 0x02 / 光標(biāo)返回原點(diǎn)void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();/注意順序LcdEn=1;_nop_();/注意順序LcdEn=0;_nop_();LCD_Wait()

5、;/設(shè)置顯示模式*#define LCD_SHOW0x04 /顯示開(kāi)#define LCD_HIDE0x00 /顯示關(guān) #define LCD_CURSOR0x02 /顯示光標(biāo)#define LCD_NO_CURSOR0x00 /無(wú)光標(biāo) #define LCD_FLASH0x01 /光標(biāo)閃動(dòng)#define LCD_NO_FLASH0x00 /光標(biāo)不閃動(dòng)void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode);/設(shè)置輸入模式*#define LCD_AC_UP0x02#define

6、 LCD_AC_DOWN0x00 / default#define LCD_MOVE0x01 / 畫(huà)面可平移#define LCD_NO_MOVE0x00 /defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/移動(dòng)光標(biāo)或屏幕*/*#define LCD_CURSOR0x02 #define LCD_SCREEN0x08#define LCD_LEFT0x00#define LCD_RIGHT0x04void LCD_Move(unsigned char object,

7、unsigned char direction)if(object=LCD_CURSOR)LCD_Write(LCD_COMMAND,0x10|direction);if(object=LCD_SCREEN)LCD_Write(LCD_COMMAND,0x18|direction);*/初始化LCD*void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /開(kāi)啟顯示, 無(wú)

8、光標(biāo)LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC遞增, 畫(huà)面不動(dòng)/*void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);void Print(unsigned char *str)while(*str!='0')LCD_Write(LCD_DATA,*str);

9、str+;/*void LCD_LoadChar(unsigned char user8, unsigned char place)unsigned char i;LCD_Write(LCD_COMMAND,0x40|(place*8);for(i=0; i<8; i+)LCD_Write(LCD_DATA,useri);*/*#endif#ifndef _REAL_TIMER_DS1302_2003_7_21_#define _REAL_TIMER_DS1302_2003_7_21_sbit DS1302_CLK = P16; /實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 sbit DS1302_IO = P

10、17; /實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 sbit DS1302_RST = P15; /實(shí)時(shí)時(shí)鐘復(fù)位線引腳sbit ACC0 = ACC0;sbit ACC7 = ACC7;typedef struct _SYSTEMTIME_unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString9;unsigned char TimeString9;SY

11、STEMTIME;/定義的時(shí)間類(lèi)型#define AM(X)X#define PM(X)(X+12) / 轉(zhuǎn)成24小時(shí)制#define DS1302_SECOND0x80#define DS1302_MINUTE0x82#define DS1302_HOUR0x84 #define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8C#define DS1302_RAM(X)(0xC0+(X)*2) /用于計(jì)算 DS1302_RAM 地址的宏 void DS1302InputBy

12、te(unsigned char d) /實(shí)時(shí)時(shí)鐘寫(xiě)入一字節(jié)(內(nèi)部函數(shù)) unsigned char i; ACC = d; for(i=8; i>0; i-) DS1302_IO = ACC0; /相當(dāng)于匯編中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; unsigned char DS1302OutputByte(void) /實(shí)時(shí)時(shí)鐘讀取一字節(jié)(內(nèi)部函數(shù)) unsigned char i; for(i=8; i>0; i-) ACC = ACC >>1; /相當(dāng)于匯編中的 RRC ACC7

13、= DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa)/ucAddr: DS1302地址, ucData: 要寫(xiě)的數(shù)據(jù) DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 寫(xiě)1Byte數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; unsign

14、ed char Read1302(unsigned char ucAddr)/讀取DS1302某地址的數(shù)據(jù) unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); / 地址,命令 ucData = DS1302OutputByte(); / 讀1Byte數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_SetProtect(bit flag) /是否寫(xiě)保護(hù)if(flag)Writ

15、e1302(0x8E,0x10);elseWrite1302(0x8E,0x00);void DS1302_SetTime(unsigned char Address, unsigned char Value) / 設(shè)置時(shí)間函數(shù)DS1302_SetProtect(0);Write1302(Address, (Value/10)<<4 | (Value%10); void DS1302_GetTime(SYSTEMTIME *Time)unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second

16、 = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time->Minute = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(D

17、S1302_DAY);Time->Day = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);R

18、eadValue = Read1302(DS1302_YEAR);Time->Year = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);void DateToStr(SYSTEMTIME *Time)Time->DateString0 = Time->Year/10 + '0'Time->DateString1 = Time->Year%10 + '0'Time->DateString2 = '-'Time->DateString3 =

19、 Time->Month/10 + '0'Time->DateString4 = Time->Month%10 + '0'Time->DateString5 = '-'Time->DateString6 = Time->Day/10 + '0'Time->DateString7 = Time->Day%10 + '0'Time->DateString8 = '0'void TimeToStr(SYSTEMTIME *Time)Time->T

20、imeString0 = Time->Hour/10 + '0'Time->TimeString1 = Time->Hour%10 + '0'Time->TimeString2 = ':'Time->TimeString3 = Time->Minute/10 + '0'Time->TimeString4 = Time->Minute%10 + '0'Time->TimeString5 = ':'Time->TimeString6 = Tim

21、e->Second/10 + '0'Time->TimeString7 = Time->Second%10 + '0'Time->DateString8 = '0'void Initial_DS1302(void)unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80) DS1302_SetTime(DS1302_SECOND,0);/*void BurstWrite1302(unsigned char *pWClock)/往DS1302寫(xiě)入時(shí)鐘數(shù)據(jù)(多字節(jié)方式) unsigned char i; Write1302(0x8e,0x00); / 控制命令,WP=0,寫(xiě)操作? DS

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論