久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2631|回復: 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, 下載次數: 111)

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区免费 | 久久99精品久久久久久琪琪 | 人人鲁人人莫人人爱精品 | 国产九九精品 | 亚洲第一区久久 | 亚洲一区二区免费 | 国产91亚洲精品 | 免费欧美 | 欧美日韩亚洲一区 | 男人天堂视频在线观看 | 拍真实国产伦偷精品 | 99精品视频一区二区三区 | 91一区二区在线观看 | 亚洲日本成人 | 91精品国产91综合久久蜜臀 | 国产一伦一伦一伦 | 成人h动漫精品一区二区器材 | 99久久精品免费看国产四区 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 欧美一二三区 | 国产亚洲精品久久久久动 | 一区二区三区中文 | 国产免国产免费 | 久草免费福利 | 久久精品日产第一区二区三区 | 国产精品国产三级国产aⅴ无密码 | www.久 | 日本三级电影在线看 | 国产精品久久精品 | 91综合网| 麻豆视频在线免费看 | 欧美日韩在线精品 | 国产精品久久久久久久久 | 亚洲成av人影片在线观看 | 中文字幕在线三区 | 午夜精品一区二区三区在线观看 | 欧美一区二区免费在线 | 欧美 中文字幕 | 国产成人精品一区二区在线 | 成人在线一区二区 | 国产一区二区电影网 |