ds1302 +ds18b20+LCD1602完整程序docWord格式.docx

上传人:b****3 文档编号:15759737 上传时间:2022-11-15 格式:DOCX 页数:25 大小:21.33KB
下载 相关 举报
ds1302 +ds18b20+LCD1602完整程序docWord格式.docx_第1页
第1页 / 共25页
ds1302 +ds18b20+LCD1602完整程序docWord格式.docx_第2页
第2页 / 共25页
ds1302 +ds18b20+LCD1602完整程序docWord格式.docx_第3页
第3页 / 共25页
ds1302 +ds18b20+LCD1602完整程序docWord格式.docx_第4页
第4页 / 共25页
ds1302 +ds18b20+LCD1602完整程序docWord格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

ds1302 +ds18b20+LCD1602完整程序docWord格式.docx

《ds1302 +ds18b20+LCD1602完整程序docWord格式.docx》由会员分享,可在线阅读,更多相关《ds1302 +ds18b20+LCD1602完整程序docWord格式.docx(25页珍藏版)》请在冰豆网上搜索。

ds1302 +ds18b20+LCD1602完整程序docWord格式.docx

sbitwireless_3=P3^2;

sbitwireless_4=P3^3;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

charhide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year;

//秒,分,时到日,月,年位闪的计数

sbitSet=P2^0;

//模式切换键

sbitUp=P2^1;

//加法按钮

sbitDown=P2^2;

//减法按钮

sbitout=P2^3;

//立刻跳出调整模式按钮

sbitDQ=P1^0;

//温度传送数据IO口

chardone,count,temp,flag,up_flag,down_flag;

uchartemp_value;

//温度值

ucharTempBuffer[5],week_value[2];

voidshow_time();

//液晶显示程序

/***********1602液晶显示部分子程序****************/

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

sbitLcdRs=P2^5;

sbitLcdRw=P2^6;

sbitLcdEn=P2^7;

sfrDBPort=0x80;

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

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

unsignedcharLCD_Wait(void)

{

LcdRs=0;

LcdRw=1;

_nop_();

LcdEn=1;

LcdEn=0;

returnDBPort;

}

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

#defineLCD_COMMAND0//Command

#defineLCD_DATA1//Data

#defineLCD_CLEAR_SCREEN0x01//清屏

#defineLCD_HOMING0x02//光标返回原点

voidLCD_Write(bitstyle,unsignedcharinput)

LcdRs=style;

LcdRw=0;

_nop_();

DBPort=input;

//注意顺序

LCD_Wait();

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

#defineLCD_SHOW0x04//显示开

#defineLCD_HIDE0x00//显示关

#defineLCD_CURSOR0x02//显示光标

#defineLCD_NO_CURSOR0x00//无光标

#defineLCD_FLASH0x01//光标闪动

#defineLCD_NO_FLASH0x00//光标不闪动

voidLCD_SetDisplay(unsignedcharDisplayMode)

LCD_Write(LCD_COMMAND,0x08|DisplayMode);

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

#defineLCD_AC_UP0x02

#defineLCD_AC_DOWN0x00//default

#defineLCD_MOVE0x01//画面可平移

#defineLCD_NO_MOVE0x00//default

voidLCD_SetInput(unsignedcharInputMode)

LCD_Write(LCD_COMMAND,0x04|InputMode);

//初始化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++;

}

/***********DS1302时钟部分子程序******************/

typedefstruct__SYSTEMTIME__

unsignedcharSecond;

unsignedcharMinute;

unsignedcharHour;

unsignedcharWeek;

unsignedcharDay;

unsignedcharMonth;

unsignedcharYear;

unsignedcharDateString[11];

unsignedcharTimeString[9];

}SYSTEMTIME;

//定义的时间类型

SYSTEMTIMECurrentTime;

#defineAM(X)X

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

#defineDS1302_SECOND0x80//时钟芯片的寄存器位置,存放时间

#defineDS1302_MINUTE0x82

#defineDS1302_HOUR0x84

#defineDS1302_WEEK0x8A

#defineDS1302_DAY0x86

#defineDS1302_MONTH0x88

#defineDS1302_YEAR0x8C

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_RST=1;

DS1302InputByte(ucAddr);

//地址,命令

DS1302InputByte(ucDa);

//写1Byte数据

}

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

unsignedcharucData;

DS1302InputByte(ucAddr|0x01);

//地址,命令

ucData=DS1302OutputByte();

//读1Byte数据

return(ucData);

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&

Re

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

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1