由于个人原因近期都没有更新博客了,现在更新一篇关于单片机的入门级的功能实现。
具体要求如下:
实现由2553单片机按键按下,实现开启给定时间的倒计时,在定时结束后蜂鸣器开始响铃。倒计时的时间实现由TM1637数码管显示。
注:TM1637数码管资料如下:
资料链接:https://pan.baidu.com/s/1POymj8LqbfPZexBZc-EpXg

提取码:up4e
本次实验中使用了按键外部中断,和定时器中断:
具体代码如下:

/** 接线 : 蜂鸣器:    p1.0*        TM1637: scl: p1.6   sda:p1.7* 创作时间:2020-9-10* 作者:JuGiaMing*/
#include <msp430g2553.h>
#include <stdint.h>
#include <TM1637.h>uint16_t number = 10;            // 倒计时初始值
volatile unsigned int flag=0;
unsigned char dpFlag = 0,A1,A2,A3,A4;
unsigned char Data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char DataDp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};/********************************************************************
* 名称 : void time_display( void )
* 功能 : 显示时间
* 输入 : void
* 输出 : 无
**************************************************************/
void time_display( void )     //显示时间
{TM1637_writeCammand(0x44);TM1637_writeData(0xc0, Data[A1]);if(dpFlag)TM1637_writeData(0xc1, DataDp[A2]); //小数点标志为1则用小数点那个数组elseTM1637_writeData(0xc1, Data[A2]);TM1637_writeData(0xc2, Data[A3]);TM1637_writeData(0xc3, Data[A4]);TM1637_writeCammand(0x8a);
}
int main(void)
{WDTCTL = WDTPW | WDTHOLD;              // 关闭看门狗if (CALBC1_1MHZ==0xFF){while(1);}DCOCTL = 0;BCSCTL1 = CALBC1_1MHZ;DCOCTL = CALDCO_1MHZ;      //校准时钟
//设置输出端口P1DIR |=  BIT0;                          //设置P1.0口输出P1OUT &= ~BIT0;
//设置外部中断P1REN |= BIT3;                           //启用P1.3口的内部电阻P1OUT |= BIT3;                           //设置P1.3内电阻为上拉电阻P1DIR &= ~BIT3;                          //设置P1.3口为输入P1IES |= BIT3;                           //设置中断为下降沿触发P1IE |= BIT3;                            //允许中断TA0CCR0 = 20000;TA0CTL = TASSEL_1 + MC_1;                   //MC_1: 增计数模式, TASSEL_1:选择时钟为ACLKI2C_Init();//__bis_SR_register(LPM0_bits + GIE);_EINT();while(1){A1 = number / 1000;A2 = number / 100 % 10;A3 = number / 10 % 10;A4 = number % 10;time_display();}}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1(void)
{TA0CCTL0 = CCIE;                            //允许TA0CCTL0中断P1IFG = 0;
}#pragma vector=TIMER0_A0_VECTOR
__interrupt void CLOCK_A(void)
{if( number > 0){                                // 大于0则自减不响铃number--;P1OUT &= ~BIT0;}else{                                          //  小于0则响铃while(1){P1OUT ^=  BIT0;delay_ms(50);}}
}

调用模块

#include <TM1637.h>void I2C_Init(void)
{P1DIR |=  BIT6 + BIT7;
}
//**************************************
//I2C起始信号
//**************************************
void I2C_Start()   //用
{I2C_SDA_M_OUT;I2C_SDA_OUT(1);                    //拉高数据线I2C_SCL_OUT(1);                    //拉高时钟线delay_us(5);I2C_SDA_OUT(0);                    //产生下降沿delay_us(5);I2C_SCL_OUT(0);                    //拉低时钟线
}
//**************************************
//I2C停止信号
//**************************************
void I2C_Stop()  //用
{I2C_SDA_M_OUT;I2C_SDA_OUT(0);                    //拉低数据线I2C_SCL_OUT(0);                    //拉低时钟线delay_us(5);                  //延时I2C_SCL_OUT(1);                    //拉高时钟线delay_us(5);                   //延时I2C_SDA_OUT(1);                    //产生上升沿}//**************************************
//I2C接收应答信号
//**************************************
uint8_t I2C_RecvACK()   //用
{uint8_t tempcount;I2C_SDA_M_IN;delay_us(5);                 //延时I2C_SDA_OUT(1);I2C_SCL_OUT(1);                    //拉高时钟线delay_us(5);while(I2C_SDA_IN){tempcount++;if(tempcount > 250) return 1;//无应答信号,终止传输}//检测到Slave应答信号I2C_SCL_OUT(0);                    //拉低时钟线return 0;}
//**************************************
//向I2C总线发送一个字节数据
//**************************************
void I2C_WriteByte(uint8_t data0)    //用
{uint8_t i;I2C_SDA_M_OUT;for(i=0; i<8; i++)         //8位计数器{delay_us(10);if(data0 & 0x01)    I2C_SDA_OUT(1);else                I2C_SDA_OUT(0);data0 >>= 1;I2C_SCL_OUT(1);                //拉高时钟线delay_us(5);              //延时I2C_SCL_OUT(0);                //拉低时钟线delay_us(5);              //延时}
}/********************************************************************
* 名称 : void TM1637_writeCammand(unsigned char mData)
* 功能 : 写指令1byte
* 输入 : unsigned char mData
* 输出 : 无
**************************************************************/
void TM1637_writeCammand(unsigned char mData)     //用
{I2C_Start();I2C_WriteByte(mData);  //数据I2C_RecvACK();I2C_Stop();
}/********************************************************************
* 名称 : void TM1637_writeData(unsigned char addr, unsigned char mData)
* 功能 : 固定地址写数据1byte
* 输入 : unsigned char addr, unsigned char mData
* 输出 : 无
**************************************************************/
void TM1637_writeData(unsigned char addr, unsigned char mData)  //用
{I2C_Start();I2C_WriteByte(addr);  //地址I2C_RecvACK();I2C_WriteByte(mData);  //数据I2C_RecvACK();I2C_Stop();
}void SmgDisplay(uint8_t data) //写显示寄存器
{unsigned char i;I2C_Start();I2C_WriteByte(0x40); // 40H 地址自动加 1 模式,44H 固定地址模式,本程序采用自加 1 模式I2C_RecvACK();I2C_Stop();I2C_Start();I2C_WriteByte(0xc0); //设置首地址,I2C_RecvACK();for(i=0;i<6;i++) //地址自加,不必每次都写地址{I2C_WriteByte(data); //送数据I2C_RecvACK();}I2C_Stop();I2C_Start();I2C_WriteByte(0x8f); //开显示 ,最大亮度I2C_RecvACK();I2C_Stop();
}

用2553单片机实现按键倒计时响铃,用TM1637显示倒计时时间相关推荐

  1. 应广单片机PFS123按键中断控制数码管显示例程

    目录 应广单片机PFS123按键中断控制数码管显示视频 led数码管图片 应广单片机PFS123按键中断控制数码管显示代码 应广科技网址,开发工具,PMS123规格书:http://www.padau ...

  2. 两位数码管30秒倒计时c语言,基于51单片机共阴两位数码管显示倒计时

    <基于51单片机共阴两位数码管显示倒计时>由会员分享,可在线阅读,更多相关<基于51单片机共阴两位数码管显示倒计时(2页珍藏版)>请在人人文库网上搜索. 1.基于51单片机共阴 ...

  3. android倒计时dialog,Dialog中显示倒计时,到时自动关闭

    这里直接用系统Dialog中添加了倒计时的显示,如果用自定义Dialog会更美观: private TextView mOffTextView; private Handler mOffHandler ...

  4. android倒计时dialog,倒计时,dialog上显示倒计时,如果不点击dialog,倒计时结束后自动跳转...

    首先在strings.xml文件里定义 // 整数用 %d 字符串用 %s "提示" "该视频已被移除" %d 返回播放列表  string > /*如果 ...

  5. python弹框倒计时自动关闭_Dialog中显示倒计时,到时自己主动关闭

    这里直接用系统Dialog中加入了倒计时的显示,假设用自己定义Dialog会更美观: private TextView mOffTextView; private Handler mOffHandle ...

  6. 51单片机综合课程设计多功能电子秤(显示时间、温度、存储、串口、报警装置等)

    51单片机综合课程设计----多功能电子秤 关键词:proteus仿真.51单片机.DS1302时钟芯片.DB18B20温度芯片.AT24C02存储芯片.LCD1602液晶屏.ADC0832芯片等,文 ...

  7. java怎样做倒计时,Java 中怎么实现倒计时

    Java codepublic class 倒计时时钟 { //小时 private int hours; //分钟 private int min; //秒 private int second; ...

  8. 单片机原理及其应用——单片机控制按键依次点亮8只发光二极管

    目录 一.实验要求 二.Proteus仿真软件画原理图 三.Keil编程软件编写程序 四.实验结果 (一)仿真结果 (二)连接电路 (三)烧录并观察实验现象 结语 一.实验要求 [实验目的] 1.了解 ...

  9. 单片机原理及其应用——单片机控制按键点亮发光二极管

    目录 一.实验要求 二.分析 (一)电路原理 (二)机械式按键的抖动时间与解决方法 三.Proteus仿真软件画原理图 四.Keil编程软件编写程序 五.实验结果 (一)仿真结果 (二)连接电路烧录 ...

最新文章

  1. 栖息地环境影响了鸿雁的肠道微生物
  2. 英国更注重人工智能基础性研究
  3. Linux 线程同步的三种方法
  4. Xamarin+vs2010部署错误:error MSB6004: 指定的任务可执行文件位置\sdk\\tools\zipalign.exe”无效...
  5. java线程的简单例子(Thread and runnable)
  6. yum install 失败
  7. golang 切片slice使用总结(动态数组、cap与len区别)
  8. pytorch: 自定义数据集加载
  9. linux查看程序中最耗时的代码,【Linux】CPU时间与处理器耗时
  10. MEF体验使用接口导出的优越性
  11. the 1st one
  12. Anylogic学习--------选项列表
  13. java生成pdf表格_java生成pdf文件 --- Table
  14. server2008服务器进不了桌面,解决windows server 2008 r2 登录进入桌面只显示一片蓝色背景...
  15. vue列表左右箭头滑动_vue点击左右箭头改变数据
  16. html guids标签,Windows下编译kaldi--kaldi(二)
  17. 中国科学技术大学计算机应用,2015年中国科学技术大学081203计算机应用技术考研专业目录及考试科目...
  18. 使用VMware制作windows虚拟机
  19. 这边提供几个公共方法:MD5签名方法、获取时间戳、生成随机串、string转base64、base64转string
  20. 一文教你股票买卖问题实用而装逼的解法

热门文章

  1. 今日收获总结 (前端知识点3)
  2. 一文讲解单片机、ARM、MUC、DSP、FPGA、嵌入式错综复杂的关系
  3. mac下载、破解、安装webstorm编辑器
  4. 川土微电子产品在PLC/伺服领域的应用
  5. CTeX:中英文混排无法正常换行+字体调整+行距调整
  6. 正则表达式——常用正则表达式验证有效数字、密码、真实姓名、邮箱、身份证号码及其正则捕获懒惰性原理
  7. Thinkphp5+JWT开发 api接口
  8. distrowatch(distrowatch什么意思)
  9. 论文阅读 Jointly Optimize Data Augmentation and Network Training
  10. 字节跳动大数据岗笔试经验分享