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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1645|回復: 8
打印 上一主題 下一主題
收起左側

為什么我的時鐘程序Proteus仿真可以,開發板上程序會出現錯誤

[復制鏈接]
跳轉到指定樓層
樓主
ID:811733 發表于 2020-8-7 15:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序如下,請教程序哪里有問題,謝謝!
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcdrs=P2^6;
sbit lcdrw=P2^5;
sbit lcden=P2^7;
sbit ds1302_IO=P3^4;
sbit ds1302_CLK=P3^6;
sbit ds1302_RST=P3^5;
uchar num,i;
uchar code read_addr[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code write_addr[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
uchar time[7] = {0x57,0x59,0x23,0x06,0x08,0x04,0x20};


/****************************************************
LCD1206 程序
******************************************************/
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

void write_com(uchar com) //寫地址
{
    lcdrs=0;
    P0=com;
    delay(5);
    lcden=1;
    delay(5);
    lcden=0;
}

void write_date(uchar date)  //讀數據
{
    lcdrs=1;
    P0=date;
    delay(5);
    lcden=1;
    delay(5);
    lcden=0;
}

void init()              //LCD1206初始化
{
    lcden=0;
    lcdrw=0;
    write_com(0x38);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x01);
}

/***********************************************

/********************
DS1302 寫數據
*********************/

void ds1302_write(uchar addr,uchar date)
{
        uchar n;
    ds1302_CLK=0;
        ds1302_RST=1;
        for(n=0;n<8;n++)
        {
        ds1302_IO=addr&0x01;
        addr>>=1;
        ds1302_CLK=1;
        ds1302_CLK=0;
        }
    for(n=0;n<8;n++)
    {
        ds1302_IO=date&0x01;
        date>>=1;
        ds1302_CLK=1;
        ds1302_CLK=0;
    }
        ds1302_RST=0;
}
/**********************
讀數據
*************************/
uchar ds1302_read(uchar addr)
{
    uchar n,dat=0;

    ds1302_RST=1;
    for(n=0;n<8;n++)
    {
        ds1302_IO=addr&0x01;
        addr>>=1;
        ds1302_CLK=1;
        ds1302_CLK=0;
    }
    for(n=0;n<8;n++)
    {
        dat=dat>>1;
        if(ds1302_IO==1)
            dat=dat|0x80;
        ds1302_CLK=1;
        ds1302_CLK=0;
    }
    ds1302_RST=0;  
    return dat;
}

void ds1302init()   //ds1302初始化
{
    uchar n;
    ds1302_write(0x8e,0x00);
    for(n=0;n<7;n++)
    {
        ds1302_write(write_addr[n],time[n]);
    }
    ds1302_write(0x8e,0x80);
}

void ds1302_readtime()  //ds1302讀數據
{
    uchar n;
    for(n=0;n<7;n++)
    {
        time[n]=ds1302_read(read_addr[n]);
    }
}


void LcdDisplay()
{
        write_com(0x80+0X40);
        write_date('0'+time[2]/16);                                //時
        write_date('0'+(time[2]&0x0f));                                 
        write_date('-');
        write_date('0'+time[1]/16);                                //分
        write_date('0'+(time[1]&0x0f));       
        write_date('-');
        write_date('0'+time[0]/16);                                //秒
        write_date('0'+(time[0]&0x0f));

        write_com(0x80);
        write_date('2');
    write_date('0');
        write_date('0'+time[6]/16);                        //年
        write_date('0'+(time[6]&0x0f));
        write_date('-');
        write_date('0'+time[4]/16);                        //月
        write_date('0'+(time[4]&0x0f));
        write_date('-');
        write_date('0'+time[3]/16);                        //日
        write_date('0'+(time[3]&0x0f));
        write_com(0x8D);
        write_date('0'+(time[5]&0x07));        //星期                         
}

void main()
{
    init();
    ds1302init();

    while(1)
    {
       ds1302_readtime();
    LcdDisplay();


    }
}

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

使用道具 舉報

沙發
ID:332444 發表于 2020-8-7 16:33 | 只看該作者
要看是蝦米錯才能分析,是時序還是延時?
回復

使用道具 舉報

板凳
ID:462827 發表于 2020-8-7 16:37 | 只看該作者
你自己對照實物板的原理圖看看,lcd1602的控制引腳以及DS1302的引腳對了沒有呢
回復

使用道具 舉報

地板
ID:782419 發表于 2020-8-7 16:40 | 只看該作者
你的lcd不需要忙檢測么?
回復

使用道具 舉報

5#
ID:686782 發表于 2020-8-7 20:25 | 只看該作者
如果是時間不對,仿真可能存在PC自動授時的設置,所以你proteus的時間可能根本不是來自程序。
回復

使用道具 舉報

6#
ID:811733 發表于 2020-8-7 22:12 | 只看該作者
xianfajushi 發表于 2020-8-7 16:33
要看是蝦米錯才能分析,是時序還是延時?

像是顯示程序沒有寫好,但是不懂哪里的錯誤。
回復

使用道具 舉報

7#
ID:811733 發表于 2020-8-7 22:12 | 只看該作者
hantu 發表于 2020-8-7 16:37
你自己對照實物板的原理圖看看,lcd1602的控制引腳以及DS1302的引腳對了沒有呢

引腳都是對應的,原理圖已經確認過
回復

使用道具 舉報

8#
ID:811733 發表于 2020-8-7 22:19 | 只看該作者
OHHO 發表于 2020-8-7 20:25
如果是時間不對,仿真可能存在PC自動授時的設置,所以你proteus的時間可能根本不是來自程序。

不知道是不是DS1302讀取的程序不對,顯示出來就不是我初值的值
回復

使用道具 舉報

9#
ID:811733 發表于 2020-8-8 00:24 | 只看該作者
問題已經找到,程序中讀數據SCLK沒有拉低,
uchar ds1302_read(uchar addr)
{
    uchar n,dat=0;
   ds1302_CLK=0;   這句漏了
    ds1302_RST=1;
    for(n=0;n<8;n++)
    {
        ds1302_IO=addr&0x01;
        addr>>=1;
        ds1302_CLK=1;
        ds1302_CLK=0;
    }
    for(n=0;n<8;n++)
    {
        dat=dat>>1;
        if(ds1302_IO==1)
            dat=dat|0x80;
        ds1302_CLK=1;
        ds1302_CLK=0;
    }
    ds1302_RST=0;  
    return dat;
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕国产第一页 | 色啪网| 亚洲成av| 女女爱爱视频 | 91麻豆精品国产91久久久更新资源速度超快 | 国产日韩久久 | 久久麻豆精品 | 欧美男人天堂 | 91亚洲欧美| 亚洲精品福利视频 | 亚洲一区 中文字幕 | 日韩一级免费电影 | 一级a毛片 | 亚洲国产激情 | 久久99深爱久久99精品 | 夜夜爽99久久国产综合精品女不卡 | 亚洲激精日韩激精欧美精品 | 国产丝袜av| 欧美一级久久 | 91一区二区 | 在线成人www免费观看视频 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美黑人一级爽快片淫片高清 | 亚洲一区二区精品视频 | 久久久精品综合 | 欧美jizzhd精品欧美巨大免费 | 国产一区二区精品在线观看 | 亚洲在线观看视频 | 久久久久久亚洲精品 | 欧洲国产精品视频 | a在线视频 | 激情五月婷婷丁香 | 播放一级毛片 | 国产高清视频一区二区 | 69堂永久69tangcom | 在线黄色影院 | 国产精品一区二区av | 盗摄精品av一区二区三区 | 欧美aaa | 欧美成人一区二区 | 欧美日韩一区二区在线观看 |