找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2196|回复: 3
打印 上一主题 下一主题
收起左侧

单片机谐振式水位传感器显示乱码

[复制链接]
跳转到指定楼层
楼主

用的是洗衣机里面的谐振式水位传感器,STC89C52单片机,具体代码如下:
#include    <reg51.h>
#include <intrins.h>
#include <lcd.h>

sfr AUXR = 0x8E;
sfr BRT   = 0x9C;

typedef unsigned char BYTE;
unsigned int    uart0_wr=0;     //写指针
unsigned char   uart0_rd;       //读指针
unsigned char   RX0_Buffer[20]={'0'};   //接收缓冲
bit     B_TI;
bit display_flag=0;

void    uart0_init(void);



/*************** 用户定义参数 *****************************/

#define MAIN_Fosc       11059200UL  //define main clock
#define Baudrate0       9600UL      //define the baudrate,

/**********************************************************/


/****************** 编译器自动生成,用户请勿修改 ************************************/

#define BRT_Reload          (256 - MAIN_Fosc / 16 / Baudrate0)      //Calculate the timer1 reload value ar 1T mode


/**********************************************************/
/*----------------------------
Send a byte data to UART
Input: dat (data to be sent)
Output:None
----------------------------*/
void SendData(BYTE dat)
{
    SBUF = dat;             //Send data to UART buffer
      while(TI==0);
         TI=0;
}

/*----------------------------
Send a string to UART
Input: s (address of string)
Output:None
----------------------------*/
void SendString(char *s)
{
    while (*s)              //Check the end of the string
    {
        SendData(*s++);     //Send current char and increment string ptr
    }
}

void    main(void)
{        P1=0xf0;
    LCDInit();                              //显示屏初始化
    uart0_init();
    RX0_Buffer[1]='0';
    DisplayString(0x0,0,"F:      Hz");
    DisplayString(0x0,1,"H:      mm");

    while(1)
    {
        if(display_flag==1)
        {
            DisplaySingleChar(0x03,0,RX0_Buffer[1]);
            DisplaySingleChar(0x04,0,RX0_Buffer[2]);
            DisplaySingleChar(0x05,0,RX0_Buffer[3]);
            DisplaySingleChar(0x06,0,RX0_Buffer[4]);
            DisplaySingleChar(0x07,0,RX0_Buffer[5]);

            DisplaySingleChar(0x03,1,RX0_Buffer[7]);
            DisplaySingleChar(0x04,1,RX0_Buffer[8]);
            DisplaySingleChar(0x05,1,RX0_Buffer[9]);
            DisplaySingleChar(0x06,1,RX0_Buffer[10]);
            display_flag=0;
        }

    }
}

void    uart0_init(void)
{
//  PCON |= 0x80;       //UART0 Double Rate Enable
//  SCON = 0x50;        //UART0 set as 10bit , UART0 RX enable
//  AUXR |=  0x01;      //UART0 使用BRT
//  AUXR |=  0x04;      //BRT set as 1T mode
//  BRT = BRT_Reload;
//  AUXR |=  0x10;      //start BRT

//  #if (PARITYBIT == NONE_PARITY)
    SCON = 0x50;            //8-bit variable UART
//#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
//    SCON = 0xda;            //9-bit variable UART, parity bit initial to 1
//#elif (PARITYBIT == SPACE_PARITY)
//    SCON = 0xd2;            //9-bit variable UART, parity bit initial to 0
//#endif

    TMOD = 0x20;            //Set Timer1 as 8-bit auto reload mode
    TH1 = TL1 = -(MAIN_Fosc/12/32/Baudrate0); //Set auto-reload vaule
    TR1 = 1;                //Timer1 start run
    ES = 1;                 //Enable UART interrupt
    EA = 1;                 //Open master interrupt switch

//  ES  = 1;
//  EA = 1;
}


/**********************************************/
void UART0_RCV (void) interrupt 4
{
    if(RI)
    {
        RI = 0;
        RX0_Buffer[uart0_wr] = SBUF;
        if(++uart0_wr >= 13)    uart0_wr = 0;
    display_flag=1;
    }

    if(TI)
    {
        TI = 0;
        B_TI = 1;
    }
}




串口更改了,但是lcd显示的不是数值,有psxy。psxx,不知道是乱码还是什么,请大佬帮帮忙。用的是这个传感器
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2020-5-8 14:58 | 只看该作者
显示没问题也不是乱码,是读出的数据有问题。
回复

使用道具 举报

板凳
ID:420836 发表于 2020-5-8 22:42 | 只看该作者
1602显示正常,只是频率和高度对应的数字不正确。 需要检查数据是否正确解码。
回复

使用道具 举报

地板
ID:282850 发表于 2020-5-9 14:22 | 只看该作者
显示前先给RX0_Buffer赋数值,看LCD显示是否为此数值,如果正常,则是从水位传感器读出的RX0_Buffer错误。
串口来读水位频率是否可行,这个很怪,是否改成定时器则频率的方式原理较清楚
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表