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

標題: 關于ds1302時鐘C語言程序char num=0;有什么實際意義? [打印本頁]

作者: egsresrhtrhrtst    時間: 2022-6-7 18:54
標題: 關于ds1302時鐘C語言程序char num=0;有什么實際意義?
想請教一下main.c文件里char num=0;有什么實際意義,我看后邊主函數啥的也都沒有引用,刪除了也不報錯。

單片機源程序如下:
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
#include "ds1302.h"        

typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;


char num=0;
u8 DisplayData[8];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*******************************************************************************
* 函 數 名         : delay
* 函數功能                   : 延時函數,i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}


/*******************************************************************************
* 函 數 名         : datapros()
* 函數功能                   : 時間讀取處理轉換函數
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/

void datapros()         
{
           Ds1302ReadTime();
        DisplayData[0] = smgduan[TIME[2]/16];                                //時
        DisplayData[1] = smgduan[TIME[2]&0x0f];                                 
        DisplayData[2] = 0x40;
        DisplayData[3] = smgduan[TIME[1]/16];                                //分
        DisplayData[4] = smgduan[TIME[1]&0x0f];        
        DisplayData[5] = 0x40;
        DisplayData[6] = smgduan[TIME[0]/16];                                //秒
        DisplayData[7] = smgduan[TIME[0]&0x0f];
}


/*******************************************************************************
* 函數名         :DigDisplay()
* 函數功能                 :數碼管顯示函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void DigDisplay()
{
        u8 i;
        for(i=0;i<8;i++)
        {
                switch(i)         //位選,選擇點亮的數碼管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//顯示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//顯示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//顯示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//顯示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//顯示第4位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//顯示第5位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//顯示第6位
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;//顯示第7位        
                }
                P0=DisplayData[ i];//發送數據
                delay(100); //間隔一段時間掃描        
                P0=0x00;//消隱
        }               
}

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        Ds1302Init();           //第一次初始化后就可以注釋該條語句,這樣下次重啟就不會再次初始化了
        while(1)
        {
                datapros();         //數據處理函數
                DigDisplay();//數碼管顯示函數               
        }               
}





#include"ds1302.h"

//---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};

/*******************************************************************************
* 函 數 名         : Ds1302Write
* 函數功能                   : 向DS1302命令(地址+數據)
* 輸    入         : addr,dat
* 輸    出         : 無
*******************************************************************************/

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_();
}

/*******************************************************************************
* 函 數 名         : Ds1302Read
* 函數功能                   : 讀取一個地址的數據
* 輸    入         : addr
* 輸    出         : dat
*******************************************************************************/

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;        
}

/*******************************************************************************
* 函 數 名         : Ds1302Init
* 函數功能                   : 初始化DS1302.
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/

void Ds1302Init()
{
        uchar n;
        Ds1302Write(0x8E,0X00);                 //禁止寫保護,就是關閉寫保護功能
        for (n=0; n<7; n++)//寫入7個字節的時鐘信號:分秒時日月周年
        {
                Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);        
        }
        Ds1302Write(0x8E,0x80);                 //打開寫保護功能
}

/*******************************************************************************
* 函 數 名         : Ds1302ReadTime
* 函數功能                   : 讀取時鐘信息
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/

void Ds1302ReadTime()
{
        uchar n;
        for (n=0; n<7; n++)//讀取7個字節的時鐘信號:分秒時日月周年
        {
                TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
        }
               
}




#ifndef __DS1302_H_
#define __DS1302_H_

//---包含頭文件---//
#include<reg52.h>
#include<intrins.h>

//---重定義關鍵詞---//
#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uint unsigned int
#endif

//---定義ds1302使用的IO口---//
sbit DSIO=P3^4;
sbit RST=P3^5;
sbit SCLK=P3^6;

//---定義全局函數---//
void Ds1302Write(uchar addr, uchar dat);
uchar Ds1302Read(uchar addr);
void Ds1302Init();
void Ds1302ReadTime();

//---加入全局變量--//
extern uchar TIME[7];        //加入全局變量

#endif

作者: Hephaestus    時間: 2022-6-7 21:59
既然刪除了沒有報錯,那就是無效代碼,你考慮無意義的東西干什么?
作者: 17337161031    時間: 2022-6-7 22:02
有的是用于別的,只是原作者沒有刪除,一般用于計時,只是在本代碼沒用到,可以刪除
作者: 人人學會單片機    時間: 2022-6-7 22:24
http://www.zg4o1577.cn/bbs/dpj-200968-1.html  
STC8單片機+DS1302+DS18B20+74HC595的LED16x32點陣溫度萬年歷源代碼

作者: 188610329    時間: 2022-6-7 22:28
char num=0;
從目的上: 是聲明一個 初值為0 的 num 變量。
實際意義上:可能是作者忘了刪了。

經常拉別人的代碼,這種情況應該見怪不怪了,才對。寫代碼的時候,用到某個功能,最后完成后,功能刪了,尾巴還留著的,很多。
作者: wjsbmw    時間: 2022-6-7 23:10
說明char num=0是多余的,可以刪除不用。
作者: Y_G_G    時間: 2022-6-8 13:57
這應該就是CV工程師最常見的問題
有時候連自己寫的代碼,過一段時間再看,自己都不知道這個變量是干嘛用的
作者: shanghanlin    時間: 2022-6-8 19:31
有時候只是用來延長那個機器周期,一般是三個以上
作者: Hephaestus    時間: 2022-6-8 19:42
shanghanlin 發表于 2022-6-8 19:31
有時候只是用來延長那個機器周期,一般是三個以上

char num=0;如果沒有被優化掉,而是被編譯器忠實編譯出來,也只是內存上占用了一個字節的地址。怎么可能有延長機器周期的效果?懂就回答,不懂就不要誤導別人。
作者: man1234567    時間: 2022-6-9 10:09
shanghanlin 發表于 2022-6-8 19:31
有時候只是用來延長那個機器周期,一般是三個以上

上電初始化時多了個無用賦值怎么可能有延長機器周期的功效 ? 不懂勿唬人。
程序中刪除都不影響運行且只在初始化出現過一次的,一般是程序原設計有用后來沒用忘記刪除了。

作者: egsresrhtrhrtst    時間: 2022-6-9 15:55
Hephaestus 發表于 2022-6-7 21:59
既然刪除了沒有報錯,那就是無效代碼,你考慮無意義的東西干什么?

好的,感謝
作者: egsresrhtrhrtst    時間: 2022-6-9 15:55
17337161031 發表于 2022-6-7 22:02
有的是用于別的,只是原作者沒有刪除,一般用于計時,只是在本代碼沒用到,可以刪除

感謝
作者: egsresrhtrhrtst    時間: 2022-6-9 15:56
188610329 發表于 2022-6-7 22:28
char num=0;
從目的上: 是聲明一個 初值為0 的 num 變量。
實際意義上:可能是作者忘了刪了。

感謝
作者: egsresrhtrhrtst    時間: 2022-6-9 15:56
wjsbmw 發表于 2022-6-7 23:10
說明char num=0是多余的,可以刪除不用。

好的,感謝
作者: egsresrhtrhrtst    時間: 2022-6-9 15:56
Y_G_G 發表于 2022-6-8 13:57
這應該就是CV工程師最常見的問題
有時候連自己寫的代碼,過一段時間再看,自己都不知道這個變量是干嘛用的

好的,感謝
作者: lili_3605    時間: 2022-6-9 16:39
整篇代碼中,沒有用到該變量,可能是沒有刪除,不影響系統整體運行
作者: 風之痕于夢想    時間: 2022-6-15 13:30
相信自己
作者: gggggllll    時間: 2022-6-15 20:16
后面又沒用到num,就是個無效代碼。這無所謂的




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲国产aⅴ精品一区二区 免费观看av | 亚洲男人天堂 | 东方伊人免费在线观看 | 狠狠狠色丁香婷婷综合久久五月 | 久久91 | 日韩欧美精品一区 | 男女久久久 | 国产精品免费看 | 国产日韩欧美精品 | www国产亚洲精品久久网站 | 欧美视频中文字幕 | 欧美性网| 一区二区福利视频 | 国产成人精品一区二区三区 | 高清一区二区三区 | 91精品国产91久久综合桃花 | 做a视频在线观看 | 欧美精品久久久久久久久久 | 精品国产99 | 狠狠干天天干 | 亚洲成人av | 中文精品视频 | 高清视频一区 | 国产黄视频在线播放 | 日韩中文在线视频 | 激情国产视频 | 午夜精品一区 | 中文字幕一区二区三区不卡 | 我爱操| 亚洲一区 中文字幕 | 日韩午夜精品 | 久久丁香| 亚洲午夜精品 | 久优草 | 一区二区三区四区在线 | 午夜精品久久久久久久99黑人 | 欧美一区二区三区一在线观看 | 一级毛片视频 | 亚洲国产精品一区二区www | 国产精品国产三级国产aⅴ中文 | 国产精品99久久久精品免费观看 |