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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4950|回復: 14
收起左側

普中的板子,DS1302時鐘數值在12864液晶上顯示,1602上顯示正常,12864上就不顯示了

  [復制鏈接]
ID:494791 發表于 2019-4-13 16:13 | 顯示全部樓層 |閱讀模式
程序如下:
說明:Ds1302Init();為1302初始化函數
Ds1302ReadTime();為讀取時間數據的函數
#include<reg52.h>                         
#include<ds1302.h>
#include<stdlib.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char       
char num=0;
uchar DisplayData[8];
sbit rs=P2^6;        
sbit rw=P2^5;        
sbit en=P2^7;
sbit psb=P3^2;
sbit DSIO=P3^4;
sbit RST=P3^5;
sbit SCLK=P3^6;
//---DS1302寫入和讀取時分秒的地址命令---//
//---秒分時日月周年 最低位讀寫位;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

//---DS1302時鐘初始化2016年5月7日星期六12點00分00秒。---//
//---存儲順序是秒分時日月周年,存儲格式是用BCD碼---//
uchar TIME[7] = {0, 0, 0x12, 0x07, 0x05, 0x06, 0x16};        
void delayxms(uint n)                     
{
    uint x,y;  
    for(x=n;x>0;x--)
        for(y=110;y>0;y--);
}
void lcd_wcom(uchar com)                 
{
    rs=0;
        rw=0;
        en=0;
        P0=com;
        delayxms(5);
        en=1;
        delayxms(5);
        en=0;
}
void lcd_wdat(uchar dat)            
{
   rs=1;
   rw=0;                                                                                 
   en=0;
   P0=dat;
   en=1;
   delayxms(5);
   en=0;
}
void lcd_init()               
{
    lcd_wcom(0x30);   
        delayxms(5);                                                                
    lcd_wcom(0x0c);          
        delayxms(5);   
    lcd_wcom(0x01);   
        delayxms(5);
}
//void datapros()          
//{
//  Ds1302ReadTime();
//        DisplayData[0] =                                 //時
//        DisplayData[1] = TIME[2]%16;                                 
//        //DisplayData[2] = 0x40;
//        DisplayData[3] = TIME[1]/16;                                //分
//        DisplayData[4] = TIME[1]%16;       
//        //DisplayData[5] = 0x40;
//        DisplayData[6] = TIME[0]/16;                                //秒
//        DisplayData[7] = TIME[0]%16;
//}
//void DigDisplay()
//{
//           lcd_wcom(0x80);
//        lcd_wdat(DisplayData[0]+0x30);
//        lcd_wdat(DisplayData[1]+0x30);
//        lcd_wdat(0x3a);
//        lcd_wdat(DisplayData[3]+0x30);
//        lcd_wdat(DisplayData[4]+0x30);
//        lcd_wdat(0x3a);
//        lcd_wdat(DisplayData[6]+0x30);                  
//        lcd_wdat(DisplayData[7]+0x30);
//}
void Ds1302Write(uchar addr, uchar dat)
{
        uchar n;
        RST = 0;
        _nop_();

        SCLK = 0;//先將SCLK置低電平。
        _nop_();
        RST = 1; //然后將RST(CE)置高電平。
        _nop_();

        for (n=0; n<8; n++)//開始傳送八位地址命令
        {
                DSIO = addr & 0x01;//數據從低位開始傳送
                addr >>= 1;
                SCLK = 1;//數據在上升沿時,DS1302讀取數據
                _nop_();
                SCLK = 0;
                _nop_();
        }
        for (n=0; n<8; n++)//寫入8位數據
        {
                DSIO = dat & 0x01;
                dat >>= 1;
                SCLK = 1;//數據在上升沿時,DS1302讀取數據
                _nop_();
                SCLK = 0;
                _nop_();       
        }       
                 
        RST = 0;//傳送數據結束
        _nop_();
}

uchar Ds1302Read(uchar addr)
{
        uchar n,dat,dat1;
        RST = 0;
        _nop_();

        SCLK = 0;//先將SCLK置低電平。
        _nop_();
        RST = 1;//然后將RST(CE)置高電平。
        _nop_();

        for(n=0; n<8; n++)//開始傳送八位地址命令
        {
                DSIO = addr & 0x01;//數據從低位開始傳送
                addr >>= 1;
                SCLK = 1;//數據在上升沿時,DS1302讀取數據
                _nop_();
                SCLK = 0;//DS1302下降沿時,放置數據
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//讀取8位數據
        {
                dat1 = DSIO;//從最低位開始接收
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302下降沿時,放置數據
                _nop_();
        }

        RST = 0;
        _nop_();        //以下為DS1302復位的穩定時間,必須的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
        return dat;       
}
void Ds1302Init()
{
        uchar n;
        Ds1302Write(0x8E,0X00);                 //禁止寫保護,就是關閉寫保護功能
        for (n=0; n<7; n++)//寫入7個字節的時鐘信號:分秒時日月周年
        {
                Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);       
        }
        Ds1302Write(0x8E,0x80);                 //打開寫保護功能
}
void Ds1302ReadTime()
{
        uchar n;
        for (n=0; n<7; n++)//讀取7個字節的時鐘信號:分秒時日月周年
        {
                TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
        }
               
}

void main()
{       
        //uchar n;
        psb=1;
        lcd_init();               
        lcd_wcom(0x80);          //這四行是我為了測試程序加上去的,當Ds1302Init(); 函數和Ds1302ReadTime();函數都被注釋時,該部分正常顯示,
        lcd_wdat(1+0x30);      //當Ds1302Init();和 Ds1302ReadTime();只要有一個不被注釋時這四行就不顯示了,奇了怪了,沒有循環,后邊的程序還能對前邊的程序造成影響
        lcd_wcom(0x90);          //
        lcd_wdat(1+0x30);           //
        Ds1302Init();                                             
        while(1)
        {  
          Ds1302ReadTime();
//          datapros();       
//    DigDisplay();   
      lcd_wcom(0x98);
          lcd_wdat(TIME[2]/16+0x30);               
          lcd_wdat(TIME[2]%16+0x30);
          lcd_wdat(0x3a);
          lcd_wdat(TIME[1]/16+0x30);
          lcd_wdat(TIME[1]%16+0x30);
          lcd_wdat(0x3a);
          lcd_wdat(TIME[0]/16+0x30);
          lcd_wdat(TIME[0]%16+0x30);                                       
        }               
}

回復

使用道具 舉報

ID:494791 發表于 2019-4-13 16:49 | 顯示全部樓層
求救
回復

使用道具 舉報

ID:96682 發表于 2019-4-13 18:10 | 顯示全部樓層
有相應出現不用,亂套程序能正常顯示么
回復

使用道具 舉報

ID:164602 發表于 2019-4-14 09:49 | 顯示全部樓層
沒從程序中看到你用了12864啊
1602與12864是兩種可以說是完全不同的器件吧,沒有新的程序,當然沒有相應的功能。
另外,你的12864會接嗎?那也是和1602不同的哦

評分

參與人數 1黑幣 +1 收起 理由
嘉立創AAA + 1 普中是越來越缺德了!

查看全部評分

回復

使用道具 舉報

ID:494791 發表于 2019-4-14 14:54 | 顯示全部樓層
HC6800-ES-V2.0 發表于 2019-4-14 09:49
沒從程序中看到你用了12864啊
1602與12864是兩種可以說是完全不同的器件吧,沒有新的程序,當然沒有相應的 ...

有12864的顯示程序啊,三個以lcd開頭命名的不就是嗎?在主函數里調用寫命令函數和寫數據函數不就行了嗎?那個選擇是串行還是并行的程序里也有,主函數里面滴四行那里請幫忙看一下
回復

使用道具 舉報

ID:456780 發表于 2019-4-14 16:26 | 顯示全部樓層
我這有1286451的程序,直接調用就行,我51都是調用那個,也不需要改
回復

使用道具 舉報

ID:456780 發表于 2019-4-14 16:28 | 顯示全部樓層

我的是串行通訊的程序
回復

使用道具 舉報

ID:337069 發表于 2019-4-14 21:40 | 顯示全部樓層
好好看看12864手冊,帶不帶字庫?
回復

使用道具 舉報

ID:497670 發表于 2019-4-14 22:55 | 顯示全部樓層
你好!
1、程序提供的不全
2、問題現象沒有截圖
3、給你一個類似的實物你看看

002.png


004.png



回復

使用道具 舉報

ID:386381 發表于 2019-4-15 00:34 來自觸屏版 | 顯示全部樓層
前有字庫,后無字庫
回復

使用道具 舉報

ID:164602 發表于 2019-4-15 09:06 | 顯示全部樓層
單片機小白一個 發表于 2019-4-14 14:54
有12864的顯示程序啊,三個以lcd開頭命名的不就是嗎?在主函數里調用寫命令函數和寫數據函數不就行了嗎? ...

你的程序,我是認真看了的,沒有12864的驅動顯示程序,只有1602的程序,這兩個器件是不同時的,程序不能共用!
回復

使用道具 舉報

ID:269090 發表于 2019-4-15 10:22 | 顯示全部樓層
驅動芯片不同,引腳定義不同吧,你試試修改引腳定義。(看著手冊和原理圖)
回復

使用道具 舉報

ID:528325 發表于 2019-5-10 13:30 | 顯示全部樓層
有沒有源文件啊
回復

使用道具 舉報

ID:682755 發表于 2020-6-13 10:59 來自觸屏版 | 顯示全部樓層
帶字庫的lcd12864和不帶字庫的肯定是不一樣的啦,因為你想調用的ds1302里面的時間等都是變量,帶字庫的lcd12864沒有添加變量函數所以你就調用不了
回復

使用道具 舉報

ID:744327 發表于 2020-6-13 13:11 | 顯示全部樓層
帶字庫的lcd12864需要添加一個變量和函數
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 综合久久av | 婷婷激情五月网 | 国产精品久久久久久久久免费相片 | 免费国产成人av | 手机日韩| 91视频精选| 精品国产一区二区三区久久久久久 | 国产在线97 | 欧美日韩亚洲在线 | 中文字幕在线一 | 久久69精品久久久久久国产越南 | 久久久久资源 | 永久精品 | 国产网站在线播放 | 欧美亚洲视频 | 日韩黄 | 7799精品视频天天看 | 久久久精品久 | 九九色综合| 精品国产欧美一区二区三区不卡 | 久久99精品久久久 | 欧美男人天堂 | 日韩av免费在线电影 | 国产精久久久久久久 | 四虎影视1304t| h视频网站在线观看 | 亚洲一区高清 | 激情国产在线 | 亚洲免费三级 | 欧美成人精品一区二区男人看 | 欧美激情欧美激情在线五月 | 欧美一级大黄 | 国产精品亚洲欧美日韩一区在线 | 一道本不卡视频 | 亚洲夜夜爽 | 色站综合 | 午夜免费精品视频 | 91精品一区二区三区久久久久久 | 男女搞网站 | 一区日韩 | 日韩中文字幕在线观看 |