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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4380|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

lcd1602可調(diào)時鐘程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:143648 發(fā)表于 2016-11-25 20:16 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


LCD溫度和時間.rar (53.01 KB, 下載次數(shù): 44)

#include<reg51.h>
#include "LCD.h"
#include"ds1302.h"
#include"DS18B20.h"
//時鐘鍵盤
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
sbit K4=P3^3;
sbit beep=P1^5;        
typedef unsigned int u16;          //對數(shù)據(jù)類型進行聲明定義
typedef unsigned char u8;
char num=0;
unsigned char SetState,SetPlace;

//外部中斷
void Int0Configuration();

void Delay10ms(void)   //誤差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

//溫度顯示函數(shù)
void display(int temp)         
{
           float tp;  
        if(temp< 0)                                //當(dāng)溫度值為負數(shù)
          {        LcdWriteCom(0x88+0x40);                //寫地址 80表示初始地址
            LcdWriteData('-');                 //顯示正
                 //因為讀取0的溫度是實際溫度的補碼,所以減1,再取反求出原碼
                temp=temp-1;
                temp=~temp;
                tp=temp;
                temp=tp*0.0625*100+0.5;        
                //留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點
                //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
                //算加上0.5,還是在小數(shù)點后面。

          }
         else
          {        LcdWriteCom(0x88+0x40);                //寫地址 80表示初始地址
            LcdWriteData('+');                 //顯示正               
            tp=temp;//因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量
                //如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本身
                temp=tp*0.0625*100+0.5;        
                //留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點
                //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
                //算加上0.5,還是在小數(shù)點后面。
        }
        TIME[8] = temp / 10000;
        TIME[9] = temp % 10000 / 1000;
    TIME[10] = temp % 1000 / 100 ;
    TIME[11] = temp % 100 / 10;
    TIME[12] = temp % 10;
        LcdWriteCom(0x89+0x40);                  //寫地址 80表示初始地址
        LcdWriteData('0'+TIME[8]); //百位
        
        LcdWriteCom(0x8a+0x40);                 //寫地址 80表示初始地址
        LcdWriteData('0'+TIME[9]); //十位
        
        LcdWriteCom(0x8b+0x40);                //寫地址 80表示初始地址
        LcdWriteData('0'+TIME[10]); //個位
        
        LcdWriteCom(0x8c+0x40);                //寫地址 80表示初始地址
        LcdWriteData('.');                 //顯示 ‘.’
        
        LcdWriteCom(0x8d+0x40);                 //寫地址 80表示初始地址
        LcdWriteData('0'+TIME[11]); //顯示小數(shù)位
        
        LcdWriteCom(0x8e+0x40);                 //寫地址 80表示初始地址
        LcdWriteData('0'+TIME[12]); //顯示小數(shù)位   
         
}
//時鐘顯示函數(shù)
void LcdDisplay()
{
        LcdWriteCom(0x80+0X40);
        LcdWriteData('0'+TIME[2]/16);                                //時
        LcdWriteData('0'+(TIME[2]&0x0f));                                 
        LcdWriteData('-');
        LcdWriteData('0'+TIME[1]/16);                                //分
        LcdWriteData('0'+(TIME[1]&0x0f));        
        LcdWriteData('-');
        LcdWriteData('0'+TIME[0]/16);                                //秒
        LcdWriteData('0'+(TIME[0]&0x0f));

        LcdWriteCom(0x80);
        LcdWriteData('2');
        LcdWriteData('0');
        LcdWriteData('0'+TIME[6]/16);                        //年
        LcdWriteData('0'+(TIME[6]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[4]/16);                        //月
        LcdWriteData('0'+(TIME[4]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[3]/16);                        //日
        LcdWriteData('0'+(TIME[3]&0x0f));
        LcdWriteCom(0x8D);
        LcdWriteData('0'+(TIME[5]&0x07));        //星期                        
}
//鍵盤控制函數(shù)
void keycontrol()
{                 unsigned char i;        
           if(K1==0)                //檢測按鍵K1是否按下
                        {
                                Delay10ms();        //消除抖動
                                if(K1==0)
                                {
                                        SetPlace++;
                                        if(SetPlace>=7)
                                                SetPlace=0;                                       
                                }

                                while((i<50)&&(K1==0))         //檢測按鍵是否松開
                                {
                                        Delay10ms();
                                        i++;
                                }
                                i=0;
                        }
                        if(K2==0)                //檢測按鍵K2是否按下
                        {
                                Delay10ms();        //消除抖動
                                if(K2==0)
                                {
                                        TIME[SetPlace]++;
                                        if((TIME[SetPlace]&0x0f)>9)                                         //換成BCD碼。
                                        {
                                                TIME[SetPlace]=TIME[SetPlace]+6;
                                        }
                                        if((TIME[SetPlace]>=0x60)&&(SetPlace<2))                //分秒只能到59
                                        {
                                                TIME[SetPlace]=0;
                                        }
                                        if((TIME[SetPlace]>=0x24)&&(SetPlace==2))                //小時只能到23
                                        {
                                                TIME[SetPlace]=0;
                                        }
                                        if((TIME[SetPlace]>=0x32)&&(SetPlace==3))                //日只能到31
                                        {
                                                TIME[SetPlace]=0;        
                                        }
                                        if((TIME[SetPlace]>=0x13)&&(SetPlace==4))                //月只能到12
                                        {
                                                TIME[SetPlace]=0;
                                        }        
                                        if((TIME[SetPlace]>=0x7)&&(SetPlace==5))                //周只能到7
                                        {
                                                TIME[SetPlace]=1;
                                        }               
        
                                }
                                
                                while((i<50)&&(K2==0))         //檢測按鍵是否松開
                                {
                                        Delay10ms();
                                        i++;
                                }
                                i=0;
                                
                        }                                                
                                   if(K4==0)                //檢測按鍵K2是否按下
                        {
                                Delay10ms();        //消除抖動
                                if(K4==0)
                                {
                                        TIME[SetPlace]--;
                                        if((TIME[SetPlace]&0x0f)>9)                                         //換成BCD碼。
                                        {
                                                TIME[SetPlace]=TIME[SetPlace]+6;
                                        }
                                        if((TIME[SetPlace]>=0x60)&&(SetPlace<2))                //分秒只能到59
                                        {
                                                TIME[SetPlace]=0;
                                        }
                                        if((TIME[SetPlace]>=0x24)&&(SetPlace==2))                //小時只能到23
                                        {
                                                TIME[SetPlace]=0;
                                        }
                                        if((TIME[SetPlace]>=0x32)&&(SetPlace==3))                //日只能到31
                                        {
                                                TIME[SetPlace]=0;        
                                        }
                                        if((TIME[SetPlace]>=0x13)&&(SetPlace==4))                //月只能到12
                                        {
                                                TIME[SetPlace]=0;
                                        }        
                                        if((TIME[SetPlace]>=0x7)&&(SetPlace==5))                //周只能到7
                                        {
                                                TIME[SetPlace]=1;
                                        }               

                                }
                                
                                while((i<50)&&(K4==0))         //檢測按鍵是否松開
                                {
                                        Delay10ms();
                                        i++;
                                }
                                i=0;
                                
                        }                                

}





//主函數(shù)
void main()
{
        Int0Configuration();
        LcdInit();                         //初始化LCD1602
        Delay10ms();
    Ds1302Init();                  //初始化DS1302
        LcdWriteCom(0x8f+0x40);        //寫地址 80表示初始地址
        LcdWriteData('C');         
        
        while(1)
        {                  
                  
                 
                 
                 
                 display( Ds18b20ReadTemp());
                  
                 if(SetState==0)
                {
                        Ds1302ReadTime();
                                       
                }
                        else
                        {                 keycontrol();

                        }        
                                                   
                        LcdDisplay();
                                                
        }
}
/*******************************************************************************
* 函數(shù)名         : Int0Configuration()
* 函數(shù)功能                   : 配置外部中斷0
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
//打開外部中斷0
void Int0Configuration()
{
        //設(shè)置INT0
        IT0=1;//跳變沿觸發(fā)方式(下降沿)
        EX0=1;//打開INT0的中斷允許。
        EA=1;//打開總中斷
        
}
//外部中斷0執(zhí)行函數(shù)
void Int0() interrupt 0                 
{
        Delay10ms();

        if(K3==0)
        {
                SetState=~SetState;
                SetPlace=0;
            Ds1302Init(); //初始化DS1302        
        }
}







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

使用道具 舉報

沙發(fā)
ID:72088 發(fā)表于 2016-11-26 13:25 | 只看該作者
學(xué)習(xí)了,樓主
回復(fù)

使用道具 舉報

板凳
ID:150262 發(fā)表于 2016-11-27 19:33 來自手機 | 只看該作者
很好這個非常好用謝謝
回復(fù)

使用道具 舉報

地板
ID:190619 發(fā)表于 2017-4-17 21:32 | 只看該作者
SetState=~SetState;
                SetPlace=0;
想知道這是什么意思
回復(fù)

使用道具 舉報

5#
ID:190619 發(fā)表于 2017-4-17 21:33 | 只看該作者
時間怎樣改呀
回復(fù)

使用道具 舉報

6#
ID:159139 發(fā)表于 2017-4-22 23:47 | 只看該作者
下個來自己做個時鐘,謝謝樓主。
回復(fù)

使用道具 舉報

7#
ID:194881 發(fā)表于 2017-4-29 22:17 來自手機 | 只看該作者
感謝分享!!!
回復(fù)

使用道具 舉報

8#
ID:241988 發(fā)表于 2017-12-4 21:52 | 只看該作者
很給力!準(zhǔn)備試試
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区在线视频 | 色噜噜狠狠色综合中国 | 人人干在线 | 天天干天天玩天天操 | www狠狠爱com | 久久成人精品一区二区三区 | 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | 国产激情视频网址 | 久久草视频 | 久久精品免费看 | 一区二区免费高清视频 | 国产精产国品一二三产区视频 | 日韩成人在线视频 | 手机在线不卡av | 国产在线精品免费 | 亚洲成人自拍网 | 蜜桃av人人夜夜澡人人爽 | 蜜臀网 | 国产电影一区二区 | 91偷拍精品一区二区三区 | 免费在线观看毛片 | 天天操操 | 在线视频一区二区三区 | 色噜噜亚洲男人的天堂 | 男女羞羞视频在线 | 蜜桃精品视频在线 | 免费黄网站在线观看 | 丝袜毛片| 黄色在线观看 | 精品少妇v888av | 欧美日韩免费 | 中文字幕精品视频 | 久久精品一区二区三区四区 | 成人网在线 | 日韩精品 | 国产精品视频在 | 久久久久久电影 | 亚洲欧美视频 | 性高湖久久久久久久久3小时 | 四虎影视1304t | 91视频亚洲 |