ADC0808采集一路电压显示到lcd1602
时间: 2023-10-22 10:05:25 浏览: 90
ADC0808与1602液晶显示电压
5星 · 资源好评率100%
ADC0808是一款8位串行输出模数转换器,可以将模拟电压转换为数字信号。要将采集到的电压显示到LCD1602上,需要经过以下步骤:
1. 连接硬件:将ADC0808与单片机连接,将LCD1602与单片机连接。
2. 初始化LCD1602:在程序开始时,需要对LCD1602进行初始化,包括设置显示模式、光标位置等。
3. 初始化ADC0808:设置ADC0808的工作模式,包括参考电压、采样频率等。
4. 读取电压值:通过单片机读取ADC0808输出的数字信号,并将其转换为电压值。
5. 显示电压值:将电压值转换为字符串,并将其显示在LCD1602上。
下面是一份示例代码,供参考:
```c
#include <reg52.h>
#include <intrins.h>
#define LCD1602_RS P2_0
#define LCD1602_RW P2_1
#define LCD1602_EN P2_2
#define LCD1602_DATA P0
void delay_us(unsigned int us)
{
while(us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay_ms(unsigned int ms)
{
while(ms--)
{
delay_us(1000);
}
}
void lcd1602_write_cmd(unsigned char cmd)
{
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DATA = cmd;
LCD1602_EN = 1;
delay_us(5);
LCD1602_EN = 0;
delay_us(5);
}
void lcd1602_write_data(unsigned char dat)
{
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DATA = dat;
LCD1602_EN = 1;
delay_us(5);
LCD1602_EN = 0;
delay_us(5);
}
void lcd1602_init(void)
{
lcd1602_write_cmd(0x38); // 设置16×2显示,5×7点阵,8位数据接口
lcd1602_write_cmd(0x0c); // 开启显示,关闭光标
lcd1602_write_cmd(0x06); // 指针自动加1,不移动屏幕
lcd1602_write_cmd(0x01); // 清屏
}
void adc0808_init(void)
{
// 设置ADC0808的参考电压为5V,采样频率为2.5kHz
P1 = 0xff;
P3_0 = 0;
P3_1 = 1;
P3_2 = 0;
}
unsigned int adc0808_read(unsigned char ch)
{
unsigned int val = 0;
// 读取ADC0808的输出,转换为电压值
P1 = ch << 4;
P3_3 = 0;
delay_us(2);
P3_3 = 1;
delay_us(2);
val = P1;
val = (val << 8) | P1;
val = (val << 8) | P1;
val >>= 5;
val &= 0xfff;
return val;
}
void main()
{
unsigned int val = 0;
char str[16];
lcd1602_init();
adc0808_init();
while(1)
{
// 读取通道0的电压值
val = adc0808_read(0);
// 将电压值转换为字符串
sprintf(str, "V=%d.%03dV", val / 1000, val % 1000);
// 在LCD1602上显示字符串
lcd1602_write_cmd(0x80); // 设置光标位置为第一行第一列
for(int i = 0; i < 16 && str[i]; i++)
{
lcd1602_write_data(str[i]);
}
delay_ms(500);
}
}
```
阅读全文