GPIO控制,程序卡死

2019-07-17 15:30发布


#define key_up                 GpioDataRegs.GPBDAT.bit.GPIO48
#define key_down         GpioDataRegs.GPBDAT.bit.GPIO51
#define key_right        GpioDataRegs.GPBDAT.bit.GPIO49
#define key_left         GpioDataRegs.GPBDAT.bit.GPIO50
#define key_enter        GpioDataRegs.GPBDAT.bit.GPIO52
#define key_exit         GpioDataRegs.GPBDAT.bit.GPIO53
#define relay0                GpioDataRegs.GPBDAT.bit.GPIO55
#define relay1                 GpioDataRegs.GPBDAT.bit.GPIO57


void key_init()
{
                EALLOW;
                // 用户根据需要可以使能内部上拉或禁止.
                GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0;   //  LCD_RS使能上拉
                GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0;   //  LCD_RS使能上拉
                GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0;   //  LCD_RS使能上拉
                GpioCtrlRegs.GPBPUD.bit.GPIO51 = 0;   //  LCD_RS使能上拉
                GpioCtrlRegs.GPBPUD.bit.GPIO52 = 0;   //  LCD_RS使能上拉
                GpioCtrlRegs.GPBPUD.bit.GPIO53 = 0;   //  LCD_RS使能上拉
                GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0;   //  LCD_RS使能上拉
                GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0;   //  LCD_RS使能上拉

                /* 通过I/O功能选择寄存器配置通用I/O功能*/
                GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 0;   // GPIO模式
                GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 0;   // GPIO模式
                GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 0;   // GPIO模式
                GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 0;   // GPIO模式
                GpioCtrlRegs.GPBMUX2.bit.GPIO52 = 0;   // GPIO模式
                GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 0;   // GPIO模式
                GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 0;   // GPIO模式
                GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 0;   // GPIO模式

                /* 设置I/O口为输入引脚*/
        //    GpioCtrlRegs.GPADIR.all = 0xFFFF0000;
                GpioCtrlRegs.GPBDIR.bit.GPIO48 = 1;   // 输出模式
                GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1;   // 输出模式
                GpioCtrlRegs.GPBDIR.bit.GPIO50 = 1;   // 输出模式
                GpioCtrlRegs.GPBDIR.bit.GPIO51 = 1;   // 输出模式
                GpioCtrlRegs.GPBDIR.bit.GPIO52 = 1;   // 输出模式
                GpioCtrlRegs.GPBDIR.bit.GPIO53 = 1;   // 输出模式
                GpioCtrlRegs.GPBDIR.bit.GPIO55 = 1;   // 输出模式
                GpioCtrlRegs.GPBDIR.bit.GPIO57 = 1;   // 输出模式

                //各个IO初值设定
                GpioDataRegs.GPBDAT.bit.GPIO48 = 1;
                GpioDataRegs.GPBDAT.bit.GPIO49 = 1;
                GpioDataRegs.GPBDAT.bit.GPIO50 = 1;
                GpioDataRegs.GPBDAT.bit.GPIO51 = 1;
                GpioDataRegs.GPBDAT.bit.GPIO52 = 1;
                GpioDataRegs.GPBDAT.bit.GPIO53 = 1;
                GpioDataRegs.GPBDAT.bit.GPIO55 = 1;                //继电器上电关断
                GpioDataRegs.GPBDAT.bit.GPIO57 = 1;
}

void key_scan()
{
        if(key_up==0)
        {
                LCD_write_command(0x80);        //第一行数据指针地址
//                show("KEY TEST    UP  ");
                show("RELAY0 TEST OPEN");
                relay0 = 0;
                DELAY_US(30);
                while(key_up==0);
        }
        if(key_down==0)
        {
                LCD_write_command(0x80);        //第一行数据指针地址
//                show("KEY TEST    DOWN");
                show("RELAY0 TEST CLOS");
                relay0 = 1;DELAY_US(20);
                while(key_down==0);
        }
        if(key_right==0)
        {
                LCD_write_command(0x80);        //第一行数据指针地址
//                show("KEY TEST   RIGHT");
                show("RELAY1 TEST CLOS");
                relay1 = 1;DELAY_US(20);
                while(key_right==0);
        }
        if(key_left==0)
        {
                LCD_write_command(0x80);        //第一行数据指针地址
//                show("KEY TEST    LEFT");
                show("RELAY1 TEST OPEN");
                relay1 = 0;DELAY_US(20);
                while(key_left==0);
        }
        if(key_enter==0)
        {
                LCD_write_command(0x80);        //第一行数据指针地址
                show("KEY TEST   ENTER");
                while(key_enter==0);
        }
        if(key_exit==0)
        {
                LCD_write_command(0x80);        //第一行数据指针地址
                show("KEY TEST    EXIT");
                while(key_exit==0);
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
ningling_21
1楼-- · 2019-07-17 23:11
清枫城主 发表于 2017-5-6 15:41
程序如上,存在问题:当按下按键,然后控制另一个GPIO输出高低电平后,程序就直接卡死。如果按键控制程序里 ...

卡死在哪里,就找哪里的问题
清枫城主
2楼-- · 2019-07-18 03:58
ningling_21 发表于 2017-5-7 14:54
卡死在哪里,就找哪里的问题

aspoke
3楼-- · 2019-07-18 05:32
清枫城主 发表于 2017-5-6 15:41
程序如上,存在问题:当按下按键,然后控制另一个GPIO输出高低电平后,程序就直接卡死。如果按键控制程序里 ...

while(key_up==0); 这个执行了?
aspoke
4楼-- · 2019-07-18 09:53
清枫城主 发表于 2017-5-6 15:41
程序如上,存在问题:当按下按键,然后控制另一个GPIO输出高低电平后,程序就直接卡死。如果按键控制程序里 ...

程序卡死肯定是执行了死循环了吧。
清枫城主
5楼-- · 2019-07-18 10:22
 精彩回答 2  元偷偷看……
清枫城主
6楼-- · 2019-07-18 16:17
问题已解决 答案在6楼

一周热门 更多>