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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

問(wèn)題:如何將LCD1602第二在修改High值后Low的值不會(huì)自動(dòng)移動(dòng)位置,Low:-9之后不會(huì)...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
問(wèn)題:如何將LCD1602第二在修改High值后Low的值不會(huì)自動(dòng)移動(dòng)位置,Low:-9之后不會(huì)產(chǎn)生亂碼,在這個(gè)代碼基礎(chǔ)上怎么修改可以實(shí)現(xiàn)

#include <reg52.h>
#include <stdio.h>
#define DATA_PORT P0  //數(shù)據(jù)口
#define uchar unsigned char
#define uint unsigned int
int temp = 0;   //存儲(chǔ)溫度
int tempOver = 00;   //過(guò)溫溫度
int tempLow  = -9;   //低溫溫度
sbit key1 = P3^0;  //增加過(guò)溫溫度
sbit key2 = P3^1;  //減小過(guò)溫溫度
sbit key3 = P3^2;  //增加低溫溫度
sbit key4 = P3^3;  //減小低溫溫度
uint key_result = 0;  //保存按鍵結(jié)果
int biaozhi;
//引腳定義
sbit du=P2^6;
sbit we=P2^7;
sbit RS=P3^5;     //數(shù)據(jù)(低)/命令(高)選擇引腳
sbit LCDRW=P3^6;     //寫,低電平有效      
sbit EN=P3^4;     //使能,低電平有效
sbit beep=P2^3;
char Display1[16];  //第一行顯示數(shù)組
char Display2[16];  //第二行顯示數(shù)組
void key_delay(uchar t)
{
    int j;  
    for(;t!=0; t--)  
         for (j=0;j<255;j++);  
}
//@@*按鍵檢測(cè)  如果按鍵1被按下就返回1
//如果按鍵2被按下就返回2  如果沒(méi)有按鍵按下就返回0*/

/********************************1602****************************/
void delay_ms(uchar t)
{  
    int j;  
    for(;t!=0; t--)  
       for (j=0;j<255;j++);  
}  
//--------------------------------------------  
//              寫數(shù)據(jù)函數(shù)  
//--------------------------------------------  
void write_data(char dat)
{  
    RS=1;          //數(shù)據(jù)  
    DATA_PORT=dat; //把數(shù)據(jù)總到P口
    delay_ms(5);      //延時(shí)  
    EN=1;  
    delay_ms(5);   //延時(shí)  
    EN=0;          //關(guān)使能  
}  
//--------------------------------------------  
//             寫命令函數(shù)
//--------------------------------------------  
void write_com(char com)
{  
   RS=0;          //命令
   DATA_PORT=com;  
   delay_ms(5);    //當(dāng)晶振較高時(shí)加延時(shí)  
   EN=1;  
   delay_ms(5);    //當(dāng)晶振較高時(shí)加延時(shí)
   EN=0;  
}
//--------------------------------------------  
//             打印函數(shù)函數(shù)   
//   第一個(gè)參數(shù)為要打印的字符串  第二個(gè)參數(shù)為要顯示的行
//--------------------------------------------
void print_string(char *str,uchar line){  
    int i;
      //@@*如果line參數(shù)為1則光標(biāo)移到第一行 如果為2則移到第二行*/
      if(line == 1)
            write_com(0x80);    //第一行
        else if(line == 2)
            write_com(0xc0);    //第二行
    for(i=0;str[i]!=0;i++)  
    {         
        write_data(str[i]);  
    }  
}   
//--------------------------------------------  
//        1602初始化
//--------------------------------------------  
void lcd_init()
{  
    EN=0;
  LCDRW=0;  
  RS=0;  
  write_com(0x36);     //set text home address  
  write_com(0x38);
  write_com(0x0c);     //開(kāi)顯示,不顯示光標(biāo) 0x0f為開(kāi)顯示,開(kāi)光標(biāo)
  write_com(0x06);     //寫一個(gè)字符后地址加一  
  write_com(0x01);     //顯示清零,數(shù)據(jù)指針清零
  write_com(0x80);     //第一行
}


//@@*顯示函數(shù)*/
void display(void)
{
   char *string1 = "TEM : ";
   char *string2 = " C   ";
   char *string3 = "High:";
   char *string4 = "Low:";

     //顯示溫度
     sprintf((char*)Display1,"%s%d%s",string1,temp,string2);                           
     print_string(Display1,1);   
     //顯示過(guò)溫低溫點(diǎn)
     sprintf((char*)Display2,"%s%d   %s%d",string3,tempOver,string4,tempLow);   
     print_string(Display2,2);

}
/**********************************1602************************************/   


/***************************18b20***********************************/

/***************************溫度傳感器信號(hào)引腳******************************************/
sbit DQ=P2^2; //數(shù)據(jù)傳輸線接單片機(jī)的相應(yīng)的引腳
/****************************************************************************
函數(shù)功能:延時(shí)子程序
****************************************************************************/
void delay(uint k)
{
    while(k--);
}
/****************************************************************************
函數(shù)功能:DS18B20初始化子程序
****************************************************************************/
void ds18b20_init(void)
{
    DQ=1; //DQ先置高
    delay(16); //延時(shí)
    DQ = 0; //發(fā)送復(fù)位脈沖
    delay(80); //延時(shí)(>480us)
    DQ = 1; //拉高數(shù)據(jù)線
    delay(16); //等待(15~60us)
    delay(60);
    DQ = 1;
}
/****************************************************************************
函數(shù)功能:向DS18B20讀一字節(jié)數(shù)據(jù)
入口參數(shù):
出口參數(shù):dat
****************************************************************************/
uchar ReadOneChar(void)
{
    uchar i=0;
    uchar dat=0;
    DQ=1;
    delay(1);
    for (i=8;i>0;i--)
    {
        DQ=0;
        dat>>=1;
        DQ=1;
        delay(1);
        if(DQ)
        dat|=0x80;
        delay(30);
        DQ=1;
    }
    return dat;
}
/****************************************************************************
函數(shù)功能:向DS18B20寫一字節(jié)數(shù)據(jù)
入口參數(shù):dat
出口參數(shù):
****************************************************************************/
void WriteOneChar(uchar dat)
{
    uchar i=0;
    DQ=1;
    delay(1);
    for(i=8;i>0;i--)
    {
        DQ=0;
        DQ=dat&0x01;
        delay(5);
        DQ=1;
        dat>>=1;
    }
}
/****************************************************************************
函數(shù)功能:向DS18B20讀溫度值
入口參數(shù):
出口參數(shù):temperature
溫度讀取流程: 初始化->跳過(guò)讀序列號(hào)->啟動(dòng)溫度轉(zhuǎn)化->延時(shí)->初始化->跳過(guò)讀序列號(hào)->讀取溫度并顯示
****************************************************************************/
float ReadTemperature(void)
{
    float  temperature = 0.0;
    uint  temflag = 0;
    uint  tt = 0;
    uchar tempL=0; //臨時(shí)變量低位
    uchar tempH=0; //臨時(shí)變量高位
    ds18b20_init(); //初始化
    WriteOneChar(0xcc); //跳過(guò)讀序列號(hào)的操作
    WriteOneChar(0x44); //啟動(dòng)溫度轉(zhuǎn)換
    delay(125); //轉(zhuǎn)換需要一點(diǎn)時(shí)間,延時(shí)
    ds18b20_init(); //初始化
    WriteOneChar(0xcc); //跳過(guò)讀序列號(hào)的操作
    WriteOneChar(0xbe); //讀溫度寄存器(頭兩個(gè)值分別為溫度的低位和高位)
    tempL=ReadOneChar(); //讀出溫度的低位LSB
    tempH=ReadOneChar(); //讀出溫度的高位MSB
    //溫度轉(zhuǎn)換,把高低位做相應(yīng)的運(yùn)算轉(zhuǎn)化為實(shí)際溫度
    tt = tempH<<8;
    tt = tt|tempL;
       
    if(tt&0xf800)    //判斷是否是負(fù)溫度
    {    //是負(fù)溫度
        tt = ~tt + 1; temflag = 0;
    }
    else
    {
        tt = tt; temflag = 1;
    }
        temperature = (float)tt;
    temperature = temperature * 0.0625;

//    delay(200);
    /*負(fù)溫度*/
    if(temflag == 0)
    {
        temperature = -temperature;
    }
    /*正溫度*/
    else
    {
        temperature = temperature;
    }
    return temperature;  //返回溫度值
}

/************************************18b20*****************************************/
void key_scan(void)
{

    //@@*先將按鍵電平拉高*/
    key1 = 1;
    key2 = 1;
        key3 = 1;
    key4 = 1;
    //@@*檢測(cè)按鍵1是否被按下*/
    if(key1 == 0)
    {
        key_delay(5);
        if(key1 == 0)
        {
             tempOver++;
                         if(tempOver>85)
                         {
                                 tempOver=-10;
                         }
                     display();
               
        }
    }
    //@@*檢測(cè)按鍵2是否被按下*/
    if(key2 == 0)
    {
        key_delay(5);
        if(key2 == 0)
        {
             tempOver--;
                         if(tempOver< -10)
                         {
                                 tempOver=85;
                         }
                     display();
        }
    }
        //@@*檢測(cè)按鍵3是否被按下*/
    if(key3 == 0)
    {
        key_delay(5);
        if(key3 == 0)
        {
             tempLow++;
                         if(tempLow>85)
                         {
                                 tempLow=-10;
                         }
                     display();
        }
    }
        //@@*檢測(cè)按鍵4是否被按下*/
    if(key4 == 0)
    {
        key_delay(5);
        if(key4 == 0)
        {
             tempLow--;
                         if(tempLow<-10)
                         {
                                 tempLow=85;
                         }
                     display();
        }
    }   

}


void main()
{
   lcd_init();
   P0=0xff;
   du=we=0;                 //判斷是否有按鍵被按下,然后調(diào)用THTL函數(shù),
   while(1)
   {
          temp = (int)ReadTemperature();   //讀取溫度
           display();  //顯示
                        key_scan(); //判斷是否有按鍵被按下,然后調(diào)用THTL函數(shù)

                   //@@*過(guò)溫  蜂鳴器響,*/
           if(temp > tempOver)
             {
                 beep=1;
             }
            // /@@*低溫 蜂鳴器響 */
             else if(temp < tempLow)
             {
                 beep=1;
             }
   }
}


修改High之前.jpg (38.61 KB, 下載次數(shù): 83)

修改High之前.jpg

修改High之后.jpg (49.77 KB, 下載次數(shù): 62)

修改之后

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

使用道具 舉報(bào)

沙發(fā)
ID:742007 發(fā)表于 2020-5-2 09:30 | 只看該作者
這個(gè)是僅僅修改High之之后Low會(huì)自動(dòng)縮進(jìn)產(chǎn)生亂碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:462827 發(fā)表于 2020-5-3 01:00 | 只看該作者
sprintf生成字符串時(shí)指定數(shù)值的顯示寬度就可以了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩欧美中文 | 人人操日日干 | 91色视频在线观看 | 天天干天天干 | 91视频国产精品 | 亚洲日韩欧美一区二区在线 | 久久久精品一区二区三区 | 最新免费av网站 | 亚洲一区二区在线视频 | 成人免费在线网 | 欧美aaaaaaaa | 81精品国产乱码久久久久久 | 欧美一区二区三区精品免费 | 夜夜骑综合 | 人人亚洲 | 久久国产精品首页 | 国产精品视频一区二区三区 | 天天干狠狠操 | 狠狠亚洲 | 91在线免费视频 | 国产 欧美 日韩 一区 | 国产精品视频久久久久久 | 天天干天天色 | 操久久| 一区二区三区观看视频 | 青青久草 | 6996成人影院网在线播放 | 亚洲成人免费观看 | 成人福利片 | 青娱乐av | japan25hdxxxx日本 做a的各种视频 | 综合二区 | 欧美性网| 欧美日韩综合 | 国产亚洲精品精品国产亚洲综合 | 日韩精品免费视频 | 亚洲欧洲一区二区 | 91中文字幕在线 | 羞羞视频免费在线 | 国产成人精品午夜视频免费 | 欧美日韩高清一区 |