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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6522|回復: 10
收起左側

12864顯示多出亂碼

[復制鏈接]
ID:77398 發表于 2017-2-27 21:31 | 顯示全部樓層 |閱讀模式
在用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;
                                                                }
                                                        }
                                                }
                                        }
                                }               
                        }
                }
        }
}


回復

使用道具 舉報

ID:151348 發表于 2017-3-2 18:31 | 顯示全部樓層
估計是時序的問題
回復

使用道具 舉報

ID:164839 發表于 2017-3-2 20:28 | 顯示全部樓層
  軟件其他地方有沒有對引腳進行使用。。   中斷函數里面如果用到了屏幕的引腳就很有可能會亂碼
回復

使用道具 舉報

ID:167750 發表于 2017-3-2 20:32 來自手機 | 顯示全部樓層
時序問題
回復

使用道具 舉報

ID:125378 發表于 2017-3-3 13:26 | 顯示全部樓層
軟件其他地方有沒有對引腳進行使用。。   中斷函數里面如果用到了屏幕的引腳就很有可能會亂碼

評分

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

查看全部評分

回復

使用道具 舉報

ID:125378 發表于 2017-3-3 13:26 | 顯示全部樓層
查看時序圖,檢查程序
回復

使用道具 舉報

ID:54992 發表于 2017-3-11 10:59 | 顯示全部樓層
I2C接口帶中英文字庫12864液晶屏,支持任意坐標位置(橫向坐標,縱向坐標都以像素點為單位),希望能幫你解決問題。
1.png
2.png

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

664.1 KB, 下載次數: 29

回復

使用道具 舉報

ID:2864 發表于 2017-3-17 08:22 | 顯示全部樓層
學習了,不錯的帖子
回復

使用道具 舉報

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

使用道具 舉報

ID:59574 發表于 2017-3-18 11:50 | 顯示全部樓層
時序有問題可能
回復

使用道具 舉報

ID:77398 發表于 2018-3-11 21:23 | 顯示全部樓層
謝謝大家的關注和回復!!!畢業的時候做的,記得好像是字符數組的大小要比要存的數據多一位,用于放結束標志零(即字符  ‘\0’ )
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美在线播放 | 中国一级大毛片 | 久久91精品久久久久久9鸭 | a级大片| 日韩电影免费在线观看中文字幕 | 欧美三级三级三级爽爽爽 | 日本在线黄色 | 伊人久久综合影院 | 亚洲三区在线观看 | 免费观看色 | 国产成人精品免高潮在线观看 | 91精品国产综合久久久久久 | 91在线精品一区二区 | 欧美aⅴ | 国产jizz女人多喷水99 | 国产精品国产三级国产aⅴ无密码 | 欧美在线天堂 | 色综合久久天天综合网 | 日韩久久久久 | 久久久蜜桃 | 久久久黑人 | 在线播放国产一区二区三区 | 日韩一区二| 天天爽夜夜骑 | 久久久免费毛片 | 狠狠撸在线视频 | 精品国产一区二区国模嫣然 | 女人牲交视频一级毛片 | 亚洲另类自拍 | 涩涩操| 美女视频黄的 | 中文在线亚洲 | a免费视频 | 日本二区在线观看 | 91私密视频 | 蜜桃av鲁一鲁一鲁一鲁 | 国产成人一区二区 | 日韩亚洲视频 | 亚洲三级免费看 | 欧美日韩三级 | 久久国产精品99久久久久久丝袜 |