用的是洗衣机里面的谐振式水位传感器,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,不知道是乱码还是什么,请大佬帮帮忙。用的是这个传感器
|