本次实验,我们将要用16个LED来做一个旋转灯,让16个LED成一条横条的排列。首行最右边的LED亮起来,然后熄灭,换成它左边一个亮起来,然后每次向左边亮一个后,原先右边的那一个就熄灭了,等到最左边再也没有LED可以亮的时候,又会换回到最右边的一个来亮,这样子一直绕下去。如图5-21所示。
图5-21 运行情况
1. 目的
电路上:了解74373的特性,学习如何使用它,并将它与PIC单片机连接。
程序上:学习以程序来控制74373,来扩充PIC单片机的输出端口。
2. 材料

3. 电路
图5-22 原理图
4. 实照
图5-23 实照
5.步骤
1. 依照以往先将基本的PIC单片要操作路完成。如图5-24所示。
图5-24 PIC基本的操作电路
2. 将两片74373、两个排阻、16个LED都插入面包板。
3. 将PIC的RB0到RB7的引脚,对应到两片74373的1D到8D引脚,将它们连接起来。
4. 将PIC的RA0引脚,与一片74373的G引脚连接,而另一片373的G引脚则和RA1引脚连接。
5. 将两片373的OC引脚直接接地。
6. 373有1Q到8Q的输出脚,两片373共有16个输出脚,这16个输出脚,这16个输出脚分别对应接到16个LED的正端上,然后16个LED的负端分两组,每八个一组,每组接到排引脚上,但是不可以接在共地端的引脚(即是排阻封装上印有白点,其白点下方的引脚)。
7. 最后两个排阻各只剩下一个引脚(即是先前要求保留的共地端引脚),将I接地。
8. 接上电源,大功告成!!
6. 流程图
图5-25 流程图
7. 程序
标号说明
·RESET:起始程序的进入点,PIC复位后即会跳到此处
·SHIFT:F8寄存器的移位程序进入点
·SHIFT_:F9寄存器的移位程序进入点
·DISP:F8寄存器的移位程序进入点
·DISP_ F9寄存器的移位程序进入点
·DELAY:延时子程序的进入点
·DELAY1:延时重复递减判断的进入点(1)
·DELAY2:延时重复递减判断的进入点(2)
寄存器使用配置情况
·F3:移位程序判断会用到C标志位、Z标志位
·F5:输出控制信号,以控制74373的G引脚
·F6:输出LED的亮灭值
·F8:保存第一组输出值用
·F9:保存第二组输出值用
·F10:F10的BIT0保存下一个输出为第一个或第二个74373操作
·F11:延时程序的外部循环计数器
·F12:延时程序的内循环计数器

8. 说明
(1) 起始程序:
这一段程序在各个单片机程序中几乎都有,只是多寡不一而已,起始程序的目的,大多有以下作用:
□规划单片机内的使用资源:例如设置端口引脚的输入输出状态,要不要将预分频器安排给看门狗定时器使用等……。
□一些程序运行的准备工作:例如建立一些常用的常数,或是复位后有些值的状态并不适当时所要作的改变,或外围芯片的准备操作。
□提供起始信息或自我检查:例如显示READY信号提示,或是作自我检查,一旦硬件有问题,可以发出ERROR的信息。
□系统同步的等待:有时PIC必须与外围芯片共享RESET电路,但每个外围芯片的复位回复时间不一。此时就必须加入延时程序或等待一些信号进入,才能使系统正常工作。
以本次所写的程序为例,其中包含了设置I/O端口的状态(RA、RB输出)、关键位与寄存器值的默认(清除C、F10的第0位)、设置外围芯片(373)的起始值,其中因373反应快速,无需PIC用延时程序作等待。
(2) 移位程序:
移位程序的路关键,在于F10寄存器的第一个位,我们的设计是当这个位为0时,我们只执行F8寄存器的移位,反过来说F10第一个位为1时,我们则只作F9寄存器的移位;至于F8、F9寄存器的内容,其实就是要显示于LED的内容。
在分配上,F8对应右边的8个LED,F9则是对应左边的8个LED。除此之外,无论是的移位,或者是F9的移位,在作完移位后都要作C标志位是否有被设置的检查。
这检查的用意是为了得知寄存器是否已经移出界了?PIC的移位指令是必定连带C标志位一起作移位的,使用MOVW F6的指令是无法将C标志位的内容作输出的,一旦C标志位因移位的作用而变成1时(这也代表已经移出界),我们就必须更改F10的第一个位值,换个寄存器作移位与显示了。
(3)显示程序:
显示程序同样的也要对F10.0 (指F10的第一个位)的值作判断,以得知要显示哪一个值。
i在硬件操作上,我们要用RA0、RA1来作控制线,用它们来控制373的G引脚,当我们要更改373的内容时,必须使RA0、RA1为输出高电平,此时373的G,其电位也受RA0/1所提升,然后才能接收来自RB端口的新值。
一旦G又回复低电位,就无法地更改内容了,除非我们又用RA0/1使G再度为:1"才行。由于此次的设计是将OC引脚直接接地,所以新值会直接快速的瓜地输出(1Q到8Q)上。
值得一提的是,显示程序没有改变F10。0位的能力,只有移位程序才有,它纯粹只能检查,而移位程序地移位完后可以经判断C标志位来决定是否要更改F10.0的值。
(4)延时程序:
由于肉眼无法看清楚快速移动的轨迹,若是我们的程序不加入延时程序而直接输出 的话,所见到的会是16个LED全亮的情形,但实际上每个时间中只有一个亮而已。为了迁就视觉,所以用延时程序放慢操作,使移位能让人感受到。
9. 除错
我们列出一些本次实验可能犯的错误,希望对读者能有所提醒或帮助。:
1. 本次实验74373的所有引脚都已用上,可以检查看看有没有少接?
2. 若是复位善不稳定,或操作异常时,可以考虑中PIC的VDD与VSS之间加入1uF的电容,以及地MCLR接VDD的线中串接限流电阻(100于100Ω左右)。
3. 芯片复位后起先会有LED瞬间全闪一下,这是正常现象。
4. 将PIC的通道BI/O BUS分别传入两个74373的1D至8D,线路多且复杂,需要注意。
5. 当74373操作异常时,可以必用更好的74HC373,LS型与HC型的差价不大。