版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十二章ADC原理和应用主要内容ADC的原理ADC寄存器组设计实例一:直流电压的测量和显示ADC的原理
--ADC的内部结构STC32G系列单片机内集成了一个12位的高速ADC模块ADC的原理
--ADC的内部结构从图中可知,通过模拟多路选择开关(由ADC_CONTR寄存器的CHS3~CHS0字段控制),可以将16个通道的模拟信号(其中一个通道连接到内部1.19V参考源)复用到12位的ADC模块通过ADC配置寄存器ADCCFG中SPEED3、SPEED2、SPEED1和SPEED0位(SPEED[3:0])的控制,该ADC模块的最高采样速率可以达到800KHz,即80万次采样/s(800ksamplepersecond,800kSPS)ADC的原理
--ADC的内部结构STC32G系列单片机的ADC模块由下面单元构成,包括模拟多路选择器比较器逐次比较寄存器12位数字模拟转换器(Digital-to-AnalogConverter,DAC)转换结果寄存器ADC_RES和ADC_RESLADC控制寄存器ADC_CONTRADC配置寄存器ADCCFGADC的原理
--ADC的内部结构该ADC采用逐次逼近寄存器(SuccessiveApproximationRegister,SAR)型结构,该结构是一种典型的闭环反馈系统在SAR型结构的ADC中,包含一个比较器和12位的DAC,通过逐次比较逻辑,从最高有效位(MostSignificantBit,MSB)开始,顺序地对每一个输入电压与内置DAC输出进行比较经过多次比较后,使的转换得到的数字量逼近输入模拟信号所对应的数字量的值。将最终得到的数字量保存在ADC转换结果寄存器ADC_RES和ADC_RESL中将ADC控制寄存器ADC_CONTR中的转换结束标志ADC_FLAG置1,以供程序查询或者向CPU发出中断请求ADC的原理
--ADC的内部结构在使用ADC模块之前,需要预先将ADC_CONTR寄存器中的ADC_POWER位设置为“1”,给ADC模块上电,然后才能启动ADC转换ADC的原理
--ADC计算公式本节介绍ADC相关的计算公式,包括ADC转换速度计算公式ADC转换结果计算公式反推工作电压计算公式ADC计算公式
--ADC转换速度计算公式
ADC计算公式
--ADC转换速度计算公式
ADC计算公式
--ADC转换结果计算公式
ADC计算公式
--反推ADC输入电压计算公式
ADC寄存器组本节介绍STC32G系列单片机内的ADC寄存器组,包括ADC控制寄存器ADC配置寄存器ADC转换结果寄存器ADC时序控制寄存器ADC寄存器组
--ADC控制寄存器(ADC_CONTR)该寄存器位于SFR地址为0xBC的位置。当复位后,该寄存器的值为“00000000”ADC_POWERADC电源控制位。当该位为“0”时,关闭ADC电源;当该位为“1”时,打开ADC电源在使用ADC模块时,需要注意:在进入空闲模式和掉电模式前,关闭ADC电源以降低功耗在启动ADC转换前,一定要确认打开了ADC电源。在ADC转换结束后关闭ADC电源,可以降低功耗位索引76543210名字ADC_POWERADC_STARTADC_FLAGADC_EPWMTADC_CHS[3:0]ADC寄存器组
--ADC控制寄存器(ADC_CONTR)初次打开ADC电源后,需要等待大约1ms,使得ADC供电电源稳定后,再启动ADC转换过程ADC_STARTADC转换启动控制位。当该位为“1”时,启动ADC转换。当转换结束后,硬件自动将该位清0ADC_FLAGADC转换结束标志位。当ADC转换结束时,由硬件将该位设置为“1”,并向CPU提出中断请求,该位需要由软件清零ADC_EPWMT
使能PWM实时触发ADC功能ADC寄存器组
--ADC控制寄存器(ADC_CONTR)ADC_CHS[3:0]模拟输入通道选择控制位注:有P1.2引脚的单片机,该功能在P1.2引脚上;对于无P1.2引脚的单片机,该功能在P5.4引脚上ADC_CHS[3:0]ADC通道ADC_CHS[3:0]ADC通道0000P1.01000P0.00001P1.11001P0.10010P1.2/P5.4[1]1010P0.20011P1.31011P0.30100P1.41100P0.40101P1.51101P0.50110P1.61110P0.60111P1.71111测试内部1.19VADC寄存器组
--ADC配置寄存器(ADCCFG)该寄存器位于SFR地址为0xDE的位置。当复位后,该寄存器的值为“xx0x0000”RESFMT,ADC转换结果格式控制位当该位为“0”时,转换结果左对齐。即ADC_RES寄存器保存转换结果的高8位,ADC_RESL寄存器保存转换结果的低4位,并且这四位转换结果在ADC_RESL寄存器的高四位位索引76543210名字——RESFMT—SPEED[3:0]ADC寄存器组
--ADC配置寄存器(ADCCFG)
ADC寄存器组
--ADC转换结果寄存器寄存器ADC_RES位于SFR地址为0xBD的位置。当复位后,该寄存器的值为“00000000”寄存器ADC_RESL位于SFR地址为0xBE的位置。当复位后,该寄存器的值为“00000000”位索引76543210名字ADC_RES[7:0],具体内容由RESFMT控制位索引76543210名字ADC_RESL[7:0],具体内容由RESFMT控制ADC寄存器组
--ADC时序控制寄存器(ADCTIM)
位索引76543210名字CSSETUPCSHOLD[1:0]SMPDUTY[4:0]ADC寄存器组
--ADC时序控制寄存器(ADCTIM)
CSHOLD[1:0]ADC时钟数001012(默认值)103114ADC寄存器组
--ADC时序控制寄存器(ADCTIM)SMPDUTY[4:0]ADC时钟数000001000012…………0101011(默认值)…………11110311111132
第十二章ADC原理和应用设计实例一:直流电压的显示和测量通过按下STC32G系列单片机硬件开发平台上标记为0~9和A~F的16个ADC按键,可以得到不同的直流电压值该直流电压值输入到STC32G12K128单片机内部的ADC模块,经过模拟-数字转换后得到对应的离散数字量该离散数字量经过换算后得到对应的模拟电压值通过1602LCD显示屏显示该模拟电压值设计实例一:直流电压的显示和测量
--直流分压电路原理在参考电压VREF和GND之间连接着由16个电阻构成的电阻梯度网络设计实例一:直流电压的显示和测量
--直流分压电路原理
设计实例一:直流电压的显示和测量
--直流分压电路原理
设计实例一:直流电压的显示和测量
--直流分压电路原理
设计实例一:直流电压的显示和测量
--1602字符LCD屏接口+5V供电的1602字符LCD通过杜邦线与STC32G系列单片机硬件开发平台上标记为J5的单排插座连接在J5插座上和1602字符LCD屏的插针旁使用白色字体标记引脚的信号定义设计实例一:直流电压的显示和测量
--1602字符LCD屏接口STC32G系列单片机硬件开发平台上的J5单排插座提供20个插针,可以直接与12864图形/字符LCD进行连接,对于1602字符屏来说,不能直接进行连接,需要额外使用杜邦线进行连接STC32G系列单片机硬件开发平台上J5单排插座和1602字符LCD屏的信号引脚定义STC32G系列单片机硬件开发平台J5插座引脚号信号名字与单片机引脚连接关系
1602LCD引脚号信号名字功能1GND地1VSS地2VCC+5V电源2VCC+5V电源3V0—3V0LCD驱动电压输入设计实例一:直流电压的显示和测量
--1602字符LCD屏接口
4RSP4.5
4RS寄存器选择。RS=1,数据;RS=0,指令5R/WP4.25R/W读写信号。R/W=1,读操作;R/W=0,写操作6EP4.46E芯片使能信号7DB0P6.07DB08位数据总线信号设计实例一:直流电压的显示和测量
--1602字符LCD屏接口7DB0P6.0
7DB08位数据总线信号8DB1P6.18DB19DB2P6.29DB210DB3P6.310DB311DB4P6.411DB412DB5P6.512DB513DB6P6.613DB614DB7P6.714DB715PSB—15LEDA背光源正极,接+5.0V16N.C—16LEDK背光源负极,接地设计实例一:直流电压的显示和测量
--1602字符LCD屏接口17/RST—18VOUT—19A背光源正极,接+5.0V20K背光源负极,接地设计实例一:直流电压的显示和测量
--1602字符LCD屏原理本节介绍1602字符LCD原理,内容包括1602字符LCD指标1602字符LCD内部显存1602字符LCD读写时序1602字符LCD命令和数据1602字符LCD屏初始化和操作流程1602字符LCD屏原理
--1602字符LCD指标1602字符LCD的特性指标注:工作电流是指液晶的耗电,没有考虑背光耗电。一般情况下,背光耗电大约20mA显示容量16×2个字符,即:可以显示2行字符,每行可以显示16个字符工作电压范围4.5V~5.5V。推荐5.0V工作电流2.0mA@5V屏幕尺寸2.95×4.35mm(宽×高)1602字符LCD屏原理
--1602字符LCD内部显存1602液晶内部包含80个字节的显示RAM,用于存储需要发送的数据第一行存储器地址范围0x00~0x27;第二行存储器地址范围为0x40~0x67第一行存储器地址范围0x00~0x0F与1602字符LCD第一行位置对应第二行存储器地址范围0x40~0x4F与1602字符LCD第二行位置对应每行多出来的部分是为了显示移动字幕设置1602字符LCD屏原理
--1602字符LCD读写时序本节介绍在8位并行模式下,1602字符LCD各种信号在读写操作时的时序关系写操作时序STC32G系列单片机对1602字符LCD屏进行写数据/命令操作时序1602字符LCD屏原理
--1602字符LCD读写时序将R/W信号置为逻辑“0“(低电平)。同时,给出RS信号,该信号为逻辑“1”(高电平)或者逻辑“0”(低电平),用于区分数据和命令。将E信号置为逻辑“1”(高电平)。当E信号为逻辑“1”(高电平)后,STC32G系列单片机将写入1602字符LCD屏的数据放在DB7~DB0数据线上当数据有效一段时间后,首先将E信号置为逻辑“0”(低电平)。然后,数据继续维持一段时间THD2撤除/保持R/W信号1602字符LCD屏原理
--1602字符LCD读写时序写操作时序STC32G系列单片机对1602字符LCD屏执行读数据/状态操作时序1602字符LCD屏原理
--1602字符LCD读写时序
1602字符LCD屏原理
--1602字符LCD读写时序RS信号和R/W信号的组合含义RSR/W操作说明00写入指令寄存器(清屏)01读BF(忙)标志,以及读取地址计数器的内容10写入数据寄存器(显示各字型等)11从数据寄存器读取数据1602字符LCD屏原理
--1602字符LCD命令和数据在STC32G系列单片机对1602字符LCD屏操作的过程中,会用到下表给出的命令指令指令操作码功能RSRWDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001将“20H”写到DDRAM,将DDRAM地址从AC(地址计数器)设置到“00”光标归位000000001-将DDRAM的地址设置为“00”,光标如果移动,则将光标返回到初始的位置。DDRRAM的内容保持不变1602字符LCD屏原理
--1602字符LCD命令和数据指令功能RSRWDB7DB6DB5DB4DB3DB2DB1DB0输入模式设置00000001I/DS分配光标移动的方向,使能整个显示的移动。I=“0”,递减模式。I=“1”,递增模式S=“0”,关闭整个移动。S=“1”,打开整个移动显示打开/关闭控制0000001DCB设置显示(D),光标(C)和光标闪烁(B)打开/关闭控制。D=“0”,显示关闭;D=“1”,打开显示C=“0”,关闭光标;C=“1”,打开光标B=“0”,关闭闪烁;B=“1”,打开闪烁1602字符LCD屏原理
--1602字符LCD命令和数据光标或者显示移动000001S/CR/L--设置光标移动和显示移动的控制位,以及方向,不改变DDRAM数据S/C=“0”,R/L=“0”,光标左移;S/C=”0”,R/L=”0”,光标右移;S/C=“1”,R/L=“0”,显示左移,光标跟随显示移动;S/C=”1”,R/L=”1”,显示右移,光标跟随显示移动功能设置00001DLNF--设置接口数据宽度,以及显示行的个数。DL=“1”,8位宽度;DL=“0”,4位宽度N=“0”,一行模式;N=“1”,两行模式F=“0”,5×8字符字体;F=“1”,5×10字符字体指令功能RSRWDB7DB6DB5DB4DB3DB2DB1DB01602字符LCD屏原理
--1602字符LCD命令和数据指令功能RSRWDB7DB6DB5DB4DB3DB2DB1DB0设置CGRAM地址0001AC5AC4AC3AC2AC1AC0在地址计数器中,设置CGRAM地址设置DDRAM地址001AC6AC5AC4AC3AC2AC1AC0在计数器中,设置DDRAM地址读忙标志和地址计数器01BFAC6AC5AC4AC3AC2AC1AC0读BF标志,知道LCD屏内部是否正在操作。也可以读取地址计数器的内容将数据写到RAM10D7D6D5D4D3D2D1D0写数据到内部RAM(DDRAM/CGRAM)从RAM读数据11D7D6D5D4D3D2D1D0从内部RAM(DDRAM/CGRAM)读取数据1602字符LCD屏原理
--1602字符LCD屏初始化和操作流程设计实例一:直流电压的显示和测量
--添加lcd1602.h文件#ifndef_1602_//条件编译命令,如果没有定义_1602_#define_1602_//定义_1602_#include"stc32g.h"//stc32G.h头文件包含寄存器的定义
typedefunsignedcharu8;//自定义数据类型u8(无符号字符型数据)typedefunsignedintu16;//自定义数据类型u16(无符号整型数据)
sbitLCD1602_RS=P4^5;//定义LCD1602_RS为P4.5引脚(RS信号)sbitLCD1602_RW=P4^4;//定义LCD1602_RW为P4.4引脚(RW信号)sbitLCD1602_E=P4^2;//定义LCD1602_E为P4.2引脚(E信号)sbitbusy_flag=P6^7;//定义1602LCD的忙标志在P6.7引脚设计实例一:直流电压的显示和测量
--添加lcd1602.h文件sfrLCD1602_DB=0xe8;//定义LCD1602_DB为P6端口(数据)
voidlcdwait();//定义子函数lcdwait类型voidlcdwritecmd(unsignedcharcmd);//定义lcdwritecmd类型voidlcdwritecmd(unsignedchardat);//定义lcdwritecmd类型voidlcdinit();//定义子函数lcdinit类型/**********定义子函数lcdsetcursor类型***********/voidlcdsetcursor(unsignedcharx,unsignedchary);/**********定义子函数lcdshowstr类型*************/voidlcdshowstr(unsignedcharx,unsignedchary, unsignedchar*str);#endif//条件预编译命令结束设计实例一:直流电压的显示和测量
--添加lcd1602.c文件#include"lcd1602.h"//包含lcd1602.h头文件voidlcdwait()//声明lcdwait函数,用于读取BF(忙)标志{ u16i;//声明无符号整型变量iLCD1602_E=0;//将1602LCD的E信号拉低 NOP(5);//空操作,用于延迟 LCD1602_DB=0xFF;//读取前,先将P6端口设置为“1” LCD1602_RS=0;//将1602LCD的RS信号拉低 LCD1602_RW=1;//将1602LCD的RW信号拉高 NOP(5);//空操作,用于延迟 LCD1602_E=1;//将1602LCD的E信号拉高 for(i=0;i<5000;i++){//循环检测忙标志 if(!busy_flag) break;}//如果忙标志无效,则退出循环LCD1602_E=0;//将1602LCD的E信号拉低}设计实例一:直流电压的显示和测量
--添加lcd1602.c文件voidlcdwritecmd(unsignedcharcmd)//声明lcdwritecmd函数,写命令到1602LCD{ lcdwait();//调用lcdwait函数 NOP(5);//空操作,用于延迟 LCD1602_RS=0;//将1602LCD的RS信号拉低 LCD1602_RW=0;//将1602LCD的RW信号拉低 LCD1602_DB=cmd;//将命令控制码cmd放到P6端口 LCD1602_E=1;//将1602LCD的E信号拉高 NOP(5);//空操作,用于延迟 LCD1602_E=0;//将1602LCD的E信号拉低}设计实例一:直流电压的显示和测量
--添加lcd1602.c文件/********声明lcdwritedata函数,写数据到1602LCD*************/voidlcdwritedata(unsignedchardat){ lcdwait();//调用lcdwait函数 NOP(5);//空操作,用于延迟 LCD1602_RS=1;//将1602LCD的RS信号拉高 LCD1602_RW=0;//将1602LCD的RW信号拉低 LCD1602_DB=dat;//将数据dat放到P6端口 LCD1602_E=1;//将1602LCD的E信号拉高 NOP(5);//空操作,用于延迟 LCD1602_E=0;//将1602LCD的E信号拉低}设计实例一:直流电压的显示和测量
--添加lcd1602.c文件voidlcdinit()//声明lcdinit子函数,用来初始化1602LCD{ lcdwritecmd(0x38);//发命令0x38,2行模式,5*8点阵,8位宽度 lcdwritecmd(0x0c);//发命令0x0C,打开显示,关闭光标 lcdwritecmd(0x06);//发命令0x06,文字不移动,地址自动加1 lcdwritecmd(0x01);//发命令0x01,清屏}设计实例一:直流电压的显示和测量
--添加lcd1602.c文件/*声明lcdsetcursor函数,设置显示RAM的地址,x和y表示在1602LCD的列和行参数*/voidlcdsetcursor(unsignedcharx,unsignedchary){ unsignedcharaddress;//声明无符号char类型变量address if(y==0)//如果第一行 address=0x00+x;//存储器地址以0x00开始 else//如果是第二行 address=0x40+x;//存储器地址以0x40开始 lcdwritecmd(address|0x80);//写存储器地址命令}设计实例一:直流电压的显示和测量
--添加lcd1602.c文件/*声明函数lcdshowstr,用于在液晶上指定的x和y位置,显示字符***/voidlcdshowstr(unsignedcharx,unsignedchary,unsignedchar*str){ lcdsetcursor(x,y);//设置显示RAM的地址 while((*str)!='\0')//如果不是字符串的结尾,则继续 { lcdwritedata(*str);//发写数据命令,在1602LCD上显示数据 str++;//指针加1,指向下一个地址 }} 设计实例一:直流电压的显示和测量
--添加main.c文件#include"lcd1602.h"//包含头文件lcd1602.h#include"stdio.h"//包含头文件stdio.h
unsignedcharch=0;//声明char类型变量chbitflag=1;//声明bit类型变量flagfloatvoltage=0;//声明float类型变量voltageunsignedchartstr[5];//声明char类型数组tstrunsignedinttmp=0;//声明int类型变量tmp设计实例一:直流电压的显示和测量
--添加main.c文件voidadc_int()interrupt5//声明adc中断服务程序,中断号为5{ unsignedchari=0;//声明无符号字符型变量i ADC_CONTR=ADC_CONTR&0xDF;//ADC_FLAG清零/********读取模拟信号对应的数字量(右对齐)*********/ tmp=(ADC_RES*256+ADC_RESL); voltage=(tmp*4.6)/4096;//将数字量转换成对应的模拟电压值 sprintf(tstr,"%1.4f",voltage);//将浮点数,转换成对应的电压值 flag=1;//将flag置1ADC_CONTR=ADC_CONTR|0x40;//启动下一次ADC转换}设计实例一:直流电压的显示和测量
--添加main.c文件voidmain()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职场久坐族缓解腰背痛的拉伸运动方案
- 高血压患者的晚餐饮食原则与食谱
- 寄递业三项制度
- 肾结石的尿pH调整
- 2026商丘市护士招聘考试题库及答案
- 文综两只老虎题目及答案
- 六年级下数学期中模拟测试卷《沪教版》
- 智能化跟单系统使用指南
- 2026年幼儿园认识小朋友
- 2026年幼儿园不乱跑安全
- 2025年青海新泉财金投资管理有限公司招聘备考题库及1套参考答案详解
- 三年级数学下册第一单元两位数乘两位数导学案教学计划教案教学设计(2025-2026学年)
- 2025内蒙古呼和浩特市北兴产业投资发展有限责任公司猎聘高级管理人员2人笔试考试参考试题及答案解析
- JJF(机械) 1067-2021 霍尔电流传感器校准规范
- 2025~2026学年云南省昆明市官渡区人教版(小升初)数学检测试卷【附解析】
- 鱼:知之烹之食之-联合国粮食及农业组织
- 地方志编纂工作方案及实施流程
- 贝壳房屋委托协议书
- 湖北省圆创高中名校联盟2026届高三第一次联合测评 语文试卷(含答案)
- 检察机关刑事申诉课件
- 留守儿童情感的缺失论文
评论
0/150
提交评论