工控网首页
>

应用设计

>

单片机轮流点亮二级管

单片机轮流点亮二级管

2013/10/15 11:50:40

本文论述一个用单片机轮流点亮发光二极管的课题。

一、课题要求:

1.用单片机顺序点亮A、B、C三个发光管。
2.三个发光管的点亮时间分别是:A、1S B、3S C、5S。
3.有暂停和返回功能,且返回后是在原先的基础上继续。

二、为满足课题要求,兼顾成本,元件选型如下:

名称                       型号      数量
单片机                     AT89C51   2
晶体振荡器                 12MHZ     1
晶体振荡快起稳振介质电容   30Pf      2
上电复位电解电容           10Uf      1
上电复位电阻               8.2K      1
微动按键                             2
发光二极管                 Φ3        3
电阻                       1.2K      5个
电阻                       200Ω     1
注:
器件改用说明:
接线应该是越简单越好。且单片机的P1口串电阻是可以直接驱动Φ3的发光二极管。所以本设计采用单片机串1.2K电阻直接驱动发光二极管。而不用7407来驱动。

 

三、实现原理:

1.发光二极管的点亮由单片机分时发立即数#01H、#02H、#04H至P1口。
2.延时采用定时器T0的模式二,THO、TL0赋初值为#06H,即6。随后由高八位在计时溢出时自动向低八位赋值。由于单片机采用的晶振频率为12MHZ所以定时器计1,所用时间为1uS,而低八位一个字节8BIT总计数值为256。减去初值。即每次计满250就溢出一次。将TO中断允许ET0、单片机总中断允许EA打开,那么每隔250uS就会调用T0INT中断程序一次。在T0INT中用R0加一将其累加。并判断是否累加至#0C8H=200。到了再令R1加1。当R1加到20时。刚好延时1S。在发光二极管A点亮后只要令R1等于20就转而点亮B,即可得到1S的点亮时间。在点亮B后只要令R1满20,R2加1,当R2加到3时转而点亮C,就可得到3S的点亮时间。C点亮后令R1满20,R3加1,当R3加到5时再倒回点亮A,就可以实现5S的点亮时间。
暂停功能的实现,本设计采用了外部中断0。即在按暂停按键时向单片机的INT0非脚输入一个低电位。这个动作在电路实现上是让INT0非脚在正常情况下经一个1.2K电阻接高电位5V。按键接在INT0非脚与地之间。这样按键时INT0非脚就直接接地,从而实现低电位的输入。(见电路图)在程序方面,外部中断允许EX是打开的,且将触发设为下降沿有效。由于中断源在自然级别中外部中断的级别是高过定时器0的。所以就算申请中断的那一刻CPU正在执行T0中断也可以将其中断下来转而执行外部中断0的中断程序。这样就实现了在任意时间的暂停功能。并且原先状态保持不便。当中断返回时该管点亮延时偏差最多时不会超过250uS 。这个偏差是发生在定时器T0刚溢出,又自动赋初值计到7时,外部中断0发生了,这时T0没有停止计时,当计到256溢出TF0置1。TO中断挂起。当外部中断0返回时就会马上执行TO中断,R0加1,但这256-7=249uS是在暂停后计得,因此该处比正常时少延时249uS 。以后再溢出因为TF0已置位故会自动丢失,不会产生偏差。不过这个偏差值也是可以通过在进入INT0中断程序中清TR0,让定时器停止计数,返回时令其置1避免的。但在本设计中本人认为没此必要。所以没作处理。
暂停退出的实现,本设计中该功能在电路上是在P0.0脚与地之间接一个200欧电阻,在P0.0脚与高电位5V之间串一按键跟1.2K 电阻。这样在正常情况时P0.0脚是经200欧电阻接地的。按暂停返回键时会得到200欧电阻上分得的电压。(见电路图)即按键时输入一个较原先高的电位。在程序上我把它放在INT0中,当CPU响应外部中断0时将P0口的数据读入A中,然后让A与立即数#01H比较,若按了暂停返回键则这两个数是相等的,CPU 就执行中断返回。若没按暂停返回则该两值不等,CPU 继续采样比较。
四、课题结果:

系统接入DC5V电源之后,可以看到ABC三灯按时序轮流点亮。
此时可以任意按暂停键。发光管跳动就会停下。
此时若按暂停返回键,发光管将会在原先停下位置开始继续循环下去。
验证完毕。由此我们可以得出结论,本文介绍的方发可以用很少的成本实现课题的论证。

投诉建议

提交

查看更多评论