【蓝桥杯单片机(7)】数码管定时器显示任意字符串


备赛目录

1、数码管的电路连接

将所有数码管的段码线并联在一起,即共用段码线,位选线独立,最终由位选线来控制是哪一位数码管显示。蓝桥杯共用的是阳极,即共阳极数码管

1.1段选

1、我怎么控制P0给数码管的灯管工作??
我们知道数码管是由8根LED灯管组成的,通过控制这些灯管的亮灭来实现显示数字。
和led模块相同的是,它的灯管也是由P0控制的,那我怎么区分我要点亮LED灯还是点亮数码管呢??

诶74HC138、74HC02和M74HC573M1R这三个器件实现了这个功能,
在这里插入图片描述
P25、P26、P27,他们对应的权重分别是1、2、4。通过控制它们可以选择74HC138这个译码器哪一个输出1,可以看到Y7C是控制数码管灯管的使能开关,当P25=1,P26=1,P27=1,也就是权重和=7就选择的是Y7C,
那我想要直接一次性写三个怎么办呢??
P2 =P2&0X1F;//屏蔽不需要的其他五个引脚
P2 = 0XE0;//使P25、P26、P27等于1
组合在一起就是P2 =

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这里提供一份蓝桥杯单片机数码管定时器动态扫描的参考代码,供大家参考。 ```c #include <reg51.h> //头文件 // 数码管位选信号 unsigned char code LED_W[] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; // 数码管段选信号 unsigned char code LED_D[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 }; // 定时器中断服务函数 void Timer0_ISR() interrupt 1 { static unsigned char count = 0; // 计数器 static unsigned char index = 0; // 位选信号索引,表示当前显示的是哪一位数码管 count++; // 计数器加1 if (count >= 100) { // 计数器达到100时,表示100ms已经过去了 count = 0; // 计数器清零 P0 = LED_W[index]; // 先将位选信号输出到P0口 P2 = LED_D[index]; // 再将对应的段选信号输出到P2口 index = (index + 1) % 8; // 索引加1,循环显示8个数码管 } } void main() { TMOD = 0x01; // 定时器0工作在模式1,16位定时器 TH0 = 0xFC; // 定时器初值,定时1ms TL0 = 0x66; ET0 = 1; // 允许定时器0中断 EA = 1; // 允许总中断 TR0 = 1; // 启动定时器0 while(1); // 主函数空循环,等待中断触发 } ``` 该代码中,通过定时器0产生1ms的中断,然后在中断服务函数中动态扫描8个数码管。其中,`LED_W`为数码管的位选信号,`LED_D`为数码管的段选信号。在每次中断服务函数中,先输出位选信号,再输出对应的段选信号,就可以实现数码管的动态扫描了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小谦·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值