这里使用的TM1637是不带键盘的四数字显示的版本

具体的TM1637的操作可以去网上搜索它的使用手册,上面有这个器件的原理图和使用方法

这个代码的效果是每隔1s(大概是)数码管显示数字减一

这是要用到的头文件,我把要显示的四位数字用a、b、c、d四个变量来做数组和显示函数的连接

这里数据线设置的是P1.5端口,时钟线是P1.4端口TM1637对应的DIO、CLK对应接到P1.5、P1,4.如果不方便接线可以更改

void DIO_OUT()和void CLK_OUT()两个函数中的P1OUT |= BIT4 和P1OUT |= BIT5

如果想用P1.6设置为数据线可以把void DIO_OUT()中的P1OUT |= BIT5改为

P1OUT |= BIT6这样P1.6端口就变成数据线的端口了

如果想要用P2.0~P2..5中的端口作为数据线和时钟线还需要更改

void TM1637_Init()函数中的内容,将要设置的两个端口设置为输出就可以了

P2DIR |= BITX + BIT X;(X就是你选择的两个端口)

/** TM1637_H.h*  Created on: 2022年4月22日*  Author: CircleCheng*/
#ifndef TM1637_H_H_
#define TM1637_H_H_
//0~9数字和带小数点数码管数字16进制值
/**   0=0x3f 1=0x06 2=0x5b 3=0x4f 4=0x66*   5=0x6d 6=0x7d 7=0x07 8=0x7f 9=0x6f*   a=0x77 b=0x7c c=0x58 d=0x5e e=0x79 f=0x71*/
unsigned char Ldata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    不带小数点
unsigned char Ldatadp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};  //带小数点的
unsigned char a = 4;unsigned char b = 8;unsigned char c = 7;unsigned char d = 3;     //设置初始要显示的四个数字
void DIO_OUT(char i)        //DIO高低电平输出0为低电平1为高电平
{if(i == 0) P1OUT &= ~BIT5;else P1OUT |= BIT5;
}
void CLK_OUT(char i)        //CLK高低电平输出0为低电平1为高电平
{if(i == 0) P1OUT &= ~BIT4;else P1OUT |= BIT4;
}
void TM1637_Init(void)
{P1DIR |=  BIT5 + BIT4;  //P1.6为数据线、P1.7为时钟线
}//数据输入开始void TM1637_Start()
{CLK_OUT(1);             //拉高时钟线DIO_OUT(1);             //拉高数据线__delay_cycles(5000);   //延时5umDIO_OUT(0);             //拉低数据线开始数据输入
}//输入结束void TM1637_Stop()
{CLK_OUT(1);             //拉高时钟线DIO_OUT(0);             //拉低数据线__delay_cycles(5000);   //延时5umDIO_OUT(1);             //拉高数据线结束数据输入
}
//TM1637应答
void TM1637_ACK()
{CLK_OUT(0);             //拉低时钟线  使能改变数据线信号__delay_cycles(5000);   //延时CLK_OUT(1);             //拉高时钟线__delay_cycles(5000);   //延时5um//while(P1OUT & BIT6);    //检验数据线是否被拉低CLK_OUT(0);             //拉低时钟线使能改变数据线信号
}
//发送字节
void TM1637_WByte(unsigned char Byte)
{unsigned char i;for(i = 0;i < 8;i++){CLK_OUT(0);         //拉低时钟,使能改变数据线信号if(Byte & BIT0)    //应为TM1637要从低位输入数据所以与0x01与与运算后将数据右移得到每位的数据存到数据线中{DIO_OUT(1);}     //拉高数据线else{DIO_OUT(0);}     //拉低数据线__delay_cycles(5000);//延时Byte = Byte >> 1;   //取走最低位后右移CLK_OUT(1);         //拉高时钟线__delay_cycles(5000);//延时}
}
//显示寄存器
void SmgDisplay(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
{unsigned char i;TM1637_Start();TM1637_WByte(0x40);        //选择使用地址自加模式TM1637_ACK();TM1637_Stop();TM1637_Start();TM1637_WByte(0xc0);        //设置首地址为00HTM1637_ACK();TM1637_WByte(a);    //送数据TM1637_ACK();TM1637_WByte(b);    //送数据TM1637_ACK();TM1637_WByte(c);    //送数据TM1637_ACK();TM1637_WByte(d);    //送数据TM1637_ACK();TM1637_Stop();TM1637_Start();TM1637_WByte(0x8a);  //B0~B2控制脉冲宽度(数码管亮度)7个等级、B3控制显示开关TM1637_ACK();TM1637_Stop();
}
#endif /* TM1637_H_H_ */

然后是主文件,主文件只需要配置一下时钟打开定时器中断然后写一个中断函数就可以了

#include <msp430g2553.h>
#include <TM1637_H.h>
unsigned char num = 0;
//初始化时钟为1MHZ分频系数为1
void InitSystemClock(void){//配置时钟源为1MHzDCOCTL = CALDCO_1MHZ;BCSCTL1 = CALBC1_1MHZ;//选择SMCLK的时钟源为DCO;BCSCTL2 &= ~SELS;//SMCLK选择分频系数为1BCSCTL2 &= ~(DIVS0 + DIVS1);}
int main(void)
{WDTCTL = WDTPW | WDTHOLD;   // 关闭看门狗InitSystemClock();//初始化时钟TA1CTL |= TASSEL_2;   //选择SMCLK为定时器时钟源TA1CTL |= MC_1;       //选择上数模式TA1CCR0 = 49999;    //设置计数值TA1CTL |= TAIE;      //打开定数器中断TM1637_Init();          //初始化TM1637SmgDisplay(Ldata[a],Ldata[b],Ldata[c],Ldata[d]);_EINT();    //打开总中断while(1){}return 0;
}
#pragma vector = TIMER1_A1_VECTOR
__interrupt void digital_ISR(void)
{if(TA1IV & 0x0A){num++;         //完成1s计数变量if(num == 20)   //1MHZ计数50000耗时5ms;20次就是1s{num = 0;SmgDisplay(Ldata[a],Ldata[b],Ldata[c],Ldata[d]);if(a == 0 && b == 0 && c == 0 && d == 0){a = 10;}if(b == 0 && c == 0 && d == 0){b = 10; a--;}if(c == 0 && d == 0){c = 10; b--;}if(d == 0){d = 10; c--;}    //结束后会自减1所以初值设为10d--;}}
}

编译后就能点亮了

基于MSP430G2553点亮TM1637数码管相关推荐

  1. TM1637数码管实验总结

    目录 实验目的: 问题总结: 实验目的: 作为一个共享项目中的一部分,采用四位数码管实现时间的倒计时. 问题总结: 因为赠送的资料是arduino的程序,所以需要自己移植到stm32中.一开始以为TM ...

  2. 12864液晶深入学习笔记_1——基于msp430g2553

    12864液晶学习笔记 Created on: 2012-8-30 Author: zhang bin 这是我对12864的学习笔记,12864液晶功能很全面,使用起来也很方便,能够满足一般的研究和工 ...

  3. 基于arduino的一位数码管控制

    基于Mixly的一位数码管控制 硬件: arduino编程板.一位数码管.220Ω电阻.杜邦线若干. 软件: Mixly图形化编程软件. 目标: 通过mixly软件对arduino编程, 实现一位数码 ...

  4. 基于MSP430G2553的模拟风扇控制系统

    基于MSP430G2553的模拟风扇控制系统 本次设计是通过CCS和AD15设计的一个模拟风扇控制系统,该系统主要包括独立键盘电路模块.直流稳压电路模块.程序下载电路模块.数码管显示模块.三极管LED ...

  5. Mind+实现自定义用户库——TM1637数码管

    Mind+实现自定义用户库--TM1637数码管 前言 Mind+内置支持上百种常见的传感器库,并从V1.6.2开始,开放用户库,任何用户均可以制作和分享自己的用户库,并提供了本地及网络加载方式,方便 ...

  6. Arduino实时时钟设计(TM1637数码管显示)

    设计者:STCode(公众号同名) 1.实时时钟功能介绍 该设计利用DS1302获取时间数据,用4位led数码管显示模块显示当前的年月日信息,并且设计有一个按键,可以切换时间数据. 2. 使用主要器件 ...

  7. 【MSP430】基于MSP430G2553的超声波测距仪

    传感器课程设计,基于MSP430G2553 的超声波测距仪. 近几年,随着我国科技水平的提高,测距手段变得十分先进和多样,目前已经有红外测距.激光测距和超声波测距等多种方法,前两种方法制作难度较大,成 ...

  8. 【MSP430】基于MSP430G2553的非接触式转速测量仪

    传感器课程设计,基于MSP430G2553 的非接触式转速测量仪. 随着现代科技的不断进步,各个领域对测速系统的应用越来越多,同时也对测速精度的要求越来越高.从测速仪器是否与转轴接触又可分为接触式,非 ...

  9. 基于MSP430G2553官方开发板的音乐播放器

    基于MSP430G2553官方开发板的音乐播放器 实现目标 硬件资源 芯片资源使用情况 外接硬件 程序实现 开发环境配置 各部分硬件驱动 主循环功能实现 实现目标 实现以蜂鸣器为播放设备,能够对简谱乐 ...

最新文章

  1. python 示列:抓取网页所有a连接
  2. 如何解决…has been modified since the precompiled header… was built的问题
  3. C# DataGrid 控件在winform里显示行号
  4. 全排列—leetcode46
  5. 矩阵中的最长递增路径
  6. 菜鸟教程html图片自动播放,HTML img 标签 | 菜鸟教程
  7. Java导出源程序_JAVA导出项目的所有源代码到一个文件
  8. VScode 搭建 django 开发环境(Win Python3.71 django1.11.11)
  9. 查看和修改MySQL数据库表存储引擎
  10. [附源码]Java计算机毕业设计SSM餐厅订餐系统
  11. STP生成树——安全特性——单向环路故障——loopguard技术详细讲解、网线分类(附图,建议PC观看)
  12. java线程的生命周期(图解)
  13. 移动端实时音视频直播技术中推流和传输详解
  14. Excel数据透视表、数据透视图
  15. iOS 仿系统指南针
  16. 榆熙电商:拼多多商家怎样开通电子面单服务?有何优势?
  17. python 学生管理系统 增,删,改,查
  18. 手机有显示3g无法理解服务器,3G手机根本不需升级4G,一个技巧提高3倍网速!...
  19. 【解决】“XXX...XXX“不可访问,因为它具有一定的保护级别
  20. 2021高考公务员成绩查询,2021国家公务员考试成绩查询入口开通时间

热门文章

  1. Week15—字典树应用,字符串包含问题
  2. 大数据陷阱:需要读懂的10个小故事
  3. 利用免费虚拟主机上传静态网站
  4. PDF在线免费转换成PPT怎么操作?
  5. 计算机的数学思想源头(回复“计算机数学”可下载PDF典藏版)
  6. AntV G6将节点修改成图片
  7. c# sha256withrsa 算法 rsa公钥私钥 源码
  8. mysql桦仔_带您理解SQLSERVER是如何执行一个查询的
  9. 800行Python代码实现双十一自动登录抢购商品,这速度女友很爱
  10. linux中获取几天前或者几天后的日期