使用proteus进行仿真:运用单片机(AT89C52、STM32、MSP430等)控制实现一路模拟电压采集(ADC)
需实现以下功能:
1、电压测量范围0~5V
2、设置电压上限4.5V,超过上限电压红色LED灯警示、蜂鸣器警示1S;
3、设置电压下限0.5V,低于下限电压黄色LED灯警示、蜂鸣器警示1S;
4、显示实时测量电压值、上下限电压值,将采集到的电压数据显示在LCD1602液晶屏的第一行中间位置,上下限电压值显示在LCD1602液晶屏的第二行位置;
5、将学号后两位显示在液晶屏的右下角;
6、AD芯片选型:ADC0804,TLC549等。
在附件里还有一个可以自己计算可调的上下限电压的python代码。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
python代码:
- V_min = 0.0 # 最小电压值
- V_max = 5.0 # 最大电压值
- hex_min = 0x00 # 最小十六进制值
- hex_max = 0xFF # 最大十六进制值
- # 输入电压范围
- V_range_min = float(input("请输入电压范围的最小值(范围在{}之间):".format(V_min)))
- V_range_max = float(input("请输入电压范围的最大值(范围在{}之间):".format(V_max)))
- # 计算电压范围对应的相对位置
- relative_position_min = (V_range_min - V_min) / (V_max - V_min)
- relative_position_max = (V_range_max - V_min) / (V_max - V_min)
- # 计算十六进制范围
- hex_range_min = int(relative_position_min * (hex_max - hex_min) + hex_min)
- hex_range_max = int(relative_position_max * (hex_max - hex_min) + hex_min)
- # 分解十六进制范围的最小值和最大值为高位和低位
- volt_h_min = (hex_range_min >> 8) & 0xFF # 最小值的高位
- volt_l_min = hex_range_min & 0xFF # 最小值的低位
- volt_h_max = (hex_range_max >> 8) & 0xFF # 最大值的高位
- volt_l_max = hex_range_max & 0xFF # 最大值的低位
- # 输出结果
- print("最小电压值的十六进制表示:volt_h = 0x{:02X}, volt_l = 0x{:02X}".format(volt_h_min, volt_l_min))
- print("最大电压值的十六进制表示:volt_h = 0x{:02X}, volt_l = 0x{:02X}".format(volt_h_max, volt_l_max))
- #最后你只要把输出的结果选择volt_l的值就可以写入就可以了
复制代码
Keil代码与Proteus仿真下载:
仿真程序.7z
(60.3 KB, 下载次数: 23)
|