欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 普中的板子,DS1302時鐘數值在12864液晶上顯示,1602上顯示正常,12864上就不顯示了 [打印本頁]

作者: 單片機小白一個    時間: 2019-4-13 16:13
標題: 普中的板子,DS1302時鐘數值在12864液晶上顯示,1602上顯示正常,12864上就不顯示了
程序如下:
說明: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);                                       
        }               
}


作者: 單片機小白一個    時間: 2019-4-13 16:49
求救

作者: wc86110    時間: 2019-4-13 18:10
有相應出現不用,亂套程序能正常顯示么
作者: HC6800-ES-V2.0    時間: 2019-4-14 09:49
沒從程序中看到你用了12864啊
1602與12864是兩種可以說是完全不同的器件吧,沒有新的程序,當然沒有相應的功能。
另外,你的12864會接嗎?那也是和1602不同的哦
作者: 單片機小白一個    時間: 2019-4-14 14:54
HC6800-ES-V2.0 發表于 2019-4-14 09:49
沒從程序中看到你用了12864啊
1602與12864是兩種可以說是完全不同的器件吧,沒有新的程序,當然沒有相應的 ...

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

作者: qkl189    時間: 2019-4-14 16:26
我這有1286451的程序,直接調用就行,我51都是調用那個,也不需要改
作者: qkl189    時間: 2019-4-14 16:28
單片機小白一個 發表于 2019-4-13 16:49
求救

我的是串行通訊的程序

作者: chtyise    時間: 2019-4-14 21:40
好好看看12864手冊,帶不帶字庫?
作者: 小貓要吃魚    時間: 2019-4-14 22:55
你好!
1、程序提供的不全
2、問題現象沒有截圖
3、給你一個類似的實物你看看









作者: 文鳳軒    時間: 2019-4-15 00:34
前有字庫,后無字庫
作者: HC6800-ES-V2.0    時間: 2019-4-15 09:06
單片機小白一個 發表于 2019-4-14 14:54
有12864的顯示程序啊,三個以lcd開頭命名的不就是嗎?在主函數里調用寫命令函數和寫數據函數不就行了嗎? ...

你的程序,我是認真看了的,沒有12864的驅動顯示程序,只有1602的程序,這兩個器件是不同時的,程序不能共用!
作者: ghq    時間: 2019-4-15 10:22
驅動芯片不同,引腳定義不同吧,你試試修改引腳定義。(看著手冊和原理圖)
作者: xyxx    時間: 2019-5-10 13:30
有沒有源文件啊

作者: 12人    時間: 2020-6-13 10:59
帶字庫的lcd12864和不帶字庫的肯定是不一樣的啦,因為你想調用的ds1302里面的時間等都是變量,帶字庫的lcd12864沒有添加變量函數所以你就調用不了
作者: 烈火    時間: 2020-6-13 13:11
帶字庫的lcd12864需要添加一個變量和函數




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1