单路电压表c语言编程,用AT89C51单片机制作的数字电压表
时间: 2023-09-19 09:06:05 浏览: 103
基于AT89C51单片机的数字电压表设计(毕业论文).doc
5星 · 资源好评率100%
好的,我可以为您提供一份参考代码,实现AT89C51单片机的数字电压表功能。首先,您需要使用ADC0804模数转换器将模拟电压转换为数字信号,然后将数字信号通过AT89C51单片机转换为电压值并在LCD1602液晶屏上显示。
下面是一份示例代码,仅供参考:
```
#include <reg51.h> //AT89C51专用头文件
#include <intrins.h> //需要用到 _nop_()函数
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^0; //液晶屏RS引脚接P2.0
sbit RW = P2^1; //液晶屏RW引脚接P2.1
sbit EN = P2^2; //液晶屏EN引脚接P2.2
sbit ADC_CS = P1^0; //ADC0804的片选引脚接P1.0
uchar code table[] = "Voltage:"; //定义字符数组,用于显示
void delay(uint i) //延时函数
{
while(i--);
}
void LCD_init() //LCD1602液晶屏初始化
{
RW = 0;
delay(50);
P0 = 0x38; //8位数据线,2行显示,5x7点阵
EN = 1;
_nop_();
EN = 0;
delay(5);
P0 = 0x0c; //显示开,光标关,光标闪烁关
EN = 1;
_nop_();
EN = 0;
delay(5);
P0 = 0x01; //清屏
EN = 1;
_nop_();
EN = 0;
delay(5);
P0 = 0x06; //光标右移,文字不移动
EN = 1;
_nop_();
EN = 0;
delay(5);
}
void LCD_write_cmd(uchar cmd) //LCD1602液晶屏发送命令
{
RW = 0;
P0 = cmd;
EN = 1;
_nop_();
EN = 0;
delay(5);
}
void LCD_write_data(uchar dat) //LCD1602液晶屏发送数据
{
RW = 0;
RS = 1;
P0 = dat;
EN = 1;
_nop_();
EN = 0;
delay(5);
}
uchar ADC0804_read() //ADC0804模数转换器读取电压值
{
uchar voltage = 0;
ADC_CS = 0; //使能ADC0804
delay(5);
P1 = 0x80; //选择A/D转换通道0
delay(5);
P1 = 0x00; //开始转换
delay(5);
while(P1_7); //等待转换完成
voltage = P1; //读取转换结果
ADC_CS = 1; //禁止ADC0804
return voltage;
}
void main()
{
uchar voltage = 0;
uchar voltage_high = 0;
uchar voltage_low = 0;
LCD_init(); //LCD1602液晶屏初始化
while(1)
{
voltage = ADC0804_read(); //读取电压值
voltage_high = voltage / 10; //高位
voltage_low = voltage % 10; //低位
LCD_write_cmd(0x80); //光标移到第一行第一列
LCD_write_data(table[0]); //显示字符串“Voltage:”
LCD_write_data(table[1]);
LCD_write_data(table[2]);
LCD_write_data(table[3]);
LCD_write_data(table[4]);
LCD_write_data(table[5]);
LCD_write_data(table[6]);
LCD_write_data(table[7]);
LCD_write_data(voltage_high + 0x30); //显示电压高位
LCD_write_data(voltage_low + 0x30); //显示电压低位
delay(100); //延时一段时间
}
}
```
以上代码仅供参考,您需要根据自己的实际情况进行修改和调试。希望能对您有所帮助。
阅读全文