|
然后这个程序是我在教材上一个例程的基础上修改的,下面附上例程代码:
- /*警告:由于G2 LaunchPad上的LED2使用了P1.6(I2C引脚),所以所有涉及到I2C的实验都必须把P1.6跳线拔除,包含本例程!
- * main.c
- */
- #include"MSP430G2553.h"
- #include"TCA6416A.h"
- void WDT_init();
- void I2C_IODect() ; //检测事件确实发生了
- void main(void)
- {
- WDTCTL = WDTPW + WDTHOLD; //关狗
- BCSCTL1 = CALBC1_16MHZ; /* Set DCO to 8MHz */
- DCOCTL = CALDCO_16MHZ;
- TCA6416A_Init(); // 初始化IO扩展口
- //----提示初始化成功----
- PinOUT(0,1); // 指定0号管脚输出为0
- PinOUT(1,0); // 指定1号管脚输出为0
- PinOUT(2,1); // 指定0号管脚输出为0
- PinOUT(3,0); // 指定1号管脚输出为0
- PinOUT(4,1); // 指定0号管脚输出为0
- PinOUT(5,0); // 指定1号管脚输出为0
- PinOUT(6,1); // 指定0号管脚输出为0
- PinOUT(7,0); // 指定1号管脚输出为0
- WDT_init();
- while(1)
- {
- PinIN();
- I2C_IODect();
- _bis_SR_register(LPM0_bits);
- }
- }
- /********WDT初始化函数**********/
- void WDT_init()
- {
- //-----设定WDT为-----------
- WDTCTL=WDT_ADLY_16;
- //-----WDT中断使能----------------------
- IE1 |= WDTIE;
- }
- /***********WDT定时中断函数*************/
- #pragma vector=WDT_VECTOR
- __interrupt void watchdog_timer(void)
- {
- // PinIN();
- // I2C_IODect();
- __bic_SR_register_on_exit(LPM0_bits );
- }
- /**********I2C扩展IO中断事件处理函数***************/
- void I2C_IO10_Onclick()
- {
- static unsigned char turn = 1;
- turn ^= BIT0;
- PinOUT(0,turn); //指定0号管脚输出为0&1
- PinOUT(1,turn); //指定1号管脚输出为0&1
- }
- void I2C_IO11_Onclick()
- {
- static unsigned char turn = 1;
- turn ^= BIT0;
- PinOUT(2,turn); //指定2号管脚输出为0&1
- PinOUT(3,turn); //指定3号管脚输出为0&1
- }
- void I2C_IO12_Onclick()
- {
- static unsigned char turn = 1;
- turn ^= BIT0;
- PinOUT(5,turn); //指定5号管脚输出为0&1
- PinOUT(4,turn); //指定4号管脚输出为0&1
- }
- void I2C_IO13_Onclick()
- {
- static unsigned char turn = 1;
- turn ^= BIT0;
- PinOUT(6,turn); //指定6号管脚输出为0&1
- PinOUT(7,turn); //指定7号管脚输出为0&1
- }
- void I2C_IODect() //检测事件确实发生了
- {
- static unsigned char KEY_Past=0,KEY_Now=0;
- KEY_Past=KEY_Now;
- //----判断I2C_IO10所连的KEY1按键是否被按下------
- if((TCA6416A_InputBuffer&BIT8) == BIT8)
- KEY_Now |=BIT0;
- else
- KEY_Now &=~BIT0;
- if(((KEY_Past&BIT0)==BIT0)&&(KEY_Now&BIT0) !=BIT0)
- I2C_IO10_Onclick();
- //----判断I2C_IO11所连的KEY2按键是否被按下------
- if((TCA6416A_InputBuffer&BIT9)== BIT9)
- KEY_Now |=BIT1;
- else
- KEY_Now &=~BIT1;
- if(((KEY_Past&BIT1)==BIT1)&&(KEY_Now&BIT1)!=BIT1)
- I2C_IO11_Onclick();
- //----判断I2C_IO12所连的KEY3按键是否被按下------
- if((TCA6416A_InputBuffer&BITA) == BITA)
- KEY_Now |=BIT2;
- else
- KEY_Now &=~BIT2;
- if(((KEY_Past&BIT2)==BIT2)&&(KEY_Now&BIT2) ==0)
- {
- I2C_IO12_Onclick();
- }
- //----判断I2C_IO13所连的KEY4按键是否被按下------
- if((TCA6416A_InputBuffer&BITB) == BITB)
- KEY_Now |=BIT3;
- else
- KEY_Now &=~BIT3;
- if(((KEY_Past&BIT3) == BIT3)&& (KEY_Now&BIT3) == 0) //
- {
- I2C_IO13_Onclick();
- }
- }
复制代码
再就是我把例程烧写到单片机上之后按按键也不会有什么反应,觉得很奇怪 |
|