51单片机AD采集滑动变阻器电压并通过串口每秒发送一次电压
时间:2022-09-06 22:30:00
51单片机AD采集电压通过串口每秒发送一次电压值
这是主题要求,使用AD转换芯片ET每秒2046检测一次滑动变阻器电压,转换成ASCLL编码后,通过串口发送数据。同时,添加三个指示灯来显示当前的电压范围。
下面是这个AD芯片的电路原理图也可以改变AD采集的设备(光敏电阻、热敏电阻、外部输入等。)由收集地址确定。
主函数代码
#include “reg52.h”
#include “uart.h”
#include “rtc.h”
#include"adc.h"
sbit LED_R = P0^0;
sbit LED_Y = P0^1;
sbit LED_G = P0^2;
void main(void)
{
// unsigned char i;
unsigned char second = Ds1302Read(0X81);//读秒
unsigned long temp=0x00;
InitUart();
while(1)
{
if(second!=Ds1302Read(0X81))
{
second=Ds1302Read(0X81); //读秒
temp=Read_AD_Data(0x94);//AIN0 电位器
// SendChar(temp>>8); //高八位字节
// SendChar(temp&255); //低八位字节
temp=temp51000/4096
SendChar(temp/1000 ‘0’);//千位
SendChar(‘.’);
SendChar(temp00/100 ‘0’);//百位
SendChar(temp000/10 ‘0’);//十位
SendChar(temp000 ‘0’);//个位
SendChar(‘V’);
SendChar(‘\r’); //换行
SendChar(‘\n’);
if(temp>4000)
{
LED_R = 0;
LED_G = 1;
LED_Y = 1;
}
else if(temp>1000)
{
LED_R = 1;
LED_G = 0;
LED_Y = 1;
}
else
{
LED_R = 1;
LED_G = 1;
LED_Y = 0;
}
}
}
}
这些是主函数代码,adc、uart等模块直接采样普通相应模块的底层代码,未修改
在这个代码中,我觉得最有趣的地方是读秒用的不是定时器计数,而是通过读取ds1302的0x81(读秒地址)
second!=Ds1302Read(0X81)
second=Ds1302Read(0X81)
通过if判断秒是否变化并重新赋值以确定一秒钟。具体代码可以看到上面
我认为这个地方仍然很有趣
然后3个LED灯很简单if判断句子
自己写的51程序,亲测无误,还有其他想法可以讨论。