当前位置:首页 > 基于DS1302与LCD1602的电子日历时钟的设计与实现 - 图文
4 5 6 7 8 RS R/W E D0 D1 数据/命令选择 读/写选择 使能信号 数据 数据 12 13 14 15 16 D5 D6 D7 BLA BLK 数据 数据 数据 背光源正极 背光源负极 表1:引脚接口说明表
第1脚:VSS为地电源。 第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。
1602LCD的一般初始化(复位)过程
延时15mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:显示模式设置 写指令08H:显示关闭 写指令01H:显示清屏
写指令06H:显示光标移动设置 写指令0CH:显示开及光标设置
3.LCD1602液晶显示 如图8所示:
图8 LCD液晶显示
9
第三章 系统的软件设计
3.1 主程序流程图
图-A 主程序流程图
主程序:
void LcdDisplay();
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数 * 输入 : 无 * 输出 : 无
*******************************************************************************/
void main()
10
{
LcdInit(); Ds1302Init(); while(1) {
Ds1302ReadTime(); LcdDisplay(); } }
/*******************************************************************************
* 函数名 : LcdDisplay() * 函数功能 : 显示函数 * 输入 : 无 * 输出 : 无
*******************************************************************************/
void LcdDisplay() {
LcdWriteCom(0x80+0X40);
LcdWriteData('0'+TIME[2]/16); //时 LcdWriteData('0'+(TIME[2]&0x0f)); LcdWriteData('-');
LcdWriteData('0'+TIME[1]/16); //分 LcdWriteData('0'+(TIME[1]&0x0f)); LcdWriteData('-');
LcdWriteData('0'+TIME[0]/16); //秒 LcdWriteData('0'+(TIME[0]&0x0f));
LcdWriteCom(0x80); LcdWriteData('2'); LcdWriteData('0');
LcdWriteData('0'+TIME[6]/16); //年 LcdWriteData('0'+(TIME[6]&0x0f)); LcdWriteData('-');
LcdWriteData('0'+TIME[4]/16); //月 LcdWriteData('0'+(TIME[4]&0x0f)); LcdWriteData('-');
LcdWriteData('0'+TIME[3]/16); //日 LcdWriteData('0'+(TIME[3]&0x0f)); LcdWriteCom(0x8D);
LcdWriteData('0'+(TIME[5]&0x07)); //星期
11
3.2 DS1302子程序
#include\
//---DS1302写入和读取时分秒的地址命令---// //---秒分时日月周年 最低位读写位;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。---// //---存储顺序是秒分时日月周年,存储格式是用BCD码---// uchar TIME[7] = {0x00, 0x24, 0x12, 0x01, 0x01, 0x02, 0x13};
/*******************************************************************************
* 函 数 名 : Ds1302Write * 函数功能 : 向DS1302命令(地址+数据) * 输 入 : addr,dat * 输 出 : 无
*******************************************************************************/
void Ds1302Write(uchar addr, uchar dat) {
uchar n; RST = 0; _nop_();
SCLK = 0;//先将SCLK置低电平。 _nop_();
RST = 1; //然后将RST(CE)置高电平。 _nop_();
for (n=0; n<8; n++)//开始传送八位地址命令 { DSIO = addr & 0x01;//数据从低位开始传送 addr >>= 1; SCLK = 1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK = 0; _nop_(); }
12
共分享92篇相关文档