用LCD显示被测量波形的设计

合集下载

用LCD点阵JM12864C显示函数动态波形

用LCD点阵JM12864C显示函数动态波形

LCALL M()V LCALL M()V
SEND—BYTE A。#’13 SEND—BYTE A,#7r
;字节发送
LCALL LCALL RET
SEND—BYTE
DELAYl
;调用延时
同样,cI。R清屏命令子程序也是发送命令码CLR的ASCII码,但
CLR命令没有参数,无需发送参数。子程序如下:
()RDER—CLR:JNB P3.0,¥ ;检测模块是否为闲态
5.期刊论文 刘传宝.申立中.雷基林.徐淑亮.LIU Chuanbao.SHEN Lizhong.LEI Jilin.XU Shuliang 单片机
C167CS的 I/O口模拟串口与PC机通信进行数据采集实现方法的研究 -现代电子技术2007,30(3)
在做柴油机电控系统开发的过程中,为解决单片机C167CS与PC机通信问题,利用C167CS的I/O 口模拟串口与PC机进行通信,通过这种方法可以实现多个 串口,而且串口通讯高效、可靠、标准统一.系统包括目标机采集子程序、目标机数据发送子程序、上位机接收子程序等,并给出了硬件原理图.
长江大学学报(自科版) 2004年12月第1卷第4期 Journal of Yangtze University(Natural Science Edition)Dee.2004 V01.1 No.4
·67·
用LCD点阵JMl2864C显示函数动态波形
付润江 (长江大学电子信息学院,湖北荆州434023)
CLR
T。
;Tl必须由软件清0
RET
需要说明的是,上面两段子程序中的延时子程序DELAYl是必要的,可以通过实验确定,延时大
约不小于10ms,否则LCD无法正常显示。
3结 论

lcd屏 矢量波形显示算法

lcd屏 矢量波形显示算法

lcd屏矢量波形显示算法
LCD屏的矢量波形显示算法通常是指用来在LCD屏上显示矢量图形的算法。

矢量图形是由数学公式描述的图形,与位图图形不同,它不是用像素阵列来描述的,而是使用直线、曲线等基本线段和形状来描述的。

LCD屏矢量波形显示算法的主要思路是将矢量图形的数学描述转化为像素点的显示。

常用的算法包括:1. Bresenham算法:这是一种经典的画线算法,可以绘制直线和圆弧。

它通过递增的方式来确定像素点是否应该被绘制,以及下一个像素点的位置。

2. Xiaolin Wu's算法:这是一种优化的画线算法,能够绘制抗锯齿的直线和圆弧。

它利用了像素点的alpha通道来模拟出平滑的边缘效果,也被广泛应用于LCD屏的矢量图形显示中。

3. 多边形填充算法:当需要填充一个矢量多边形时,常用的算法有扫描线填充算法和边界填充算法。

扫描线填充算法从上到下扫描每一行,使用边界点判断是否需要填充像素点;边界填充算法通过追踪边界线来填充多边形。

4. 圆弧绘制算法:绘制圆弧可以使用Bresenham算法的变体来实现,也可以利用三角函数来确定圆弧上的点的位置。

这些算法都是用来将矢量图形转化为像素点的显示,从而在LCD屏上实现矢量波形的显示。

具体选择哪种算法,取决于要绘制的矢量图形的复杂度和精度要求。

STM32 波形采集、存储与回放

STM32 波形采集、存储与回放

波形采集、存储与回放系统设计摘要本设计是基于数字示波器的原理,以STM32-cortex-m3作为控制芯片,把波形采集分为A、B两个通道,对A通道的输入信号进行衰减,对B通道的输入信号进行放大,然后采用内部集成的高速AD对信号进行实时采样,方式为上升沿内触发,可以实现波形的单次和多次触发存储和回放显示,以及频率、周期、峰-峰值的测量和显示,并具有掉电存储功能。

由信号采集、数据处理、波形显示,控制面板等功能模块组成,整个系统分成A/D转换部分、D/A转换部分、波形存储部分、键盘输入控制四大部分,系统操作简便,输出波形可以在示波器输出显示,此存储示波器即具有一般示波器实时采样实时显示的功能,又可以对某段波形进行即时存储和连续回放显示,且界面友好,达到了较好的性能指标。

具体设计原理以及过程在下面章节中详细说明。

关键字:STM32、波形采集、波形存储、波形回放AbstractThe design is based on the principle of digital oscilloscope, withSTM32-cortex-m3 as the control chip, the waveform acquisition is divided into A, B two channel, the A channel input signal attenuation on B channel, the input signal is amplified, then using the internal integration of high-speed AD on real time data sampling, as rising edge trigger, can achieve waveform of single and multiple triggers the storage and playback and display, frequency, cycle, peak to peak value measurement and display, and power failure memory function. The signal acquisition, data processing, waveform display, the control panel and other functional modules, the system is divided into A/D transformation, D/A converting part, waveform storage, keyboard input control system four parts, simple operation, the output waveform can be output in the oscilloscope display, this storage oscilloscope namely has the common oscilloscope real-time sampling real time display function, can be a real-time storage and continuous playback waveform display, and friendly interface, has achieved good performance. The design principle and process are described in detail in the following sections.Keywords: STM32, waveform acquisition, storage, waveform waveform playback模拟路灯控制系统设计目录一、总体方案思路及其设计 (4)1.1、采样方式 (4)1.2、双踪示波器显示方式 (5)1.3、控制部分方案的设计 (5)1.4、显示方式 (5)二、系统理论分析与功能模块设计 (5)2.1 、最小系统及A/D,D/A电路 (5)2. 2、单元电路 (6)三、软件设计....................................................................................................错误!未定义书签。

基于ARM的应用开发—LCD显示波形

基于ARM的应用开发—LCD显示波形

摘要随着现代计算机技术的飞速发展和互联网技术的广泛应用,从PC时代过渡到了以个人数字处理、手持个人电脑和信息家电为代表的3C(计算机、通信、消费电子)一体的后PC时代。

后PC时代里,嵌入式系统扮演了越来越重要的角色,被广泛应用于信息电器、移动设备、网络设备和工控仿真等领域。

本文讨论了基于ARM微处理器和嵌入式系统的应用开发,主要以波形采集、LCD 显示和嵌入式系统μC/OS-II为主要研究对象。

描述了三星S3C44B0X微处理器及μC/OS-II实时操作系统的特点,搭建了一个以S3C44B0X处理器为核心的通用嵌入式系统平台,并在此平台基础上实现了LCD显示波形、GUI绘图、多任务系统等典型应用。

对ARM微处理器和嵌入式系统的进一步教学和研究开发有一定的指导价值。

关键词:ARM微处理器嵌入式系统μC/OS-II GUI绘图多任务系统Based on ARM Applications Development—LCDShow WaveformAbstractWith the development of the modern computer technology and the widely application of the Internet technology,We transited from the PC time to the latter PC time which is taking individual digital processing,grasping the personal computing and the information electrical appliances as representative's 3C (computer,correspondence,expense electron) a body .In the latter PC time,the inserted type system which acts the more and more important role,is widely applied in the information electric appliance,the mobile equipment,the network equipment and the labor controls domain and so on.This article discussed the application development based on the inserted type system and the ARM microprocessor,mainly by profile gathering,LCD demonstrated and the inserted type system μC/OS-II is the main research object. Described the Sumsang S3C44B0X microprocessor and The characteristic of the real-time operating system μC/OS-II. build a general inserted system platform take the S3C44B0X processor as the core,and has realized LCD model application,GUI cartography,multi- duties system and so on in this platform foundation.The further teaching and the research development of the inserted type system and the ARM microprocessor has the certain instruction value.Keywords:ARM microprocessor The inserted type system μC/OS-II GUI cartography Multi- duties system目录摘要 (I)Abstract ...................................................................................................................................... I I 目录 .. (III)1 前言.................................................................................................................................... - 1 -1.1 研究的目的、意义................................................................................................. - 1 -1.2 国内外研究概况..................................................................................................... - 1 -1.3 研究的主要内容..................................................................................................... - 3 -2 总体方案设计.................................................................................................................... - 4 -2.1 嵌入式系统的定义及特点..................................................................................... - 4 -2.2 基于ARM核的微处理器S3C44B0X简介.......................................................... - 4 -2.3 硬件系统的设计..................................................................................................... - 5 -3 硬件单元电路的设计实现................................................................................................ - 6 -3.1 CPU核心板的硬件资源......................................................................................... - 6 -3.1.1 电源模块...................................................................................................... - 6 -3.1.2 JTAG单元 .................................................................................................... - 6 -3.2 存储器单元............................................................................................................. - 7 -3.2.1 线形flash存储器单元................................................................................ - 7 -3.2.2 NAND_FLASH海量存储器单元................................................................ - 7 -3.2.3 同步动态存储器单元。

基于LCD12864显示器的数字示波器设计

基于LCD12864显示器的数字示波器设计

本文针对LCD12864 特性,完成了数字示波器显示必须的绘图驱动程序设计,这个教程定位给初学者使用,我立足从简单到复杂一步一步介绍设计过程,甚至是调试的过程,还包括一些经验总结,特别是提供了完整的keil 工程附件。

希望读者立足示波器项目,学到更多软硬件设计经验技巧。

一、简易数字示波器原理数字示波器基本原理可以简单理解为:数据采集+ 图形显示,该过程循环进行,如图1 所示。

图1 简易数字示波器流程图LCD 图形显示需要根据LCD 特性设计,不同LCD驱动程序不同,本篇将结合不带字库的LCD12864 设计显示程序。

二、图形液晶LCD12864绘图驱动设计基础关于LCD 的硬件接口电路,在其他教程中有详细介绍,涉及单片机总线知识和CPLD 内部电路,需要认真学习,这里借助现成的驱动函数,重点讲解LCD绘图程序设计。

LCD12864 的电路接口在头文件中定义:#define LCD_LCW XBY te[0xf4ea]// 左屏命令写入#define LCD_LDW XBYTE[0xf5ea]// 左屏数据写入#define LCD_LCR XBYTE[0xf6ea]// 左屏命令读出#define LCD_LDR XBYTE[0xf7ea]// 左屏数据读出#define LCD_RCW XBYTE[0xf8ea]// 右屏命令写入#define LCD_RDW XBYTE[0xf9ea]// 右屏数据写入#define LCD_RCR XBYTE[0xfaea]// 右屏命令读出#define LCD_RDR XBYTE[0xfbea]// 右屏数据读出后面所有对LCD 的编程操作都是基于以上接口定义进行的各种读写操作。

首先来看LCD12864 的点阵结构图,如图2 所示。

图2 LCD点阵分布结构图此LCD 屏由水平128 列,垂直64 行组成。

水平128 列分左右各64 列两个半屏构成。

垂直64 行又分8 页,每页8 行(1 列8 点刚好1 字节)。

心电图机波形显示

心电图机波形显示

任务书设计制作一个简易心电图仪可测人体心电信号并在液晶屏上显示出来。

技术指标如下:1.电压放大倍数1000倍,误差5%。

-3dB低频截止频率0.05Hz-3dB高频截止100HZ,误差10HZ差模输入电阻大于5MQ1、绪论心血管疾病是一种较为普遍的疾病,随着生活节奏的加快,生活水平和健康意识的提高,人们需要随时对心脏进行健康监护并且能在比较危急的情况下进行及时的诊治;同时,如果长期住在医院里面进行监护和治疗,那样花费高而且也给医院带来了不小的门诊压力。

心电图机是诊断心脏病的重要仪器之一,目前市场上有多种心电图机,但是这些心电图机都不太适合在家庭中使用。

为此,一种能够在家庭中应用、操作简单、价格便宜的低功耗家用电图机的设计方案应运而生。

众所周知,随着科学技术的推进、人类社会的发展进步,全球医疗仪器的发展也是日新月异。

21世纪的医疗行业主要呈现以下两个特点:第一、未来的医疗世界,主要的代表产品是纳米机械组件、随身佩戴式化学感测器、居家保健应用医疗器材等。

第二、信息与医疗技术紧密地结合在一起。

移动式心电图机的设计正是顺应这两个大趋势。

因此,移动式心电信测分析仪在国内外都是一种新型产品,具有极大的市场发展潜力。

心电信号是一种有心肌收缩而产生并可提供心脏生理功能变化信息的生物电信号,由于其具有易于检测和有较好的直观性特点,在临床上有较为广泛的研究和应用。

2、方案论证图1所示是一个心电数据系统的组成框图,其中心电信号由专用电极拾取后送入前置放大器初步放大,并在对各干扰信号进行一定抑制后送入带通滤波器,以滤除心电频率范围以外的干扰信号。

主放大器可将滤波后的信号进一步放大到 以89C51为中心、采用性能优良的AD620管作为前置放大,既可以提高放大倍数,也可以提高共模抵制比、电路结构简单。

然后通过A/D 和D/A 转换,输出给示波器,若合理的选择器件参数,可使其输出波形失真小。

所以采用此方案。

电极 通道图 1 移动式心电信号检测分析仪总体框图心电图是临床疾病诊断中常用的辅助手段。

LCD液晶显示驱动程序设计指引

LCD液晶显示驱动程序设计指引

美的集团制冷事业本部企业标准QJ/MK03.056-2004 LCD液晶显示驱动程序设计指引1适用范围《LCD液晶显示驱动程序设计指引》主要对采用液晶驱动芯片HD1621(或此系列芯片)进行LCD 液晶的驱动方法进行了分析,说明了驱动芯片的功能、软件编制方法和注意事项,并提供了程序范例,为以后的程序设计者提供类似的开发参考。

2引用资料范例程序采用日本NEC公司的RA78K0S系列汇编语言编写,具体技术资料参照78K0S系列八位单片机UPD78F9177芯片的相关资料。

液晶驱动芯片参考资料:具体见HT1621DATASHEET。

3定义汇编语言:是用于编写微处理器软件的最基本编程语言。

汇编程序包:是一组程序的总称,用于把汇编语言的源程序文件转换成机器代码的程序,通常包括汇编程序﹑连接程序﹑目标码转换程序和其它库管理程序﹑表转换程序等。

LCD:液晶显示器简称。

4HT162X驱动芯片资料介绍4.1概述HT162X系列芯片是由HOTEK公司开发生产的多功能LCD 驱动器芯片,HT162X 的软件配置特性使其适合于各种LCD 的应用包括LCD 模块和显示子系统,主控器与HT162X通信只需要3 到4 条线。

由于采用了电容型偏置电压充电泵使得HT1620 的操作电流非常的小。

HT162X 系列包括多款产品适合不同的应用,目前广泛应用于各种液晶驱动控制上。

4.2芯片特性➢操作电压2.4V~3.3V➢LCD 电压3.6V~4.9V可调➢可选择1/2 或1/3 偏置1/2, 1/3 或1/4 占空比➢内部时基频率源➢片内电容型偏置充电泵➢读/写地址自动增加➢3线(或4线)串行接口➢软件配置特性➢两个可选的蜂鸣器频率2KHz 或4KHz4.3HT162X系列芯片选型表片内振荡器-√√-√√√晶体振荡器√√-√√√√5HT1621芯片说明HT1621为32*4位LCD驱动器,共有四种子型号,分别是HT1621-48SSO、HT1621B-48SSOP/DIP、HT1621D-28SKDIP,我们现在使用的为HT1621B-48SSOP,以下就以此芯片为例进行说明。

stm32 lcd 刷新波形原理

stm32 lcd 刷新波形原理

stm32 lcd 刷新波形原理
STM32是一系列由STMicroelectronics生产的32位微控制器,而LCD则是液晶显示屏的简称。

在STM32微控制器上刷新LCD波形
的原理涉及到许多方面,包括使用的通信协议、显示控制器、波形
数据处理等。

首先,通常情况下,STM32微控制器通过SPI、I2C、并行接口
等通信协议来驱动LCD显示屏。

其中,SPI和I2C是串行通信协议,而并行接口则是并行通信协议。

在使用这些通信协议时,需要将波
形数据发送到LCD显示屏,从而实现波形的刷新。

其次,STM32微控制器通常会集成显示控制器,例如SSD1963、ILI9341等,这些控制器可以帮助STM32微控制器更轻松地驱动LCD
显示屏。

通过编程控制这些显示控制器,可以实现波形数据的传输
和显示。

在实际应用中,刷新LCD波形的原理通常涉及到以下几个步骤:
1. 准备波形数据,首先,需要准备好要显示的波形数据,例如
通过传感器采集到的数据或者通过算法计算得到的数据。

2. 数据处理,接下来,需要对波形数据进行处理,例如进行数据转换、滤波、缩放等操作,以符合LCD显示的要求。

3. 数据传输,将处理后的波形数据通过SPI、I2C或并行接口发送给LCD显示控制器。

4. 显示刷新,LCD显示控制器接收到数据后,将数据转换为像素点,然后在LCD屏幕上显示出波形。

总的来说,刷新LCD波形的原理涉及到STM32微控制器的通信协议、显示控制器的使用以及波形数据的处理和传输。

通过合理的编程和配置,可以实现在LCD显示屏上实时、准确地显示各种波形数据。

lcd的显示实验报告

lcd的显示实验报告

lcd的显示实验报告LCD的显示实验报告概述:本次实验旨在研究液晶显示屏(LCD)的原理和显示效果。

通过搭建实验装置,观察和分析不同输入信号对LCD显示效果的影响,以及了解液晶分子的排列和光学特性。

实验装置:1. 液晶显示屏:使用一块常见的LCD显示屏,尺寸为10英寸。

2. 驱动电路:使用专业的LCD驱动电路板,可提供不同的输入信号。

3. 信号发生器:用于产生不同频率和幅度的信号,以模拟不同图像和视频场景。

实验步骤:1. 连接实验装置:将LCD显示屏和驱动电路连接,确保电路正常工作。

2. 设置信号发生器:根据实验要求,设置信号发生器的频率和幅度。

3. 观察LCD显示效果:通过改变信号发生器的输入信号,观察LCD显示屏上显示的图像和视频场景的变化。

实验结果:1. 彩色显示效果:通过调整信号发生器的输入信号,我们观察到LCD显示屏可以呈现丰富多彩的图像和视频场景。

不同的颜色通过液晶分子的排列方式和光学特性实现。

2. 对比度和亮度:通过改变信号发生器的幅度,我们发现LCD显示屏的对比度和亮度也会相应改变。

较大的幅度可以增加对比度和亮度,但过大的幅度可能导致图像失真。

3. 响应时间:我们还观察到LCD显示屏的响应时间对快速移动图像的显示效果有影响。

较短的响应时间可以减少运动模糊,提高图像的清晰度。

讨论与分析:1. 液晶分子排列:液晶显示屏的显示效果是通过液晶分子的排列方式来实现的。

液晶分子在电场的作用下,可以改变其排列方式,从而改变透光性。

这种特性使得液晶显示屏可以呈现不同的图像和颜色。

2. 优点与缺点:与传统的CRT显示器相比,液晶显示屏具有体积小、重量轻、功耗低等优点。

然而,液晶显示屏的响应时间相对较长,可能导致快速移动图像的模糊。

此外,液晶显示屏的视角范围有限,需要保持正对屏幕才能获得最佳视觉效果。

3. 应用领域:液晶显示屏已广泛应用于电子产品领域,如电视、计算机显示器、智能手机等。

其轻薄便携的特点使得液晶显示屏成为现代生活中不可或缺的一部分。

基于8255的LCD显示频率计设计

基于8255的LCD显示频率计设计

2013 /2014 学年第一学期课程设计II实验报告模块名称基于8255LCD频率计专业通信工程学生班级学生学号学生姓名指导教师需要程序和仿真电路图请联系QQ:643233819报告内容实验原理图及程序代码1.硬件部分电路设计由于本次实验设计的是一个单片机的基于8255的LCD的频率计实验,通过使用定时器T0产生1s钟的定时,同时测量T1口输入的方波的低电平的次数,就可以得出所输入信号的频率,然后将测得的频率由锁存器连接到8255,再通过8255扩展连接到LCD液晶显示器。

完整电路原理图如下:2.软件部分设计#include <reg52.h>#include <intrins.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define PA XBYTE[0x007c]#define PB XBYTE[0x007d]#define COM XBYTE[0x007f]uchar code tab1[]="F:";uchar code tab2[]="C:";uchar disp1[]="0000HZ";uchar disp2[]="0.00ms";sbit key1=P1^6;sbit key2=P1^7;uchar count,i;uchar time;unsigned long freq;sbit lcdrs=P1^0;sbit lcdrw=P1^1;sbit lcden=P1^2;void delay(uchar z) //延时函数{uchar x,y;for(x=110;x>0;x--)for(y=z;y>0;y--);}void write_com(uchar com) //写命令{lcdrs=0;PA=com;delay(5);lcden=1;delay(2);lcden=0;}void write_dat(uchar dat) //写数据{lcdrs=1;PA=dat;delay(5);lcden=1;delay(5);lcden=0;}void init_lcd() //lcd初始化{lcden=0;// lcdrs=0;lcdrw=0;write_com(0x38);/****工作方式设置***/write_com(0x0c);/****显示状态设置***/write_com(0x06);/****输入方式设置***/write_com(0x01);/****清除屏幕显示***/write_com(0x80);}void display() //显示函数{if(freq>0&&freq<10000){disp1[0]=freq/1000+'0';disp1[1]=freq/100%10+'0';disp1[2]=freq/10%10+'0';disp1[3]=freq/2%10+'0';if(freq<1000){disp2[0]=1000/freq+'0';disp2[2]=10000/freq%10+'0';disp2[3]=100000/freq%10+'0';}else{disp2[0]=1000/freq+'0';disp2[2]=10000/freq+'0';disp2[3]=100000/freq%10+'0';}write_com(0x82);for(i=0;i<6;i++){write_dat(disp1[i]);delay(2);}write_com(0x80+0x42);for(i=0;i<6;i++){write_dat(disp2[i]);delay(2);}}}void main(){COM=0x80;init_lcd();write_com(0x80);for(i=0;i<2;i++){write_dat(tab1[i]);delay(5);}write_com(0x80+0x40);for(i=0;i<2;i++){write_dat(tab2[i]);delay(5);}write_com(0x80+0x49);TMOD=0x51; //T0定时,T1计数TH1=0;TL1=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;ET1=1;EA=1;while(1){if(key2==0){delay(5);if(key2==0){TR1=TR0=1;}}else{display();}}}void timer0() interrupt 1 //T0中断,定时1s {TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){count=0;TR1=0;TR0=0;freq=(TH1*256+TL1);// display();TH1=0;TL1=0;}}仿真测试1.开始阶段输入第一组数据:输入第二组数据:1.按下按钮以后第一组数据:第二组数据:实验小结和体会本次的课程设计是基于8255的LCD显示的频率计的设计。

音频信号频谱分析(采用LCD点阵液晶显示)

音频信号频谱分析(采用LCD点阵液晶显示)

音频信号分析仪(采用LCD液晶显示)摘要本音频信号分析仪由32位MCU为主控制器,通过AD转换,对音频信号进行采样,把连续信号离散化,然后通过FFT快速傅氏变换运算,在时域和频域对音频信号各个频率分量以及功率等指标进行分析和处理,然后通过高分辨率的LCD 对信号的频谱进行显示。

该系统能够精确测量的音频信号频率范围为20Hz-10KHz,其幅度范围为5mVpp-5Vpp,分辨力分为20Hz和100Hz两档。

测量功率精确度高达1%,并且能够准确的测量周期信号的周期,是理想的音频信号分析仪的解决方案。

关键词:FFT;MCU;频谱;功率目录1 方案论证与比较 ................................................................................................. - 3 -1.1采样方法方案论证 (3)1.2处理器的选择方案论证................................................... 错误!未定义书签。

1.3周期性判别与测量方法方案论证................................... 错误!未定义书签。

2 系统设计 ............................................................................................................. - 4 -2.1总体设计. (5)2.2单元电路设计 (5)2.2.1 前级阻抗匹配和放大电路设计 (5)2.2.2 AD转换及控制模块电路设计 (6)2.2.3 功率谱测量单元电路设计 (6)3 软件设计 (7)4系统测试 (8)5 结论 (9)参考文献: (9)附录: (9)附1:元器件明细表: (9)附2:仪器设备清单 (9)附3:电路图图纸 (10)附4:程序清单 (11)1 方案论证与比较1.1 采样方法比较与选择方案一、用DDS芯片配合FIFO对信号进行采集,通过DDS集成芯片产生一个频率稳定度和精度相当高的信号作为FIFO的时钟,然后由FIFO对A/D转换的结果进行采集和存储,最后送MCU处理。

LCD1602液晶显示实验报告

LCD1602液晶显示实验报告

LCD1602液晶显示实验报告一、实验目的(1)了解LCD1602的基本原理,掌握其基本的工作流程。

(2)学习用Verilog HDL语言编写LCD1602的控制指令程序,能够在液晶屏上显示出正确的符号。

(3)能够自行改写程序,并实现符号的动态显示。

二、实验设备与器件Quartus II 软件、EP2C8Q208C8实验箱三、实验方案设计1.实验可实现的功能可以实现在LCD1602液晶屏第一行左侧第一位的位置循环显示0~9,并且可以用一个拨码开关BM8实现显示的复位功能。

2.LCD1602基本知识LCD1602液晶能够同时显示16x02即32个字符,模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如“A”。

1602通过D0~D7的8位数据端传输数据和指令。

3.系统工作原理系统的状态转换流程图如图3.1.1所示。

通过状态流程图可以看到,LCD1602液晶屏的状态是不断更新的,依次完成液晶的初始化和0~9的动态显示过程,并且过程可由开关控制。

if (!rst_n)cnt <= 0;elsecnt <= cnt + 1'b1;wire lcd_clk = cnt[23]; // (2^23 / 50M)=0.168s always@(posedge lcd_clk)if(cnt1>=24'd2)beginreg lcd_clk1;lcd_clk1=1;cnt1=0;endelsebegincnt1=cnt1+1; //cnt1对lcd_clk二分频lcd_clk1=0;endalways@(posedge lcd_clk1)beginrow1_val<=8'h30;//设初值case(row1_val) //数字0~9循环显示8'h30: row1_val<=8'h31;8'h31: row1_val<=8'h32;8'h32: row1_val<=8'h33;8'h33: row1_val<=8'h34;8'h34: row1_val<=8'h35;8'h35: row1_val<=8'h36;8'h36: row1_val<=8'h37;8'h37: row1_val<=8'h38;8'h38: row1_val<=8'h39;8'h39: row1_val<=8'h30;default: row1_val<=8'h30;endcaseendparameter IDLE = 8'h00;parameter DISP_SET = 8'h01; // 显示模式设置parameter DISP_OFF = 8'h03; // 显示关闭parameter CLR_SCR = 8'h02; // 显示清屏parameter CURSOR_SET1 = 8'h06; // 显示光标移动设置parameter CURSOR_SET2 = 8'h07; // 显示开及光标设置parameter ROW1_ADDR = 8'h05; // 写第1行起始地址parameter ROW1_0 = 8'h04;reg [5:0] current_state, next_state; // 现态、次态always @ (posedge lcd_clk, negedge rst_n)if(!rst_n) current_state <= IDLE;else current_state <= next_state;//在时钟信号作用期间,次态重复的赋给现态alwaysbegincase(current_state)IDLE : next_state = DISP_SET;DISP_SET : next_state = DISP_OFF;DISP_OFF : next_state = CLR_SCR;CLR_SCR : next_state = CURSOR_SET1;CURSOR_SET1 : next_state = CURSOR_SET2;CURSOR_SET2 : next_state = ROW1_ADDR;ROW1_ADDR : next_state = ROW1_0;ROW1_0 : next_state = ROW1_ADDR;default : next_state = IDLE ;endcaseendalways @ (posedge lcd_clk, negedge rst_n)beginif(!rst_n)beginlcd_rs <= 0;lcd_data <= 8'hxx;endelsebegincase(next_state)IDLE : lcd_rs <= 0;DISP_SET : lcd_rs <= 0;DISP_OFF : lcd_rs <= 0;CLR_SCR : lcd_rs <= 0;CURSOR_SET1 : lcd_rs <= 0;CURSOR_SET2 : lcd_rs <= 0;ROW1_ADDR : lcd_rs <= 0;ROW1_0 : lcd_rs <= 1;endcasecase(next_state)IDLE : lcd_data <= 8'hxx;DISP_SET : lcd_data <= 8'h38;DISP_OFF : lcd_data <= 8'h08;CLR_SCR : lcd_data <= 8'h01;CURSOR_SET1 : lcd_data <= 8'h04;CURSOR_SET2 : lcd_data <= 8'h0C;ROW1_ADDR : lcd_data <= 8'h80;ROW1_0 : lcd_data <= row1_val[127:120];endcaseendendassign lcd_e = lcd_clk; // 数据在时钟高电平被锁存assign lcd_rw = 1'b0; // 只写endmodule5.下载电路及引脚分配设计设计中用实验箱自带的50MHz时钟信号作为输入端,用sel0、sel1、sel2三个使能端选通LCD1602液晶屏,EP2C8Q208C8就会工作在给液晶下命令的状态,使得点阵正常工作,如图3.5.1所示。

240128lcd显示波形c程序

240128lcd显示波形c程序

240128lcd显示波形c程序作者:leijy2007-12-29 21:05:00再来个240128的程序#i nclude <c8051f020.h>#i nclude <tab.c>#i nclude <dis240128.c>////sfr16 DP = 0x82; // data pointersfr16 TMR3RL = 0x92; // Timer3 reload valuesfr16 TMR3 = 0x94; // Timer3 countersfr16 ADC0 = 0xbe; // ADC0 data sfr16 ADC0GT = 0xc4; // ADC0 greater than windowsfr16 ADC0LT = 0xc6; // ADC0 less than windowsfr16 RCAP2 = 0xca; // Timer2 capture/reloadsfr16 T2 = 0xcc; // Timer2 sfr16 RCAP4 = 0xe4; // Timer4 capture/reloadsfr16 T4 = 0xf4; // Timer4 sfr16 DAC0 = 0xd2; // DAC0 data sfr16 DAC1 = 0xd5; // DAC1 data //unsigned int ad_temp,dis_y=0;unsigned char ad_i=0;char tabc;unsigned char dis_i,dis_k=0;//unsigned char t_count,t_i;unsigned int t_timecount;bit t_flag;unsigned long t_y=0;//void SYSCLK_Init (void){unsigned inti; // delay counterOSCXCN = 0x67; // start external oscillator withfor (i=0; i < 3000; i++) ; // Wait for osc. to start upwhile (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settleOSCICN = 0x88;}//-----------------------------------------------------------------------------//函数名称: PORT_Init ()//函数功能: 通用I/O口及交叉开关初始化//入口参数: 无//出口参数: 无//全局变量引用: 无//调用模块: 无//-----------------------------------------------------------------------------void PORT_Init (void){XBR1 = 0x02;XBR2 = 0x40;P74OUT = 0x0f; // P2口设为推挽方式P4=0x07;}//void T_Init(void){CKCON=0X18;TMOD=0x15;IP=0x0a;TH0=0;TL0=0;TH1=(65536-44237)/256;TL1=(65536-44237)%256;TR1=1;TR0=1;ET0=1;ET1=1;}// ADC0配置,T3定时启动ADC//-----------------------------------------------------------------------------void ADC0_Init (void){ADC0CN = 0x00; // ADC0 向AD0BUSY写1时采样,左对齐REF0CN = 0x03; // 启用内部基准源ADC0CF =0X40;AMX0SL = 0x01;AD0EN =1; // 选择采样输入源EIE2 |= 0x02; // 启用ADC 中断}//void t0(void) interrupt 1{t_count++;}void t1(void) interrupt 3{TH1=(65536-44237)/256;TL1=(65536-44237)%256;t_timecount++;if(t_timecount==250){TR0=0;t_timecount=0;t_flag=1;}}// ADC0采样中断//-----------------------------------------------------------------------------void ADC0_ISR (void) interrupt 15{AD0INT = 0; // 清 ADC 中断标志位ad_temp=((ADC0H*256+ADC0L)*13)>>10;tab_wave[ad_i]=(unsigned char)(ad_temp&0xff);ad_i++;if(ad_i>=216){ad_i=0;AD0EN=0;}AD0BUSY=1;}////-----------------------------------------------------------------------------// 主//-----------------------------------------------------------------------------void main (void){WDTCN = 0xde;WDTCN = 0xad; //禁止看门狗定时器SYSCLK_Init(); // 系统时钟初始化 PORT_Init ();ADC0_Init ();T_Init();lcd_int1();wtcd2(0x24,0x0000);show_coor(X_length,Y_length,origin_X,origin_Y,0,0);showxy();displayword(0,112,tab_word,2);displayword(13,112,tab_word+64,2);displaychar(6,112,tab_char+48,1);displaychar(10,112,tab_char+64,1);displaychar(23,112,tab_char+80,2);AD0BUSY=1;EA = 1;while(1){//幅度显示if(AD0EN==0){show_wave(1);for(dis_i=0,dis_k=0;dis_i<216;dis_i++)if(tab_wave[dis_i]>dis_k)dis_k=tab_wave[dis_i];dis_y=(unsigned int)dis_k;dis_y=(dis_y*755)>>4;//dis_y=dis_y>>8;displaychar(5,112,tab_number+(dis_y/1000%10)*16,1);displaychar(7,112,tab_number+(dis_y/100%10)*16,1);displaychar(8,112,tab_number+(dis_y/10%10)*16,1);displaychar(9,112,tab_number+(dis_y%10)*16,1);////计数显示for(t_i=0;t_i<6;t_i++){if(t_flag==1){t_flag=0;t_y=(t_count*65536+TH0*256+TL0)*2;t_timecount=0;t_count=0;TH0=0;TL0=0;TR0=1;}displaychar(18,112,tab_number+(t_y/10000%10)*16,1);displaychar(19,112,tab_number+(t_y/1000%10)*16,1);displaychar(20,112,tab_number+(t_y/100%10)*16,1);displaychar(21,112,tab_number+(t_y/10%10)*16,1);displaychar(22,112,tab_number+(t_y%10)*16,1);}//show_wave(0);show_coor(X_length,Y_length,origin_X,origin_Y,0,0);showxy();AD0EN=1;AD0BUSY=1;}}}---------------------------------------------------------------------------------------------------------------dis240128.c文件--------------------------------------------------------------------------------------------------------------#define X_length 216 //x way#define Y_length 106 //y way#define origin_X 0 //原点x(绝对坐标)#define origin_Y 53 //原点y(绝对坐标)y为53//unsigned char cklcdst(void){unsigned char temp;P5 = 0xFF;P4 = 0x03;temp=P5;P4=0x07;return temp;}//void check01(void) // 状态位STA1,STA0 判断(读写指令和读写数据){while(cklcdst()&0x03!=0x03);}///*void check3(void) // 状态位ST3 判断(数据自动写状态){while(cklcdst()&0x08!=0x08);}//void check2(void) // 状态位ST2 判断(数据自动读状态){while(cklcdst()&0x04!=0x04);}//void check6(void) // 状态位ST6 判断(屏读/屏拷贝状态){while(cklcdst()&0x40!=0x40);}//void delay1000(unsigned char delayvalue){unsigned char i;unsigned int j;i = delayvalue;while(i--){j = 1000;while(j--);}}//void awtdt0(unsigned char uData) // 自动写数据{check3();wtdt(uData);}*///void delay50(unsigned char delayvalue){unsigned char i,j;i = delayvalue;while(i--){j = 50;while(j--);}}//void wtcd(unsigned char cmd){P4=0x05;P5=cmd;P4=0x07;delay50(1);}//------------------------------------------------------------------------------// IO口方式写数据//------------------------------------------------------------------------------// status: O.K.void wtdt(unsigned char lcddata){P4=0x04;P5=lcddata;P4=0x06;delay50(1);}//void wtcd2(unsigned char uCmd,unsigned int uPar) // 写双参数的指令{check01();wtdt(uPar& 0xFF);//先写低字节,再写高字节check01();wtdt((unsigned char)(uPar>>8));check01();wtcd(uCmd);}/********************//= 函数原型: uchar wr_cmd_1(uchar uCmd,uchar uPar1)//= 功能: 给T6963C写带单参数的指令//= 参数://= 返回值: 返回0 成功,否则忙//= 函数性质:私有函数********************/void wtcd1(unsigned char uCmd,unsigned char uPar) // 写单参数的指令{check01();wtdt(uPar);check01();wtcd(uCmd);}//void wtcd0(unsigned char uCmd) // 写无参数的指令{check01();wtcd(uCmd);}//void wtdt0(unsigned char uData) // 写一次数据{check01();wtdt(uData);}//void lcdclr( ){ unsigned char i,j;wtcd2(0x24,0x0000);wtcd0(0xb0);for(j=0;j<=0x80;j++)for(i=0;i<=0x1E;i++)wtdt0(0x00);wtcd0(0xb2);}//----------------------------------------------------------------------------------//----------------------------------------------------------------------------------//初始化函数void lcd_int1( ){ lcdclr(); //清屏wtcd2(0x42,0x0000);wtcd2(0x43,0x001e); //图形显示宽度30wtcd2(0x24,0x0000);wtcd0(0x80); //显示方式 OR功能wtcd0(0x98); //启用图形显示方式,光标闪烁}//void printpoint(unsigned char PointX,unsigned char PointY,bit flag) {unsigned int k=0;unsigned char ldata=0xf0;//bit operation : flag=0 bit reset and flag=1 bit set;(7-PointY%8)is select bit.k=PointY*30 + PointX/8; //k save the addressldata=ldata+7-PointX%8;if(flag)ldata=ldata|0x08;wtcd2(0x24,k);wtcd0(ldata); //output the bit operation}//--------------------------------------------------------------------------void show_coor(unsigned char x_length,unsigned char y_length,unsigned char origin_x,unsigned char origin_y,bit offset,bit offset1){unsigned char i,j,k,l,m;//show coordinate start pointif((offset==0)&&(offset1==0)){ j=origin_x;k=x_length+origin_x+6;l=origin_y-y_length/2;m=y_length+origin_y-y_length/2+3; //y way length }else if((offset==0)&&(offset1==1)){j=origin_x;k=x_length+origin_x+6;l=origin_y;m=y_length+origin_y+3;}else if((offset==1)&&(offset1==0)){j=origin_x;k=x_length+origin_x+6;l=origin_y-y_length;m=y_length+origin_y-y_ length+3;}//show the coordinatefor(i=j;i<k;i++)//x wayprintpoint(i,origin_y,1);for(i=l;i<m;i++)//Y_wayprintpoint(origin_x,i,1);for(i=l;i<m;i=i+y_length/8) //y_way average dividing{printpoint(origin_x+1,i,1);}for(i=j;i<k;i=i+x_length/8)//x way average dividing{ printpoint(i,origin_y-1,1);}printpoint(i-1,origin_y-1,1);//x way the next point}//----------------------------------------------------------------------------------void show_wave(bit mod)// y0 1{ unsigned char i,k;for(i=1;i<X_length;i++){k=origin_Y-tab_wave[i];if(k!=origin_Y)printpoint(origin_X+i,k,mod);}}//汉化显示,y为行,x为列,注意一个汉字占两列,而西文字符占一列void displayword(unsigned char x,unsigned char y,unsigned char *word,unsigned char c){unsigned int xy;unsigned char i,j,k=0;xy=y*30+x;for(i=0;i<c;i++)for(j=0;j<16;j++){wtcd2(0x24,xy+j*30+i*2);//置地址指针low addresswtcd1(0xc0,word[k]);wtcd1(0xc0,word[k+1]);k+=2;}}//字符显示,y为行,x为列,注意一个汉字占两列,而西文字符占一列void displaychar(unsigned char x,unsigned char y,unsigned char *word,unsigned char c){unsigned int xy;unsigned char i,j,k=0;xy=y*30+x;for(i=0;i<c;i++)for(j=0;j<16;j++){wtcd2(0x24,xy+j*30+i);//置地址指针low addresswtcd1(0xc0,word[k]);k++;}}void showxy(void){displaychar(1,0,tab_char,1);displaychar(27,54,tab_char+16,1);displaychar(1,54,tab_char+32,1);}--------------------------------------------------------------------------------------------------------------tab.c文件--------------------------------------------------------------------------------------------------------------unsigned char code tab_number[]={/*-- 文字: 0 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18 ,0x00,0x00,/*-- 文字: 1 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C ,0x00,0x00,/*-- 文字: 2 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E ,0x00,0x00,/*-- 文字: 3 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38 ,0x00,0x00,/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E ,0x00,0x00,/*-- 文字: 5 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*-- 文字: 6 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18 ,0x00,0x00,/*-- 文字: 7 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10 ,0x00,0x00,/*-- 文字: 8 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C ,0x00,0x00,/*-- 文字: 9 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38 ,0x00,0x00,};unsigned char code tab_char[]={/*-- 文字: y --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x18,0x10,0x10,0xE0,0x00,0x00 ,0x00,0x00,/*-- 文字: x --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x6E,0x24,0x18,0x18,0x18,0x24,0x76,0x00,0x00,0x00,0x00 ,0x00,0x00,/*-- 文字: 0 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18 ,0x00,0x00,/*-- 文字: . --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60 ,0x00,0x00,/*-- 文字: V --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0xE7,0x42,0x42,0x44,0x24,0x24,0x28,0x28,0x18,0x10,0x10 ,0x00,0x00,/*-- 文字: H --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7 ,0x00,0x00,/*-- 文字: z --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x44,0x08,0x10,0x10,0x22,0x7E ,0x00,0x00,};//unsigned char code tab_word[]={/*-- 文字: 幅 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x00,0x23,0xFE,0x20,0x00,0xF9,0xFC,0xA9,0x04,0xA9,0x04,0xA9,0xFC ,0xA8,0x00,0xAB,0xFE,0xAA,0x22,0xAB,0xFE,0xBA,0x22,0x22,0x22,0x23,0xFE,0x22,0x02 ,0x20,0x00,/*-- 文字: 度 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20 ,0x23,0xE0,0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E ,0x98,0x04,/*-- 文字: 频 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x00,0x08,0xFE,0x4E,0x20,0x48,0x40,0x48,0xFC,0xFE,0x84,0x00,0xA4 ,0x08,0xA4,0x4A,0xA4,0x4A,0xA4,0x84,0xA4,0x08,0x50,0x10,0x48,0x20,0x86,0xC3,0x02 ,0x00,0x00,/*-- 文字: 率 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x02,0x00,0x01,0x00,0x7F,0xFE,0x41,0x00,0x22,0x28,0x17,0xD0,0x04,0x80 ,0x11,0x10,0x22,0x48,0x47,0xC4,0x01,0x20,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00 ,0x01,0x00,};//unsigned char tab_wave[216];好东西,在LCD上画波形、曲线、直线摘自:/tech/draw_LINE_monochrome.htm看完了,顶呀!3 如何在LCD显示屏上显示波形曲线?在设计仪器仪表时,经常会碰到要求在LCD显示屏上显示电流电压等参数的波形曲线。

基于LCD12864显示器的数字示波器设计

基于LCD12864显示器的数字示波器设计

万方数据
E强衄
MCU
就可以在LcD上看到随时问变化的电压曲线了。主程 序为:
voidma 5nn Y=63一y
forU=1_j(7j++)d日m=OxO; da[Ol=O:(D1. da[7]-o,(8D:
u心gned charl:
Icdl2864
initO;
da[21/8];Ox01(<口1%B)= Ca[42JSlI-0x01<‘(42%B) 127})w加M端边框
该函数用来初始化LCD・设置显示模式-光标位 置等・在对LcD绘圈时-最多的命令就是设定当前光 标位置・通过光标位置来指定将要操作的LcD显示点。
万方数据
2011
05l电于一E

31
在对LCD编程操作以前.一定要执行此函数对LCD进 行初始化操作。 从驱动函数可见. 发对LCD写^数据是以字节
第二点:da[10/8】_1<(10%8即da[1]=0x04; 首先给出列显示子函数,在任意列显示Y值对应点。
da[y/8]l=0mlcc(件8)//镕w信}波*
第一点¨自为30.应该对应垂直哪个字节的哪个
比特呢’ 实际30点应该在第4宇节f 24到31}的Bi【6上. 章30/8取整为3.刚好是应该跳过的前3宇节fபைடு நூலகம்应 0到23).那么30%8{30除8取余数}呢.余数是6. 不是刚好是BIl位吗’所以可以这样将Y值映射到某字 节的某点上.如果y轴64点对应8字节变量Da[n].n
IccLdataⅢ(da[i]1l:
有了列显示函数.LCD任何坐标位置上描点绘图 函数为: ⅧdIcd_disp(unsigned c胁o y)//x¥平Ⅲ标.v§i±标
unsignedchat

基于12864LCD的波形显示系统的研制

基于12864LCD的波形显示系统的研制

28 E I C Vo l .15 2008 No.3欢迎光临本刊网站h tt p://www.e i .cn5 安全性分析本文实现了安全性更强的基于US B Key 的双因子认证。

与传统的认证方案相比,在应用和安全性方面它有着明显的优势[2]:(1)、US B Key 体积小,方便携带,方便用户在不同的平台进行登陆、签名,而且安全性高。

(2)、系统登陆认证采用PKI 的认证机制,用户只有使用US B Key 进行服务器和客户端之间的双向认证才能进入操作界面。

用户只有同时取得了US B Key 和用户P I N ,才可以登陆系统。

即使用户的P I N 被泄漏,只要用户持有的US B Key 不被盗取,合法用户的身份就不会被仿冒;如果用户的US B Key 遗失,拾到者由于不知道用户P I N ,也无法仿冒合法用户的身份。

并且如果P I N 码连续输错三次,就会被锁定。

(3)、在US B Key 中内置的智能卡芯片能够实现基于PKI 体系的加密、签名和验签的各种算法。

而要保证PKI 体系的安全,一个先决条件就是保证私钥的安全性。

以往的做法通常是将自己的私钥保存到本地硬盘或软盘中,当需要进行数字签名时,私钥会被读取到计算机内存中进行签名运算。

这样的话私钥就可能会被病毒、木马等恶意程序截取到。

所以为了防止私钥泄漏,私钥智能保存到特别的外置设备中。

而USEKey 因为带有安全的存储空间用于存储用户证书和私钥等秘密数据,能够确保私钥不出Key,签名运算在US B Key 内完成,从而杜绝了用户窃取私钥而冒充身份的可能性,保证了运算过程的安全性。

6 结束语本文针对实验平台管理系统的实际需求,结合密码技术和身份认证技术,采用了基于US B Key 的双因子身份认证技术。

目前众多身份认证技术当中,US B Key 是被认为最安全的身份认证手段,除了生物特征身份认证技术。

但是因为成本问题,生物特征身份认证技术并没有被广泛使用。

超声波测距LCD1602显示

超声波测距LCD1602显示

超声波测距LCD1602显示超声波测距模块:1、采用IO口TRIG触发测距,给至少10us的高电平信号;2、模块自动发送8个40khz的方波,自动检测是否有信号返回;3、有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

测试距离=(高电平时间*声速(340M/S))/2。

液晶LCD1602电路接口超声波测距LCD1602显示程序源代码/*******************超声波测距1602显示********************* 单片机:51单片机* 开发环境:keil* 名称:超声波测距1602显示注意:用杜邦线将超声波模块的VCC接开发板5V对外供电接口用杜邦线将超声波模块的GND接开发板GND用杜邦线将超声波模块的Trig接单片机的P1.5用杜邦线将超声波模块的Echo接单片机的P1.6/************************包含头文件************************/#include <reg51.h>#define LCD_Data P0#define Busy 0x80/**************************宏定义**************************/#define SPEED_30C 3495 //30摄氏度时的声速,声速V=331.5+0.6*温度;#define SPEED_23C 3453 //23摄氏度时的声速,声速V=331.5+0.6*温度;/**************************位定义**************************/sbit ECHO = P2^1; //回声接收端口sbit TRIG = P2^0; //超声触发端口sbit BEEP = P2^3; //蜂鸣器sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_E = P2^5;/**********************定义变量和数组**********************/long int distance = 0; //距离变量unsigned char code table0[] = {" SL-51A "};unsigned char code table1[] = {" NO ECHO "};unsigned char code table2[] = {"Distance:xxx.xcm"};unsigned char count;void Delay5Ms(void);void delay(int In,int Out);void WriteDataLCD(unsigned char WDLCD);void WriteCommandLCD(unsigned char WCLCD,BuysC);unsigned char ReadDataLCD(void);unsigned char ReadStatusLCD(void);void LCDInit(void);void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData); /**********************************************************//* 函数名称 : Delay_xMs *//* 函数描述 : 延时函数 *//* 输入参数 : x *//* 参数描述 : 延时时间 *//* 返回值 : 无 *//**********************************************************/void Delay_xMs(unsigned int x){unsigned int i,j;for(i=0;i<x;i++){for(j=0;j<3;j++){;}}}/**********************************************************//* 函数名称 : delayt *//* 函数描述 : 延时函数 *//* 输入参数 : x *//* 参数描述 : 延时时间数据 *//* 返回值 : 无 *//**********************************************************/void delayt(unsigned int x){unsigned char j;while(x-->0){for(j=0;j<125;j++){;}}}/*************************5ms延时函数**********************/void Delay5Ms(void){unsigned int TempCyc = 3552;while(TempCyc--);}/**************************延迟函数************************/void delay(int In,int Out) {int i,j;for(i=0;i<In;i++){for(j=0;j<Out;j++){;}}}/**********************************************************//* 函数名称 : Alarm *//* 函数描述 : 蜂鸣器发声函数 *//* 输入参数 : t *//* 参数描述 : 发声的次数 *//* 返回值 : 无 *//**********************************************************/void Alarm(unsigned char t){unsigned char i;for(i=0;i<t;i++){BEEP=0;delay(10,1000);BEEP=1;delay(10,1000);}}/**********************************************************//* 函数名称 : Init_timer *//* 函数描述 : 初始化单片机函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//**********************************************************/void Init_timer(void){TMOD=0x01; //定时器2初始化,设置为16位自动重装模式TL0=0x66;TH0=0xfc; //1msET0=1; //开定时器2EA=1; //总中断使能}/**********************************************************//* 函数名称 : Init_Parameter *//* 函数描述 : 初始化参数和IO口函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//**********************************************************/void Init_Parameter(void){TRIG=1;ECHO=1;count=0;distance=0;}/**********************************************************//* 函数名称 : display *//* 函数描述 : 显示数字 *//* 输入参数 : number,address *//* 参数描述 : number写入的数据 *//* 返回值 : 无 *//**********************************************************/ void display(int number){unsigned char b,c,d,e;b=(number/1000);c=(number/100)%10;d=(number/10)%10;e=number%10; DisplayOneChar(9,1,(0x30+b));DisplayOneChar(10,1,(0x30+c));DisplayOneChar(11,1,(0x30+d));DisplayOneChar(13,1,(0x30+e));}/**********************************************************//* 函数名称 : Trig_SuperSonic *//* 函数描述 : 发出声波函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//**********************************************************/ void Trig_SuperSonic(void) //出发声波{TRIG=1;delayt(1);TRIG=0;}/**********************************************************//* 函数名称 : Measure_Distance *//* 函数描述 : 计算距离函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//**********************************************************/ void Measure_Distance(void){unsigned char l;unsigned int h,y;TR0=1;while(ECHO){;}TR0=0;l=TL0;h=TH0;y=(h<<8)+l;y=y-0xfc66; //us部分distance=y+1000*count; //计算总时间TL0=0x66;TH0=0xfc;delayt(30);distance=SPEED_30C*distance/20000;}/*********************写数据函数***************************/void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD(); //检测忙LCD_Data=WDLCD;LCD_E=0; //若晶振速度太高可以在这后加小的延时LCD_E=0; //延时LCD_RS=1;LCD_RW=0;LCD_E=1;LCD_E=0;}/***********************写指令函数*************************/void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCD(); //根据需要检测忙LCD_Data=WCLCD;LCD_E=0;LCD_E=0;LCD_RS=0;LCD_RW=0;LCD_E=1;LCD_E=0;}/************************读数据函数************************/unsigned char ReadDataLCD(void){LCD_RS=1;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;return(LCD_Data);}/************************读状态函数************************/unsigned char ReadStatusLCD(void){LCD_Data=0xFF;LCD_RS=0;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;while (LCD_Data & Busy); //检测忙信号return(LCD_Data);}/************************LCD初始化*************************/void LCDInit(void) //LCD初始化{LCD_Data=0;WriteCommandLCD(0x38,0);Delay5Ms(); //三次显示模式设置,不检测忙信号WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1); //显示模式设置, 开始要求每次检测忙信号 WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}/***********************清屏函数***************************/void LCD_Clear(void){WriteCommandLCD(0x01,1);Delay5Ms();}/*******************按指定位置显示一个字符******************/void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData){Y&=0x1;X&=0xF; //限制X不能大于15,Y不能大于1if(Y)X|=0x40; //当要显示第二行时地址码+0x40;X|=0x80; //算出指令码WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码WriteDataLCD(DData);}/********************按指定位置显示一串字符*****************/void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData) {unsigned char ListLength;ListLength=0;Y&=0x1;X&=0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]>=0x20) //若到达字串尾则退出{if(X<=0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;X++;}}}/**********************************************************//* 函数名称 : main *//* 函数描述 : 主函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//**********************************************************/void main(void){LCDInit();Init_timer();Init_Parameter();Alarm(2);DisplayListChar(0,0,table0);DisplayListChar(0,1,table1);while(1){Trig_SuperSonic(); //触发超声波发射while(ECHO==0){;} //等待回声Measure_Distance(); //计算脉宽并转换为距离DisplayListChar(0,1,table2);display(distance); //显示距离Init_Parameter(); //参数重新初始化delayt(100); //延时,两次发射之间要至少有10ms间隔 }}/**********************************************************//* 函数名称 : timer0 *//* 函数描述 : T0中断处理函数 *//* 输入参数 : 无 *//* 参数描述 : 无 *//* 返回值 : 无 *//**********************************************************/void timer0 (void) interrupt 1{TF0=0;TL0=0x66;TH0=0xfc;count++;if(count==18) //超声波回声脉宽最多18ms{TR0=0;TL0=0x66;TH0=0xfc;count=0;}}。

用LCD显示被测量波形的设计

用LCD显示被测量波形的设计

用LCD显示被测量波形的设计上是一些离散的点,为了保证波形的连续,这些离散的点之间的点也要绘出,只有各点之间没有间隔点时才能完整的显示被测量的波形,为了实现此功能,下面介绍一种横纵坐标插值描点算法。

横纵坐标插值描点算法流程图如图2表示。

在进行横纵坐标插值时,选择待显示被测量波形数据中的任意相邻图2横纵坐标插值描点算法流程图两点,即起点(Xs,Ys)和终点(Xe,Ye),且选择纵坐标较小的点作为起点坐标,另一点作终点坐标。

其斜率K=(Ye-Ys)/(Xe-Xs)。

应用△Y=Ye-Ys和△X=Xe-Xs之间的关系,在保证△Y≥0的条件下将斜率K的取值分为四个范围,在每个范围内用err参数作为未知点和实线点之间的误差,以此确定相应的作点规则。

1、当△Y≥0,△X≥0,且△Y≤△X时,即斜率K=0~1。

在当前坐标点(Xs,Ys)处,若err,则下一未知点坐标为(Xs+1,Ys),且err=err+△Y;若err≥0,则在(Xs+1,Ys+1)上描点,且err=err+△Y-△X。

然后将新的描点坐标作为当前(Xs,Ys)点,而所得到的err值为该点坐标的偏差值,重复上述的工作直至Xs=Xe为止。

2、△Y>0,△X≥0,且△Y>△X时,即斜率K>1。

在当前坐标点(Xs,Ys)处,若err,则在(Xs+1,Ys+1)上描点,且err=err+△Y-△X;若err≥0,则在(Xs,Ys+1)上描点,且err=err-△X。

然后将新的描点坐标作为当前(Xs,Ys)点,而所得到的err值为该点坐标的偏差值,重复上述的工作直至Ys=Ye为止。

3、△Y≥0,△X,且∣△Y∣≤∣△X∣时,即斜率K=0~-1。

在当前坐标点(Xs,Ys)处,若err,则在(Xs-1,Ys)上描点,且err=err+△Y;若err≥0,则在(Xs-1,Ys+1)上描点,且err=err+△Y-∣△X∣。

然后将新的描点坐标作为当前(Xs,Ys)点,而所得到的err值为该点坐标的偏差值,重复上述的工作直至Xs=Xe为止。

lcd时序波形

lcd时序波形

LCD时序波形一、概述LCD(液晶显示器)是一种利用液晶材料的光电效应来实现图像显示的设备。

在使用LCD之前,我们需要了解并掌握LCD的时序波形,以确保正确地操作和控制LCD显示。

时序波形是指在特定时间段内,不同信号之间的相对时间关系。

对于LCD而言,时序波形描述了控制信号在不同时间段内的变化情况,包括数据写入、读取、刷新等操作。

本文将详细介绍LCD时序波形的相关内容,包括常见的驱动模式、信号定义与作用以及各个阶段的具体时序要求。

二、常见驱动模式LCD可以采用多种不同的驱动模式,其中最常见的有主动矩阵和被动矩阵两种。

1. 主动矩阵主动矩阵是指每个像素点都有一个对应的驱动器来控制其状态。

这种方式下,每个像素点都可以被单独控制,可以实现更高分辨率和更快速度的显示效果。

主动矩阵通常采用TFT(薄膜晶体管)技术进行驱动。

2. 被动矩阵被动矩阵是指多个像素点共享一个驱动器来控制其状态。

这种方式下,每个像素点的刷新速度较慢,分辨率相对较低。

被动矩阵通常采用STN(超扭曲向列)技术进行驱动。

三、信号定义与作用在了解LCD的时序波形之前,我们需要先了解一些常见的信号定义与作用。

1. HSYNC(水平同步信号)HSYNC是指控制LCD显示行扫描的信号。

它告诉LCD何时开始新的一行扫描,并且在每行结束时发出一个脉冲。

通过控制HSYNC信号,我们可以实现水平方向上的显示控制。

2. VSYNC(垂直同步信号)VSYNC是指控制LCD显示帧率的信号。

它告诉LCD何时开始新的一帧,并且在每帧结束时发出一个脉冲。

通过控制VSYNC信号,我们可以实现垂直方向上的显示控制。

3. DOTCLK(像素时钟信号)DOTCLK是指驱动LCD像素刷新的时钟信号。

它决定了像素数据传输和刷新速度。

通过调整DOTCLK信号的频率,我们可以控制LCD的刷新速度和显示效果。

4. DE(数据使能信号)DE是指数据使能信号,也称为数据有效信号。

它告诉LCD何时传输有效的像素数据。

基于ARM7的LCD显示电压示波系统的设计

基于ARM7的LCD显示电压示波系统的设计

基于ARM7的LCD显示电压示波系统的设计
本设计以ARM7 微处理器为核心,采用ARM7 中的高速A/D 为测压单元,提高了数据传输的可靠性;数据结果通过LCD 实时显示,显示方式友好直观;
采用RAM 和UART 分别存储和传输数据,实现了监测数据的长期存储和与PC 的通信传输。

采用31/2 位或41/2 位段位式LCD 液晶数码显示器的仪表已不罕见,但段位式LCD 显示器的功能较局限。

对于多功能的智能仪表,采用点阵
式LCD 液晶显示模块,可提供更为丰富灵活的显示内容。

点阵式LCD 显示模块是一种集显示、控制与驱动与一体的显示器件。

为了简化电路,充分发挥
ARM 的性能,采用了320 乘以240 的16 级灰度LCD。

系统总体方案设计
本系统要求软件完成的功能有以下几个方面。

●实时数据采集功能。

系统要求能够实时采集外部电压的实时数据。

●采样数据处理功能。

在系统对实时数据采集完成后,要对数据进行实时处理。

实时处理主要是将外部电压进行高速A/D 转换,然后动态显示。

系统还可利用按键对超过报警设定值进行动态修改。

●LED 显示和RTC 功能。

本实验充分利用了LED 显示和实时时钟功能。

●报警处理功能。

将实时数据与人机对话设定电压测量最大值进行比较,之后做出报警动作。

●显示最大值功能。

将实时数据中的最大值给予保存和显示。

●利用EEPROM 读写数据功能。

系统可以在上电时读取110 位上次运行的实时数据,并作为这次的历史数据。

系统还可以按键来存储当前的110 位实时数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、硬件结构设计
展了系一统片硬27件25结6程构序电存路储图器如,图用1所于示存。放本程系序统代采码用,MC地S一址9空6系间统为列00中00的H…807CF1F9F6HK。C 扩16展位单了片一机片…6-2L22516,数扩 据 80存00储H…器F,FF主F要H。用程于序存存储该储系器统与采数集据的存原储始器数共据及用经地过址处64理K后B地待址显空示间的波,形地数址据总和线测中试最结高果位,地 (A址15空)为间低为
摘要:随着测量仪器的不断发展,利用液晶显示模块来对各种参数和波形进行显示逐渐流行,如何利用液晶显示模块来显示
被测量波形成为研究的课题。文中介绍一种用液晶显示器显示被测量波形的方案,该方案采用MCS一96系列80C196KC
16位单片机控制,采用深圳安的利光电科技有限公司生产的AM320240—57C58 STN图形点阵液晶显示模组,将被测量在
显示仪器型号(如MATS一2000SA MEASURE STYSTEM)。在主菜单文本显示区(该显示区属于LCD模块
第一显示区的一部分)显示主菜单(如TITLE、SAMPLE、SCHEDULE、RESULT、DISPLAY、uTIuTY)。在子
电平选择程序存储器空间(即选择存储芯片27256),当地址总线中最高位(A15)为高电平时经反相后选 择数据存储器空间(即存储芯片62256)…^2|。采用3宰6矩阵键盘,共18个按键输入,6根行线(K01一 K06)设置为输出,扩展一片74LSl64实现串并转换输出,利用单片机的P2.7作串行输出线和P2.6作串
(2)Y>0,△X≥0,且AY>/XX时,即斜率K>1。在当前坐标点(xs,Ys)处,若eIT<0,则在(xs+1, Ys+1)上描点,且err=err+△Y一△x;若errs>0,则在(Xs,Ys+1)上描点,且err=err—AX。然后将新的
万方数据
·92·
北京电子科技学院学报
2009年
描点坐标作为当前(xs,Ys)点,而所得到的ell"值为该点坐标的偏差值,重复上述的工作直至Ys=Ye为 止。
收稿日期:2009—5—14 万方数据
·90·
北京电子科技学院学报
行时钟线;3根列线设置为输入,利用单片机Po.5一P0.7作为键盘扫描列输入线‘11·[2].C4]。
2009焦
图1系统硬件结构电路图 液晶显示模组是采用SEDl335显示控制器的AM320240—57C58 STN液晶显示模组[_7|,模组接口描述 如表1—1所示,采用20P的矩表插头与80C196KC单片机相连;SEDl335液晶显示控制器指令集如表1— 2所示,采用先传送指令后传送参数的方式。采用单片机的P1.0作为液晶显示模块的选择在效信号线, 当该引脚输出为低电平时有效,正常工作该引脚应为低电平。采用单片机的P1.2作为液晶显示模块的复 位信号线,该引出现高电平时液晶显示模块在内部控制器的作用下完成复位操作,正常工作该引脚应输出 低电平。采用单片机的P1.1作为液晶显示模块命令输入或数据输入输出的选择线,当该引脚为低电平时 为命令输入,为高电平时为数据输入输出。采用单片机的P1.3作为液晶显示模块的写控制有效信号。采 用单片机的P1.4作为液晶显示模块的读控制有效信号。使用地址/数据总线的低8位数据总线与液晶显 示模块的数据总线相连。通过一10K电位器调节液晶显示模块3脚电压,可对液晶显示模块进行对比度 调节¨¨2儿7j。80C196KC工作在8位数据总线模式,因为液晶显示模块与单片机的接口是8位命令/数据 总线,利用80C196KC单片机将待显示的波形数据或测量结果通过数据总线送至液晶显示模块的显示缓 冲区中显示出来。波形数据在显示前己采集好,并根据采样数据和液晶横纵坐标量程的大小确定出归一 化值,并将采样数据都除以归一化值得到能在液晶显示屏上显示出来数据,即预处理。另还扩展了一些读 写等控制线。
playing
将被测量的测试结果以波形显示出来,并标以一定的数据,直观明了,便于分析问题、解决问题,市面 上一般采用微计算机来显示测试波形及测试结果,但利用微计算机以虚拟仪器方式来显示测试波形及测 试结果,具有成本高、维护性差等缺点,特此介绍一种利用液晶显示模块来显示被测量波形的方案,文中说 明了该方案的硬件原理及软件设计思路。
&Technical College,Loudi Hunan 417000,China)
Abstract:The paper adopts AM320240—57C58STN figure lattice Liquid Crystal Display Module measllre the waveforiTl.The ap- pmach has primary menu and pull—down submenu,and can install all kinds of parameter by keyboard,and employs touching key— press to operate in panel,which is convenient to be operated. Keywords:single chip microcomputer;Liquid Crystal Display Module;interpolating and describing——point algorithm;waveform dis·-
第17卷第2期
V01.17 No.2
北京电子科技学院学报 Journal of Beijing Elrctronin Science and Technology Institute
2009年6月 Jun.2009
用LCD显示被测量波形的设计
刘理云 (娄底职业技术学院电子信息工程系.湖南省娄底市.417000)
操作码 40H
53H 59/58H
44H 5DH 5CH 4C一4FH 5AH 5BH 46H 47H 42H 43H
说明 初始化,显示窗口设置
空闲操作 显示开/关,设置显示方式
设置显示区域、卷动 设置光标形状
设置CGRAM起始地址 设置光标移动方向 设置点单元卷动位置 设置合成显示方式 设置光标地址 读出光标地址 数据写入显示缓冲区
从显示缓冲区读出数据
参数量

1 10 2 2
1 1 2 2
若干 若干
·91·
二、插值描点算法设计
经过预处理后的被测量数据(待显示波形数据)不可能完全连续,反映在液晶显示模块上是一些离散 的点,为了保证波形的连续,这些离散的点之间的点也要绘出,只有各点之间没有间隔点时才能完整的显 示被测量的波形,为了实现此功能,下面介绍一种横纵坐标插值描点算法。
横纵坐标插值描点算法流程图如图2表示H J。在进行横纵坐标插值时,选择待显示被测量波形数据 中的任意相邻两点,即起点(xs,Ys)和终点(xe,Ye),且选择纵坐标较小的点作为起点坐标,另一点作终点 坐标。其斜率K=(Ye—Ys)/(xe—xs)。应用△Y=Ye—Ys和AX=Xe—Xs之间的关系,在保证AYI>0 的条件下将斜率K的取值分为四个范围,在每个范围内用err参数作为未知点和实线点之间的误差,以此 确定相应的作点规则。
文献标识码:A
文章编号:1672—464X(2009)06—0089—06
Measure of Waveform through Design of Applying Liquid Crystal Display Device(LCD)
L●U U—yun (Department of Electronic Information Engineering,Loudi Vocational
三、软件设计
本系统的主要目的是将采集到的被测量在液晶显示模块上以波形直观的显示出来,并指引用户在使 用过程中的操作等。在设计中的软件主要由主程序、LCD初始化程序、键值处理程序、波形显示程序组成。 为了便于以后的维护及修改,采用模块化程序设计技术和采用易于移植的C96语言Ⅲ‘4m1。
3.1主程序 主程序主要用来对LCD进行初始化设定、显示开机界面后,然后无限循环扫描矩阵键盘并进行相应 键值的处理。主程序流程图如图3所示:
序的开始处延时1毫秒以使LCD能可靠的复位。调用LCD初始化程序对LCD进行初始化后,显示如图4
所示的开机界面。在后述的LCD初始化程序中设置了LCD模块的第一显示区为文本显示区,第二显示区
为图形显示区。在此将显示屏分为三个区域以显示不同的内容,分别为主菜单文本显示区、子菜单文本显
示区、波形显示区(即图形显示区)。在主菜单文本显示区(该显示区属于LCD模块第一显示区的一部分)
液晶显示器上采用纵横坐标插值描点算法实现静态波形显示,并能在四象限坐标中,实现任意波形的快速显示及测试结果
的显示,有主菜单及相应的下拉子菜单显示功能,通过键盘可设置各种参数;采用触膜按键,通过面板操作,与使用电脑一样
习惯,直观简洁。
关键词:单片机;液晶显示模组;插值描点算法;波形显示
中图分类号:TP302.1
(1)△Y≥0,AX≥O,且△Y≤△x时,即斜率K=0—1。在当前坐标点(Xs,Ys)处,若err<0,则下一 未知点坐标为(xs+1,Xs),且err=err+△Y;若err>,0,则在(xs+1,Ys+1)上描点,且err=err+△Y— AX。然后将新的描点坐标作为当前(xs,Ys)点,而所得到的e:IT值为该点坐标的偏差值,重复上述的工作 直至Xs=Xe为止。
万方数据
第17卷
刘理云:用LCD显示被测量波形的设计
·93·
延日中mg≈;}缸cD刍蚯
鼎设自璐r碳列-L鲋影揠融卑f
1L l显:秉哦岍面l
}————一 l循喇身散雕喇盥l f并进俐卿鼢阿敞嚏
MATS一-2000SA AⅡ溘SUR量SYsⅡM
SCHⅡ,毗 TfTJ.E SAMH正
RESLILT DISPLAY UTILITY
8位数据总路线 内置负压
相关文档
最新文档