用单片机控制的数字触发器(编辑修改稿)内容摘要:

汉字的点阵数据。 当需要滚动显示时,则可在接下来的扫描周期的每个行扫描中断处理程序中,将对显示缓冲区的相应行点阵数据左移一位,同时更改显示缓冲区的内容。 (需要注意的是,要确保该操作能在 的中断时间内完成。 这里89C52 采用 22MHz 晶振,实验证明可以实现该操作)。 这样,在一个扫描周期后, 6 整个汉字将左移一列,而显示缓冲区的内容也同时更改。 由于预装载区保存了 1 个汉字点阵数据,即 16 16 点阵,所以当前显示缓冲区的 内容只能移动 16 列。 当下一个滚动到来时,滚动指针将移动到点阵数据存储区的下一个汉字的首地址,并在预装载区存入该汉字的点阵数据。 然后重复执行上述操作便可实现滚动显示。 特殊字符或图形的显示与此类似,这里不再赘述。 打字显示要求汉字在显示屏上按从左到右的顺序一个个的出现,如同打字的效果。 设计时可采用如下方法:首先将 LED 显示屏对应的显示缓冲区全部清零,即 LED 显示空白,然后每间隔一个“软定时器”设定的动态显示时间,显示缓冲区依次加入一个汉字点阵数据并进行扫描显示,这样就可达到打字显示的效果。 图 2 LED滚动显示处理示意图 PC 机控制程序 a.通讯功能的实现 在 Windows 环境下,实现 PC 与单片机的通讯可利用 Windows 的通讯 API 函数或者利用 VC++(或其它语言)的标准通讯函数_ inp、_ outp 来实现。 但上述两种方法比较繁琐,而采用 ActiveX 控件 MSComm32 来实现则非常方便。 该控件用事件的方式简化了对串口操作的编程,并可设置串行通信的数据发送和接收,还可对串口状态及串口通信的信息格式和协议进行设置。 其初始化程序一般情况下, PC 要与多个单片机 89C51 系统进行主从式 通讯,为了区分各单片机系统,可以使 89C51 采用串口工作方式 3,即 11 位异步接收/发送方式,该方式的有效数据为 9 位,其中第 9 位为地址/数据信息的标志位,其作用是使从机据此判断发送的数据是否为地址,从而实现多机操作。 但现在由于采用的是 MSCOMM 控件来实现 PC 机和单片机之间的通讯,这是一种标准的 10 位串口通信方式,即 8 7 位标准数据位和该数据的起始位、停止位各 1 位。 因此二者格式不相符,故很难利用上述方案。 因此可考虑将单片机串口设为工作方式 1,即改为 10 位异步接收/发送方式来解决,其通讯流程如下 : 首先发通信开始标志,接着发送需要操作的单片机系统地址,然后发送显示工作命令字,该命令包括 2 个字节,前一字节用于设定显示方式和滚动方向,后一字节则用于设定显示速度。 再往下是传送显示内容的点阵数据,最后对数据进行校验。 该通讯规约非常简便,能够较好的解决上述问题,从而实现 PC 机与多单片机之间的主从式通讯及对显示的控制。 需要注意的是,当显示内容需要改变时,为了避免在单片机串行中断接收数据时,显示屏出现乱码,应使显示屏暂不显示(处于 “黑屏”状态),直到数据接收完全,串行中断处理结束时再显示。 汉字字模的提取非常关键,本文的字模数据取自 UCDOS 下的字库文件 HZK16。 关于这方面的介绍较多,这里不再赘述。 对于特殊字符或图形点阵数据的提取,简便的方法可以先做一个 BMP 文件,然后用一些取模软件(如字模提取 )来获得。 为了显示方便,点阵数据的格式应为 n( 16 8),不足要求的则应以 0 数据补充。 b.动态效果模拟显示 为了方便调节 LED 的显示效果,笔者在 PC 机的控制界面上设计了 LED 显示屏的模拟显示,它同实际的显示效果完全一样。 用户可以设定显示的模式, 并调节显示速度,然后在界面上对显示 效果进行预览,同时还可以随时修 改和设定参数,因而十分方便简捷。 为此,可先在界面上描绘出虚拟的 LED 显示屏,由于实际的显示屏为 160 16 点阵,故须在界面上设定相同的区域。 实现动态显示效果的方法和以上几种基本类似,这里以滚动显示为例作一说明。 对于需要滚动的文字,可以将其设置为位图格式,暂存于内存中,然后利用VC 提供的位图拷贝函数 BitBlt 将位图复制到显示位置。 对于特殊字符或图形,则可以直接利用 BitBlt 函数调用到显示位置。 然后在类 CLEDDlg 的 OnTimer 函数中调用该函数,以实现文字的 滚动显示。 另外,也可以通过设定不同的响应 时间间隔来改变文字的滚动速度 [2]。 汉字显示屏广泛应用与汽车报站器,广告屏等。 本文介绍一种实用的汉字显示屏的制作,考虑到电路元件的易购性,没有使用 8*8的点阵发光管模块, 而是 8 直接使用了 256 个高量度发光管,组成了 16 行 16 列的发光点阵。 同时为了降低制作难度, 仅作了一个字的轮流显示,实际使用时可根据这个原理自行扩充显示的字数。 b 汉字显示的原理: 我们以 UCDOS 中文宋体字库为例,每一个字由 16行 16列的点阵组成显示。 即国标汉字库中的每一个字均由 256点阵来表示。 我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。 事实上这个汉字屏不仅可以显示汉字, 也可以显示在 256像素范围内的任何图形。 [3]用 8位的 AT89C51单片机控制, 由于单片机的总线为 8位,一个字需要拆分为 2个部分。 软件打开后输入汉字,点“检取”,十六进制数据的汉字 代码 即可自动生成,把我们所需要的竖排数据复制到我们的程序中即可。 我们把行列总线接在单片机的 i0口,然后把上面分析到的扫描代码送入总线,就可以得到显示的汉字了。 在这个例子里,由于一共用到16 行, 16 列,如果将其 全部接入 89c51单片机, 一共使用 32条 io口,这样造成了 io资源的耗尽,系统也再无扩充的余地。 实际应用中我们使用 416线译码器74ls154来完成列方向的显示。 而行方向 16条线则接在 p0口和 p2口。 程序清单: ORG 00H LOOP: MOV A,0FFH ;开机初始化,清除画面 MOV P0,A ;清除 P0 口 ANL P2,00 ;清除 P2 口 MOV R2,200 D100MS: MOV R3,250 ;延时 100 毫秒 DJNZ R3,$ DJNZ R2,D100MS MOV 20H,00H ;取码指针的初值 l100: MOV R1,100 ;每个字的停留时间 L16: MOV R6,16 ;每个字 16 个码 MOV R4,00H ;扫描指针清零 MOV R0,20H ;取码指针存入 R0 9 L3: MOV A,R4 ;扫描指针存入 A MOV P1,A ;扫描输出 INC R4 ;扫描指针加 1,扫描下一个 MOV A,R0 ; 取码指针存入 A MOV DPTR,TABLE ;取数据表的上半部分的代码 MOVC A,@A+DPTR MOV P0,A ; 输出到 P0 INC R0 ;取码指针加 1,取下一个码。 MOV A,R0 MOV DPTR,TABLE ;取数据表下半部份的代码 MOVC A,@A+DPTR MOV P2,A ;输出到 P2 口 INC R0 MOV R3,02 ;扫描 1 毫秒 DELAY2: MOV R5,248 ; DJNZ R5,$。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。