#include "msp430x54x.h"
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; // 停止看门狗
unused_port_init(); // 未使用的IO口初始化
clk_init(); // 时钟系统初始化
//lcd_init(); //液晶初始化
while(1)
{
_DINT(); // 全局中断关闭
KeyScan();
KeyDeal();
//Display();
TxCCTL4 &= ~(CCIFG); // 清除TBCCR4中断标志
_BIS_SR(LPM0_bits + GIE); // 进入低功耗模式0
}
}
/**************************************************/
/* 程序名 : 未使用的IO口初始化 */
/* 作用 : 设置未使用的IO口状态 */
/**************************************************/
void unused_port_init(void)
{
PADIR = 0xFF;
PAOUT = 0;
PASEL = 0;
PBDIR = 0xFFFF;
PBOUT = 0;
PBSEL = 0;
PCDIR = 0xFFFF;
PCOUT = 0;
PCSEL = 0;
PDDIR = 0xFFFF;
PDOUT = 0;
PDSEL = 0;
PEDIR = 0xFFFF;
PEOUT = 0;
PESEL = 0;
P11DIR = 0xFF;
P11OUT = 0;
P11SEL = 0;
PJDIR = 0xFF;
PJOUT = 0;
}
void KeyScan()//按键扫描
{
P8DIR |= 0xf0;//高四位输出低四位输入
P8DIR&=0xf0;
P8OUT = 0x0f;//行线置低
if(P8IN&0x0f!=0x0f)//这里可以设置断点,if里面的就设不了断点
{
key_count++; //按键去抖
if(key_count==50)
{
key_count=0;
key_value=P8IN&0x0f;
switch(key_value)
{
case 0x0e: key_count1=1;break; //列检测
case 0x0d: key_count1=2;break;
case 0x0b: key_count1=3;break;
case 0x07: key_count1=4;break;
default:break;
}
P8OUT = 0xef;
key_value=P8IN&0x0f;
if(key_value!=0x0f)
key_count2=12;
P8OUT = 0xdf;
key_value=P8IN&0x0f;
if(key_value!=0x0f)
key_count2=8;
P8OUT = 0xbf;
key_value=P8IN&0x0f;
if(key_value!=0x0f)
key_count2=4;
P8OUT = 0x7f;
key_value=P8IN&0x0f;
if(key_value!=0x0f)
key_count2=0;
key=key_count1+key_count2;
}
}
}
void KeyDeal()
{
switch(key)
{
case 1: //录音
voice_record();
key=0;break;
case 2: //回放
voice_playback();
key=0;break;
case 3: //暂停录音
//voice_stop_record();
key=0;break;
default:break;
}
}
/**************************************************/
/* 程序名 : 系统时钟初始化子程 */
/* 作用 : MCLK = SMCLK = DCO = 16M */
/* ACKL <-- XT1 = 32768 */
/**************************************************/
void clk_init(void)
{
P7SEL |= BIT0 + BIT1; // IO口设置为外部晶振
UCSCTL1 = DCORSEL_5; // 选择DCO的范围
UCSCTL2 = 374; // 设置DCO频率为16M
// 设置MCLK = DCOC,MCLK =DCO,ACLK=XT1
UCSCTL4 = SELM_3 + SELA_0 + SELS_3;
while (SFRIFG1 & OFIFG) // 清除OFIFG,和XT1OFFG ,DCOFFG
{
UCSCTL7 &= ~(XT1LFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG;
}
}
程序我下到开发板里,想验证一下我写的4X4按键里正不正确,却在按键扫描程序设置不了断点,我先问一下是程序问题呢,还是软件问题啊????????
-
回复 楼主 merlong 的帖子
硬件的原理图没有问题,不知道程序跑起来键盘能正常工作吗,有时断点也要涉及到相关操作的。
无法设置断点有几种情况比较常见:
1. 程序跑飞
2. 所设置断点部分代码,没有被linked.
3. IDE允许断点数目有限,所以没有更多断点支持。
4. 程序代码的那一句代码被优化掉了。
可以查查看程序看,希望对你有帮助。
回复 板凳 Main函数 的帖子
学习了
http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr