51单片机 stc-B板学习——八位数码管动态显示
这个程序实现的效果是将程序下载到STC板子上后,可以看到8个数码管从左到右分别显示0到7的八个数字,隔一段时间后显示1到8,接着是2到9,再接着是3到0以此循环向左移动。
首先我们先来看看数码管和发光二极管的硬件电路图
需要明确的是,这个程序的是实现需要:LED灯亮且不会数码管同时亮。
- 要让LED灯亮,首先需要将P0的8个引脚以及P2.3设置成推挽输出(工作模式)(这里对工作模式的设置方式不再赘述)
- 数码管和LED灯不同时亮:通过E3实现。E3 既是反相器输出信号也是数码管的使能信号,当E3=0时,LED灯(共阴极)亮,数码管位选信号的使能信号为0,数码管不亮;反之,数码管亮而LED不亮
接下来,我们还需要注意到的是,不光要是数码管和LED灯亮,还要控制其频率,这里就需要用到我们的定时器的功能了。
这里用到了两次分频的过程:
第一次:每1ms flag++,加至8(扫描速度够快),控制位选,视觉错觉感觉每一位都亮,也即是实现数码管每一位都显示数字的效果,而具体的显示的数字是多少,在第二次分频中实现
第二次:count++,加至100,数字更新一次,让每一位分开显示(视觉),如果速度很快,眼睛看到的效果是很多个数字重叠显示在一位(无法分辨)
有了以上分析,我们再来看看整个程序的执行过程就很容易了。
对于代码的分析,我们首先应该从主函数出发。
首先是一个初始化的过程:
这个初始化过程主要是将对应引脚的输出设置成推挽输出。接下来打开了定时器中断,并设置初始值是1ms,也就是定时器中断函数每1ms触发一次。
定时器中断函数: