历史上的今天
今天是: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中断 }
史海拾趣
|
哪个帮我搞下这个东西,,十万着急..明天就要交差,,,时间不够 哪个帮我搞下这个东西,,十万着急 ..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 自带的。… 查看全部问答> |
|
嵌入式 单片机 嵌入式系统。 arm。都有什么不一样,它们之间是什么关系 还有C写嵌入式在哪写啊, 看了很多介绍,越看越乱。 上面写的,哪个用开发板呢。 比如我想用c语言控制开发板上的哪些灯亮,或控制 ...… 查看全部问答> |
|
本帖最后由 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才有输出,并 ...… 查看全部问答> |
|
低功耗问题已经搞了一段很长时间了,没头绪,希望高手指点. 目前进入STOP模式和外部中断退出都OK. 问题是进入低功耗后电流还有10~30MA 而且是波动的. 我在进入休眠的操作是: 1.将不用的外设模块关闭电源(已关闭) 2.将无用的IO设置成上拉输入模式 ...… 查看全部问答> |




