历史上的今天
返回首页

历史上的今天

今天是:2025年04月14日(星期一)

正在发生

2020年04月14日 | MSP430实现800Hz蜂鸣器和秒表

2020-04-14 来源:eefocus

只是一个简单的课设题目,觉得自己写的代码还将就!


#include  

#include

#include "dr_lcdseg.h"   //调用段式液晶驱动头文件


int second = 0, secSum = 0, minSum = 0;


int count = 0;


void GPIO_init();


//按键S7为reset

void P40_Onclick()

{

    second = 0;

    secSum = 0;

    minSum = 0;

}

//按键S5为开始

void P42_Onclick()

{

    TA0CTL |= MC_1;

}


//按键S3为暂停

void P44_Onclick()

{

    TA0CTL &= ~MC_1;

}


void main(void)

{

    WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

    P1DIR |= BIT5; //控制蜂鸣器输出

    P4DIR |= BIT5; //控制LED输出


    initLcdSeg();               //初始化段式液晶

    TA0CTL |= MC_1 + TASSEL_2 + TACLR;

    GPIO_init();    //IO口初始化

    //时钟为SMCLK,比较模式,开始时清零计数器

    TA0CCTL0 = CCIE; //比较器中断使能

    TA0CCR0 = 1250; //比较值设为1250,相当于1/800s的时间间隔

    __bis_SR_register(GIE); //进入低功耗并开启总中断

    while (1)

    {

        LCDSEG_SetDigit(1, secSum % 10);

        LCDSEG_SetDigit(2, secSum / 10);

        //第四位显示一横

        LCDSEG_SetDigit(3, 16);

        LCDSEG_SetDigit(4, minSum % 10);

        LCDSEG_SetDigit(5, minSum / 10);

    }

}


//TimerA的中断函数

#pragma vector = TIMER0_A0_VECTOR

__interrupt void Timer_A(void)

{

    second++;

    //中断20次之后为1s

    if (second == 800)

    {

        //秒数加1

        secSum++;

        //当秒数为60时,分钟数加1

        if (secSum == 60)

        {

            secSum = 0;

            minSum++;

        }

        second = 0;

    }


    count++;

    if (count == 1600)

    {

        P1OUT ^= BIT5; //形成鸣叫效果

        P4OUT ^= BIT5; //形成闪灯效果

    }

    if (count > 3200)

    {

        P1OUT ^= BIT5; //关闭蜂鸣器

        P4OUT ^= BIT5; //灯灭

        count = 0;

    }

}


// P4中断函数

#pragma vector=PORT4_VECTOR

__interrupt void Port_4(void)

{

    _DINT();

    unsigned int Push_Key = 0;

    //----排除输出IO的干扰后,锁定唯一被触发的中断标志位----

    Push_Key = P4IFG & (~P4DIR);

    //----延时一段时间,避开机械抖动区域----

    __delay_cycles(327);  //延时ms


    if (P4IFG != 0)

    {

        //----判断具体哪个IO被按下,调用该IO的事件处理函数

        switch (Push_Key)

        //代码4:不用P1IN来判断,以确保有且只有1按键响应

        {

        case BIT0:  //按键S7

            P40_Onclick();

            break;

        case BIT2:  //按键S5

            P42_Onclick();

            break;

        case BIT4:  //按键S3

            P44_Onclick();

            break;

        default:

            break;   //任何情况下

        }

    }

    P4IFG = 0;              //退出中断前必须手动清除IO口中断标志

}


void GPIO_init()

{

    //----配合机械按键,启用内部上拉电阻----

    //启用P4.0、P4.2、P4.4内部上下拉电阻

    P4REN |= BIT0 + BIT2 + BIT4;

    P4OUT |= BIT0 + BIT2 + BIT4;  //将电阻设置为上拉


    //----配置P4.0、P4.2、P4.4中断参数----

    P4DIR &= ~(BIT0 + BIT2 + BIT4);  //将按键设为输入

    P1IES |= BIT0 + BIT2 + BIT4;    //P4.0、P4.2、P4.4设置为下降沿中断

    P4IE |= BIT0 + BIT2 + BIT4;     //允许P4.0、P4.2、P4.4中断

}

推荐阅读

史海拾趣

EPCOS (TDK)公司的发展小趣事

2009年10月1日,EPCOS与TDK元件事业部合并,成立了TDK-EPC公司。这次合并进一步增强了EPCOS在电子元器件领域的实力,使其在全球市场中的地位更加稳固。合并后,TDK-EPC公司继续秉承EPCOS的技术创新和产品拓展战略,不断推出具有竞争力的新产品和解决方案,以满足客户日益增长的需求。

Condor公司的发展小趣事

2009年10月1日,EPCOS与TDK元件事业部合并,成立了TDK-EPC公司。这次合并进一步增强了EPCOS在电子元器件领域的实力,使其在全球市场中的地位更加稳固。合并后,TDK-EPC公司继续秉承EPCOS的技术创新和产品拓展战略,不断推出具有竞争力的新产品和解决方案,以满足客户日益增长的需求。

DFRobot公司的发展小趣事

随着市场的不断扩大,DFRobot意识到单一的产品代理无法满足客户的需求。于是,公司开始加大研发投入,自主研发机器人和开源硬件产品。同时,为了保证产品的质量和生产效率,DFRobot在成都和北京设立了生产基地,引进先进的生产设备和技术。这种研发与生产一体化的模式,使DFRobot能够更快速地响应市场变化,推出符合客户需求的新产品。

HCC Industries公司的发展小趣事

面对日益激烈的市场竞争和快速变化的市场需求,HCC Industries在2020年启动了数字化转型计划。公司投入大量资金引入先进的自动化生产线和智能化管理系统,实现了从原材料采购到成品出厂的全链条数字化管理。这一举措不仅大幅提高了生产效率和产品质量,还降低了运营成本和库存风险。同时,HCC还利用大数据和人工智能技术优化产品设计和市场策略,进一步提升了其市场竞争力。

EMC Component Group公司的发展小趣事

面对日益激烈的市场竞争和快速变化的市场需求,HCC Industries在2020年启动了数字化转型计划。公司投入大量资金引入先进的自动化生产线和智能化管理系统,实现了从原材料采购到成品出厂的全链条数字化管理。这一举措不仅大幅提高了生产效率和产品质量,还降低了运营成本和库存风险。同时,HCC还利用大数据和人工智能技术优化产品设计和市场策略,进一步提升了其市场竞争力。

DRI Relays Inc公司的发展小趣事

品质是企业的生命线。为了提升产品质量和客户满意度,DRI Relays Inc公司不断加强品质管理。公司建立了严格的质量检测体系,对原材料、生产过程和成品进行全面检测。同时,公司还注重员工素质的提升,定期开展培训和技能竞赛等活动,提高员工的技能水平和质量意识。这些措施有效地保证了公司产品的稳定性和可靠性,赢得了客户的信任和好评。

问答坊 | AI 解惑

2. 模拟开关灯

2. 模拟开关灯 1. 实验任务 如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。 2. 电路原理图 图4.2.1 3. 系统板上硬件连线 (1) ...…

查看全部问答>

哪个帮我搞下这个东西,,十万着急..明天就要交差,,,时间不够

哪个帮我搞下这个东西,,十万着急 ..PROFIBUS协议在变频器上的应用,,上网查下资料..我估计时间不够,,这个工作可以帮我整理不??你也可以提高自己,,我分心就绝对不行,,..还有MODEMBUS的资料 1...PROFIBUS协议在变频器上的应用,, 2.   ...…

查看全部问答>

请问高手们我用的是89c51F的单片机现在对用c语言来开发有问题,急等。。。

在large : XDATA模式下,如何实现掉电保存,我这样写,现在已写入就死机。 void Write_Flash_address (unsigned char block,unsigned int startaddress,unsigned char *p,unsigned int len) {         unsigned int i=0; ...…

查看全部问答>

Wince 语言支持问题

    系统的默认语言是繁体中文,在用浏览器浏览网页的时候简体中文会变成乱码。比如说浏览土豆网,其首页的文字成为乱码,进入它的一个子网又可以看到简体中文。浏览器用的是Wince 自带的。…

查看全部问答>

求教,wince cab manager的使用方法?

       哪位高手知道wince cab manager的使用方法?请赐教下。…

查看全部问答>

嵌入式 单片机 嵌入式系统。 arm。是什么关系

嵌入式  单片机   嵌入式系统。  arm。都有什么不一样,它们之间是什么关系 还有C写嵌入式在哪写啊, 看了很多介绍,越看越乱。 上面写的,哪个用开发板呢。 比如我想用c语言控制开发板上的哪些灯亮,或控制 ...…

查看全部问答>

谁知道ST技术支持电话吗

                                 在网上找答案速度太慢了,直接联系技术支持会快点,谁知道电话号码告诉一下…

查看全部问答>

请教各位:C语言编的程序,为什么进不了main()函数

本帖最后由 dontium 于 2015-1-23 13:21 编辑 我用的是2407,C语言编的程序,为什么就进不了main()函数 复位向量写的是_c_int0,没错啊 换了别的程序go main可以直接跳进main()函数 有谁知道怎么回事 …

查看全部问答>

用TI的SwitcherPro 软件生成基于TPS54128的电路不能实现预期要求

我按照软件的提示输入了最小输入电压3.6V最大输入电压5.2V。输出电压3.3V输出最大电流1A。软件然后生成的电路如下。但是我由于买元器件的限制,我把电路调整如下然后我就按照这个电路做的PCB,焊接好元件后测试,实际需要输入电压到4V才有输出,并 ...…

查看全部问答>

跪求高手解决STM32低功耗问题

低功耗问题已经搞了一段很长时间了,没头绪,希望高手指点. 目前进入STOP模式和外部中断退出都OK. 问题是进入低功耗后电流还有10~30MA 而且是波动的. 我在进入休眠的操作是: 1.将不用的外设模块关闭电源(已关闭) 2.将无用的IO设置成上拉输入模式 ...…

查看全部问答>