DS1302时钟程序显示错误,求拍醒,求解决

f27ny105t5123 2014-04-10 06:11:03
使用DS1302+LCD1602做一个时钟

现在暂时只往LCD送秒位的数据,但是显示的始终不对

调试了一个下午,实在无力,求解决求拍醒

接通后,LCD上显示乱码,并保持不变。


电路图如下



代码如下
#include<reg52.h>
#include<intrins.h>
#include"scan_key.h" //自己写的键盘扫描程序,暂时用不到
#include"1602_LCD.h" //自己写的LCD驱动程序,已确认不会有问题
sbit rst=P2^4;
sbit clk=P2^1;
sbit io=P2^0;

void write_ds1302(unsigned char content) //对1302写入一个字节
{
unsigned char i;
for(i=0;i<8;i++)
{
io=(content>>i)&0x01;
_nop_();
clk=0;
_nop_();
clk=1;
}
}

unsigned char read_ds1302(unsigned char commend) //参数为控制字读,读取结果由函数带回
{
unsigned char i,content=0x00;
write_ds1302(commend);
for(i=0;i<8;i++)
{
content>>=1;
if(io)
content|=0x80;
clk=1;
_nop_();
clk=0;
_nop_();
}
return content;
}

int main()
{
unsigned char temp;
init_lcd(); //LCD初始化
write_ds1302(0x8e); //关写保护
write_ds1302(0x00);
write_ds1302(0x90);
write_ds1302(0xa5);
write_ds1302(0x80); //秒寄存器初始化,CH置0
write_ds1302(0x00);
while(1)
{
temp=read_ds1302(0x81); //读出秒寄存器中的数据
write_lcd(0,0,0x84);
write_lcd(1,0,((temp&0x70)>>4)+0x30); //数据转化并送到LCD显示【第三个参数为要显示的内容,前两个可以无视】
write_lcd(0,0,0x83);
write_lcd(1,0,(temp&0x0f)+0x30);
}
return 0;
}
...全文
680 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxianbin 2014-04-16
  • 打赏
  • 举报
回复
引用 14 楼 f27ny105t5123 的回复:
[quote=引用 12 楼 wangfan027 的回复:] 你把优化关掉看看
使用keil自带的逻辑分析仪看波形,时序上没有问题,示例代码是Uv2扩展名,看不到波形,没有办法比较二者的区别 彻底无解了……[/quote] 这个只是版本不同,keil 4 也可以打开
f27ny105t5123 2014-04-16
  • 打赏
  • 举报
回复
引用 12 楼 wangfan027 的回复:
你把优化关掉看看
使用keil自带的逻辑分析仪看波形,时序上没有问题,示例代码是Uv2扩展名,看不到波形,没有办法比较二者的区别 彻底无解了……
f27ny105t5123 2014-04-16
  • 打赏
  • 举报
回复
引用 12 楼 wangfan027 的回复:
你把优化关掉看看
额……才看到 试过了 不行 最近没抽出时间看 我试试单步调试一个个看吧……当初IIC也是好久没弄出来
dceacho 2014-04-12
  • 打赏
  • 举报
回复
你把优化关掉看看
zhxianbin 2014-04-11
  • 打赏
  • 举报
回复
是否 write_ds1302 read_ds1302 延时不够
zhxianbin 2014-04-11
  • 打赏
  • 举报
回复
示例代码可以正常运行,那问题很明确了啊:你的代码问题。还是检查的不够仔细
zhxianbin 2014-04-11
  • 打赏
  • 举报
回复
即时延时一样的,也可以增加延时试试
zhxianbin 2014-04-11
  • 打赏
  • 举报
回复
引用 9 楼 f27ny105t5123 的回复:
[quote=引用 8 楼 zhxianbin 的回复:] 是否 write_ds1302 read_ds1302 延时不够
使用与示例代码一样的延时,情况依旧 如果有兴趣,求QQ,我把示例代码和自己的代码都发给你 [/quote] 我没法测试,我用过 stm32 加 ds1302 还是很简单的
f27ny105t5123 2014-04-11
  • 打赏
  • 举报
回复
引用 8 楼 zhxianbin 的回复:
是否 write_ds1302 read_ds1302 延时不够
使用与示例代码一样的延时,情况依旧 如果有兴趣,求QQ,我把示例代码和自己的代码都发给你
f27ny105t5123 2014-04-10
  • 打赏
  • 举报
回复
引用 5 楼 wangfan027 的回复:
另外2根线也加个上拉电阻看看
……这是开发板 自己还不会设计电路呢 PS:示例代码可以正常运行
dceacho 2014-04-10
  • 打赏
  • 举报
回复
另外2根线也加个上拉电阻看看
f27ny105t5123 2014-04-10
  • 打赏
  • 举报
回复
引用 3 楼 zhxianbin 的回复:
ds1302 读出来后有个转换的,仔细看 datasheet 分析代码时序
代码中有数据的转换 再次检查也与示例代码一样没有问题
zhxianbin 2014-04-10
  • 打赏
  • 举报
回复
ds1302 读出来后有个转换的,仔细看 datasheet 分析代码时序
f27ny105t5123 2014-04-10
  • 打赏
  • 举报
回复
引用 1 楼 zhxianbin 的回复:
是 DS1302 错误 ,还是LCD1602? 你能先把 LCD 调好吗,用下面的代码:
for(i = 0; i < 10; ++i)
{
    lcd_display(i);
    delay_ms(1000);
}
代码注释上面有,确认LCD没有问题 为了保险我用了这个代码,LCD上从0显示到9也没有问题
zhxianbin 2014-04-10
  • 打赏
  • 举报
回复
是 DS1302 错误 ,还是LCD1602? 你能先把 LCD 调好吗,用下面的代码:
for(i = 0; i < 10; ++i)
{
    lcd_display(i);
    delay_ms(1000);
}

27,383

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧