这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » 任务二

共2条 1/1 1 跳转至

任务二

菜鸟
2024-05-04 23:29:57     打赏

用定时器实现数码管从10到0的递减,步长为1

一:数码管内部构造
数码管也称LED数码管,晶美、光电、不同行业人士对数码管的称呼不一样,其实都是同样的产品。

数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、3位、4位、5位、6位、7位等数码管;

按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

如图:

二:74HC595脚位图及说明


管脚说明:

在这里插入图片描述

14脚:DS(SER),串行数据输入引脚

13脚:OE,输出使能控制脚,它是低电才使能输出,所以接GND

12脚:RCK(STCP),存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存到存储寄存器。

11脚:SCK(SHCP),移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新的bit(从SER输入)。

10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接 高电平即可。

9 脚 :串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这里出去的。用于595的级联。

Q0~Q7:并行输出引脚

使用参数:


VCC:2V~6V,5V最好

IQn:± 35mA

三:代码编写

#include "ti_msp_dl_config.h"  void delay(uint32_t cnt);  void DispNum(unsigned char num, unsigned char pos);  /* This results in approximately 0.5s of delay assuming 32MHz CPU_CLK */  #define DELAY (16000000)   // 500ms  #define ms50 (1600000)   // 50ms  #define s1 (32000000)   // 1s  #define ms1 (320)   // delay0.01ms  unsigned char TAB_SEG[] = { 0xC00xF90xA40xB00x990x920x820xF80x800x900x770x830xC60xA10x860x8E0xFF0xBF };  //显示位置,自左向右  unsigned char TAB_POS[] = {0x800x400x200x100x080x040x020x01};  // 发送数据给数码管模块用的串行时钟,时钟上升沿有效  #define SCLK_0 DL_GPIO_clearPins(GPIO_LED_PORT, GPIO_LED_1_PIN)  #define SCLK_1 DL_GPIO_setPins(GPIO_LED_PORT, GPIO_LED_1_PIN)  // 使数码管唯一寄存器数据被锁存到存储寄存器用的锁存信号,上升沿有效  #define RCLK_0 DL_GPIO_clearPins(GPIO_LED_PORT, GPIO_LED_2_PIN)  #define RCLK_1 DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LED_2_PIN)  // 发送数据给数码管用的串行数据位  #define DIO_0 {DL_GPIO_clearPins(GPIO_LED_PORT, GPI_LED_3_PIN);}  #define DIO_1 {DL_GPIO_setPins(GPIO_LEDS_PORT, GPIO_LED_3_PIN);}  void delay(uint32_t cnt) {      uint32_t d=cnt;      while(d--);  }  /**  * 显示一位数码管数据  * chr : 显示的数值字符(‘0’-‘9’,‘A’-‘F’)  * pos :显示的位置(最左侧开始:0-7, 对应的位置数据:0x80, 0x40,0x20,0x10,0x08,0x04,0x02,0x01)  * 暂时不考虑小数点的处理。数字后面有小数点的场合,相当于该数字的小数点笔段位清0  */  void DispNum(unsigned char chr, unsigned char pos) {      unsigned char i, num;      // 根据字符,获取对应的段位码数据      if (chr>=0 && chr<16) {          num=TAB_SEG[chr];      } else if (chr>=' ') {          // 空格,所有笔段都不显示          num = 0xFF;      } else if (chr>='-') {          num = 0xBF;      } else {        return;      }      for(i=0;i<8;i++) {        // 输出笔段对应的数据位        if ((num & 0x80)>0) {            // 笔段数据为1 的,DIO对应GPIO口输出高电平            DIO_1;        } else {            // 笔段数据为0 的,DIO对应GPIO口输出低高电平            DIO_0;        }  

四:效果

image.png




工程师
2024-05-05 09:18:29     打赏
2楼

666


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]