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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3310|回復: 0
打印 上一主題 下一主題
收起左側

求大神幫忙賦值LCD1602程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:139788 發表于 2016-12-14 00:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
以上是一個可調的時鐘程序,柵去了鍵盤控制涵數程序,想在程序中加入其它賦值程序操作,
已知搖控鍵值:
12H     作電源開關賦值操作
OAH     作電機反轉賦值操作
1FH      作電機正轉賦值操作

    要求電源開關操作時切換LCD1602顯視(電源關或電源開)OFF~ON


          單片機1602時鐘程序
#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;         //
對數據類型進行聲明定義
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--);
}

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

          }
        else
          {       LcdWriteCom(0x88+0x40);               //
寫地址 80表示初始地址
           LcdWriteData('+');                //
顯示正               
           tp=temp;//
因為數據處理有小數點所以將溫度賦給一個浮點型變量
               //
如果溫度是正的那么,那么正數的原碼就是補碼它本身
               temp=tp*0.0625*100+0.5;        
               //
留兩個小數點就*100+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
               //
后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
               //
算加上0.5,還是在小數點后面。
        }
        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]); //
顯示小數位
        
        LcdWriteCom(0x8e+0x40);                //
寫地址 80表示初始地址
       LcdWriteData('0'+TIME[12]); //
顯示小數位   
         
}
//
時鐘顯示函數
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));        //
星期                        
}





//
主函數
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();
                                             
        }


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区视频播放 | 亚洲成人免费观看 | 成人国产在线观看 | 国产乱人伦精品一区二区 | 一区二区日韩 | 国产精品自在线 | 成人中文网 | 91久久国产精品 | 精品欧美 | 亚洲高清视频一区二区 | 免费一区二区 | 国产亚洲精品精品国产亚洲综合 | 米奇成人网 | 中文日本在线 | 亚洲一区二区三区久久 | 日韩中文字幕在线播放 | 神马久久久久久久久久 | 免费午夜剧场 | 久久成人国产精品 | 欧美精品1区 | 国产美女网站 | 欧美日韩在线综合 | 国产精品99久久久久久久vr | 久久亚洲精品久久国产一区二区 | 91高清在线观看 | 青青久草| 国产一区二区麻豆 | 国产成人精品免高潮在线观看 | 中文字幕免费观看 | 国产精品99999 | 久久国产激情视频 | 国产精品不卡 | 中文字幕在线一 | 免费在线一区二区三区 | 久操伊人 | 国产区在线观看 | 久久大 | 激情五月婷婷综合 | 99热这里都是精品 | 国产乱人伦精品一区二区 | 天天干狠狠操 |