LCD1602液晶显示DS1302实时时钟Proteus仿真

本文介绍了如何使用LCD1602液晶显示器配合DS1302实时时钟进行Proteus仿真。详细讲解了DS1302的时钟寄存器结构,以及VCC2、VCC1、X1、X2、I/O、RST和SCLK引脚的功能。在操作DS1302时,要注意写保护的设置,以防误操作。同时,文章解决了keil报错问题,解释了字符串存储方式,并给出了主程序的概要。
摘要由CSDN通过智能技术生成

DS1302的时钟寄存器如下:
在这里插入图片描述
第6位用来选择时钟或RAM
第0位用来做读写的选择
第1、2、3为从000到111依次对应秒、分、时、日、月、周、年和控制字地址。
在这里插入图片描述
VCC2和VCC1分别为主电源和备份电源
X1和X2分别接外部振荡器。在于CPU的通信中I/O用来传输数据,RST作为复位信号,SCLK用来控制数据字节的读写。

杂记

由于担心对DS1302误操作
就是在正常工作时不能改变DS1302里的数据,就要进行写保护,就像家里要锁上一把锁
当要进行对里面的时间数据进行调整时就要取消写保护了即允许写,注意写完后要打开禁止写的保护

针对上面读数据时将IO口拉低网上的解释有:1.数据线拉低,告诉器件,释放总线(个人认为这个解释站不住脚,因为时序图上没有画最后要拉低,逻辑问题)2.显示异常可能是读取太快,也可能是传输线过长(有人通过缩短传输线使显示恢复正常)

问题
keil报错是’array[]’ :string out of bounds
uchar KET[6][7] = {“KET 1 0”, “KET 1 1”,“KET 2 0”,“KET 2 1”,“KET ALL 0”,“KET ALL 1”};
解决
这个字符串是这样存储的 : K,E,T,空格,1,空格,0,\0
最后这个\0是字符串结尾符号
编译器自己加上去的
KET[6][8]={---------------};

面展示一些 内联代码片

void delay(uint z)//延时
{
   
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void format_datetime(uchar d,uchar *p)
{
   
p[0]=d/10+'0';
p[1]=d%10+'0';
}
//将10进制数转换为ASCII码

例如输入14,则14/10 = 1 ,  1+'0' = 0x3114 %10 +0= 0x34

0x310x34就是ASCII码的14,假设发送到串口助手上,选择显示ASCII码就会显示14
在这里插入代码片

主程序

#include<reg52.h>
#include<intrins.h>
#include<string.h>
//*******LCD*******
sbit LCDRS=P2^0; //LCD数据/命令选择端
sbit LCDRW=P2^1
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值