欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1591|回復: 2
收起左側

問題:如何將LCD1602第二在修改High值后Low的值不會自動移動位置,Low:-9之后不會...

[復制鏈接]
ID:742007 發表于 2020-5-2 09:26 | 顯示全部樓層 |閱讀模式
問題:如何將LCD1602第二在修改High值后Low的值不會自動移動位置,Low:-9之后不會產生亂碼,在這個代碼基礎上怎么修改可以實現

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

/********************************1602****************************/
void delay_ms(uchar t)
{  
    int j;  
    for(;t!=0; t--)  
       for (j=0;j<255;j++);  
}  
//--------------------------------------------  
//              寫數據函數  
//--------------------------------------------  
void write_data(char dat)
{  
    RS=1;          //數據  
    DATA_PORT=dat; //把數據總到P口
    delay_ms(5);      //延時  
    EN=1;  
    delay_ms(5);   //延時  
    EN=0;          //關使能  
}  
//--------------------------------------------  
//             寫命令函數
//--------------------------------------------  
void write_com(char com)
{  
   RS=0;          //命令
   DATA_PORT=com;  
   delay_ms(5);    //當晶振較高時加延時  
   EN=1;  
   delay_ms(5);    //當晶振較高時加延時
   EN=0;  
}
//--------------------------------------------  
//             打印函數函數   
//   第一個參數為要打印的字符串  第二個參數為要顯示的行
//--------------------------------------------
void print_string(char *str,uchar line){  
    int i;
      //@@*如果line參數為1則光標移到第一行 如果為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);     //開顯示,不顯示光標 0x0f為開顯示,開光標
  write_com(0x06);     //寫一個字符后地址加一  
  write_com(0x01);     //顯示清零,數據指針清零
  write_com(0x80);     //第一行
}


//@@*顯示函數*/
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);   
     //顯示過溫低溫點
     sprintf((char*)Display2,"%s%d   %s%d",string3,tempOver,string4,tempLow);   
     print_string(Display2,2);

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


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

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

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

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

    //@@*先將按鍵電平拉高*/
    key1 = 1;
    key2 = 1;
        key3 = 1;
    key4 = 1;
    //@@*檢測按鍵1是否被按下*/
    if(key1 == 0)
    {
        key_delay(5);
        if(key1 == 0)
        {
             tempOver++;
                         if(tempOver>85)
                         {
                                 tempOver=-10;
                         }
                     display();
               
        }
    }
    //@@*檢測按鍵2是否被按下*/
    if(key2 == 0)
    {
        key_delay(5);
        if(key2 == 0)
        {
             tempOver--;
                         if(tempOver< -10)
                         {
                                 tempOver=85;
                         }
                     display();
        }
    }
        //@@*檢測按鍵3是否被按下*/
    if(key3 == 0)
    {
        key_delay(5);
        if(key3 == 0)
        {
             tempLow++;
                         if(tempLow>85)
                         {
                                 tempLow=-10;
                         }
                     display();
        }
    }
        //@@*檢測按鍵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;                 //判斷是否有按鍵被按下,然后調用THTL函數,
   while(1)
   {
          temp = (int)ReadTemperature();   //讀取溫度
           display();  //顯示
                        key_scan(); //判斷是否有按鍵被按下,然后調用THTL函數

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


修改High之前.jpg

修改之后

修改之后
回復

使用道具 舉報

ID:742007 發表于 2020-5-2 09:30 | 顯示全部樓層
這個是僅僅修改High之之后Low會自動縮進產生亂碼
回復

使用道具 舉報

ID:462827 發表于 2020-5-3 01:00 | 顯示全部樓層
sprintf生成字符串時指定數值的顯示寬度就可以了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表