目录
一、主要功能
1、数码管显示显示
2、双刀开关模拟切换挡位
3、电位器模拟测量电压
二、使用步骤
基于51单片机的多量程电压测量系统设计需要解决量程自动切换、信号调理和精度优化等关键问题。
三、硬件资源
1、51单片机核心模块
2、按键模块
3、数模转换器模块
4、挡位选择开关
5、继电器模块
6、数码管显示模块
四、软件设计
#include <reg52.h> //52系列单片机头文件定义
#include <stdio.h> //C语言头文件定义
//***************************
//*******引脚定义************
//***************************
//ADC0832控制口定义
sbit CS =P2^0; //CS:片选使能信号输出端
sbit CLK=P2^1; //CLK:时钟信号输出端
sbit DIO=P2^2; //DI/DO信号输出端(由于D0与D1在通信时不会同时有效,所以共用一个IO口)
//数码管控制引脚定义(数据引脚共8个,使用P0)
sbit S_1=P1^0; //第一个数码管阳极控制端
sbit S_2=P1^1; //第二个数码管阳极控制端
sbit S_3=P1^2; //第三个数码管阳极控制端
sbit S_4=P1^3; //第四个数码管阳极控制端
//量程与继电器控制引脚定义
sbit KEY=P1^4; //用于量程的选择以及继电器的控制
//***************************
//*******常量定义************
//***************************
unsigned int table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//0~9在共阳数码管中所对应的十六进制值
//***************************
//*******延时1000us**********
//***************************
void delay_1000us() //简单延时函数,约延时1000us
{
unsigned char i=1000;
while(i--);
}
//***************************
//*******主程序**************
//***************************
void main()
{
unsigned int buff,ge,shi,bai; //缓存数据定义
UartInit(); //串口初始化
while(1) //死循环
{ //主函数程序开始
buff=ADC0832()*100; //读取AD的值,并进行修正
buff=buff/51; //精度修正,转换为000~500范围
bai=buff/100; //保存buff的百位
shi=(buff%100)/10; //保存buff的十位
ge=buff%10; //保存buff的个位
}
}
五、实验现象
演示视频: