点阵电子钟制作 电路方案
近日完成了32*8点阵电子钟的部分制作,现在就在我的身边正常的行动着。 在此写一下制作及注意事项,便于大家共同进步。 我的这款32*8LED点阵电子钟是用多层夹板组成的,所以其非常像三明治,我就把它叫三明治电子钟了。这个电子钟的主要元件有4块8*8的单色行列式点阵屏单片机控制器,时钟发生芯片,温度检测芯片和一个BCD转16线的转换芯片。大家也可以根据自己的需要加装蜂鸣器和红外遥控接收头之类的外围接口。这台电子钟最关键的地方是LED的流动显示和对接口芯片数据的读取上。以下就原理方面就不像大家细说了。旨在详细的阐述一下制作与程序的设计。电路的设计:为了有效的利用I/O资源,我们利用外扩的芯片的方法解决。74HC154是4线BCD码转换为16线的译码器,在电路中用作列的扫描。而行则是由单片机的P0、P2口直接驱动的,显示方式应该是逐列扫描。为了增加驱动能力,提高LED的显示亮度,我用了三极管8050和8550作显示驱动。 时钟的发生我采用了目前较流行的DS1302实时时钟芯片,而没有用单片机直接产生,因为单片机产生日期星期计算是比较复杂而且不精准的。而DS1302具有涡流电池备电,2100年以前的日期、时间计算、SPI总线通信。并在内部集成了31个静态RAM。使用这款芯片可以减小CPU的工作量,使CPU主攻LED的扫描。温度检测我采用了DS18B20温度转感器,它是普通的三极管封装,内部直接将温度变成数字信号,并用先进的单总线输出。抗扰力强,占用资料少。更在内置的EEPROM。没用AD转换,使系统更简单。 在制作时一定请注意P0口和DS18B20的上拉电阻。LED屏的引线应先用万用表测好,行和列标出。我是引用一个16*16屏的电路图的原理,只是将它的拼成一行而已,再在软件上加以修理就行了。所以会作网上流行的16*16的屏再作我的电子钟就简单了许多。电源最好是用9V的稳压电压通过7805稳压得到,这样可以得到大一点的驱动力。 程序的设计:硬件部份对于有一定的电子制作基础的朋友并不是很难,甚至可以说是简单。这个东东的关键是程序的设计,思路、实现方法、技巧是我们要了解的重点之所在。 首先我来解决一下LED屏的显示问题吧!我们的时间显示是可以向左流动的数据显示,了解16*16LED点阵屏的朋友会知道他是用查表的方法来实现的,可是查表的方法只配合不变的或是很少改变的数据,而我们所要显示的时间是随时改动的。对此,我们引用了显示缓冲区的方法,也就是在单片机的RAM中开辟一定的显示单元(视显示的字节数而定,本屏开了32个缓冲单元),LED屏的 显示子程序始终从这个缓冲区中取显示的数据来显示,而我们的流动程序只要将显示缓冲区的数据左移或右移就可以了。而我们待显示的数据也是每隔一段时间将时钟和温度数据通过转换程序变成显示数据送入显示缓冲区的。 待显示的数据很长,显示缓冲区只有32个字节,怎么显示呢?在此,我们又开了一个RAM备用显示缓冲区,用来存放一个整屏没有显示完全的数据部份,我们用一个移动程序让备用显示缓冲区的数据移入显示缓冲区,当所有要显示的数据完成之后我们再读取新的时间和温度信息并转换成显示数据送入备用显示缓冲区。我们的数据显示问题就解决了。在此顺便说一下,现在有许多的爱好都朋友在学单片机时总是认为RAM没有什么太大的用处,其实正好相反。RAM在越高级的程序和系统中的用处就越大,数据的堆栈,缓冲区,信息处理等都对RAM有一定的要求,因为我们平日的程序是小规模的,所以感觉128BIT的RAM已经是太多了。我认为只有当你可以很好的利用单片机的全部资源(如RAM,FALSH,定时/计数器,串口,内置比较器等)才算是真正的入门单片机,我也正和大家一样朝这个方向努力。 显示的问题解决了,下面看看怎么进行数据读取、转换并送入显示缓冲区的吧。我所说的只是一种思路,实际的程序还得大家自己考虑。其实学习最重要的不是学会某一样事物,而从事物中学会一种好的学习方法,用这种方法来应对更多新的知识和技术。一个一个的学是跟不上技术的发展速度的。 我们从时钟芯片和温度传感器中得到的只是十六进制或BCD码的数据,首先我们就得将其变为显示的数据类型,也就是每一列的字节数据。这是一组数据,用这一组数据字节组成一个要显示的值。这里我们用查表法将事先设定好的每一个数据的值逐一取出送入备用显示缓冲区。这一过程要在上一次循环显示完全结束后才可以进行,不然会显示乱码的。这样我们就得到了一个流程:读取时间、温度数据-----将其转换为一组表值数据-----将全部数据一次性送入备用显示缓冲区------当显示数据完全流出了备用显示缓冲区后---读取时间、温度数据-(循环)。时间显示的流动我们用定时器来完成,这样不会再占用CPU时间让显示流畅且稳定性高。而1~9,“月”,“日”,这样的数据表是分
用户评论