第十二章 ADC原理和应用_第1页
第十二章 ADC原理和应用_第2页
第十二章 ADC原理和应用_第3页
第十二章 ADC原理和应用_第4页
第十二章 ADC原理和应用_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十二章ADC原理和应用何宾2023.09设计实例一:直流电压的显示和测量通过按下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()//定义main主函数{ P4M0=0;//寄存器P4M0设置为0 P4M1=0;//寄存器P4M1设置为0,P4端口准双向P6M0=0;//寄存器P6M0设置为0 P6M1=0;//寄存器P6M1设置为0,P6端口准双向 P1M0=0x00;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论