找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1818|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

關(guān)于51單片機(jī)LCD1602時鐘顯示時總是少顯示1秒的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
在進(jìn)行LCD1602顯示秒變化時,發(fā)現(xiàn)按規(guī)律不顯示10、21、32.... 找不到原因,各位大佬能否幫忙解決
主程序:
#include <REGX52.H>
#include "LCD1602.H"
#include "DS1302.h"
#include "Delay.h"
unsigned char second;
void main()
{
      
        DS1302_Init();
        LCD_Init();
        DS1302_Write(0x8e,0x00);         //如果讀出時間為一個大于59并且不動的數(shù),芯片可能處于寫保護(hù)狀態(tài),關(guān)閉保護(hù)
      
        LCD_ShowString(1,1,"RRR");
        DS1302_Write(0x80,0x07);
      
        while(1)
        {
                second = DS1302_Read(0x81);
                LCD_ShowNum(2,1,second/16*10+second%16,3); //16進(jìn)制轉(zhuǎn)BCD碼
                Delay(1000);
        }
}
DS1302模塊化程序:
#include <REGX52.H>


sbit DS1302_SCLK = P3^6;
sbit DS1302_IO = P3^4;
sbit DS1302_CE = P3^5;


void DS1302_Init(void)
{
        DS1302_CE = 0;
        DS1302_SCLK = 0;
}
void DS1302_Write(unsigned char Command,Data)        //command命令如秒、分..
{
        unsigned char i;
        DS1302_CE = 1;
        for(i=0;i<8;i++)
        {
                DS1302_IO = Command&(0x01<<i);
                DS1302_SCLK = 1;
                DS1302_SCLK = 0;        //需要考慮時間是否允許
        }
        for(i=0;i<8;i++)
        {
                DS1302_IO = Data&(0x01<<i);
                DS1302_SCLK = 1;
                DS1302_SCLK = 0;      
        }
        DS1302_CE = 0;
}
unsigned char DS1302_Read(unsigned char Command)        //讀出數(shù)據(jù)即顯示寫入的數(shù)據(jù)所以有返回值
{
        unsigned char i,Data = 0x00;        //局部變量初值不確定
        DS1302_CE = 1;
        for(i=0;i<8;i++)
        {
                DS1302_IO = Command&(0x01<<i);
                DS1302_SCLK = 0;
                DS1302_SCLK = 1;        //先置0再置1保證時序準(zhǔn)確
        }
        for(i=0;i<8;i++)
        {
                DS1302_SCLK = 1;
                DS1302_SCLK = 0;
                if(DS1302_IO)                        //隨著時序的運(yùn)行 DS1302以及把想要輸出的第0位給到IO輸出口的這條線上
        {Data |= (0x01<<i);}
        }
        DS1302_CE = 0;
        DS1302_IO = 0;

        return Data;


}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1080935 發(fā)表于 2023-5-30 18:32 | 只看該作者
讀取時間間隔太大,雖然是秒,一秒一次讀取有可能會漏掉一個數(shù),可縮短讀取時間間隔試下,如0.5秒讀一次。
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2023-5-31 09:50 | 只看該作者
每10ms讀一次,當(dāng)本次與上次不同時,顯示本次,這樣誤差優(yōu)于10ms。
以依理類推。你可以改變讀取間隔。
回復(fù)

使用道具 舉報(bào)

地板
ID:332444 發(fā)表于 2023-5-31 14:29 | 只看該作者
按秒刷新,簡潔的程序美妙的效果。

錄像50_轉(zhuǎn).gif (91.39 KB, 下載次數(shù): 96)

錄像50_轉(zhuǎn).gif
回復(fù)

使用道具 舉報(bào)

5#
ID:332444 發(fā)表于 2023-5-31 15:52 | 只看該作者
之上圖片是按秒8位更新,當(dāng)然也可以拆分為按秒按分按時分別更新2位數(shù)據(jù)可以提高速度更快完成。
回復(fù)

使用道具 舉報(bào)

6#
ID:332444 發(fā)表于 2023-6-1 08:52 | 只看該作者
按理說使用1602比使用8位數(shù)碼管更節(jié)省處理時間,8位數(shù)碼管需要不停刷新,1602則可以按秒刷新因此可以更好安排時間,從動畫引腳顏色變化可見,一個合理的程序再添加按秒刷新不會對原來效果有什么影響.
回復(fù)

使用道具 舉報(bào)

7#
ID:384109 發(fā)表于 2023-6-1 09:48 | 只看該作者
LCD顯示代碼的問題
回復(fù)

使用道具 舉報(bào)

8#
ID:390416 發(fā)表于 2023-6-1 18:11 | 只看該作者
http://www.torrancerestoration.com/bbs/dpj-228933-1.html
這個帖子里面 有LCD1602使用詳細(xì)說明,
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表