还剩32页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
南阳理工学院本科生毕业设计(论文)学院电子与电气工程学院专业电气工程及其自动化学生赵晓婷指导教师朱清慧完成日期2014年5月南阳理工学院本科生毕业设计(论文)单片机实时数据采集显示系统设计DesignofRealTimeDataAcquisitionandDisplaySystemUsingMCU总计29页表格2个插图18幅南阳理工学院本科毕业设计(论文)单片机实时数据采集显示系统设计DesignofRealTimeDataAcquisitionandDisplaySystemUsingMCU学院电子与电气工程学院专业电气工程及其自动化学生姓名赵晓婷学号1209614012指导教师(职称)朱清慧(教授)评阅教师完成日期南阳理工学院NanyangInstituteofTechnology单片机实时数据采集显示系统设计电气工程及其自动化专业赵晓婷[摘要]本文介绍了单片机控制的实时数据采集系统的硬件和软件设计与仿真过程硬件部分设计采用单片机AT89C
51、字符液晶显示器(HD44780控制器)、图形液晶显示器(KS0108控制器)以及A/D转换器AD1674等组成一个完整的单片机控制系统,并且使用8255A芯片对AT89C51的I/O口进行了扩展系统程序采用模块化的编程思路,通过C语言进行编程设计,主要程序为A/D转换模块和液晶显示模块最后,在Proteus平台上进行了软件与硬件交互仿真,实现了系统各项性能指标要求[关键字]实时数据采集;AT89C51;液晶显示;C语言DesignofRealTimeDataAcquisitionandDisplaySystemUsingMCUElectricalEngineeringandAutomationSpecialtyZHAOXiao-tingAbstract:Thispaper introducesthedesignand simulation ofhardwareand software ofrealtimedataacquisitionsystemcontrolledbysinglechipmicrocomputer.ThehardwaredesignusesasinglechipAT89C51characterliquidcrystaldisplayHD44780controllerLCDdisplayKS0108controllerandA/DconverterAD1674toformacompletemicrocomputercontrolsystemandusingthe8255AchiphasexpandedtheAT89C51I/Oport.SystemusesamodulardesignconceptthroughtheCprogramminglanguagethemainprogramfortheA/Dconversionmoduleandliquidcrystaldisplaymodule.FinallysystemconductsthesoftwareandhardwaresimulationontheProteusplatformrealizingthe requirements of performanceindicatorsaboutthesystem.Keywords Realtimedataacquisition;AT89C51;LCD;Clanguage目录TOC\o\h\z\u1引言12系统方案设计
22.1系统设计框图
22.2器件的选择23系统硬件组成及接口电路设计
33.1系统硬件组成
33.2系统接口电路设计
43.
2.1AD1674与AT89C51的接口电路
43.
2.28255A与AT89C51的接口电路
73.
2.3KS0108与8255A的接口电路
83.
2.4HD44780与8255A的接口电路104系统软件设计
114.1系统主程序
114.2AD1674转换程序
124.3LCD12864显示程序
124.
3.1温度曲线显示程序
124.
3.2汉字显示程序
134.4LCD1602字符显示程序145系统仿真
145.1软件介绍
145.2Proteus仿真15结束语17参考文献18附录19致谢291引言数据采集系统起始于20世纪中期,在过去的几十年里,随着信息领域各种技术的发展,在数据采集方面的技术也取得了长足的进步,采集数据的信息化是目前社会的发展主流方向各种领域都用到了数据采集,在科学实验、地震数据采集等领域已经得到应用我国的数字地震观测系统主要采用TDE-124C型TDE-224C型地震数据采集系统近年来,又成功研制了动态范围更大、线性度更高、兼容性更强、低功耗可靠性的TDE-324C型地震数据采集系统该数据采集对拾震计输出的电信号模拟放大后送至A/D数字化,A/D采用同时采样,采样数据经DSP数字滤波处理后,变成数字地震信号该数据采集系统具备24位A/D转化位数,采样频率有50Hz、100Hz、200Hz由美国PASCO公司生产的“科学工作室”是将数据采集应用于物理实验的崭新系统,它由三部分组成
(1)传感器利用先进的传感技术可实时采集物理实验中各物理量的数据;
(2)计算机接口将来自传感器的数据信号输入计算机,采样速率最高为25万次每秒;
(3)软件中文及英文的应用软件同时工业生产控制系统中离不开显示,而液晶显示控制器的应用越来越广泛此课题结合工业控制系统中常用的几种液晶显示控制器,用单片机对其进行控制以Proteus为设计和仿真平台,对字符液晶显示器和图形液晶显示器进行各种显示控制设计,目的在于扩展单片机控制系统知识,熟练掌握几种常用的液晶显示器的控制原理和使用方法,为日后综合控制系统中液晶显示器的使用打下坚实基础本设计分为A/D转换部分和LCD液晶显示部分两部分设计A/D转换部分是通过选择一路模拟通道输入,进入A/D转换器进行转换,转换后送入单片机进行处理,同时通过滑动变阻器进行数值的变换LCD液晶显示部分分曲线图显示部分和数值字符显示部分,通过其控制器与单片机的接口编程实现正确显示而本设计具体的技术要求如下双液晶屏显示,一个显示数值字符,一个实时绘图(二维),温度用一位小数和两位整数表示,并能显示负值;要求A/D转换器的精度在12位;单片机采用AT89C51,在Keil中用汇编或C语言进行编程;在Proteus对系统进行仿真并调试出结果要做到以上要求就需要对设计需要的每一个元件其作用十分清楚,进行正确的单片机接口电路的设计,再通过软件编程实现实时数据的显示2系统方案设计
2.1系统设计框图系统设计框图如图1所示图1系统设计框图系统是以单片机为核心器件,控制LCD进行图形和字符的显示采用A/D转换器将输入的模拟信号转换成数字信号后送入单片机进行处理,后由单片机送出,通过I/O扩展芯片将采集转换后的数据分别送入字符液晶显示器和图形液晶显示器进行显示当然两个液晶显示器的一些引脚还要受单片机的控制,这样不断改变采集数值,实现实时采集系统的设计
2.2器件的选择
(1)单片机的选择单片机是一种面向大规模的集成电路芯片,是微型计算机中的一个重要的分支此系统是由CPU、随即存取数据存储器、只读程序存储器、输入输出电路(I/O口),还有可能包括定时/计数器、串行通信口、显示驱动电路(LCD和LED驱动电路)、脉宽调制电路、模拟多路转换器及A/D转换器等电路集成到一个单块芯片上,构成了一个最小但完善的计算机系统单片机要使用特定的组译和编译软件编译程序,再用KeilC把程序下载到单片机内考虑到应用的灵活性,方便性,在此设计中选择AT89C51单片机
[1]
(2)A/D转换器的选择A/D转换器根据需要有8位、10位、12位、16位等,位数越多分辨率越高,价格也就越昂贵,因此就有了以下几种分类逐次逼近型它是一种速度快、精度较高、成本较低的直接式转换器,其转换时间在几微秒到几百微秒之间积分型此类型其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低并行比较型此类型采用多个比较器,仅作一次比较而实行转换,又称Flash快速型由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,一般情况下不建议使用根据以上几种分类的介绍以及所了解的实际应用情况,在此采用逐次逼近型的又考虑到设计所需要的精度要求在此选择了12位A/D转换器AD1674
(3)LCD显示器的选择由于设计技术的要求和应用广泛性的要求在此选择了采用LGM12641BS1R(KS0108控制器)进行汉字和图形的显示,采用LM016L(HD44780控制器)进行数值字符的显示,即为温度数值的显示这部分采用8255A芯片来扩展单片机的输入输出口,从而实现将同一数据进行字符和图形的显示,同时显示的汉字和图形所用的代码是通过点阵取模软件获得的3系统硬件组成及接口电路设计
3.1系统硬件组成本设计中采用单片机AT89C
51、12位A/D转换器AD
1674、字符液晶显示器(HD44780控制器)LM016L、图形液晶显示器(KS0108控制器)LGM12641BS1R、可编程扩展I/O口芯片8255A、74LS373地址锁存器,74LS138译码器等器件组成通过对各自的控制,实现系统的设计系统硬件接线原理图见附录所示AT89C51是硬件电路组成的核心器件,所有的器件都要通过它来工作,所以在此先简单介绍一下AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域主要性能参数4k字节可重擦写Flash闪速存储器;1000次擦写周期; 全静态操作0Hz~24MHz;128×8字节内部RAM;32个可编程I/O口:P0~P3,每一个I/O口都有8位;2个16位定时/计数器;5个中断源;可编程串行UART通道;低功耗空闲和掉电模式;除此之外它本身具有振荡器和时钟电路,掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位;空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作
[2]AT89C51引脚结构图如图2所示图2AT89C51引脚结构图如图所示它共有40个引脚,其中40和20引脚分别为VCC和GND在此隐藏了P0口是一组8位漏极开路型双向I/O口,也是地址/数据总线复用口;P
1、P2和P3全是内部带上拉电阻的8位双向I/O口;P3口除了作为一般的I/O口线外,还可以作控制端口;在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据;RST复位输入;ALE当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节;程序储存允许输出是外部程序存储器的读选通信号;外部访问允许使能端;XTAL1反相振荡放大器及内部时钟发生器的输入端;XTAL2反相振荡放大器的输出端
3.2系统接口电路设计
3.
2.1AD1674与AT89C51的接口电路AD1674是美国AD公司推出的一种12位带并行微机接口的逐次逼近型模/数转换芯片该芯片内部自带采样保持器(SHA)、10伏基准电压源、时钟源以及可和微处理器总线直接接口的暂存/三态输出缓冲器
[3]AD1674的基本特点和参数如下采样频率为100kHz;转换时间为10µs;具有±1/2LSB的积分非线性(INL)以及12位无漏码的差分非线性(DNL);满量程校准误差为
0.125%;内有+10V基准电源,也可使用外部基准源;四种单极或双极电压输入范围分别为±5V,±10V,0V~10V和0V~20V;数据可并行输出,采用8/12位可选微处理器总线接口;采用双电源供电模拟部分为±12V/±15V,数字部分为+5V;使用温度范围:AD1674A/B为-40℃~85℃(I级);采用28脚密封陶瓷DIP封装形式AD1674的引脚结构图如图3所示图3AD1674的引脚结构图12/数据输出位选择输入端当该端输入为低时,数据输出为双8位字节;当该端输入为高时,数据输出为单12位字节;CS片选信号输入端;CE操作使能端;输入为高时,芯片开始进行读/转换操作;STS转换状态输出端输出为高时表明转换正在进行;输出为低时表明转换结束VCC+12V/+15V模拟供电输入;VEE-12V/-15V模拟供电输入;AGND模拟接地端;R/读/转换状态输入端在完全控制模式下,输入为高时为读状态;输入为低时为转换状态;在独立工作模式下,在输入信号的下降沿时开始转换A0位寻址/短周期转换选择输入端在转换开始时,若A0为低,则进行12位数据转换;若A0为高,则进行周期更短的8位数据转换;当R/=1且12/=0时,若A0为低,则在高8位(DB4~DB11)作数据输出;若A0为高,则在DB0~DB3和DB8~DB11作数据输出,而DB4~DB7置零;DB11~DB8在12位输出格式下,输出数据的高4位;在8位输出格式下,A0为低时也可输出数据的高4位;10VIN10V范围输入端,包括0V~10V单极输入或±5V双极输入;20VIN20V范围输入端,包括0V~20V单极输入或±10V双极输入REFIN基准电压输入端,在10V基准电源上接50Ω电阻后连于此端;REFOUT+10V基准电压输出端;BIPOFF双极电压偏移量调整端,该端在双极输入时可通50Ω电阻REFOUT端相连AD1674控制逻辑真值表如表1所示
[3]表1AD1674控制逻辑真值表CECSR/12/A0执行操作0××××无操作×1×××无操作100×0启动12位数据转换100×1启动8位数据转换1011×允许12位并行输出10110允许高8位并行输出10101允许低4位并行输出在本次设计中采用的是双极性输入模式,其与单片机的接口电路如图4所示图4AD1674与AT89C51的接口电路图中显示采用的是双极性接法,所以加了正负电源,模拟输入采用量程为10V即为双极±5V双极输入电压偏移量调整端在双极输入时通过50Ω电阻与REFOUT端相连DB0~DB11为12位数据输出端,转换过后通过控制A0的状态来控制输出,此位由单片机的P
3.1来控制为了实现分两次送出正确的的数据到达单片机,P1口加了上拉电阻同时也为了防止单片机发热引起的可靠性降低,使得最终显示状态发生问题,从而加入排阻,也因此得出如上图的连接
[4]
3.
2.28255A与AT89C51的接口电路8255A是一种可编程的I/O接口芯片,可以与MCS-51系统单片机以及外设直接相连,广泛用作外部并行I/O扩展接口8255A引脚结构图如下图5所示图58255A引脚结构图
(1)8255A引脚功能D0-D7数据总线共8条用于传送CPU和8255A间的数据、命令和状态字;RESET复位线,高电平有效; 片选线,低电平有效;、为读命令线,为写命令线,皆为低电平有效;A
0、A1地址输入线用于选中PA、PB、PC口和控制寄存器中哪一个工作;PA7~PA0A组支持工作方式
0、
1、2,常作数据端口;PB7~PB0B组,支持工作方式
0、1常作数据端口;PC7~PC0C组,仅支持工作方式0,可作数据、状态和控制端口,分两个4位每位可独立操作控制最灵活,最难掌握;
(2)8255A控制字和状态字8255A通过控制字可设定为3种工作模式方式0,方式1,方式2工作方式0为基本的输入/输出工作方式;方式1为选通输入/输出工作方式,在这种工作方式下,选通信号与输入/输出数据一起传送,由选通信号对数据进行选通;方式2为带选通双向总线I/O方式,所以方式2又称为双向传输方式
[2]控制字有两个,一个是工作方式控制字,用于8255A的初始化;另一个是C口位控制字,用于C口的位操作这两个控制字使用同一口地址,由最高位D7区分,若D7为1,此控制字为8255A的工作方式控制字;若D7为0,此控制字为8255A的C口的位控制字方式控制字用于设定8255A三个端口工作于什么方式,是输入还是输出方式C口置位/复位控制字可以使C口各位单独置位或复位,以实现某些控制功能
(3)8255A与单片机AT89C51的接口电路连接如图6所示图68255A与单片机AT89C51的接口电路单片机AT89C51的P0口做输出口时,需要加上拉电阻,从而得图中连接;同时8255A作I/O口扩展时需要加锁存器和译码器,此决定8255A芯片选通,并决定其输出口PA、PB、PC哪路输出数据这样可将同一数据同时送于不同的液晶显示器进行显示,除此之外利用译码器可以选择哪路数据选通,当外接电路较复杂时,任务分配较清晰,控制方便
[2]
3.
2.3KS0108与8255A的接口电路KS0108是一种点阵液晶图形显示控制器,具有512字节的显示RAM和8位并行数据总线Proteus中内置KS0108控制器的128×64图形液晶显示器如图7所示图7KS0108控制器的液晶显示器结构图中,图形液晶显示器共有18个引脚,其中DB0~DB8为8位并行数据总线,-Vout为负电压输出,与调压输入端Vo及滑动变阻器一起连接,作为LED背光调压使用是低电平复位端E为使能端,R/W、DI分别为读/写选择端和命令/数据选择端,VCC
4.5V~
5.5V和GND为电源端CS1和CS2分别为左右半屏的片选信号,高电平有效
[5]KS0108控制器的指令汇总如以下表2所示指令名称控制状态指令代码DIR/WD7D6D5D4D3D2D1D0显示开关设置000011111D显示起始行设置0011L5L4L3L2L1L0页面地址设置0010111P2P1P0列地址设置0001C5C4C3C2C1C0读取状态字01BUSY0ON/OFFRESET0000写显示数据10数据读显示数据11数据表2KS0108控制器的指令表
(1)BUSY=1表示KS0108正在处理计算机发来的指令或数据;BUSY=0表示KS0108接口控制电路已处于“准备好”状态,等待计算机的访问
(2)ON/OFF表示当前显示状态,为1表示关显示状态,为0表示开显示状态
(3)RESET表示当前KS0108的工作状态,即反映RST端的电平状态当RST为低电平状态时,KS0108处于复位工作状态,RESET=1;当RST为高电平状态时,KS0108处于正常工作状态,RESET=0
(4)L5~L0为显示起始行的地址,取值在0~3FH1~64范围内
(5)P2~P0确定当前所要选择的页面地址,取值在0~7H代表1~8页
(6)C5~C0=0~3FH1~64代表某一页面上的某一单元地址,随后的一次读或写数据将在这个单元上进行KS0108控制器与8255A的接口电路如图8所示
[6]图8KS0108控制器与8255A的接口电路DB0~DB8与PB0~PB7相连接送数据,用8255A的PC2来选通此控制器,让其进行工作,用PC1和PC0分别控制读/写选择端和命令/数据选择端CS1和CS2控制屏的显示范围,这里有单片机的引脚进行控制
3.
2.4HD44780与8255A的接口电路HD44780是一种点阵液晶显示控制器,用来控制字符液晶显示器,目前应用比较广泛它有以下特点内置CGROM字符发生器,含192个固定字符,可供用户显示调用;内置CGRAM字符发生器,用户通过编程设计最多8个自定义字符,存放其中,供显示调用;内置DDRAM显示数据存储器,可以存放最多80个显示字符,把CGROM或CGRAM中的显示数据调入DDRAM,便可在显示屏上显示,DDRAM中的单元和显示屏的位置存在一一对应关系;自动复位上电功能;双向8位或4位总线接口;丰富的控制指令清显存、光标位置设置、数据输入时光标或数据移位设置、开或关显示屏等;HD44780模块有两个寄存器,一个用来输入指令,另一个用来读写数据指令用来告诉模块怎样存放或哪里存放数据
[6]Proteus中内置HD44780控制器的字符液晶显示器如下图9所示图9HD44780控制器的字符液晶显示器RS:命令或数据选择端,当RS=0时,总线上传送的是命令;当RS=1时,总线上传送的是数据RW读/写选择端,当RW=0时,为写操作;当RW=1时,为读操作D0~D7总线数据,可以传送命令,也可以传送数据,由RS来控制HD44780控制器与8255A的接口电路如图10所示图10HD44780控制器与8255A的接口电路由于8255A在此设计中只用到了A口和B口用作数据端口,因而C口就作了控制端口,从而有图可知HD44780控制器的使能端E和命令或数据选择端RS受8255A的PC5和PC7控制D0~D7与PA0~PA7相连接,将数据送入显示器进行显示4系统软件设计
4.1系统主程序软件设计时,需要先搞清楚总体的设计方案,从而用流程图来展示主程序当信号输入时,主程序启动,根据内部设定的条件逐步运行,达到设计目的主程序执行的流程图如下图11所示开始初始化显示设定值启动A/D转换数值处理显示实际温度显示温度曲线图图11主程序执行流程图由上的流程图可知,程序先从主函数开始即main函数在主函数中进行变量的定义和赋值,以及子函数的调用指令,即所谓的初始化之后进行定义数组,将所要显示的设定值赋予此数组,这样一上电就可显示设定值,也就定义了显示范围此后调用A/D转换子函数,进行模/数转换,由于单片机只能处理8位数据,所以要进行两次数据的送入单片机,即所谓的数值处理12位转换值通过8255A进行I/O扩展,后同时送入液晶显示器进行温度曲线图和温度数值的实时显示
[7]
4.2AD1674转换程序AD1674是12位AD转换器,AT89C51只能一次接收8位数据,所以要分两次转换首先要对其进行初始化,使得CE=0关闭数据采集,后令CE=1CS=0,RC=1,12/=1,A0=0,允许高八位数据并行输出,读取转换结果的高8位,后送入P1口,使CE=0,芯片使能关闭再令CE=1CS=0RC=112/=0A0=1,允许低四位数据并行输出,再读取转换结果的低4位,关闭芯片,再对读取的数据进行整合成12位数据之后对数值进行判断,进行正确的显示由此得出流程图如图12所示#0;#0;#0;开始初始化A0=1高8位数据低4位数据显示正值Biaozhiwei=0?整合数值显示负值否是否是图12AD1674转换流程图
4.3LCD12864显示程序
4.
3.1温度曲线显示程序温度曲线显示程序流程图如图13所示查忙LCD12864写指令LCD12864写数据LCD12864读指令LCD12864读数据画坐标显示温度曲线图图13温度曲线显示程序流程图执行此程序前先要检查LCD是否在忙,若忙不执行,不忙执行写指令,准备数据的写入,有了写命令后,进行数据的写入数据写入之后,此控制器要读取其值以便进行显示,所以执行读指令和读数据数据读入正确后,执行坐标函数,进行描点,之后可得显示图形LCD12864的读/写依靠控制端CS1和CS2进行控制,而CS1和CS2是由单片机的P
3.4和P
3.5进行控制,此端口控制屏的显示范围其最主要的是坐标函数,需要规定首行和首列,以及页码规定好后进行描点,而点的代码通过点阵取模软件绘图获得
[8]
4.
3.2汉字显示程序汉字显示程序流程图如图14所示初始化LCD12864写指令页列值设置LCD12864写数据曲线图汉字显示画坐标显示温度曲线图图14汉字显示函数流程图此部分程序主要是执行汉字显示函数voidshow(),在这显示之前,先需要对要显示的汉字进行初始化,之后执行LCD12864写指令,后再设定汉字的页码,因而在此设定显示首页地址为0xb8,首列地址为0x40,列地址会自动加1执行后执行曲线图点阵代码,即所获得需要的汉字,后执行显示函数,这样得以实现曲线图的显示功能,从而完成此部分设计
[8]
4.4LCD1602字符显示程序此部分程序包括对1602的初始化函数、写命令函数、写数据函数和LCD1602的实时显示函数几部分组成,所以可得流程图如图15所示#0;#0;#0;开始1602初始化图15LCD1602字符显示流程图由流程图可知要想显示数值,首先要定义变量,之后进入主函数main接下来要规定哪一行进行显示,在这里选择第一行,占用前16个字节进行温度值的显示,这就是1602的初始化定义好预设值后要进行显示这就需要取值,每一位显示什么,这需要对采集转换好的数值进行处理,将每一位取出来,综合后实时显示完成之后要先执行1602写命令和写数据函数,当打开屏幕时,通过判断温度标志位为1还是0,进行正确数值的显示,当标志位为0时显示负温度值,为1时显示正温度值,这样完成显示5系统仿真
5.1软件介绍进行系统仿真之前首先要完成硬件和软件两部分,在此之前先要了解一些软件
(1)C51集成开发软件KeilC此软件是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,因此使用起来十分方便
[9]
(2)Proteus软件Proteus是由Labcenter Electronics开发的功能强大的单片机仿真软件,与其他的仿真软件相比较,在下面的优点能仿真模拟电路、数字电路、数模混合电路; 能绘制原理图、PCB图; 几乎包括实际中所有使用的仪器其最大的亮点在于能够对单片机进行实物级的仿真从程序的编写,编译到调试,目标版的仿真一应俱全支持汇编语言和C语言的编程还可配合KeilC实现程序的联合调试,将Proteus中绘制的原理图作为实际中的目标板,而用KeilC集成环境实现对目标板的控制,与实际中通过硬件仿真器对目标板的调试几乎完全相同,并且支持多显示器的调试
[5]
(3)点阵取模软件此软件是为了进行液晶显示而设计的,只要输入所需要的图片或汉字,点击取模方式,就可得到所需要的点阵代码,之后写入LCD模块中指定的位置执行显示函数就可以实现所需要的功能例如将其显示汉字“赵”字,这样需要先在输入口输入此字,后选择输出格式,从而获得所需代码,获取图如图16所示
[8]图16取字代码获取图
5.2Proteus仿真打开ProteusISIS,进入ProteusISIS编辑环境,将所需要的元器件调用出来后进行正确连接,连接好后进行保存在点阵取模软件中绘制所需要的图形和汉字,之后选择取模方式,在这里选择C51方式获得点阵代码在KeilμVision4编程软件中进行C语言程序的编写,然后在Keil中生成的“*.hex”程序文件步骤是选择工程管理窗口的Target1,再选择Project-OptionforTarget‘Target1’,打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率选择Output选项卡,然后选中CreateHEXFile,其它选项卡内容一般可取默认值工程设置后按F7键(或点击编译工具栏上相应图标)进行编译生成“*.hex”十六进制的目标文件HEX文件生成窗口如图17所示
[10]
[11]图17HEX文件生成窗口将在KeilC中生成的.hex文件加载入ProteusISIS中的AT89C51中,点击开始进行仿真,手动调节滑动变阻器可改变数值,实现在一定范围内的数值显示仿真结束后点击其左下角的stop键结束仿真,系统仿真结果图如图18所示
[12]
[13]图18系统结果仿真图如图所示显示的温度值为负值,数值为
12.6度,即小数点后一位数实时温度曲线图就正如LCD1所示,调节图中的滑动变阻器可以更改数值,这样不停地改变实现实时数据的更新与显示,从而完成温度数值范围在-30~+30之间的显示
[13]结束语本论文主要介绍了如何将采集到的温度值进行实时显示,这里主要包括数值和曲线显示在此设计采用的只是一种方案,还有多种方案可以采用,比如在设计的过程中采用的12位并行A/D转换器可以换成12位串行的,或者直接采用DS18B20温度传感器进行设计等等在此设计的过程中元器件的选取要合适且控制方便,因而选择了最基础的且最常用的单片机型号,这样在设计时就方便了很多设计存在的缺陷
(1)在设计显示模块时选用了LCD显示,没能很好地解决功耗问题在技术方面还显得很落后;
(2)显示数值不够精确,在这方面对数值的处理有待提高;
(3)LCD显示部分只做了最基础的显示,还可以进行较丰富的显示,在这方面可以有更深的思考和研究本设计的目的在于对液晶显示模块的应用,因此在设计的过程中就需要更加深刻的认识此种设计思路,分模块进行研究,从而实现更广范围的应用参考文献
[1]周国运.单片机原理及应用(C语言版)[M].北京:中国水利水电出版社
2009.
[2]胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社
2005.
11.
[3]杨振江.A/D、D/A转换器接口技术[M].西安:西安电子科技大学出版社1996:55-
62.
[4]刘孝赵吴振磊柳承钢.基于Proteus软件的单片机仿真实例[J].科技广场20135:140-
143.
[5]朱清慧.Proteus显示控制系统设计与实例[M].北京:清华大学出版社2011:284-
308.
[6]胡力刚陈宁.单片机在液晶显示器系统中的应用[J].信息科学技术200516:12-
15.
[7]王晓闽刘浩.多模块程序设计的关键技术—模块接口[J].山东建筑工程学院学报20045:140-
143.
[8]黄海宏王海欣.液晶显示汉字的字模提取新方法[J].液晶与显示2005319:88-
91.
[9]刘克成张凌晓邵艳玲.C语言程序设计[M].北京:中国铁道出版社
2006.
3.
[10]胡伟季晓衡.单片机C程序设计及应用实例[M].北京:人民邮电出版社2003:35-
50.
[11]GuiyunTian.FoundationandApplicationofMicrocontroller[M].HigherEducationPressHEP2004:32-
40.
[12]WilsonRPLamMS.Efficientcontext-sensitivepointeranalysisforCLanguageDesignandImplementation[J].LaJollaCA1995415:51-
55.
[13]唐晓慧韦萍萍.基于Proteus软件的单片机软硬件仿真实验[J].毕节学院学报20123019:97-
99.附录附录一系统硬件接线原理图系统硬件接线原理图附录二系统程序#includeintrins.h#includeabsacc.h//通过此头文件定义的宏来访问绝对地址#defineucharunsignedchar#defineuintunsignedint#defineaddo
10.0/
4095.0//转换进率,12位精度2^12-1=4095,满量程为10V#defineAXBYTE[0x3fFC]//8255AA口地址P
2.70011111111111100P
0.0//高三位001用于选通Y1,低两位用于选A1A0#defineBXBYTE[0x3fFD]//8255AB口P
2.70011111111111101P
0.0#defineCXBYTE[0x3fFE]//8255AC口P
2.70011111111111110P
0.0#defineCOMXBYTE[0x3fFF]//8255A控制口地址P
2.70011111111111111P
0.0#defineline0xC0//首行地址为0XC0#definepage0xb8//首页地址为0XB8#definecol0x40//首列地址为0X40/*管脚定义*/sbitSTS=P3^0;sbitA0=P3^1;sbitCE=P3^2;sbitRC=P3^3;sbitCS1=P3^4;sbitCS2=P3^5;sbitWR1=P3^6;sbitRD1=P3^7;ucharbiaozhiwei;//用于判断采集模拟信号的正负unsignedlonginttemp;ucharcodenumber[]={0123456789};uchartab1[]={sheshidu=+
29.9};//
1011.1314第14位是空格uchartab2[]={sheshidu=-
29.9};//
1011.1314第14位是空格ucharcodetab3[]={0x100x060x090x080x080x090x060x00};ucharcodesz[]={0x000x800x400x200x100x080x040x020x01};//0--8ucharcodequ[]={/*--文字:曲--*//*--宋体12;此字体下对应的点阵为宽x高=16x16--*/0x000xF00x100x100x100xFF0x100x100x100xFF0x100x100x100xF00x000x000x000xFF0x420x420x420x7F0x420x420x420x7F0x420x420x420xFF0x000x00};ucharcodexian[]={/*--文字:线--*//*--宋体12;此字体下对应的点阵为宽x高=16x16--*/0x200x300xAC0x630x200x180x800x900x900xFF0x900x490x4A0x480x400x000x220x670x220x120x120x120x400x400x200x130x0C0x140x220x410xF80x00};ucharcodetu[]={/*--文字:图--*//*--宋体12;此字体下对应的点阵为宽x高=16x16--*/0x000xFE0x020x420x220x320x5E0x920x520x320x120x020x020xFE0x000x000x000xFF0x420x420x420x510x550x640x690x410x420x420x420xFF0x000x00};ucharcodezuobiao[]={/*--调入了一幅图像C:\Users\Administrator\Desktop\画图坐标.bmp--*//*--宽度x高度=128x64--*/0x000x000x000x2A0x2A0x3E0x000x3E0x220x3E0x000xFF0x040x040x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x740x540x5C0x000x7C0x440x7C0x000xFF0x100x100x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000xF80x000x000xF80x880xF80x000xFF0x400x400x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000xE00x200xE00x000xFF0x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000xC00x000x000x000x000x000x000x000x000x000x000x000x000x000x030x020x030x000xFF0x010x010x010x010x010x010x010x010x010x7D0x010x010x010x010x010x010x010x010x750x550x5D0x010x010x010x010x010x010x010x550x550x7D0x010x010x010x010x010x010x010x1D0x110x7D0x010x010x010x010x010x010x010x5D0x550x750x010x010x010x010x010x010x010x7D0x550x750x010x010x010x010x010x010x010x050x050x7D0x010x010x010x010x010x010x010x7D0x550x7D0x010x010x010x010x010x010x010x5D0x550x7D0x010x010x010x010x010x010x7D0x010x7D0x450x7D0x010x010x010x010x010x010x7D0x010x010x7D0x010x010x010x010x040x040x000x000x000x1F0x000x1F0x110x1F0x000xFF0x040x040x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x100x100x000x740x540x5C0x000x7C0x440x7C0x000xFF0x100x100x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x200x200x000xA80xA80xF80x000xF80x880xF80x000xFF0x400x400x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x00};voiddelayusuintk;//延时voidwrite_LCD_commanducharcommand;//命令写入LCDvoidwrite_LCD_dataucharLCDdata;//数据写入LCDvoidinit_1602void;//初始化LCDvoidclear_LCD;//LCD清屏voidgotoxyucharxuchary;//光标在x行y列voiddelayuintk;//延时voidwcodeucharcomucharcs1ucharcs2;//写指令voidwdatauchardaucharcs1ucharcs2;//写数据voidset_startlineuchari;//起始行voidset_adrucharxuchary;//页值设置,起始列值函数voidclearvoid;///clear清屏voidiniti_LCDvoid;//初始化LCD/*微秒延时函数*/voiddelay_usucharn{uchari;whilen--{fori=0;i10;i++;}}/*毫秒延时函数*/voiddelay_msuintn{uchari;whilen--{fori=0;i100;i++;}}/*读取AD1674转换结果*/uintAD1674_Readvoid{uchartemp1temp2;CE=0;//初始化关闭数据采集A0=0;RC=0;CE=1;//CE=1CS=0RC=0A0=0启动12位温度转换_nop_;whileSTS==1;//等待数据采集结束CE=0;//芯片使能关闭RC=1;A0=0;CE=1;//CE=1CS=0RC=112/8=1A0=0允许高八位数据并行输出_nop_;temp1=P1;//读取转换结果的高八位CE=0;//芯片使能关闭RC=1;A0=1;CE=1;//CE=1CS=0RC=112/8=0A0=1允许低四位数据并行输出_nop_;temp2=P1;//读取转换结果的低四位CE=0;temp=temp18|temp2;//高位和低位合成实际温度temp=temp4;//返回转换结果,右移四位是因为temp2为P1口的高四位iftemp0x000temp0x800//当电压为0时,对应的12位二进制码为0x800;-5为0x000;+5为0xfff{temp=0x800-temp;biaozhiwei=0;}iftemp==0x000{temp=temp+2047;biaozhiwei=0;}iftemp==0x800{temp=temp-0x800;biaozhiwei=1;}iftemp0x800{temp=temp-0x800;biaozhiwei=1;;}temp=temp*addo*1000;returntemp;}voidcount_ad//LCD1602的实时显示函数{uchari;uintad;ad=temp;//转换为可显示的实际温度值gotoxy10;ifbiaozhiwei==1//正的温度标志{ad=ad/10;tab1
[13]=number[ad%10];ad=ad/10;tab1
[11]=number[ad%10];ad=ad/10;tab1
[10]=number[ad%10];fori=0;i16;i++{write_LCD_datatab1[i];}}ifbiaozhiwei==0//负的温度标志{ad=ad/10;tab2
[13]=number[ad%10];ad=ad/10;tab2
[11]=number[ad%10];ad=ad/10;tab2
[10]=number[ad%10];fori=0;i16;i++{write_LCD_datatab2[i];}}}voidshowucharpucharcolumnucharcode*hzk//显示汉字函数{ucharij;fori=0;i2;i++//写一个汉字需要2页{wcodepage+p+i;//首页地址为0xb8wcodecol+column;//首列地址为0X40,列地址会自动加1forj=0;j16;j++wdatahzk[16*i+j]10;//j=0表示第0行的数据,j=1同上}}voidhua_zuobiaovoid//画坐标{ucharj;uinti;forj=0;j8;j++//页码{set_adrj0;fori=1;i=64;i++{wdatazuobiao[i+j*128]01;wdatazuobiao[63+i+j*128]10;}}}voiddelay1msuintk//延时间{k=k*125;while--k;}voidbusy//状态检查,LCD是否忙{B=0X00;C=0xFE;whileB0X80;//结果为真则一直执行空操作,也就是说P00X80为0则结束循环C=0xfa;}////////writecode写指令///////voidwcodeucharcomucharcs1ucharcs2//LCD12864写指令{busy;CS1=cs1;CS2=cs2;C=0xF8;B=com;delay10;C=0xFc;delay10;C=0xF8;}/////////writedata写数据///////////////voidwdatauchardaucharcs1ucharcs2//LCD12864写数据{busy;CS1=cs1;CS2=cs2;C=0xF9;B=da;delay10;C=0xFd;delay10;C=0xF9;}voidwrite_LCD_commanducharcommand//LCD1602写命令{C=0x1f;A=command;delayus20;//延时40*20usC=0x3f;_nop_;_nop_;_nop_;_nop_;C=0x1f;}voidwrite_LCD_dataucharLCDdata//LCD1602写数据{C=0x9f;A=LCDdata;delayus1;C=0xbf;_nop_;_nop_;_nop_;_nop_;_nop_;C=0x9f;}voidinit_1602void//初始化LCD1602/////{write_LCD_command0x38;//0x38单行显示//8位传输write_LCD_command0x0c;//0x0C屏幕开启//光标不出现//不闪烁}voidclear_LCD//LCD1602清屏{write_LCD_command0x01;//0x01LCD清屏write_LCD_command0x02;//0x02光标回到左上角}voidgotoxyucharxuchary//光标在x行y列{ifx==1write_LCD_command128+y;//128=0b10000000elsewrite_LCD_command192+y;//192=0b11000000}voiddelayusuintk//延时{k=10*k;//40uswhilek--;}///////////////////////////////////////12864程序在此处开始voidiniti_LCDvoid//初始化LCD12864{wcode0x3f11;//显示开//0x3e关set_startline0;//起始行第0行clear;//清屏}voiddelayuintk//延时{whilek--;}////////////setstart设置起始行/////////////voidset_startlineuchari//起始行11A5A4A3A2A1A0共有64行{//液晶显示器的最底层为第0行i=0xc0+i;//此算法为把最顶层做为第一层wcodei11;}voidset_adrucharxuchary//页值设置,起始列值函数{x=x+0xb8;//行//页地址设置10111A2A1A0DDRAM的8行为一页,A0~A2为页码,LCD为64行8页y=y+0x40;//列地址设置01A5A4A3A2A1A0两半屏分别有64列,A0~A5送入列地址计数器,//作为列(Y)地址指针每读写一次其自动加一,指向下一列DDRAM单元wcodex11;wcodey11;}voidclearvoid///clear清屏LCD12864{uchariloop;fori=0;i8;i++///循环页写0{set_adri0;//页码//行forloop=0;loop64;loop++wdata0x0011;//列//左右屏幕同时写//}}voidmain//主函数{ucharsheshiduiw;ucharxydp;uintj;COM=0x80;init_1602;//1602gotoxy10;fori=0;i15;i++write_LCD_datatab1[i];//显示1602的第一行字符write_LCD_command0x40;//自定义第一个字符显示摄氏温度℃forw=0;w8;w++{write_LCD_datatab3[w];}write_LCD_command0x8f;write_LCD_data0x00;//自定义第一个字符结束,显示摄氏温度℃initi_LCD;//12864LCDhua_zuobiao;//画坐标图y=12;//从12列开始while1{AD1674_Read;//1674读数据子函数count_ad;//lcd1602的更新显示delay1ms1;//延时j++;ifj30{show01*16qu;//显示曲show02*16xian;//显示线show03*16tu;//显示图j=0;ifbiaozhiwei==1//显示的是正温度曲线图{sheshidu=temp/100;//取温度的前2位x=sheshidu-1/8;x=3-x;//确定的是曲线所在的
0、
1、
2、3页dp=sheshidu-1%8+1;//曲线的点}ifbiaozhiwei==0//显示的是负温度曲线图{sheshidu=temp/100;//取温度的前2位x=sheshidu-1/8;x=4+x;//确定的是曲线所在的
4、
5、
6、7页dp=7-sheshidu-1%8;//曲线的点}ify64{set_adrxy;wdatasz[dp]01;}else{set_adrxy-64;wdatasz[dp]10;}y++;ify==128{y=12;clear;hua_zuobiao;}}}}致谢经过了一段时间的努力,我终于完成了我在大学的最后一门课程就是毕业设计首先感谢朱清慧老师,本设计是在导师的细心指导下完成的,对我整个毕业设计理论知识和论文的撰写倾注了大量的心血在完成论文的这段日子里,朱老师从科学的研究方法、学术思想到具体的学术问题,给了我极大的启迪和帮助同时我也非常感谢帮助我的同学们,没有你们的精心帮助,我也不会顺利的完成我的设计我们知道在花时间完成一件事情的时候,过程中我们会遇到很多难处,但是当我们经过不懈努力克服了它们时,迎接我们的就是成功在此过程中我学到了很多东西,这是一笔财富,会使我受益终身的所以在这个过程中我遇到的人或遭遇的事,我都不会忘记的,因为他们见证了我的成长最后,我也感谢电子与电气工程学院给我提供实验平台,帮助我完成设计I/O扩展单片机A/D转换器LCD显示字符采集信号LCD显示图形。