找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1782|回复: 6
打印 上一主题 下一主题
收起左侧

STC12C5A60S2单片机控制LCD12864显示的万年历出现显示问题。求大佬帮助,真捉急!

[复制链接]
跳转到指定楼层
楼主
还有就是初始化ds1302以后,读写时间函数好像都没有问题,但是屏幕上时间总是显示不对。不知道是程序哪里出了问题,以下是主程序,请大佬帮帮忙看看,下图就是显示出现的问题
/*-----------------------------------------------
  名称:12864字库液晶显示
  内容:通过显示字符、数字、汉字和图片测试液晶基本功能
------------------------------------------------*/
#include <stc12c5a60s2.h>
#include <intrins.h>
#include "delay.h"

sbit RS = P2^5;
sbit RW = P2^6;
sbit E  = P2^7;
sbit RES = P1^7;
sbit PSB = P1^6;
sbit beep = P3^7;

#define DataPort P0        //MCU P0<------> LCM

//
typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable           无符号8位整型变量  */
typedef signed   char  S8;       /* defined for signed 8-bits integer variable                  有符号8位整型变量  */
typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable           无符号16位整型变量 */
typedef signed   int   S16;      /* defined for signed 16-bits integer variable           有符号16位整型变量 */
typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable           无符号32位整型变量 */
typedef signed   long  S32;      /* defined for signed 32-bits integer variable           有符号32位整型变量 */
typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedef double         F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
//
#define uchar unsigned char
#define uint unsigned int
#define   Data_0_time    4

//----------------------------------------------//
//----------------IO口定义区--------------------//
//----------------------------------------------//
sbit  P2_0  = P2^0 ;

//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
U8  U8FLAG,k;
U8  U8count,U8temp;
U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8  U8comdata;

U8 flag;
U8 jishi_flag = 0,count_up = 0;
unsigned char count=0,ss=0,sg=0,fs=0,fg=0,ms=0,mg=0,m=0,f=0,s=0,yue=1,ri=1;

unsigned char str1[]={"温度:00%"},str2[2],str3[]={"湿度:00%"},str4[2],dat=1,cal[10]={"0001-01-01"};
//初始时间定义
uchar  time_buf[9] = {0x20,0x20,0x04,0x02,0x18,0x04,0x00,0x04};

#define uchar unsigned char
#define uint  unsigned int

//DS1302引脚定义
sbit RST=P3^5;
sbit IO=P3^4;
sbit SCK=P3^6;
//DS1302地址定义
#define ds1302_sec_add                        0x80                //秒数据地址
#define ds1302_min_add                        0x82                //分数据地址
#define ds1302_hr_add                        0x84                //时数据地址
#define ds1302_date_add                        0x86                //日数据地址
#define ds1302_month_add                0x88                //月数据地址
#define ds1302_day_add                        0x8a                //星期数据地址
#define ds1302_year_add                        0x8c                //年数据地址
#define ds1302_control_add                0x8e                //控制数据地址
#define ds1302_charger_add                0x90                                          
#define ds1302_clkburst_add                0xbe
#define Rds1302_year_add                 0x8d
#define Rds1302_month_add              0x89
#define Rds1302_date_add                 0x87
#define Rds1302_hr_add                    0x85
#define Rds1302_min_add                  0x83
#define Rds1302_sec_add                   0x81
#define Rds1302_day_add                  0x8b
void SetNormalMode();
void Delay18ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 1;
        j = 194;
        k = 159;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}
void Delay10us()                //@11.0592MHz
{
        unsigned char i;

        _nop_();
        _nop_();
        _nop_();
        i = 24;
        while (--i);
}
//向DS1302写入一字节数据
void ds1302_write_byte(uchar addr, uchar d)
{
        uchar i;
        RST=1;                                        //启动DS1302总线       
        _nop_();                                        //写入目标地址:addr
                                                                                        //addr = addr & 0xFE;   //最低位置零,寄存器0位为0时写,为1时读
        for (i = 0; i < 8; i ++)
        {
                IO=addr & 0x01;
                addr = addr >> 1;
                SCK=1;
                SCK=0;      //产生时钟
        }       
        //写入数据:d
        for (i = 0; i < 8; i ++) {
                        IO=d & 0x01;
                d = d >> 1;
                        SCK=1;
                        SCK=0;    //产生时钟
                }
       
               
        RST=0;                //停止DS1302总线
                SCK=1;           /*时钟线拉高*/
                //IO=1;    /*总线释放*/
}

//从DS1302读出一字节数据
uchar ds1302_read_byte(uchar addr) {

        uchar i,dat,temp;       
        RST=1;                                        //启动DS1302总线
        _nop_();        //写入目标地址:addr
        //addr = addr | 0x01;    //最低位置高,寄存器0位为0时写,为1时读
        for (i = 0; i < 8; i ++)
        {
                IO=addr & 0x01;
                       
                addr = addr >> 1;
                SCK=1;
                SCK=0;      //产生时钟
        }       
        //输出数据:temp
        for (i = 0; i < 8; i ++) {
               
               
           temp=IO;
           dat = (dat>>1) | (temp<<7);
           SCK=1;       
           SCK=0;
               
                }       
        RST=0;                                        //停止DS1302总线
        _nop_();
                _nop_();
       
        return dat;
}

//从DS302读出时钟数据
void ds1302_read_time(void)  
{
        time_buf[1]=ds1302_read_byte(Rds1302_year_add);                //年
        time_buf[2]=ds1302_read_byte(Rds1302_month_add);                //月
        time_buf[3]=ds1302_read_byte(Rds1302_date_add);                //日
        time_buf[4]=ds1302_read_byte(Rds1302_hr_add);                //时
        time_buf[5]=ds1302_read_byte(Rds1302_min_add);                //分
        time_buf[6]=ds1302_read_byte(Rds1302_sec_add);//&0x3f;//秒,屏蔽秒的第7位,避免超出59
        time_buf[7]=ds1302_read_byte(Rds1302_day_add);                //周        
}

//DS1302初始化函数
void ds1302_init(void)
{
        //RST=0;                        //RST脚置低
//        SCK=0;                        //SCK脚置低
       
        //向DS302写入时钟数据

        ds1302_write_byte(ds1302_control_add,0x00);                        //关闭写保护
        //ds1302_write_byte(ds1302_sec_add,0x80);                                //暂停时钟
        ds1302_write_byte(ds1302_charger_add,0xa9);            //涓流充电
        ds1302_write_byte(ds1302_year_add,time_buf[1]);                //年
        ds1302_write_byte(ds1302_month_add,time_buf[2]);        //月
        ds1302_write_byte(ds1302_date_add,time_buf[3]);                //日
        ds1302_write_byte(ds1302_hr_add,time_buf[4]);                //时
        ds1302_write_byte(ds1302_min_add,time_buf[5]);                //分
        ds1302_write_byte(ds1302_sec_add,time_buf[6]);                //秒
        ds1302_write_byte(ds1302_day_add,time_buf[7]);                //周
        //ds1302_write_byte(0xc0,0xaa);
        ds1302_write_byte(ds1302_control_add,0x80);                        //打开写保护     

}

unsigned char code user16x16[]={ //笑脸图片
0x0F,0xF0,0x10,0x08,0x20,0x04,0x40,0x02,0x9C,0x39,0xBE,0x7D,0x80,0x01,0x80,0x01,
0x80,0x01,0x88,0x11,0x84,0x21,0x43,0xC2,0x20,0x04,0x10,0x08,0x0F,0xF0,0x00,0x00,
};
unsigned char code pic1[]=      // 图片代码
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

unsigned char code num[11][64]={       

{// 图片数字0
0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x40,0x02,0x00,0x00,
0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
{// 图片数字1
0x00,0x00,0x00,0x20,0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,
0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x20,
0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,
0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00},
{// 图片数字2
0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,
0x5F,0xF8,0x60,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
0x70,0x00,0x70,0x00,0x70,0x00,0x6F,0xF8,0x5F,0xFC,0x3F,0xFE,0x00,0x00,0x00,0x00},       
{// 图片数字3
0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,
0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x0F,0xF6,0x1F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
{// 图片数字4
0x00,0x00,0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00},       
{// 图片数字5
0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,
0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x0F,0xF6,0x1F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
{// 图片数字6
0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,
0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
{// 图片数字7
0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,
0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00},
{// 图片数字8
0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
{// 图片数字9
0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x1F,0xF6,0x3F,0xFA,0x7F,0xFC,0x00,0x00,0x00,0x00},       
{// 图片":"        10
//6X6方点
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,
0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,
0x07,0xE0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};

unsigned char code kongbai[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};


/*------------------------------------------------
                    检测忙位
------------------------------------------------*/

void init_timer()
{
        TMOD=0x01;//模式1,16位计时
        TH0=15536/256;
        TL0=15536%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void Check_Busy()
{  
    RS=0;
    RW=1;
    E=1;
    DataPort=0xff;
    while((DataPort&0x80)==0x80);//忙则等待
    E=0;
}
/*------------------------------------------------
                   写命令
------------------------------------------------*/
void Write_Cmd(unsigned char Cmd)
{
        Check_Busy();
        RS=0;
        RW=0;
        E=1;
        DataPort=Cmd;
        DelayUs2x(5);
        E=0;
        DelayUs2x(5);
}
/*------------------------------------------------
                    写数据
------------------------------------------------*/
void Write_Data(unsigned char Data)
{
        Check_Busy();
        RS=1;
        RW=0;
        E=1;
        DataPort=Data;
        DelayUs2x(5);
        E=0;
        DelayUs2x(5);
}
/*------------------------------------------------
                   液晶屏初始化
------------------------------------------------*/
void Init_ST7920()
{  
   DelayMs(40);           //大于40MS的延时程序
   PSB=1;                 //设置为8BIT并口工作模式
   DelayMs(1);            //延时
   RES=0;                 //复位
   DelayMs(1);            //延时
   RES=1;                 //复位置高
   DelayMs(10);
   Write_Cmd(0x30);       //选择基本指令集
   DelayUs2x(50);         //延时大于100us
   Write_Cmd(0x30);       //选择8bit数据流
   DelayUs2x(20);         //延时大于37us
   Write_Cmd(0x0c);       //开显示(无游标、不反白)
   DelayUs2x(50);         //延时大于100us
   Write_Cmd(0x01);       //清除显示,并且设定地址指针为00H
   DelayMs(15);           //延时大于10ms
   //Write_Cmd(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动
   DelayUs2x(50);         //延时大于100us
}
/*------------------------------------------------
                   用户自定义字符
------------------------------------------------*/
void CGRAM()
{
     int i;
     Write_Cmd(0x30);
     Write_Cmd(0x40);
     for(i=0;i<16;i++)
       {
            Write_Data(user16x16[i*2]);
        Write_Data(user16x16[i*2+1]);
      }
}   
/*------------------------------------------------
                   显示用户自定义字符
------------------------------------------------*/
void DisplayCGRAM(unsigned char x,unsigned char y)
{
switch(y)
     {
          case 1: Write_Cmd(0x80+x);break;
          case 2: Write_Cmd(0x90+x);break;
          case 3: Write_Cmd(0x88+x);break;
          case 4: Write_Cmd(0x98+x);break;
      default:break;
         }
    Write_Data(00);
    Write_Data(00);

}         
/*------------------------------------------------
                   显示字符串
x:横坐标值,范围0~8
y:纵坐标值,范围1~4
------------------------------------------------*/
void LCD_PutString(unsigned char x,unsigned char y,unsigned char *s)
{
        SetNormalMode();
switch(y)
     {
          case 1: Write_Cmd(0x80+x);break;
          case 2: Write_Cmd(0x90+x);break;
          case 3: Write_Cmd(0x88+x);break;
          case 4: Write_Cmd(0x98+x);break;
      default:break;
         }
while(*s&&s)
   {
      Write_Data(*s);
      s++;

   }
}




/*------------------------------------------------
                      清屏
------------------------------------------------*/
void ClrScreen()
{
   Write_Cmd(0x01);
   DelayMs(15);
}
          
/*------------------------------------------------
                   显示图片
------------------------------------------------*/
void LCD_PutGraphic(unsigned char code *img)
{
int i,j;
//显示上半屏内容设置
   for(i=0;i<32;i++)            
    {
      Write_Cmd(0x80 + i); //SET  垂直地址 VERTICAL ADD
      Write_Cmd(0x80);     //SET  水平地址 HORIZONTAL ADD
      for(j=0;j<16;j++)
       {
         Write_Data(*img);
         img++;
       }
    }
//显示下半屏内容设置
   for(i=0;i<32;i++)            
    {
      Write_Cmd(0x80 + i); //SET 垂直地址 VERTICAL ADD
      Write_Cmd(0x88);     //SET 水平地址 HORIZONTAL ADD
      for(j=0;j<16;j++)
       {
         Write_Data(*img);
         img++;
       }
    }  

}


/*------------------------------------------------
                 设置到绘图模式
------------------------------------------------*/
void SetGraphicMode()
{   Write_Cmd(0x34);
   Write_Cmd(0x36);       //选择8bit数据流 图形模式
   DelayUs2x(20);

}

void SetNormalMode()
{
   Write_Cmd(0x30);       //选择8bit数据流 图形模式
   DelayUs2x(20);

}
void huatu(unsigned char x,unsigned char  *img)
{
        unsigned char i,j;
        SetGraphicMode();
        for(i=0;i<32;i++)
        {                                                                                                                //将屏幕分成上下两个屏幕,上下两个半屏幕的起始行列地址都是0x80,地址向后连续递增
                if(i<16)                 //先写入行地址,再写入列地址 ,在连续写入两个字节数据
                {                                                                                                        //列地址的范围是0~15,从0x80开始,最后一个列地址是0x80+15
                        Write_Cmd(0x80+16+i);   //行地址的范围是0~31,从0x80开始,最后一个行地址是0x80+32
                        Write_Cmd(0x80+x);
                }
                if(i>=16)
                {
                        Write_Cmd(0x80+i-16);
                        Write_Cmd(0x88+x);       
                }
                for(j=0;j<2;j++)
                {
                        Write_Data(*img);
                img++;       
                }       
        }

}



/*------------------------------------------------
                 主程序
------------------------------------------------*/

main()
{
        Init_ST7920();
        ds1302_init();  //DS1302初始化
       
        init_timer();
        SetGraphicMode();     //设置成绘图模式
        LCD_PutGraphic(pic1);           //清屏
        beep = 0;
   while(1)
   {
          
          ds1302_read_time();  //读取时间
                           
           cal[0] = (time_buf[0]>>4) + '0'; //年   cal[10]={"0001-01-01"};
           cal[1] = (time_buf[0]&0x0f) + '0';
           cal[2] = (time_buf[1]>>4) + '0';   
           cal[3] = (time_buf[1]&0x0f) + '0';
           cal[5] = (time_buf[2]>>4) + '0'; //月  
           cal[6] = (time_buf[2]&0x0f) + '0';
           cal[8] = (time_buf[3]>>4) + '0'; //日   
           cal[9] = (time_buf[3]&0x0f) + '0';
           dat=(time_buf[7]&0x07); //星期
          

           ss=(time_buf[4]>>4); //时   
           sg=(time_buf[4]&0x0f);  
           fs=(time_buf[5]>>4); //分   
           fg=(time_buf[5]&0x0f);   
       
           ms=(time_buf[6]>>4); //秒
           mg=(time_buf[6]&0x0f);
        huatu(0,num[ss]);
        huatu(1,num[sg]);
        huatu(3,num[fs]);
        huatu(4,num[fg]);
        huatu(6,num[ms]);
        huatu(7,num[mg]);
         if(count>=5 && count<=15)
         {
                  huatu(2,num[10]);   //绘画出时钟的冒号:
                         huatu(5,num[10]);
         }
         else
         {
                 huatu(2,kongbai);
                huatu(5,kongbai);
         }       
         
           LCD_PutString(0,1,cal);
          LCD_PutString(0,4,str1);
          LCD_PutString(4,4,str3);
switch(dat)
         {
                 case 1: LCD_PutString(5,1,"星期一");     break;
                 case 2:    LCD_PutString(5,1,"星期二");   break;
                 case 3:    LCD_PutString(5,1,"星期叁");   break;
                 case 4:    LCD_PutString(5,1,"星期四");   break;
                 case 5:    LCD_PutString(5,1,"星期五");   break;
                 case 6:    LCD_PutString(5,1,"星期六");   break;
                 case 7:    LCD_PutString(5,1,"星期天");   break;
                 default: break;
                 
         }
   }
}


void Timer0_INT() interrupt 1   //count每次加1,定时50000 us
{
        TL0 = 0x00;                //设置定时初值
        TH0 = 0x4C;       
        count++;       
}


IMG_20200403_172042.jpg (2.21 MB, 下载次数: 92)

IMG_20200403_172042.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:648281 发表于 2020-4-4 12:13 | 只看该作者
你好!
应该是DS1302数据读取错误造成的;
只能慢慢来找问题,一步步的去排查。
回复

使用道具 举报

板凳
ID:163090 发表于 2020-4-5 17:04 来自手机 | 只看该作者
51hei**1140 发表于 2020-4-4 12:13
你好!
应该是DS1302数据读取错误造成的;
只能慢慢来找问题,一步步的去排查。

谢谢大佬解答!为什么时钟和秒钟的显示是正常呢?如果1302芯片读取有问题,那应该都不会有显示的
回复

使用道具 举报

地板
ID:584814 发表于 2020-4-6 09:45 | 只看该作者
大概率是DS1302数据读取错误造成的;可以在程序启动时先写入数据(设置那7个数)然后财读试试,国产的DS13xx不同批次各自都可能有些莫名其妙的问题(大牌的没用过高价未必真货所以没试)。
回复

使用道具 举报

5#
ID:201555 发表于 2020-4-6 15:05 | 只看该作者
你发个清一屏操作,看看。什么效果。
回复

使用道具 举报

6#
ID:447439 发表于 2022-1-2 23:41 | 只看该作者
楼主还有吗,我也是遇到相同问题了。请问解决了吗?
回复

使用道具 举报

7#
ID:679211 发表于 2022-1-3 00:54 | 只看该作者
根据经验感觉是时序问题,首先看看你单片机使用的是内部时钟还是外部时钟,然后再根据时钟来算算你给1302的延时函数的延时时间是否满足DateSheet上的时序要求。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表