2777|1

272

帖子

3

TA的资源

一粒金砂(高级)

楼主
 

【TI首届低功耗设计大赛】按键扫描+sharp96显示 [复制链接]

本帖最后由 dai277530706 于 2014-11-24 23:05 编辑

弄了一个4*4的薄膜键盘,具体电路也不是很清楚,反正有8个引脚,用万用表测量:按下按键1,一、四引脚短路;按下2,一、五引脚短路。。。按下4,二、五引脚短路。判断按键是否按下的方法也很简单。例如:判断按键1是否按下,只需将一脚拉高,判断五脚的电位即可。这金刚狼引脚也忒少了,单单驱动一个屏幕就把IO口用得差不多了,为了方便,我把八个脚连到了单片机的一侧,设置了一下IO口方向。
void keyInit()
{
        GPIO_setAsOutputPin(GPIO_PORT_PA,
                                GPIO_PIN0 + GPIO_PIN1 + GPIO_PIN2 + GPIO_PIN3 +
                                GPIO_PIN4 + GPIO_PIN5 + GPIO_PIN6 + GPIO_PIN7 +
                                GPIO_PIN8 + GPIO_PIN9 + GPIO_PIN10 + GPIO_PIN11 +
                                GPIO_PIN12 + GPIO_PIN13 + GPIO_PIN14 + GPIO_PIN15);

        GPIO_setAsOutputPin(GPIO_PORT_PB,
                                GPIO_PIN0 + GPIO_PIN1 + GPIO_PIN2 + GPIO_PIN3 +
                                GPIO_PIN4 + GPIO_PIN5 + GPIO_PIN6 + GPIO_PIN7 +
                                GPIO_PIN8 + GPIO_PIN9 + GPIO_PIN10 + GPIO_PIN11 +
                                GPIO_PIN12 + GPIO_PIN13 + GPIO_PIN14 + GPIO_PIN15);

        GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN5 + GPIO_PIN6);

        GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN2 + GPIO_PIN3);

        GPIO_setAsInputPin(GPIO_PORT_P2,GPIO_PIN2 + GPIO_PIN4);

        GPIO_setAsInputPin(GPIO_PORT_P3,GPIO_PIN4 + GPIO_PIN5);
}


由于个人能力问题,这种引脚不是一个IO口的不会用循环语句写,那我只能if();if()if();喽,按键扫描代码如下:
int scan()
{
    int n = 0;
        P4OUT |= BIT2;
        if(P2IN&BIT4)
                n = 1;
        if(P2IN&BIT2)
                n = 2;
        if(P3IN&BIT4)
                n = 3;
        if(P3IN&BIT5)
                n = 4;
        if(n == 1||n == 2||n == 3||n == 4)
                return n;

        P2OUT |= BIT6;
        if(P2IN&BIT4)
                n = 5;
        if(P2IN&BIT2)
                n = 6;
        if(P3IN&BIT4)
                n = 7;
        if(P3IN&BIT5)
                n = 8;
        if(n == 5||n == 6||n == 7||n == 8)
                return n;

        P2OUT |= BIT5;
        if(P2IN&BIT4)
                n = 9;
        if(P2IN&BIT2)
                n = 10;
        if(P3IN&BIT4)
                n = 11;
        if(P3IN&BIT5)
                n = 12;
        if(n == 9||n == 10||n == 11||n == 12)
                return n;

        P2OUT |= BIT3;
        if(P2IN&BIT4)
                n = 13;
        if(P2IN&BIT2)
                n = 14;
        if(P3IN&BIT4)
                n = 15;
        if(P3IN&BIT5)
                n = 16;
        if(n == 13||n == 14||n == 15||n == 16)
            return n;
        else
            return 0;
}

然后sharp96屏幕我也不会驱动呀,好吧!找官方例程,直接拿来用吧!
本来想做一个手机的,但是IO口这么少,现在屏幕和按键都接一起了,我也就敢在按键扫描处设置一个断点。按住按键再让程序执行一次扫描。如果真的跑起来,在一、五引脚一个输出低电平,一个输出高电平,那这金刚狼岂不是真炭狼了?貌似想做手机不行额。。。下面是主程序代码,是在“430BOOST-SHARP96_GrlibExample_FR5969”例程基础上改的。
extern int num;

char n[17]={'1','2','3','A','4','5','6','B','7','8','9','C','*','0','#','D',' '};

char pcs[11] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};

char outString[32];
void main(void)
{

        boardInit();
        clockInit();
        timerInit();


    // Set up the LCD
        LCDInit();

    /*
     * Disable the GPIO power-on default high-impedance mode to activate
     * previously configured port settings
     */

    PMM_unlockLPM5(PMM_BASE);

    __enable_interrupt();

          GrContextInit(&g_sContext, &g_sharp96x96LCD);
          GrContextForegroundSet(&g_sContext, ClrBlack);
          GrContextBackgroundSet(&g_sContext, ClrWhite);
          GrContextFontSet(&g_sContext, &g_sFontFixed6x8);
          GrClearDisplay(&g_sContext);
          GrFlush(&g_sContext);

                  int num,i1,count1=0;

                  while(1)
                  {

                       keyInit();
                       num = scan();
                       pcs[0] = n[num-1];
                       boardInit();
                       LCDInit();
                       strcpy(outString, "press:");
                       strncat(outString, pcs, 5);

                                   GrStringDrawCentered(&g_sContext,
                                                                outString,
                                                                AUTO_STRING_LENGTH,
                                                                48,
                                                                15,
                                                                TRANSPARENT_TEXT);
                                   GrStringDrawCentered(&g_sContext,
                                                                "HELLO EEWORLD",
                                                                 AUTO_STRING_LENGTH,
                                                                 48,
                                                                 35,
                                                                 TRANSPARENT_TEXT);
                   GrFlush(&g_sContext);
                   Delay();
                  }

}




最新回复

谢谢分享,继续加油,加快速度哦  详情 回复 发表于 2014-11-25 10:18
 
点赞 关注
个人签名BE MYSELF

回复
举报

6066

帖子

92

TA的资源

裸片初长成(初级)

沙发
 
谢谢分享,继续加油,加快速度哦
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表