📄 test.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
sbit beer=P3^6;
uchar code a[]="Dis=000cm";
uchar num=0,get[2]={0};
bit flag=0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delayus(uint i)
{
while(i)i--;
}
void write1602_command(uchar command)//写指令子函数
{
rs=0;
rw=0;
P2=command;
delay(1);
en=0;
delay(2);
en=1;
}
void write1602_data(uchar date)//写数据子函数
{
rs=1;
rw=0;
P2=date;
delay(1);
en=0;
delay(2);
en=1;
}
void init()
{
en=0;
rw=0;
write1602_command(0x38);
write1602_command(0x01);
write1602_command(0x0c);
write1602_command(0x06);
write1602_command(0x80);
}
void display(uint s)
{
write1602_command(0x84);
write1602_data(s%10000/1000+0x30);
write1602_data(s%1000/100+0x30);
write1602_data(s%100/10+0x30);
//write1602_data(0x2e);
//write1602_data(s%10+0x30);
}
void SysInit()
{
init();
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;//设置串口通信的波特率为9600
TL1=0xfd;
TR1=1;//开启定时器1
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void send_uart(uchar dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
void main()
{
uchar i;
uint dis=0;
SysInit();
write1602_command(0x80);
for(i=0;a[i]!='\0';i++)
{
write1602_data(a[i]);
delay(6);
}
while(1)
{
send_uart(0x55);
delay(500);//500ms更新一次,根据你的需要修改延时参数
if(flag)
{
flag=0;
dis=get[0]*256+get[1];
display(dis);
if(dis<200) //小于20CM则蜂鸣器响
beer=0;
else
beer=1;
delay(10);
ES=1;
}
}
}
void IsrUart() interrupt 4
{
ES=0;
if(RI)
{
RI=0;
get[num++]=SBUF;
if(num>1)
{
ES=0;
num=0;
flag=1;
}
else
ES=1;
}
else
ES=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -