|
发表于 2023-12-10 18:56:53
|
显示全部楼层
本帖最后由 xiaocake1 于 2023-12-10 18:58 编辑
程序我就不去实际写了,反正写了您也看不懂,我也好久没碰单片机了。
我也没有用单片机做过实际项目,只是写过一个简易的电子钟。
所以我就只“简单说说”,如果是我的话会如何实现。
以下说的是51单片机,8个LED接在P1口,可以用89C2051,89C2051的引脚也就是P1口是全部引出的。
(P1.0~P1.7,各LED的正极通过合适大小的电阻接+5V,负极接到单片机引脚)。
晶振就用低点的6M频率。
总体思路: 用移位指令, 每2秒将P1口移位1次,就是想要的效果了。
这里的2秒时间,使用定时器来实现。
但是2秒时间,对定时器来说是很长的时间了,所以只有把2秒分割成定时器可以接受的小片段。
比如10ms(毫秒),那么要定时器要重复200次才能凑出来2秒时间。
定时器时间(计数)一到就会触发中断,就在中断的时候进行移位操作就行了。
整个程序就两部分:主程序和定时器中断服务程序。
1.主程序:
给P1口设置初值(二进制11111110,16进制就是FE)。就是将最低位P1.0设置为低电平,引脚被下拉到接近接地状态,这样就能点亮P1.0的那个LED。
选个位置(取个名字),用来存放定时器计时次数,计时次数最开始设置为0。
给定时器设置初值,设置为自动重载模式,开启定时器。
停在原地。(等待定时器中断)
(定时器的初值是按10ms时间和晶振频率计算出来的。具体怎么算的我就不啰嗦了。
定时器自动重载,就可以自动重复定时。不然每次时间到了还得写代码再次给初值。。。太麻烦。
)
2.定时器中断服务子程序:
将计时次数+1
判断计时次数有没有到200。
到200了,就将P1口移位一次,并将次数改成0。
没到200,就退出子程序。
程序用汇编或C语言都可以,总共估计最多十来行的样子。
不知道我上面的回答,您是否满意,不知道您能看懂多少。 |
|