📄 main.c
字号:
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
//LCD端口要根据实际的连接情况分配IO
#define busy 0x80
sbit RS=P3^7;
sbit RW=P3^6;
sbit E=P3^5;
sfr LCDData=0x80;//0x80--P0,0X90--P1,0xa0--P2,0xb0--P3
sbit da=P1^0;
sbit cs=P1^1;
sbit clk=P1^2;
uchar dis[5];
/************延时函数*/
void Delay(uint i)
{
while(i--);
}
/*写指令函数*/
void Write_Instruction(uchar x)
{
Delay(1000);
E=0;
RW=0;
RS=0;
LCDData=x;
E=1;
Delay(20);
E=0;
}
/*写单个数据的函数*/
void Write_Data(uchar x)
{
Delay(1000);
E=0;
RW=0;
RS=1;
E=1;
LCDData=x;
E=0;
}
/*清屏函数*/
void Cls(void)
{
Write_Instruction(0x01);
}
/*写入一串字符串函数*/
void Write_String(uchar x,uchar *p)
{ Write_Instruction(x);
while(*p!=0x00)
{Write_Data(*p);
p++;
if (x++==0x8f)
{Write_Instruction(0xc0);}
}
}
/*初始化函数*/
void InitLCD(void)
{Write_Instruction(0x38);
Delay(2000);
Write_Instruction(0x0e);
Delay(2000);
Write_Instruction(0x06);
Delay(2000);
}
/**************/
void get_angue(void)
{
int value=0,value1=0;
uchar i;
clk=1;
cs=1;
cs=0;
for(i=0;i<16;i++)
{
value<<=1;
clk=0;
if(da)
{
value++;
}
cs=1;
if(!(value&0x4000))
{
value1=value&0x3f00;
value1>>=1;
value&=0x007f;
value=value+value1;
}
else
{
value=0;
}
value=value*2/10;
dis[0]=value/1000+0x30;
dis[1]=value%1000/100+0x30;
dis[2]=value%100/10+0x30;
dis[3]=0x2e;
dis[4]=value%10/1+0x30;
}
/**/
}
uint uzz9001(void)
{
uchar i,tem1;
uint t;
i=16;
t=0;
clk=1;
cs=1;
Delay(5);
cs=0;
Delay(2);
for(i=0;i<16;i++)
{
clk=0;
Delay(2);
clk=1;
t=t<<1;
if(da)
{
t=t+1;
}
Delay(2);
}
cs=1;
tem1=t;
t=((t&0x7f00)>>1)+(tem1&0x7f);
return(t);
}
void displaybit(uchar addr,uint d)
{
uchar i;
i=16;
Write_Instruction(addr);
while(i--)
{
if(d&0x8000)
Write_Data(0x31);
else
Write_Data(0x30);
d=d<<1;
}
}
/*主函数*/
void main(void)
{
uint angle;
// uchar j;
InitLCD();//初始化液晶屏
Write_String(0xc0,"Ang=");
while(1)
{
angle=uzz9001();
Write_Instruction(0xc4);
Write_Data(angle/10000+0x30);
Write_Data(angle%10000/1000+0x30);
Write_Data(angle%10000%1000/100+0x30);
Write_Data(angle%10000%1000%100/10+0x30);
Write_Data(angle%10000%1000%100%10+0x30);
Delay(0xffff);
Delay(0xffff);
Delay(0xffff);
displaybit(0x80,angle);
/* get_angue();
Write_Instruction(0xc4);
for(j=0;j<5;j++)
{
Write_Data(dis[j]);
Delay(20);
}*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -