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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

12864顯示多出亂碼

[復制鏈接]
跳轉到指定樓層
樓主
在用12864顯示溫度距離數據的時候,不進入while(1)循環,顯示正常,進入之后,改變數組bb和cc的值,再次顯示就出現了亂碼,可能是哪些原因呢?有沒有碰到過類似的問題的?#include <REGX52.H>
#include <stdio.h>
#include "LCD.H"
#include "18B20.H"
#include "delay.h"

sbit k1=P1^0;//功能鍵
sbit k2=P1^1;//調整鍵
sbit csb=P2^7;//Trig
sbit csbint=P3^2;//Echo
sbit bg=P2^6;
sbit fmq=P3^3;//蜂鳴器

unsigned char aa[]={'D','i','s','t','a','n','c','e',':'};           //Distance

unsigned char bb[]={' ',' ',' ',' ','.',' ',' ',' '};//用于顯示溫度值       
unsigned char cc[]={'A','.','A','A','m'};
unsigned char zf,a1,a2,a3,xs,e,n,m,z;         //zf 溫度正負標志位;a1,a2,a3,按鍵設定程序中定值的米、分米、厘米臨時存儲變量
                                             //xs,e 用于按鍵程序中設定位閃動顯示的變量;flag,未用,n,m,z是背光控制標志位變量,改變報警值時控制閃爍循環;
unsigned int dz,k,s,j,bgz,k;//dz為報警值
int temp;
float temperature,csbc,wdz;
bit wh;

main()
{
        TH0=0;//T0用于計時,計算超聲波返回脈沖的寬度  51單片機自加1計數
        TL0=0;
        TMOD=0X11;        //T1,T0為16位定時器  實際只使用了定時器0
        EA=0;
        bg=0;
        n=0;         
        m=0;
        z=0;
        init();//LCD初始化
        Init_DS18B20();//DS18B20初始化
    dz=80;//調值 設定報警值
        bb[6]=0xa1;//顯示攝氏度符號
        bb[7]=0xe6;
        e=4;
        cc[0]=dz/100+'0';
        cc[2]=dz/10%10+'0';
        cc[3]=dz%10+'0';
        LCD_Write_String(0,0,"  超聲波測距儀  ");
        LCD_Write_String(0,1,"距離:");
        LCD_Write_String(0,2,"溫度:");
        LCD_Write_String(0,3,"閾值:");
        LCD_Write_String(3,3,cc);          
        while(1)
        {         
                temp=ReadTemperature();
                fmq=1;
                DelayMs(100);
                if(temp<0)
                {
                           temp=-(temp-1);
                           zf=1;//zf 溫度正負標志位  zf為1是溫度為負
                        bb[0]='-';
                }
                else
                {
                        zf=0;
                        bb[0]=' ';
                }
                  csb=0;                                             //啟動一次模塊
                  _nop_();
                  _nop_();
                  _nop_();
                  _nop_();
                  _nop_();

                  _nop_();
                  _nop_();
                  _nop_();
                  _nop_();
                  _nop_();
                 
                  _nop_();
                  _nop_();
                  _nop_();
                  _nop_();
                  _nop_();

                  _nop_();
                  _nop_();
                  _nop_();
                  _nop_();
                  _nop_();
                  _nop_();
                  csb=1;
                ET0=1;        //啟動計數器T0,用以計時
                TR0=1;
                EA=1;
                j=80;        //延時                 
            while(j--)
                {
                }
                csbint=1;
        j=0;
                   while(csbint)                        //判斷接收回路是否收到超聲波的回波
                {
                        j++;
                        if(j>=2500)                        //如果達到一定時間沒有收到回波,則將csbint置零,退出接收回波處理程序
                        csbint=0;
                }
                TR0=0;
                s=TH0*256+TL0;                        //讀取時間數據
                TH0=0;
                TL0=0;
                wdz=0.00000607*temp;   //溫度補償計算
                if(zf==0)
                {                                                                                                                                                                                       
                          csbc=0.03315+wdz;
                }
                else csbc=0.03315-wdz;
                csbc=csbc/2;
                s=s*csbc-8;
                if(s<5) //測量值小于下限
                {
                        cc[0]='-';
                        cc[2]='-';
                        cc[3]='-';
                }
                else if(s>500)        //測量值大于上限
                {
                        cc[0]='C';
                        cc[2]='C';
                        cc[3]='C';
                }
                else
                {
                        cc[0]=s/100+'0';
                        cc[2]=s/10%10+'0';
                        cc[3]=s%10+'0';
                }
                if(s<dz)//調節報警聲音的頻率
                {
                        bgz=s*5;
                          for (k=0;k<bgz;k++)
                          {
                            DelayUs2x(150);
                            fmq=!fmq;       //BEEP取反
                          }
                }
                bb[1]=temp/1000+0x30;
                bb[2]=temp/100%10+0x30;//顯示十位
                bb[3]=temp%100/10+0x30;//顯示個位
                bb[5]=temp%10+0x30; //小數
        if(zf==0)
            {
                        if(temp<1000)
                        {
                                   bb[1]=' ';
                                   if(temp<100)
                                   {
                                      bb[2]=' ';
                                }
                        }
                }
                else
                {
                        if(temp<1000)
                        {
                                   bb[0]=' ';
                                   bb[1]='-';
                                   if(temp<100)
                                   {
                                        bb[0]=' ';
                                           bb[1]=' ';
                                      bb[2]='-';
                                }
                        }
                }
                LCD_Write_String(3,2,bb);//顯示測得的溫度
                LCD_Write_String(3,1,cc);//顯示測得的距離


                while(!k2)                   //液晶背面開關
                {
                   n=1;
                }
                if(n==1)
                {
                   bg=~bg;                   //bg=0;時開背光燈
                   n=0;
                }
                if(!k1)      //按鍵處理程序
                {
                    TR1=0;
                        TR0=0;
                          cc[0]='A';
                        cc[1]='.';
                        cc[2]='A';
                        cc[3]='A';
                        cc[4]='m';
                        LCD_Write_String(3,3,cc);
                        k=500;
                    while(k)
                        {
                                 k--;
                                DelayMs(2);
                        }
                          cc[0]=dz/100+'0';
                        cc[2]=dz/10%10+'0';
                        cc[3]=dz%10+'0';
                        LCD_Write_String(3,3,cc);
                        a1=dz/100;
                        a2=dz/10%10;
                        a3=dz%10;
                        n=1;
                          while(n)
                        {
                                if(!k2)
                                {
                                        while(!k2);//等待松手
                                        e=1;
                                        xs=3;
                                        a1+=1;
                                        if(a1>5)
                                        a1=0;
                                          cc[0]=a1+'0';
                                }

                                if (e==1)
                                {
                                        xs++;
                                          cc[0]=a1+'0';
                                          if(xs>6)
                                          {
                                    xs=0;
                                                e=0;
                                          }
                                }
                                else
                                {
                                        cc[0]=' ';
                                        xs++;
                                        if(xs>3)
                                        {
                                                xs=0;
                                                e=1;
                                        }
                                }
                                LCD_Write_String(3,3,cc);
                                if(!k1)
                                {
                                        while(!k1);
                                          cc[0]=a1+'0';
                                        m=1;
                                        while(m)
                                        {
                                                if(!k2)
                                                {
                                                        while(!k2);
                                                        e=1;
                                                        xs=3;
                                                        a2+=1;
                                                        if(a2>9)
                                                        a2=0;
                                                          cc[2]=a2+'0';
                                                        LCD_Write_String(3,3,cc);
                                                }

                                                if (e==1)
                                                {
                                                        xs++;
                                                          cc[2]=a2+'0';
                                                          if(xs>6)
                                                          {
                                                    xs=0;
                                                                e=0;
                                                          }
                                                }
                                                else
                                                {
                                                        cc[2]=' ';
                                                        xs++;
                                                        if(xs>3)
                                                        {
                                                                xs=0;
                                                                e=1;
                                                        }
                                                }
                                                LCD_Write_String(3,3,cc);
                                               
                                                if(!k1)
                                                {
                                                        while(!k1);
                                                        cc[2]=a2+'0';
                                                        z=1;
                                                        while(z)
                                                        {
                                                                if(!k2)//改變報警值
                                                                {
                                                                        while(!k2);
                                                                        e=1;
                                                                        xs=3;
                                                                        a3+=1;
                                                                        if(a3>9)
                                                        a3=0;
                                                                          cc[3]=a3+'0';
                                                                        LCD_Write_String(3,3,cc);
                                                                }

                                                                if (e==1)//控制閃爍
                                                                {
                                                                        xs++;
                                                                          cc[3]=a3+'0';
                                                                          if(xs>6)
                                                                          {
                                                                    xs=0;
                                                                                e=0;
                                                                          }
                                                                }
                                                                else
                                                                {
                                                                        cc[3]=' ';
                                                                        xs++;
                                                                        if(xs>3)
                                                                        {
                                                                                xs=0;
                                                                                e=1;
                                                                        }
                                                                }
                                                                LCD_Write_String(3,3,cc);

                                                                if(!k1)
                                                                {
                                                                        while(!k1);
                                                                        dz=a1*100+a2*10+a3;
                                                                        n=0;
                                                                        m=0;
                                                                        z=0;
                                                                }
                                                        }
                                                }
                                        }
                                }               
                        }
                }
        }
}


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

使用道具 舉報

11#
ID:77398 發表于 2018-3-11 21:23 | 只看該作者
謝謝大家的關注和回復。。‘厴I的時候做的,記得好像是字符數組的大小要比要存的數據多一位,用于放結束標志零(即字符  ‘\0’ )
回復

使用道具 舉報

10#
ID:59574 發表于 2017-3-18 11:50 | 只看該作者
時序有問題可能
回復

使用道具 舉報

9#
ID:77398 發表于 2017-3-18 11:21 | 只看該作者
謝謝各位的解答,我已經找到問題了,統一回復一下:
在定義字符串數組時,要多定義一個字節,用來存放 '\0' ,字符數組的大小最好也給出確定值。
碰到類似問題的小伙伴,可以檢查下你們定義的字符串數組哦。!
回復

使用道具 舉報

8#
ID:2864 發表于 2017-3-17 08:22 | 只看該作者
學習了,不錯的帖子
回復

使用道具 舉報

7#
ID:54992 發表于 2017-3-11 10:59 | 只看該作者
I2C接口帶中英文字庫12864液晶屏,支持任意坐標位置(橫向坐標,縱向坐標都以像素點為單位),希望能幫你解決問題。

1.png (493.73 KB, 下載次數: 101)

1.png

2.png (4.8 MB, 下載次數: 94)

2.png

Arduino I2C控制字庫12864液晶屏資料.rar

664.1 KB, 下載次數: 29

回復

使用道具 舉報

6#
ID:125378 發表于 2017-3-3 13:26 | 只看該作者
查看時序圖,檢查程序
回復

使用道具 舉報

5#
ID:125378 發表于 2017-3-3 13:26 | 只看該作者
軟件其他地方有沒有對引腳進行使用。。   中斷函數里面如果用到了屏幕的引腳就很有可能會亂碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:167750 發表于 2017-3-2 20:32 來自觸屏版 | 只看該作者
時序問題
回復

使用道具 舉報

板凳
ID:164839 發表于 2017-3-2 20:28 | 只看該作者
  軟件其他地方有沒有對引腳進行使用。。   中斷函數里面如果用到了屏幕的引腳就很有可能會亂碼
回復

使用道具 舉報

沙發
ID:151348 發表于 2017-3-2 18:31 | 只看該作者
估計是時序的問題
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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