基于单片机设计用adc0832的用LCD1602显示两路电压表代码
时间: 2023-12-27 17:03:45 浏览: 124
以下是基于单片机设计用 adc0832 的用 LCD1602 显示两路电压表代码的参考:
```c
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^4;
sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;
void delay(uint x)
{
while(x--);
}
void LCD1602WriteCommand(uchar command)
{
RW=0; //写模式
RS=0; //命令模式
P0=command;
delay(10);
E=1;
delay(10);
E=0;
}
void LCD1602WriteData(uchar dat)
{
RW=0; //写模式
RS=1; //数据模式
P0=dat;
delay(10);
E=1;
delay(10);
E=0;
}
void LCD1602Init()
{
LCD1602WriteCommand(0x38); //设置16*2显示,5*7点阵,8位数据接口
LCD1602WriteCommand(0x0c); //显示开,光标关,光标闪烁关
LCD1602WriteCommand(0x06); //写入一个字符后地址指针加1,光标位置移动关
LCD1602WriteCommand(0x01); //清屏
}
void ADC0832Start()
{
CS=0;
CLK=0;
DIO=1;
delay(10);
CLK=1;
delay(10);
CS=1;
}
uchar ADC0832Read()
{
uchar i,dat=0;
CS=0;
CLK=0;
DIO=1;
delay(10);
CLK=1;
delay(10);
CLK=0;
delay(10);
for(i=0;i<8;i++)
{
CLK=1;
dat<<=1;
dat|=DIO;
CLK=0;
}
CS=1;
return dat;
}
void main()
{
uchar ad1,ad2;
LCD1602Init();
while(1)
{
ADC0832Start();
ad1=ADC0832Read();
ad2=ADC0832Read();
//将两路模拟电压值转换为电压值
float voltage1 = ad1*5.0/255;
float voltage2 = ad2*5.0/255;
//将电压值转换为字符串
char str1[16],str2[16];
sprintf(str1, "Voltage1: %.2fV", voltage1);
sprintf(str2, "Voltage2: %.2fV", voltage2);
//将字符串显示到LCD1602上
LCD1602WriteCommand(0x80); //设置光标位置为第1行第1列
for(uchar i=0; i<16; i++)
{
if(str1[i] != '\0')
LCD1602WriteData(str1[i]);
else
break;
}
LCD1602WriteCommand(0xc0); //设置光标位置为第2行第1列
for(uchar i=0; i<16; i++)
{
if(str2[i] != '\0')
LCD1602WriteData(str2[i]);
else
break;
}
delay(1000); //延时1秒
LCD1602WriteCommand(0x01); //清屏
}
}
```
该代码通过 `LCD1602WriteCommand()` 和 `LCD1602WriteData()` 函数来控制 LCD1602 的显示,通过 `ADC0832Start()` 函数启动 ADC0832 转换,通过 `ADC0832Read()` 函数读取转换结果。主程序中不断循环获取两路模拟电压值,并将其转换为电压值后显示在LCD1602上。
阅读全文