/*******************************************************************************
* 标题: 蓝海微芯LJD-SY-5200单片机开发系统演示程序 *
* 文件: LCD_RTC.C *
* 日期: 2006-8-2 *
* 版本: 1.0 *
* 作者: 蓝海微芯 *
* 网站: http://www.ljd-2008.com *
********************************************************************************
* 描述: *
* 在12232液晶屏上显示当前的日期和时间 *
* *
* *
********************************************************************************
* 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com All Rights Reserved *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
*******************************************************************************/
#include <reg51.h> /*=== 头文件包含 ===*/
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define W_C_GLCD XBYTE[0xcfff]
#define W_D_GLCD XBYTE[0xdfff]
#define R_B_GLCD XBYTE[0xefff]
#define R_D_GLCD XBYTE[0xffff]
sbit RS = P2^4;
sbit RW = P3^6;
sbit E = P2^5;
sbit T_CLK = P1^1; /*实时时钟时钟线引脚 */
sbit T_IO = P1^0; /*实时时钟数据线引脚 */
sbit T_RST = P1^4; /*实时时钟复位线引脚 */
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
sbit bflag = ACC^7;
sbit P1_3 = P1^3;
sbit P1_5 = P1^5;
/*调用函数声明*/
void initial_GLCD();
void command_GLCD(uchar ord);
void chkbusy_GLCD();
void write_GLCD(uchar dat);
void delay();
void RTInputByte(uchar);
uchar RTOutputByte(void);
void W1302(uchar, uchar);
uchar R1302(uchar);
void Set1302(uchar *);
void Get1302(uchar curvalue[]);
void bcd_ds(uchar *dclock);
/*日期和时间值显示缓冲单元;显示屏上显
示的日期&时间包括年月日时分秒*/
typedef struct
{
uchar hour;
uchar min;
uchar sec;
uchar date;
uchar month;
uchar year;
}time;
time value;
/*定义12232液晶屏所显示的日期和时间码*/
char code bcdmap[60][2]={
"00","01","02","03", "04","05","06","07","08","09"
,"10","11","12","13","14","15","16","17","18","19"
,"20","21","22","23","24","25","26","27","28","29"
,"30","31","32","33","34","35","36","37","38","39"
,"40","41","42","43","44","45","46","47","48","49"
,"50","51","52","53","54","55","56","57","58","59",
};
/*定义日期和时间显示格式*/
static char pdata DHZTAB1[15]="日期20XX:XX:XX";
static char pdata DHZTAB2[15]="时间 XX:XX:XX ";
/*复位后ds1302时间clock寄存器中重新写入时间初值*/
uchar WClock[7]={0x00,0x59,0x23,0x12,0x07,0x05,0x06};
uchar RClock[7];
/********************************************************************
函 数 名:RTInputByte()
功 能:实时时钟写入一字节
说 明:往DS1302写入1Byte数据 (内部函数)
入口参数:d 写入的数据
返 回 值:无
设 计:蓝海微芯
***********************************************************************/
void RTInputByte(uchar d)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; /*相当于汇编中的 RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/********************************************************************
函 数 名:RTOutputByte()
功 能:实时时钟读取一字节
说 明:从DS1302读取1Byte数据 (内部函数)
入口参数:无
返 回 值:ACC
设 计:蓝海微芯
***********************************************************************/
uchar RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; /*相当于汇编中的 RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
/********************************************************************
函 数 名:W1302()
功 能:往DS1302写入数据
说 明:先写地址,后写命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData: 要写的数据
返 回 值:无
设 计:蓝海微芯
***********************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
RTInputByte(ucDa); /* 写1Byte数据*/
T_CLK = 1;
T_RST = 0;
}
/********************************************************************
函 数 名:R1302()
功 能:读取DS1302某地址的数据
说 明:先写地址,后读命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返 回 值:ucData :读取的数据
设 计:蓝海微芯
***********************************************************************/
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST = 0;
return(ucData);
}
/********************************************************************
函 数 名:Set1302()
功 能:设置初始时间
说 明:先写地址,后读命令/数据(寄存器多字节方式)
调 用:W1302()
入口参数:pClock: 设置时钟数据
出口参数:
地址格式为: 秒 分 时 日 月 星期 年
7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
返 回 值:无
设 计:蓝海微芯
***********************************************************************/
void Set1302(uchar *pClock)
{
uchar i;
uchar ucAddr = 0x80;
W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
for(i =7; i>0; i--)
{
W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
pClock++;
ucAddr +=2;
}
W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
}
/********************************************************************
函 数 名:Get1302()
功 能:读取DS1302当前时间
说 明:
调 用:R1302()
入口参数:ucCurvalue: 保存当前时间地址。
出口参数:
当前时间格式为: 秒 分 时 日 月 星期 年
7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
返 回 值:无
设 计:蓝海微芯
***********************************************************************/
void Get1302(uchar ucCurvalue[])
{
uchar i;
uchar ucAddr = 0x81;
for (i=0; i<7; i++)
{
ucCurvalue[i] = R1302(ucAddr); /*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
}
/********************************************************************
函 数 名:initial_GLCD()
功 能:对12232液晶显示屏进行初始化
说 明:
调 用:
入口参数:
出口参数:
***********************************************************************/
void initial_GLCD()
{
command_GLCD(0x30); /*功能设定*/
delay();
command_GLCD(0x30); /*功能设定*/
delay();
command_GLCD(0x30); /*功能设定*/
delay();
command_GLCD(0x06); /*显示器控制:游标不显示*/
delay();
command_GLCD(0x01); /*清屏幕*/
delay();
command_GLCD(0x0c); /*进入模式设定*/
delay();
}
/********************************************************************
函 数 名:conmmand_GLCD(uchar ord)
功 能:写命令到12232
说 明:
调 用:
入口参数:uchar ord
出口参数:
***********************************************************************/
void command_GLCD(uchar ord)
{
chkbusy_GLCD();
W_C_GLCD=ord;
}
/********************************************************************
函 数 名:write_GLCD(uchar dat)
功 能:写数据到12232
说 明:
调 用:
入口参数:uchar dat
出口参数:
***********************************************************************/
void write_GLCD(uchar dat)
{
chkbusy_GLCD();
W_D_GLCD=dat;
}
/****************************
LCD.rar_LCD界面程序
版权申诉
180 浏览量
2022-09-19
15:55:06
上传
评论
收藏 3KB RAR 举报
四散
- 粉丝: 52
- 资源: 1万+
最新资源
- unity控制对象移动.rar
- TortoiseSVN-1.14.3.29387-x64-svn-1.14.2
- jdk-8u411-macosx-aarch64.dmg
- docker安装.rar
- 美赛数学建模算法-使用Matlab实现常微分方程OridinaryDifferentialEquation-国赛-题解.zip
- FileUploadTestController.java
- 基于MATLAB的数字水印系统源码+GUI操作界面+全部数据资料+使用文档(高分课程设计).zip
- 美赛数学建模算法-使用Matlab实现非线性规划NonLinearProgramming-国赛-题解.zip
- linux安装java8环境资源包
- pcb问题和3D猴制作外壳.7z
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈