第六篇 C51定时器控制数码管刷新 独立按键加减计数 亚龙236

本文介绍了如何使用C51定时器避免肠梗阻编程风格,通过定时器控制数码管每1ms刷新一位,而不再依赖于延时函数,同时结合独立按键实现数码管数值的加减计数,以提高程序效率和实时性。
摘要由CSDN通过智能技术生成
第六篇 C51定时器控制数码管刷新

前面我们用的数码管程序有个小问题,数码管刷新一位然后延时1ms,再刷新下一位再延时1ms,这样会导致显示一次8位数码管需要8ms时间。在这8ms延时之内cpu别的啥事都干不了,只是原地踏步耗时间,会导致程序暂停在延时这里造成阻塞—这种 肠梗阻编程风格 应该避免。
编程原则: ms级别及其以上的nop延时应该避免出现

现在问题:显示要稳定必须间隔1ms左右刷新下一位数码管,又不能用延时。
解决方案:51单片机有定时器可用,就像闹钟一样,间隔一段时间闹铃一次提醒你做某事。可以用定时器控制来完成所需功能。
方案示例:定时器设置为1ms间隔,每次计时满1ms置位数码管的刷新使能标志,通知数码管可以显示下一位了。为了演示效果增加两个独立按钮,通过按钮增减数码管末位数字(每次按下操作±1)。在主程序中只管调用数码管显示等任务,不会有任何阻塞。
仿真电路图:
在这里插入图片描述源代码:

/*
教学使用
演示定时器、数码管和独立按键配合工作
作者:李枝蔚 西峰职业中专 lzwhjx@163.com

*/
#include <REG52.H>
//数码管硬件连接	
#define seg_data P1
sbit seg_cs1 = P2 ^ 6;
sbit seg_cs2 = P2 ^ 7;
sbit seg_cp = P2 ^ 5;
sbit keyup=P3^0;
sbit keydn=P3^1;
//---------------------
int num;
bit  seg_refresh_en=0;					//数码管刷新使能标志,每1ms置1.
unsigned char xian[8]={
   0,0,0,0,0,0,17,17};
unsigned char code shuma[] =	{
   0xC0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值