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触发一次。

定时器中断函数:

 

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值