发 帖  
原厂入驻New

基于单片机简单实现图形显示的方法

2011-8-31 09:11:14  1619
分享
 随着单片机在当今社会中的应用越来越广泛,本设计从单片机应用方面为教学提供一种教学项目,并为点光源的图形显示提出一种方法。
  1设计思路
  当一个电光源的光束射人到镜面上时就会发生反射现象,当我们让光束以固定角度入射到镜面上时,就会在另一面反射出来。这时,我们让镜面以水平方向中心轴为支点前后快速晃动时,由于人眼的余辉效应,我们就会观测到反射出来的光在显示屏上呈现出一条竖向的光线;同样当我们以竖直方向中心轴为支点前后陕速晃动时,我们就会在显示屏上观测到一条竖向的光线。
  我们就以这种现象为模型,让点光源发出的光线先经过一个以水平中心轴为支点,前后转动的镜面,反射出来的光线再经过一个以竖直中心轴为支点前后晃动的镜面。当两面镜子都不晃动时所产生的点称为原点;把其中一个镜面沿水平方向轴晃动时,另一面镜子不动时产生的光线称为Y轴;把其中的一面不动,而另一面沿竖直方向轴晃动时所产生的光线称为x轴。
  这样我们通过这两个镜子的不同晃动的组合就产生各种各样的图形,例如:通过晃动其中一个镜面就可以产生一条横线或者是竖线,当两个镜面—起晃动时就可以产生斜线、三角形、矩形和圆形,当我们快速的在同部位上利用这些图形的组合就可以形成各种美丽的图案,这就是我们在各种娱乐场所看到的灯光效果。
  我们只需要利用上面所建立的坐标系和最后所需要产生的图形,就可以转换成各种两个不同的镜面组合。我们把镜面中心轴固定,其中一测装上弹簧这样的恢复装置,另外一侧装上动力装置,如:在一侧贴上贴片,利用电磁铁的吸引力就可以驱动镜面晃动;还可以利用耳机中的发声装置产生动力。总之,就是把镜面的转动转化电量的变化。
  2硬件电路设计
  在电路的设计中,我们只需要完成利用单片机控制两个电量的可控变化就可以完成整体设计。我们利用单片机的P0口和P 2口分别输出两个二进制数,然后经过DA转化为模拟信号,然后在经过功放电路之后传给动力装置,这就是硬件设计的整体思路。
  下面分别进行详细说明。
  A控制部分:在学校教学中考虑到教学成本,经常采用89C51作为控制核心,因为其具有出色的性价比及可靠的稳定性。控制器的作用是我们可以利用控制器完成产生何种波形的选择,还要利用单片机的运算能力,运算各种图形形成所需要的变化量,还要利用单片机不断的输出各种中间变化量,从而使电路中产生一种我们所需要的信号。电路是一个基本的最小系统,外加一个利用中断源扩展的八个按钮按键,八个按键分别接P1口各位。按键的作用是:产生直线图形、产生三角形图形、产生矩形图形、产生圆型图形、产生型图形、使图形变大、使图形变小、使产生图形闪烁的频率变化。具体连接具体原理是,当我们按下其中某一个按键时,对应的电路信号就会从高电平变为低电平,这八个信号经过与电路的运算之后从 INTO端就会输出一个低电平,使单片机的外部中断0上的信号变低,进人中断程序。这八个信号线和单片机的P1口相连,从而传给单片机一个对应的数值。从而使单片机判断出,是那个按键按下,进而进行程序处理。
1.jpg
  B外围电路:把从单片机的PO口和P2口输出的数据经过转换为模拟信号。这部分主要是AD转换电路,由于我们的显示的图形比较多,所以在图案比较复杂时,信号的变化频率是比较决的,具体的芯片型号需要根据图形显示时间以及闪烁变化的频率计算后的数据来选择。只要芯片的工作速度跟的上就行。
  C驱动部分:由于系统的动力部分是由电流驱动的,所以经过外围电路输出的电信号不能直接连接到动力装置上,需要经过一个功率放大电路加强电路输出的驱动能力,可以采用功放芯片或者是经典的OTC功率放大电路均可,后者可以提高制作者对模拟电路的理解和调试电路的能力。
  3软件设计
  当单片机上点复位后,Po__P3口均输出高电平,所以在上电复位之后,我们首先用程序把所有端口置零,使输出电压为零,从而使镜面处于原始静止位置,并把中断开启,并置一些初始值。
  当程序开始运行之后就会进入图形显示的选择程序,我们设置一个延时程序,当这段时问内没有按键按下时,单片机按照我们设置的初始值显示一个固定的图形;当这段时间内有按键按下时,程序会根据我们按下的按键赋值,从而显示不同的图形或改变图形的大小或者是改变图形闪烁的频率。本段程序的按键判断可用比较法来完成,当有按键按下时,程序会进入中断,我们判断Pl寄存器中的数据是否为FEH,若是则说明此时P1.0连接的按键按下,此时我们让程序返回执行某一图形的显示程序。图形显示程序是最重要的部分,我们根据对应的按键按下时,从中断程序返回的数值判断出,主程序中应该要执行某个图形的显示程序。图形显示程序中我们首先从直线开始说明,直线显示比较简单,我们想显示一条横线的时候,就从单片机的P2口输出一组从H开始逐渐增大,然后又逐渐减小的值,从而是动力装置得到一个从0逐渐变大再逐渐变小的信号,使其中一个镜面沿中心轴逐渐的向一侧偏转,然后在弹簧的恢复力的作用下渐渐复原,在显示屏上投下一条横线。同样想显示竖线的时候,我们只需要使程序从P2口输出一段&H逐渐变大,然后由大逐渐变小的值即可。
显示一条斜线时,根据函数Y:KX+B可知,当X轴上变化的值已知时,就能算出对应的Y轴的值,我们x轴上的数值从00H开始变大,然后变小时,就能得到对应的Y的值的变化趋势,把这两个值分别从P0口和P2口输出,就会使两个镜子共同转动,使显示的图形呈Y=KX+B趋势。
  同样,我们想显示三角形时,任何三角形都是有三条两两相交的有限的直线够成,分别记作Y=KX,+B.,Y,=K,X,+BY= KX+B,我们把X轴的变量从H逐渐变大,再逐渐变小,而Y轴上的值分别按照各自的值在各自的区间内变化一次,从而在P0口和P2口分别输出一组对应的变化信号,使输出的图形显示出三角形。
  最后,矩形是由四条有限直线的构成,并且是有两组平行线,我们按照这个规律让X轴和Y轴的数值各自变化一次,即可得到结果。型图形,是由四条相交于一点的直线构成,显示的时候,我们必须首先计算出,相交点的坐标,然后分别按各自的变化规律,从P0口和P2口输出一次就行。圆形显示时,我们首先计算出圆点的坐标然后,按照公式 Xz+Yz:Rz计算出各个点的坐标,进而输出显示即可。
  图形的大小的确定,图形的大小是由两个镜面每次变化的最大范围决定,当我们改变每次变化时X的最大值时,就会改变各个图形对应的大小。我们在程序的起始时,给一个中间值,当我们按下变大按键式,在中断程序中改变这个值,主程序中,当X或者Y的值增大到这个值时,开始变小。注意,因为镜面的转动是有限的,超过这个值时,光线就不会被反射,所以当增大按键一直按下,中间值就会一直增大,当达到极限值后,就不在增大。图像变小按键的程序算法也一样,只是变化时,是让中间值变小而已。
  图形闪烁的原理,就是利用当我们让入射光线和镜面的夹角小于0。或者是大于90。时,光线就不会被反射到外界了,所以,系统显示时,镜面和 ^射光线的夹角应在0。到90。之间。我们在图形完成一次整体显示时,改变P0和P2口的输出值,使镜面和光线的夹角小于0。或者是大于90。,使外界没有显示,在运行延时程序,程序开始时给一个延时值,通过按键按下时,在中断程序中改变这个延时值的大小,这样当我们不断的按这个按键时,图形的闪烁频率从快到慢,或者是从慢到快。系统程序总体流程图如图2所示。
2.jpg
  本设计为单片机应用实例一种可行的方案,但是由于经验和水平有限,在设计中难免存在一些缺陷,还望批评指正。

21ic 山西机电职业技术学院 靳晓波
0
2011-8-31 09:11:14   评论 分享淘帖
1 个讨论
不错
高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发表新帖
关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表