义隆单片机课堂
EM78P447S单片机入门与实作系列讲座

🏠 首页 《无线电》杂志 2003年 🔗 第4期 🔗 第1065353216页 分类:电脑与单片机 🔗

8×8的LED点阵组件DOT8的应用

[实验4]“玉”字显示


※实验项目实现的功能

图1
图1 🔍原图 (567×484)

在点阵组件DOT8上以动态扫描方式显示一个8×8点阵构成的“玉”字。用到的端口有P5和P6。


※硬件电路规划

图2
图2 🔍原图 (425×650)

硬件电路参考今年第2期39页图5。端口P5与点阵的列接口,端口P6与点阵的行接口。


※软件设计思路

图3
图3 🔍原图 (709×552)

点阵式LED(或LCD)显示板,既可以采取逐行扫描方式,也可以采取逐列扫描方式,在本实验范例中采用的是后者。用P5选通点阵的某一列,用P6输出被选通列的显示编码,如图8所示。例如,当P5输出“10000000”和P6输出“10000001”时,点阵的显示图案为图8中的(1)。


※程序清单

图4
图4 🔍原图 (709×531)

;***************

;《“玉”字显示》

; 文件名称: DOT8.ASM

; 使用组件: DOT8

;***************

SETCHIP EM78447;向汇编器声明目标单片机型号

ORG 000H;声明主程序开始地址

MOV A,@0X11;控制数据送累加器

IOW0X 0E;禁止看门狗活动

MOV A,@0;令A=00H

IOW 5;设置端口5为输出

IOW 6;设置端口6为输出

LOOP MOV A,@10000001B;第7列中该点亮的管编码送A

CLR 6;清零端口6

BS 5,7;选通第7列

MOV 6,A;把A值送端口6

MOV A,@10010001B;第6列中该点亮的管编码送A

CLR 5;关闭所有列

CLR 6;清零端口6

BS 5,6;选通第6列

MOV 6,A;把A值送端口6

MOV A,@10010001B;第5列中该点亮的管编码送A

CLR 5;关闭所有列

CLR 6;清零端口6

BS 5,5;选通第5列

MOV 6,A;把A值送端口6

MOV A,@11111111B;第4列中该点亮的管编码送A

CLR 5;关闭所有列

CLR 6;清零端口6

BS 5,4;选通第4列

MOV 6,A;把A值送端口6

MOV A,@10010001B;第3列中该点亮的管编码送A

CLR 5;关闭所有列

CLR 6;清零端口6

BS 5,3;选通第3列

MOV 6,A;把A值送端口6

MOV A,@10010101B;第2列中该点亮的管编码送A

CLR 5;关闭所有列

CLR 6;清零端口6

BS 5,2;选通第2列

MOV 6,A;把A值送端口6

MOV A,@10000011B;第1列中该点亮的管编码送A

CLR 5;关闭所有列

CLR 6;清零端口6

BS 5,1;选通第1列

MOV 6,A;把A值送端口6

MOV A,@00000001B;第0列中该点亮的管编码送A

CLR 5;关闭所有列

CLR 6;清零端口6

BS 5,0;选通第0列

MOV 6,A;把A值送端口6

NOP;插入一个指令周期延时

CLR 5;关闭所有列

JMP LOOP;循环返回

;***************

END;源程序结束


※程序调试方法

由于SIM447模拟执行程序的速度要比单片机实际执行程序的速度低得多,所以显示效果存在明显的闪烁现象。可以利用“连续单步运行方式”来观察在点阵DOT8上的显示结果是否正确,即可达到调试的目的。方法是在“>”提示符下按住9邀F79妖。


※几点说明

1.利用Windows 98之下的“画图”工具软件,可以获取字形的点阵数据。方法是:先利用画图的“文字”按钮工具输入适当字号和字体的文字(在此以“玉”字为例)。利用“查看” 菜单命令之下的“放大”功能和“显示网格”功能,再利用“图像” 菜单命令之下的“拉伸/扭曲”的拉伸功能,可以在水平和垂直方向上放大选定倍数,即可获得效果如图8所示的字符点阵图。

2.如果所显字符或图案符合一定规则(比如图9所示的图案),也可以采用“静态驱动”方式。程序清单如下:

;***************

;《反白显示“井”字》

; 文件名称: DOT8-1.ASM

; 使用组件: DOT8

;***************

SETCHIP EM78447;向汇编器声明目标

单片机型号

ORG 000H;声明主程序开始地址

MOV A,@0X11;控制数据送累加器

IOW 0X0E;禁止看门狗活动

MOV A,@0;令A=00H

IOW 5;设置端口5为输出

IOW 6;设置端口6为输出

LOOP MOV A,@11011011B;把行选编

码送A

MOV 6,A;把A值送端口6

MOV A,@11011011B;把行选编码送A

MOV 5,A;把A值送端口5

LOOP1 JMP LOOP1;原地踏步

;***************

END;源程序结束

示波器组件SCOPE的应用

在这个范例中,我们示范如何使用SIM84 提供的波形显示功能。下面的范例程序会利用查表方式,将正弦波的波形输出至波形显示器中。在程序执行的同时,您可以按下功能键F6,来调整波形显示器的取样周期,以使其输出的正弦波更漂亮。

[实验5]三角波信号发生器


※实验项目实现的功能

在这个范例中将P6定义为输出口,利用了P6口外接的虚拟数模转换器ADC和示波器组件SCOPE,来模拟产生三角波信号。当然也可以产生其他任意形状的周期信号及非周期信号。


※硬件电路规划

SCOPE电子组件示意图参见本刊第2期39页图7。端口P6经过一只外接并行端口的ADC,把单片机输出的8bit数字信号给转换成0~5V之间的模拟电压信号。该模拟信号作为示波器的输入信号,在虚拟的荧光屏上即可看到该模拟信号随着时间变化的波形。


※程序流程图

程序流程图比较简单,如图10所示。


※程序清单

;****************

;《三角波信号发生器》

; 文件名称: SCOPE-3.ASM

; 使用组件: SCOPE

;****************

SETCHIP EM78447;向汇编器声明目标

单片机型号

P6==6;端口6数据和方向寄存器地址

定义

STATUS==3;状态寄存器地址定义

Z==2;进位标志位的位地址定义

ORG 000H;声明主程序开始地址

MOV A,@0X11;控制数据送累加器

IOW 0X0E;禁止看门狗活动

MOV A,@0;令A=00H

IOW P6;设置端口6为输出

LOOP:INC P6;上升

JBS STATUS,Z;上升到最高点了吗

JMP LOOP;否!继续上升

LOOP1:DEC P6;是!下降

JBS STATUS,Z;下降到最低点了吗

JMP LOOP1;否!继续下降

JMP LOOP;是!开始下一个周期

;***************

END;源程序结束


※程序调试方法

在打开SIM447之后,首先关掉所有组件,再打开SCOPE组件,然后装载汇编过的目标程序,采用连续运行方式(所用命令也可以参考图11的左上角部分)。运行期间按动9邀F79妖功能键以及“+”号键,使得在“示波器屏幕”上看到比例适中的波形(如图11所示)。


※说明

通过编程也可以产生如图12所示的正弦波信号,只是要比三角波程序麻烦得多,也长得多。具体实现方法是:对于一个完整周期正弦波信号的幅度,在时间上均匀采样,把这些样值依次制成数据表格,然后在程序执行期间匀速读表并送ADC进行转换,进而由“示波器”呈现出正弦波。

(大海创作室)

本期有奖问答的题目是:1.电子组件DIP1、DIP2和DIP3主要用做程序运行过程中的动态开关量的输入,那么能否用做静止状态下开关量的输入设置呢?如果可以怎样来实现?2. LED数码管或点阵的静态驱动和动态驱动方式存在哪些不同之处?各具什么特点?动态驱动的工作原理是怎样的?答案请来信至编辑部,或E-mail至computer@radio.com.cn。本刊2003年第2期“义隆单片机课堂”有奖问答获奖名单张延波 张 军 周明理 蔡兴伟 卢 江赵铁林 李 荣 高 玺 陈贺春 向正元以上读者将收到由义隆公司赠送的IC数据资料光盘。