基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx

上传人:wj 文档编号:1463016 上传时间:2023-04-30 格式:DOCX 页数:9 大小:31.63KB
下载 相关 举报
基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx_第1页
第1页 / 共9页
基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx_第2页
第2页 / 共9页
基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx_第3页
第3页 / 共9页
基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx_第4页
第4页 / 共9页
基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx_第5页
第5页 / 共9页
基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx_第6页
第6页 / 共9页
基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx_第7页
第7页 / 共9页
基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx_第8页
第8页 / 共9页
基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx

《基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx(9页珍藏版)》请在冰点文库上搜索。

基于单片机与DS时钟芯片和LCD液晶显示的数字时钟Word文档下载推荐.docx

while

(1)

{

DS1302_GetTime(&

CurrentTime);

TimeToStr(&

GotoXY(6,1);

Print(CurrentTime.TimeString);

Delay1ms(400);

}

#ifndefLCD_CHAR_1602_2005_4_9

#defineLCD_CHAR_1602_2005_4_9

intrins.h>

//PortDefinitions**********************************************************

sbitLcdRs =P2^0;

sbitLcdRw =P2^1;

sbitLcdEn =P2^2;

sfrDBPort =0x80;

//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口

//内部等待函数**************************************************************************

unsignedcharLCD_Wait(void)

LcdRs=0;

LcdRw=1;

_nop_();

LcdEn=1;

//while(DBPort&

0x80);

//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,

//可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&

0x80==0x80

//实际硬件时打开此语句

LcdEn=0;

returnDBPort;

//向LCD写入命令或数据************************************************************

#defineLCD_COMMAND 0//Command

#defineLCD_DATA 1//Data

#defineLCD_CLEAR_SCREEN 0x01//清屏

#defineLCD_HOMING 0x02//光标返回原点

voidLCD_Write(bitstyle,unsignedcharinput)

LcdRs=style;

LcdRw=0;

_nop_();

DBPort=input;

//注意顺序

LCD_Wait();

//设置显示模式************************************************************

#defineLCD_SHOW 0x04//显示开

#defineLCD_HIDE 0x00//显示关

#defineLCD_CURSOR 0x02 //显示光标

#defineLCD_NO_CURSOR 0x00//无光标

#defineLCD_FLASH 0x01//光标闪动

#defineLCD_NO_FLASH 0x00//光标不闪动

voidLCD_SetDisplay(unsignedcharDisplayMode)

LCD_Write(LCD_COMMAND,0x08|DisplayMode);

//设置输入模式************************************************************

#defineLCD_AC_UP 0x02

#defineLCD_AC_DOWN 0x00//default

#defineLCD_MOVE 0x01//画面可平移

#defineLCD_NO_MOVE 0x00//default

voidLCD_SetInput(unsignedcharInputMode)

LCD_Write(LCD_COMMAND,0x04|InputMode);

//移动光标或屏幕************************************************************

/*

#defineLCD_CURSOR 0x02

#defineLCD_SCREEN 0x08

#defineLCD_LEFT 0x00

#defineLCD_RIGHT 0x04

voidLCD_Move(unsignedcharobject,unsignedchardirection)

if(object==LCD_CURSOR)

LCD_Write(LCD_COMMAND,0x10|direction);

if(object==LCD_SCREEN)

LCD_Write(LCD_COMMAND,0x18|direction);

*/

//初始化LCD************************************************************

voidLCD_Initial()

LCD_Write(LCD_COMMAND,0x38);

//8位数据端口,2行显示,5*7点阵

LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);

//开启显示,无光标

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);

//清屏

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);

//AC递增,画面不动

//************************************************************************

voidGotoXY(unsignedcharx,unsignedchary)

if(y==0)

LCD_Write(LCD_COMMAND,0x80|x);

if(y==1)

LCD_Write(LCD_COMMAND,0x80|(x-0x40));

voidPrint(unsignedchar*str)

while(*str!

='

\0'

LCD_Write(LCD_DATA,*str);

str++;

voidLCD_LoadChar(unsignedcharuser[8],unsignedcharplace)

unsignedchari;

LCD_Write(LCD_COMMAND,0x40|(place*8));

i<

8;

i++)

LCD_Write(LCD_DATA,user[i]);

#endif

#ifndef_REAL_TIMER_DS1302_2003_7_21_

#define_REAL_TIMER_DS1302_2003_7_21_

sbitDS1302_CLK=P1^6;

//实时时钟时钟线引脚

sbitDS1302_IO=P1^7;

//实时时钟数据线引脚

sbitDS1302_RST=P1^5;

//实时时钟复位线引脚

sbitACC0=ACC^0;

sbitACC7=ACC^7;

typedefstruct__SYSTEMTIME__

unsignedcharSecond;

unsignedcharMinute;

unsignedcharHour;

unsignedcharWeek;

unsignedcharDay;

unsignedcharMonth;

unsignedcharYear;

unsignedcharDateString[9];

unsignedcharTimeString[9];

}SYSTEMTIME;

//定义的时间类型

#defineAM(X) X

#definePM(X) (X+12) //转成24小时制

#defineDS1302_SECOND 0x80

#defineDS1302_MINUTE 0x82

#defineDS1302_HOUR 0x84

#defineDS1302_WEEK 0x8A

#defineDS1302_DAY 0x86

#defineDS1302_MONTH 0x88

#defineDS1302_YEAR 0x8C

#defineDS1302_RAM(X) (0xC0+(X)*2) //用于计算DS1302_RAM地址的宏

voidDS1302InputByte(unsignedchard) //实时时钟写入一字节(内部函数)

{

unsignedchari;

ACC=d;

for(i=8;

i>

0;

i--)

{

DS1302_IO=ACC0;

//相当于汇编中的RRC

DS1302_CLK=1;

DS1302_CLK=0;

ACC=ACC>

>

1;

}

unsignedcharDS1302OutputByte(void) //实时时钟读取一字节(内部函数)

1;

//相当于汇编中的RRC

ACC7=DS1302_IO;

return(ACC);

voidWrite1302(unsignedcharucAddr,unsignedcharucDa) //ucAddr:

DS1302地址,ucData:

要写的数据

DS1302_RST=0;

DS1302_CLK=0;

DS1302_RST=1;

DS1302InputByte(ucAddr);

//地址,命令

DS1302InputByte(ucDa);

//写1Byte数据

DS1302_CLK=1;

}

unsignedcharRead1302(unsignedcharucAddr) //读取DS1302某地址的数据

unsignedcharucData;

DS1302InputByte(ucAddr|0x01);

//地址,命令

ucData=DS1302OutputByte();

//读1Byte数据

return(ucData);

voidDS1302_SetProtect(bitflag)//是否写保护

if(flag)

Write1302(0x8E,0x10);

else

Write1302(0x8E,0x00);

voidDS1302_SetTime(unsignedcharAddress,unsignedcharValue)//设置时间函数

DS1302_SetProtect(0);

Write1302(Address,((Value/10)<

<

4|(Value%10)));

voidDS1302_GetTime(SYSTEMTIME*Time)

unsignedcharReadValue;

ReadValue=Read1302(DS1302_SECOND);

Time->

Second=((ReadValue&

0x70)>

4)*10+(ReadValue&

0x0F);

ReadValue=Read1302(DS1302_MINUTE);

Minute=((ReadValue&

ReadValue=Read1302(DS1302_HOUR);

Hour=((ReadValue&

ReadValue=Read1302(DS1302_DAY);

Day=((ReadValue&

ReadValue=Read1302(DS1302_WEEK);

Week=((ReadValue&

ReadValue=Read1302(DS1302_MONTH);

Month=((ReadValue&

ReadValue=Read1302(DS1302_YEAR);

Year=((ReadValue&

voidDateToStr(SYSTEMTIME*Time)

DateString[0]=Time->

Year/10+'

0'

;

DateString[1]=Time->

Year%10+'

DateString[2]='

-'

DateString[3]=Time->

Month/10+'

DateString[4]=Time->

Month%10+'

DateString[5]='

DateString[6]=Time->

Day/10+'

DateString[7]=Time->

Day%10+'

DateString[8]='

voidTimeToStr(SYSTEMTIME*Time)

TimeString[0]=Time->

Hour/10+'

TimeString[1]=Time->

Hour%10+'

TimeString[2]='

:

'

TimeString[3]=Time->

Minute/10+'

TimeString[4]=Time->

Minute%10+'

TimeString[5]='

TimeString[6]=Time->

Second/10+'

TimeString[7]=Time->

Second%10+'

voidInitial_DS1302(void)

unsignedcharSecond=Read1302(DS1302_SECOND);

if(Second&

0x80)

DS1302_SetTime(DS1302_SECOND,0);

/********************************************************************************

voidBurstWrite1302(unsignedchar*pWClock) //往DS1302写入时钟数据(多字节方式)

Write1302(0x8e,0x00);

//控制命令,WP=0,写操作?

DS1302InputByte(0xbe);

//0xbe:

时钟多字节写命令

for(i=8;

i--) //8Byte=7Byte时钟数据+1Byte控制

DS1302InputByte(*pWClock);

//写1Byte数据

pWClock++;

}

voidBurstRead1302(unsignedchar*pRClock) //读取DS1302时钟数据(时钟多字节方式)

DS1302InputByte(0xbf);

//0xbf:

时钟多字节读命令

for(i=8;

i--)

*pRClock=DS1302OutputByte();

//读1Byte数据

pRClock++;

voidDS1302_TimeStop(bitflag)//是否将时钟停止

unsignedcharData;

Data=Read1302(DS1302_SECOND);

Write1302(DS1302_SECOND,Data|0x80);

Write1302(DS1302_SECOND,Data&

0x7F);

********************************************************************************/

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2