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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4801|回復: 5
收起左側(cè)

LCD1602顯示時間,秒會會跳變,求大神看代碼

[復制鏈接]
ID:57119 發(fā)表于 2013-11-21 17:59 | 顯示全部樓層 |閱讀模式
LCD1602結(jié)合DS1302顯示時間,隔2~3秒,秒顯示會突然加快...實在不解啊  看程序吧:
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uint t;
int shi=23,fen=3,miao=22,nian=13,yue=11,ri=19;
uchar shijian[16]={"time  00-00-00 t"},shijian1[16]={"date  00-00-00  "};
sbit E=P2^7;        //1602使能引腳
sbit RW=P2^5;       //1602讀寫引腳  
sbit RS=P2^6;       //1602數(shù)據(jù)/命令選擇引腳
sbit SDA=P3^4;         //DS1302數(shù)據(jù)線
sbit CLK=P3^6;         //DS1302時鐘線
sbit RST=P3^5;
uchar Current_Time[6];//時間數(shù)組
//*--------寫字節(jié)函數(shù),向DS1302寫入一個字節(jié)--------*//
void Write_Byte_TO_DS1302(uchar X)    // 向DS1302寫入一個字節(jié)
  {
     uchar i;
         for(i=0;i<8;i++)
           {
             SDA=X&1;
                 CLK=1;
                 CLK=0;
                 X>>=1;
           }
  }
//*--------讀字節(jié)函數(shù),從DS1302讀取一個字節(jié)--------*//
uchar Read_Byte_FROM_DS1302()
{
   uchar i,byte,t;
   for(i=0;i<8;i++)
     {
          byte>>=1;
          t=SDA;
          byte|=t<<7;
          CLK=1;
          CLK=0;
         }
         return byte/16*10+byte%16;         //BCD碼轉(zhuǎn)換
}
//-------------------------------------------------------------
//從DS1302指定位置讀取數(shù)據(jù)        , 讀數(shù)據(jù)
//---------------------------------------------------------------
uchar Read_Data_FROM_DS1302(uchar addr)
   {
     uchar dat;
         RST=0;
         CLK=0;
         RST=1;
         Write_Byte_TO_DS1302(addr);  //向DS1302寫入一個地址
         dat=Read_Byte_FROM_DS1302(); //在上面寫入的地址中讀取數(shù)據(jù)
         CLK=1;
         RST=0;
         return dat;
   }
//-------------------------------------------------------------
//向DS1302指定位置寫入數(shù)據(jù), 寫數(shù)據(jù)
//---------------------------------------------------------------
/* void Write_Data_TO_DS1302(uchar addr,uchar dat)
  {
       CLK=0;
           RST=1;
           Write_Byte_TO_DS1302(addr);
           Write_Byte_TO_DS1302(dat);
           CLK=1;
           RST=0;
  }*/
//-------------------------------------------------------------
//讀取當前時間,年月日,小時、分鐘、秒鐘
//---------------------------------------------------------------
void GET_Time()   
{
     Current_Time[0] =Read_Data_FROM_DS1302(0x81);          //讀取當前時間秒
          Current_Time[1] =Read_Data_FROM_DS1302(0x83);          //讀取當前時間分鐘
          Current_Time[2] =Read_Data_FROM_DS1302(0x85);           //讀取當前時間時鐘
          Current_Time[3] =Read_Data_FROM_DS1302(0x87);           //讀取當前時間日
          Current_Time[4] =Read_Data_FROM_DS1302(0x89);                //讀取當前時間月
          //Current_Time[5] =Read_Data_FROM_DS1302(0x8B);           //讀取當前時間星期
          Current_Time[5] =Read_Data_FROM_DS1302(0x8D);           //讀取當前時間秒年
}         
//---------------------------------------------------------------------
//設置時間函數(shù),當需要調(diào)整時間時,需要把調(diào)整好的時間寫入時間緩沖數(shù)組中
//---------------------------------------------------------------------
/*void SET_Time()
{
       Write_Data_TO_DS1302(0x8e,0x00) ;   //寫控制字,取消寫保護
                Write_Data_TO_DS1302(0x80,(Current_Time[0]/10<<4)|( Current_Time[0]%10));
           Write_Data_TO_DS1302(0x82,(Current_Time[1]/10<<4)|( Current_Time[1]%10)); //寫入分鐘
           Write_Data_TO_DS1302(0x84,(Current_Time[2]/10<<4)|( Current_Time[2]%10)); //寫入時鐘
                Write_Data_TO_DS1302(0x86,(Current_Time[3]/10<<4)|( Current_Time[3]%10));
                Write_Data_TO_DS1302(0x88,(Current_Time[4]/10<<4)|( Current_Time[4]%10));
                Write_Data_TO_DS1302(0x8C,(Current_Time[5]/10<<4)|( Current_Time[5]%10));
           Write_Data_TO_DS1302(0x8e,0x80);  //加保護
}*/
/********************************************************************
* 名稱 : delay()
* 功能 : 延時,延時時間大概為5US。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void delay()
{
   uint n=250;

   while(n--);
}
/********************************************************************
* 名稱 : bit Busy(void)
* 功能 : 這個是一個讀狀態(tài)函數(shù),讀出函數(shù)是否處在忙狀態(tài)
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
bit Busy(void)
{
    bit busy_flag = 0;
    RS = 0;
    RW = 1;
    E = 1;
    delay();
    busy_flag = (bit)(P0 & 0x80);
    E = 0;
    return busy_flag;
}
/********************************************************************
* 名稱 : wcmd(uchar del)
* 功能 : 1602命令函數(shù)
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
void wcmd(uchar del)
{
    while(Busy());
    RS = 0;
    RW = 0;
    E = 0;
    delay();
    P0 = del;
    delay();
    E = 1;
    delay();
    E = 0;
}
/********************************************************************
* 功能 : 1602寫數(shù)據(jù)函數(shù)
***********************************************************************/
void wdata(uchar del)
{
    while(Busy());
    RS = 1;
    RW = 0;
    E = 0;
    delay();
    P0 = del;
    delay();
    E = 1;
    delay();
    E = 0;
}
/********************************************************************
* 功能 : 1602初始化
***********************************************************************/
void L1602_init(void)
{
    wcmd(0x38);
    wcmd(0x0c);
    wcmd(0x06);
    wcmd(0x01);
}
/******************************
****時間顯示
*******************************/
void Display()
{
                        uint i;
                   shijian[6]=Current_Time[2]/10+48;
        shijian[7]=Current_Time[2]%10+48;
        shijian[9]=Current_Time[1]/10+48;
        shijian[10]=Current_Time[1]%10%10+48;
        shijian[12]=Current_Time[0]/10+48;
        shijian[13]=Current_Time[0]%10+48;
        shijian[8]=45;
        shijian[11]=45;
        shijian[15]=t+48;

        shijian1[6]=Current_Time[5]/10+48;
        shijian1[7]=Current_Time[5]%10+48;
        shijian1[9]=Current_Time[4]/10+48;
        shijian1[10]=Current_Time[4]%10+48;
        shijian1[12]=Current_Time[3]/10+48;
        shijian1[13]=Current_Time[3]%10+48;
        shijian1[8]=45;
        shijian1[11]=45;

                for(i=0;i<16;i++)
            {               
            wcmd(0xc0+i);
            wdata(shijian[i]);
            wcmd(0x80+i);
            wdata(shijian1[i]);
                }
}
void Main()
{       

        L1602_init();
        while(1)
        {        GET_Time();
                Display();
        }

}

回復

使用道具 舉報

ID:1 發(fā)表于 2013-11-23 19:49 | 顯示全部樓層
你的運行結(jié)果  秒是如何跳變的?
回復

使用道具 舉報

ID:57119 發(fā)表于 2013-11-23 20:35 | 顯示全部樓層
admin 發(fā)表于 2013-11-23 19:49
你的運行結(jié)果  秒是如何跳變的?

就是能夠正常計時,但是每隔2~3秒,秒的轉(zhuǎn)變會快一點,就是感覺沒到一秒就跳了
回復

使用道具 舉報

ID:153199 發(fā)表于 2016-12-17 12:09 | 顯示全部樓層
晶振工作不穩(wěn)定
回復

使用道具 舉報

ID:153199 發(fā)表于 2016-12-17 12:10 | 顯示全部樓層
需要看具體的運行結(jié)果
回復

使用道具 舉報

ID:111634 發(fā)表于 2016-12-17 13:35 | 顯示全部樓層
2013的老黃歷還翻出來?
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费一区二区 | 91在线精品视频 | 精品欧美一区二区在线观看欧美熟 | 日韩中文字幕 | 久久综合一区 | 中文字幕成人av | 成人一区二区在线 | 91视频在线观看 | 欧美精品一区二区三区在线 | 国产成人小视频 | 999精品在线 | 国产一区二区在线免费观看 | 亚洲www啪成人一区二区 | 午夜a区 | 99精品久久 | 国产情侣啪啪 | 国产高清免费视频 | 色性av| 五月婷亚洲 | 国产成人午夜电影网 | 久久久国产一区二区三区 | 精品成人在线观看 | 免费在线观看h片 | 亚洲欧美一区二区在线观看 | 日韩综合在线播放 | 日日干综合| 成人免费视频网站在线看 | 国产91久久久久蜜臀青青天草二 | 在线视频一区二区 | 黄色a三级 | av黄色国产 | 91精品国产色综合久久不卡98 | 日韩精品中文字幕一区二区三区 | 日本亚洲精品成人欧美一区 | 97国产在线视频 | 亚洲 精品 综合 精品 自拍 | 玖玖玖在线观看 | 欧美一区二区三区 | 亚洲区一区二 | 精品视频一区二区三区 | 97人人澡人人爽91综合色 |