栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

51单片机AD采集滑动变阻器电压并通过串口每秒发送一次电压

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

51单片机AD采集滑动变阻器电压并通过串口每秒发送一次电压

51单片机AD采集电压通过串口每秒发送一次电压值


这个是题目要求,利用AD转换芯片ET2046每秒检测一次滑动变阻器电压,转换成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(temp%1000/100+‘0’);//百位
SendChar(temp%1000%100/10+‘0’);//十位
SendChar(temp%1000%100%10+‘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程序,亲测无误,大家有其他想法可以讨论。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917432.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号