基于MSP432P401RLaunchPad的基本按键操作之独立按键
第1题:基本的按键操作(如独立按键/4x4矩阵按键等),能完成基本的按键操作。 1.完整硬件的照片
2.引脚连接图等电路图
3.工程源代码(建议直接上传整个工程)
4.如果键盘使用了驱动芯片,则要上传驱动芯片的手册等资料
********************************************************************************************************** 本文按照题目要求的顺序进行帖子的编写。 1.因为是使用了MSP432P401RLaunchPad板子,板子自身就带有对应的按键以及LED输出,所以我就把对应的硬件照片、原理图进行上传讲解。 硬件照片如图1.黄色画线的位置为板子自带的S1按键,蓝色画线位置为板子自带的LED(红色)。
图1
图2
2.如图2所示,我们可以看出来,P1.1_BUTTON1是单片机P1.1管脚的网络标签,它的另一端与S1(无锁常开开关——开关分常开、常闭、无锁、自锁共4种类型)相连,S1的另一端则和GND相连接,也就是这需要单片机配置低电平触发。这里的P1.4_BUTTON1是单片机P1.4管脚的网络标签,也是个按键开关。本程序只用到了S1按键,未用到S2按键。 网上51单片机的学习中,经常用培训视频把按键扫描写在主程序里,占用了运行时间,很低效,所以我这边采取把按键写在外部中断中,当遇到外部中断才进行按键所代表的功能执行,不影响程序的整体运行。减小运行时间上的损失。
3.程序讲解,我采用的的编译器是Ti自家的CCS,所以上传的代码和工程请使用CCS打开, 使用CCS有个好处就是可以直接在CCS里面用他的Resource Explorer导出对应的例程程序。像独立按键就可以直接在里面导出来。打开Resource Explorer->打开Software->打开SimpleLink MSP432P4 SDK->打开Examples->打开Development Tools->打开MSP432P401RLauncherPad-Red2.x(Red)->打开DriverLib(这里面有很多常用的外设驱动,有些时候可以直接拿来用,我这次就是拿GPIO外部中断来使用的)->打开gpio_input_interrupt->打开No RTOs->打开CCS Compiler,鼠标移到gpio_input_interrupt的右边,会出现三个点,点击三个点,点击import to CCS IDE进行例程的下载。
之后就可以在CCS主页中看见下载好的例程了
蓝色为这个工程名,红色的是主函数。 下面为下载来的主函数部分,需要一点C语言基础。
- /* DriverLib Includes */
- #include <ti/devices/msp432p4xx/driverlib/driverlib.h>//这个头文件都是之前下载好的,所以不需要担心自己电脑有没有,以及配置的麻烦
- /* Standard Includes */
- #include <stdint.h>
- #include <stdbool.h>
- int main(void)//主函数部分
- {
- /* Halting the Watchdog */
- MAP_WDT_A_holdTimer();//关闭看门狗,一般用不到看门狗,除非程序容易跑飞等特殊情况下需要打开。
- /* Configuring P1.0 as output and P1.1 (switch) as input */
- MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);//使用库函数进行对单片机P1.0管脚进行配置为输出引脚
- /* Configuring P1.1 as an input and enabling interrupts */
- MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);//配置P1.1为带上拉电阻输入
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);//清除P1.1上的中断标志,为初始化操作。
- MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);////启用P1.1的端口中断模式
- MAP_Interrupt_enableInterrupt(INT_PORT1);//端口1中断使能。
- /* Enabling SRAM Bank Retention */
- MAP_SysCtl_enableSRAMBankRetention(SYSCTL_SRAM_BANK1);
-
- /* Enabling MASTER interrupts */
- MAP_Interrupt_enableMaster(); //开启中断响应
- /* Going to LPM3 */
- while (1)//while死循环
- {
- MAP_PCM_gotoLPM3();//几种低功耗模式,这里面可以加入其他的程序执行
- }
- }
- /* GPIO ISR */
- void PORT1_IRQHandler(void)//管脚1的中断处理
- {
- uint32_t status;//定义一个32位的变量
- status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);//判断端口P1是否有中断产生
- MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status);//清除P1.1上的中断标志
- /* Toggling the output on the LED */
- if(status & GPIO_PIN1)//如果产生了中断则执行下面的管脚电压翻转指令
- {
- MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
- }
- }
复制代码欢迎各位大佬加入Q群:8734345**进行学习交流讨论。群里有丰富的学习资源供大伙使用 |