C语言实现共阴极数码管操作

     共阴极或者共阳极数码管,因为其需要电流大,而一般51输出电流低,需要锁存器。买的开发板使用的共阴极数码管。

     至于其构造,找个相关方面的书看看,这里主要是对做好的电路板进行编程。

     刚开始的时候,感觉在数码管上显示数字很厉害。但是等到自己写这篇日志的时候,才发现了了。。

     在对数码管编程前,需要对锁存器有所了解。买的开发板上用的是74HC573贴片式的。

     74HC573真值表

     输入                 输出

     !OE      LE       D      |     Q

     L           H         H     |     H

     L           H         L      |     L

     L           L          X     |      Q0

     H          X          X     |     X

   <真值表具体参考郭天祥那本新概念P36页>

    使用的时候74HC573的 !OE 引脚需要接低电平,否则D跟Q都成任意电平了,不听自己使唤了。失去锁存器的作用,因此必须让!OE为低电平。

     通过74HC573在LE端为高电平时,把单片机的IO电平信号锁存。然后把LE变为低电平,这样不论单片机的IO电平如何变化,74HC573的输出口电平都保存LE变为低电平之前的数值,从而实现锁存。

    由于多位数码管的段都是接在相同的IO口上,因此在买的这块开发板上分别用两个573对多位数码管的段、位进行锁存。

一、静态数码管显示的实现

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是用STM32共阴数码管制作计数器的C语言程序代码: ```c #include "stm32f10x.h" #define DIGIT0 GPIO_Pin_0 #define DIGIT1 GPIO_Pin_1 #define DIGIT2 GPIO_Pin_2 #define DIGIT3 GPIO_Pin_3 void GPIO_Configuration(void); void Delay(__IO uint32_t nCount); int main(void) { int count = 0; GPIO_Configuration(); while (1) { if (count > 9999) count = 0; GPIO_Write(GPIOA, DIGIT0); GPIO_Write(GPIOB, count % 10); Delay(100); GPIO_Write(GPIOA, DIGIT1); GPIO_Write(GPIOB, (count / 10) % 10); Delay(100); GPIO_Write(GPIOA, DIGIT2); GPIO_Write(GPIOB, (count / 100) % 10); Delay(100); GPIO_Write(GPIOA, DIGIT3); GPIO_Write(GPIOB, (count / 1000) % 10); Delay(100); count++; } } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = DIGIT0 | DIGIT1 | DIGIT2 | DIGIT3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_Init(GPIOB, &GPIO_InitStructure); } void Delay(__IO uint32_t nCount) { for(; nCount != 0; nCount--); } ``` 代码中,首先定义了数码管的引脚,然后在`GPIO_Configuration()`函数中对GPIO口进行了初始化。在`main()`函数中,通过循环实现计数器功能,每次循环都将计数器的值分解成四位数字,然后通过GPIO口依次输出到数码管上,实现数码管的显示。 需要注意的是,在每次循环中都要进行一定的延时,否则数码管的显示会非常快,无法看清楚。可以通过调节`Delay()`函数中的延时时间来控制数码管的显示速度。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值