数码管动态显示实验 一、实验目的 在实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的多位显示方法, 应用非常广泛。本实验要求实验两位动态显示,并通过调试程序达到最佳显示效果。通过 实验应掌握以下知识要点: 1.数码管动态显示电路的连接方法。 2.练习动态显示程序的结构及调试方法。 二、实验预备知识 1.动态显示概念 用数码管显示信息时,由于每个数码管至少需要8 个I/O 口,如果需要多个数码管, 则需要太多I/O 口,而单片机的I/O 口是有限的。在实际应用中,一般采用动态显示的方 式解决此问题。数码管动态显示的连接方式如图3-2 所示。 思考:所有数码管的段选全部连接在一起,如何能显示不同的内容呢? 动态显示是多个数码管,交替显示,利用人的视觉暂留作用使人看到多个数码管同时 显示。在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然后输出段 码,使该数码管显示所需要的内容,延时一段时间后,再选中另一个数码管,再输出对应 的段码,高速交替。例如需要显示数字“12”时,先输出位选信号,选中第一个数码管, 输出1 的段码,延时一段时间后选中第二个数码管,输出2 的段码。把上面的流程以一定 的速度循环执行就可以显示出“12”,由于交替的速度非常快,人眼看到的就是连续的“12” 在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出 现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。 2.显示两位十六进制数据的处理方法 在显示数据时需要把被显示的数据拆分为单个的位,然后按照高低位的位置输出显 示。例如显示“8D”,就需要显示一个“8”,然后再在其右面显示一个“D”,因此就需要 把“8D”拆分为“8”和“D”。把一个数据拆分的方法如下: ① 先将被显示的数据与“0FH”相与,其结果就是其低位。 ② 再将被显示数据高低半字节交换。 ③ 把交换后的数据再与“0FH”相与,其结果就是高位。 示例程序如下: …… MOV 30H ,#7FH ;被显示的数据为7F,存入30H 单元中。 MOV A ,30H ;把被显示数据送入累加器 ANL A ,#0FH ;与0FH 相与,得到“0FH” MOV 31H ,A ;把低位存入31H 单元 MOV A ,30H ;再次取出被显示数据 SWAP A ;半字节交换,变成F7H ANL A ,#0FH ;与0FH 相与。得到“07H” MOV 32H ,A ;把高位存入32H 单元 …… 思考:①为什么要拆成“07H”和“0FH”,而不是“70H”和“0FH”? ②以上程序中,在提取高位时是否可以先与运算,然后再高低半字节交换? 三、硬件电路 使用按键显示模块,按实验二的方法连接。 思考:此时四个数码管的位选分别是单片机的那个I/O 口? 四、实验内容 1.根据要求补充程序 以下程序是在数码管上显示“9E”,把程序补充完整,运行并记录现象。 ORG 0000H ;数据指针指向段码表 MOV 30H,#9EH MAIN: MOV A ,30H ANL A ,#0FH ;查表 SETB P3.5 ;熄灭第一个数码管 CLR P3.4 ;选中第二个数码管 MOV P0 ,A LCALL DELAY MOV A ,30H ;高、低半字节交换 ANL A ,#0FH MOVC A ,@A+DPTR ;熄灭第二数码管个 ;选中第一个数码管 MOV P0 ,A LCALL DELAY SJMP MAIN TAB: ;段码表 DELAY: ;延时5ms 的子程序 END 2.在前面程序的基础上,修改延时程序,分别改为0.5s 和100us,观察运行现象,并 分析原因。 3.修改显示内容 五、扩展内容 1.在以上硬件的基础上,编程在数码管上显示“1234”。 2.在以上硬件的基础上,编程显示0~59。 3.总结实验内容,根据实验程序绘制程序流程图。 六、思考题 1.总结程序调试结果,动态显示程序中,确定延时的时间长短与那些因素有关? 2.要改善显示效果,实验程序应做那些修改? 3.如果显示有明显的闪烁感,应如何修改程序? (:) |