当前位置: 代码迷 >> 单片机 >> DS1302时钟程序显示异常,求拍醒,求解决
  详细解决方案

DS1302时钟程序显示异常,求拍醒,求解决

热度:75   发布时间:2016-04-28 14:57:54.0
DS1302时钟程序显示错误,求拍醒,求解决
使用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;