IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 使用STC15W408AS的ADC模块和LM35传感器进行温度测量 -> 正文阅读

[C++知识库]使用STC15W408AS的ADC模块和LM35传感器进行温度测量

* 平台:STC15W408AS芯片+LM35传感器

* 名称:AD模块使用块实验

* 晶振:11.0592MHZ

* 实验效果:用ADC模块的模数转换功能,用P11脚测量LM35传感器的电压值,并将其转换成温度送电脑串品助手显示

#include "STC15.h"
#include <stdio.h>
#include "intrins.h"

#define ADC_POWER 0x80 // ADC电源控制位
#define ADC_FLAG 0x10  // ADC完成标志
#define ADC_START 0x08 // ADC起始控制位

#define ADC_SPEEDLL 0x00 // 540个时钟
#define ADC_SPEEDL 0x20  // 360个时钟
#define ADC_SPEEDH 0x40  // 180个时钟
#define ADC_SPEEDHH 0x60 // 90个时钟
#define VCC 5000         // set ADC_REF_VCC

typedef unsigned char BYTE;
typedef unsigned int WORD;

BYTE ch = 1;   // ADC通道号1,接LM35传感器信号输出引脚
BYTE flag = 0; // 设置转换完成标志位
BYTE H8bit = 0, L2bit = 0;
WORD AD10bit = 0, temp = 0, dat = 0, dat1 = 0;
unsigned long result = 0;

void InitADC();
void UartInit(void);
char putchar(char c);
void Delay(WORD n);
void DisplayData(unsigned int iData);

void main()
{
    InitADC(); //初始化ADC
    while (1)
    {
        if (flag)
        {
            flag = 0;
            AD10bit = (AD10bit | H8bit) & 0x00ff;
            AD10bit = (AD10bit << 2) | (L2bit & 0X03); //合并成10位二进制数
            temp = AD10bit;
            AD10bit = 0;
            ADC_RES = 0;
            ADC_RESL = 0;
            printf("value=%d", temp);
            printf("              ");
            //注意:先把temp强制转换成long型,再进行电压转换才可获得正确的电压值
            result = ((long)temp * VCC / 102.3);
            DisplayData(result);
            printf("\r\n");
        }
    }
}

/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
    P1ASF = 0x02;   //设置P1口为AD口
    P1M1 = 0x02;    // set 1# chanel to AD
    P1M0 = 0x00;    // set 1# chanel to AD
    CLK_DIV = 0x00; //结果右对齐
    ADC_RES = 0;    //清除结果寄存器
    ADC_RESL = 0;
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
    Delay(10); // ADC上电并延时

    AUXR |= 0x10; // set EADCI
    IE = 0xa0;    // Enable ADC interrupt and Open master interrupt switch
}

/*----------------------------
软件延时
----------------------------*/
void Delay(WORD n)
{
    WORD x;

    while (n--)
    {
        x = 5000;
        while (x--)
            ;
    }
}

void DisplayData(unsigned int iData)
{
    char NumStr[4] = {0, 0, 0, 0}, i = 0;
    NumStr[0] = iData / 1000;         // 千位
    NumStr[1] = (iData % 1000) / 100; // 百位
    NumStr[2] = iData % 100 / 10;     // 十位
    NumStr[3] = iData % 10;           // 个位
    printf("ADC1=");
    printf("%c", NumStr[0] + 0x30);
    printf("%c", NumStr[1] + 0x30);
    printf(".");
    printf("%c", NumStr[2] + 0x30);
    printf("%c", NumStr[3] + 0x30);
}

/*----------------------------
ADC中断服务程序
----------------------------*/
void adc_isr() interrupt 5
{
    H8bit = ADC_RES;
    L2bit = ADC_RESL;
    ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
    flag = 1;
}

void UartInit(void)
{
    SCON = 0x50; // 8位可变波特率
    T2L = 0xe8;  //设置波特率重装值
    T2H = 0xff;  // T2为1T模式, 并启动定时器2
    AUXR = 0x11; //选择定时器2为串口1的波特率发生器
    ES = 1;      //使能串口1中断
    EA = 1;      //打开总中断
}
char putchar(char c)
{
    UartInit();
    ES = 0;
    SBUF = c;
    while (TI == 0)
        ;
    TI = 0;
    ES = 1;
    return 0;
}

运行结果如下图所示:

?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 00:58:09  更:2022-02-19 00:59:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:25:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码