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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

為什么LCD不顯示字?

[復制鏈接]
跳轉到指定樓層
樓主
#include<REG52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=0;
bit flang;
sbit IN1=P3^5;
sbit IN2=P3^6;
sbit PWM1 =P3^7;

uchar xianshi1[] ="TEMP       00.0C";// 內容
uchar xianshi2[] ="000%            ";// 內容
uint    wendu=0;
uchar count;
uchar jd=5;
bit work;        //開關標志

sbit k1=P1^0; //
sbit k2=P1^1; //
sbit k3=P1^2; //
sbit DQ=P2^0; //定義DS18B20總線I/O

//Port Definitions**********************************************************
sbit LcdRs                = P2^5;
sbit LcdRw                = P2^6;
sbit LcdEn          = P2^7;
sfr  DBPort         = 0x80;                //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數據端口
        void delay(uint z)
{
   uint a,b;
   for(a=z;a>0;a--)
     for(b=120;b>0;b--);
}
//向LCD寫入命令或數據************************************************************
#define LCD_COMMAND                        0      // Command
#define LCD_DATA                        1      // Data
#define LCD_CLEAR_SCREEN        0x01      // 清屏
#define LCD_HOMING                  0x02      // 光標返回原點
void LCD_Write(bit style, unsigned char input)
{
        LcdEn=0;
        LcdRs=style;
        LcdRw=0;                _nop_();//寫入LCD
        DBPort=input;        _nop_();//數據寫入p0口
        LcdEn=1;                _nop_();//LCD讀取數據
        LcdEn=0;                _nop_();//完成寫入
delay(1);
}

//設置顯示模式************************************************************
#define LCD_SHOW                        0x04    //顯示開
#define LCD_HIDE                        0x00    //顯示關         

#define LCD_CURSOR                        0x02         //顯示光標
#define LCD_NO_CURSOR                0x00    //無光標                     

#define LCD_FLASH                        0x01    //光標閃動
#define LCD_NO_FLASH                0x00    //光標不閃動

void LCD_SetDisplay(unsigned char DisplayMode)
{
        LCD_Write(LCD_COMMAND, 0x08|DisplayMode);        //0x08為基礎命令碼
}//進行組合顯示,向LCD發送命令字
//設置輸入模式************************************************************
#define LCD_AC_UP                        0x02
#define LCD_AC_DOWN                        0x00      // default

#define LCD_MOVE                        0x01      // 畫面可平移
#define LCD_NO_MOVE                        0x00      //default

void LCD_SetInput(unsigned char InputMode)
{
        LCD_Write(LCD_COMMAND, 0x04|InputMode);//0x04為基礎命令碼
}//組合輸入,向LCD發送命令字
//初始化LCD************************************************************
void LCD_Initial()
{
        LcdEn=0;
        LCD_Write(LCD_COMMAND,0x38);           //8位數據端口,2行顯示,5*7點陣
        delay(5);
        LCD_Write(LCD_COMMAND,0x38);
        delay(5);
        LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //開啟顯示, 無光標
        delay(5);
        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
        delay(5);
        LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //地址計數器遞增, 畫面不動
        delay(5);
}
//液晶字符輸入的位置************************
void GotoXY(unsigned char x, unsigned char y)//定義x范圍0-15,y范圍0-1
{
        if(y==0)
                LCD_Write(LCD_COMMAND,0x80|x);//第一行顯示,地址范圍0x80-0x8F
        if(y==1)
                LCD_Write(LCD_COMMAND,0x80|(x-0x40));//第二行顯示,地址范圍0xC0-0xCF
}
//將字符輸出到液晶顯示
void Print(unsigned char *str)//指向要顯示的字符串的指針
{
        while(*str!='\0')
        {
                LCD_Write(LCD_DATA,*str);//數據寫入
                str++;
                delay(1);
        }
}
void init()// 定時器初始化
{
        TMOD=0x01;
  TH0=TL0=(256-200); //高八位寄存器和低八位寄存器初始值為56即0x38
  ET0=1;//開定時器0中斷
        TR0=1;
        EA=1;//開總中斷
}

void Delay_DS18B20(int num);

/*****初始化DS18B20*****/  //探頭1
void Init_DS18B20()
{
  unsigned char x;//用于存儲從DS18B20讀取的狀態
  DQ=1;                //DQ復位
  Delay_DS18B20(8);    //稍做延時
  DQ = 0;         //單片機將DQ拉低
  Delay_DS18B20(80);   //精確延時,大于480us
  DQ = 1;         //拉高總線
  Delay_DS18B20(14);
  x = DQ;           //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗
  Delay_DS18B20(20);
}


/*****延時子程序*****/
void Delay_DS18B20(int num)
{
  while(num--) ;
}


/*****寫一個字節*****/
void WriteOneChar(unsigned char dat)
{
  unsigned char i=0;
  for (i=8; i>0; i--)
  {
    DQ = 0;
    DQ = dat&0x01;
    Delay_DS18B20(5);
    DQ = 1;
    dat>>=1;
  }
}

/*****讀一個字節*****/
unsigned char ReadOneChar(void)
{
  unsigned char i=0;
  unsigned char dat = 0;
  for (i=8;i>0;i--)
  {
    DQ = 0;     // 給脈沖信號
    dat>>=1;
    DQ = 1;     // 給脈沖信號
    if(DQ)
    dat|=0x80;
    Delay_DS18B20(4);
  }
  return(dat);
}



/*****讀取溫度*****/
unsigned int ReadTemperature(void)         //讀取溫度并轉換
{
  unsigned char a=0;
  unsigned char b=0;
  unsigned int t=0;
         unsigned int tempb20;
  float f_temp=0;
        
  Init_DS18B20();
  WriteOneChar(0xCC);  //跳過讀序號列號的操作
  WriteOneChar(0x44);  //啟動溫度轉換
  Init_DS18B20();
  WriteOneChar(0xCC);  //跳過讀序號列號的操作
  WriteOneChar(0xBE);  //讀取溫度寄存器
  a=ReadOneChar();     //讀低8位
  b=ReadOneChar();    //讀高8位

tempb20=b;//組合溫度值
        tempb20<<=8;
        tempb20=tempb20|a;

        if((b&0xfc)==0xfc)//負溫度
   {
            flang=1;
                   tempb20=((~tempb20)+1);//處理負溫度
                          f_temp=tempb20*0.0625;//轉換成浮點數
                                 tempb20=f_temp*10+0.5;//轉換成整數

  }
  else//正溫度
  {
                flang=0;
                f_temp=tempb20*0.0625;
                tempb20=f_temp*10+0.5;

}
         return tempb20;
}

main()
{        

        uchar k;
        LCD_Initial();
        
        PWM1=0;//設置電機控制
        IN1=0;
        IN2=1;
        init();

while(1)
{                        
          if(k==0)
                        {
                                EA=0;
        wendu=ReadTemperature();//讀取溫度數據
                                EA=1;
                   }
                if(k++>25) k=0;//每26次循環讀取一次溫度值,確保溫度讀取不會過于頻繁

        if(k1)//如果溫度超過27°C,計算PWM占空比(自動模式),jd范圍0-10
        {               
                if(wendu>=270)
                {
                 jd=(wendu/10)-27;
                }
                else jd=0;
        }
        else
        {
        

                 if(k2==0)//PWM+(手動模式)
            {
                   delay(10);        
                     jd++;
                                if(jd>=10)jd=10;
                         while(k2==0);
                        }
                        
                        if(k3==0)//PWM-
            {
                    delay(10);
                          if(jd>0) jd--;
                          while(k3==0);
                        }               
        }

                if(flang==1)//表示溫度是負數
                xianshi1[10]='-';
                else
                xianshi1[10]=' ';        

    xianshi1[11]=wendu/100+0x30;//百位
          xianshi1[12]=wendu/10%10+0x30;//十位
          xianshi1[14]=wendu%10+0x30;//個位
               
               
          xianshi2[0]=jd/10+0x30;//個位
          xianshi2[1]=jd%10+0x30;//十位
         

                GotoXY(0,0);//坐標位置
                Print(xianshi1);
                GotoXY(0,1);
                Print(xianshi2);        
               
}
}
void time0(void) interrupt 1 //更新占空狀態
{
     TH0=0xfc;
     TL0=0x18;
                 if(count<jd)                //判斷1ms次數是否小于角度標識         
                 PWM1=1;                   //確實小于,PWM輸出高電平
                 else
                 PWM1=0 ;//PORTA=0;        //大于則輸出低電平
                 
                count=(count+1);          //1ms次數加1
                if(count>=10)
                count=0;
}               

1.png (47.06 KB, 下載次數: 0)

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

使用道具 舉報

沙發
ID:584814 發表于 2025-7-2 09:30 | 只看該作者
要么上傳整個工程文件,要么大街上聽算命
回復

使用道具 舉報

板凳
ID:985643 發表于 2025-7-2 14:35 | 只看該作者
man1234567 發表于 2025-7-2 09:30
要么上傳整個工程文件,要么大街上聽算命

回復

使用道具 舉報

地板
ID:996773 發表于 2025-7-3 08:50 | 只看該作者
一個新手搞這么大工程干嘛,又是中斷又是定時器,又是18B20,好像還有個電機,我一個天才都
不敢一口吃這么大,老老實實把多余的去掉,就留一個屏和單片機,屏上面顯示一個A字再說吧,
循序漸進這四個多讀幾遍
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲va视频 | 窝窝午夜精品一区二区 | 精品国产乱码久久久久久蜜柚 | 色婷婷国产精品综合在线观看 | 91成人在线视频 | 日韩专区在线观看 | 999热视频| 蜜桃精品一区二区三区 | 久草综合网 | 麻豆av在线 | 欧美成人精品一区二区三区在线看 | 国产成人综合在线 | 性欧美xxxx | 国产精品美女久久久 | 日本国产视频 | 玖草在线| 视频一二三区 | 国产主播一区二区 | 自拍偷拍欧美日韩 | 不卡的av网站 | 国产成人精品免费视频 | 午夜一区| 国产一区二区三区久久 | 国产亚洲一区二区三区 | 日本免费在线观看 | 日本毛片视频 | 日本黄色三级视频 | 成人三级视频 | 在线不卡av | 国产精品久久久久久久久久 | 国产黄a三级三级看三级 | 在线播放a | 99热超碰| 亚洲欧美日韩一区二区 | 国产精品自拍一区 | 亚洲国产欧美日韩 | 精品视频在线免费观看 | 成人在线国产 | 欧美日韩在线一区二区三区 | 操碰97| 亚洲欧美精品在线 |