|
楼主
查看: 5338回复: 3
发表于 2021-4-24 23:32:18
只看该作者
* 简述: 使用MSP432E4演示OLED128x64屏的基本显示。
* 板卡: MSP_EXP432E401Y
* CCS IDE版本: CCS 10.1.1
* 功能: 程序下载后按板载的 USR_SW1 按鍵切换显示内容
* 硬件: SSH1106主控的OLED128x64屏(软件IIC)
* 引脚连接:
* MSP432E401Y
* ------------------
* /|\| PE4|--> OLED_SCLK
* | | PC4|--> OLED_DAT
* --|RST |
* | |
* | PJ0|<-- USR_SW1
* | |
* | PN0|--> LED D2
* | PN1|--> LED D1
按键说明:
显示2021:
显示小数8.4:
显示NUEDC Contest:
显示汉字"全国大学生电子设计竞赛培训网":
显示电赛logo:
显示ti logo:
显示额外信息:
在主函数里开机上电后对外设进行初始化,按下左侧按键key_cnt加一,按下右侧按键key_cnt减一,并显示对应内容。按键采用外部中断处理。
main.c:
- #include <ti/devices/msp432e4/driverlib/driverlib.h>
- #include <stdint.h>
- #include <stdbool.h>
- #include "oled.h"
- #include "bmp.h"
- volatile uint32_t gpioState = 0;
- uint8_t key_cnt = 0;
- uint8_t oled_clear_flag = 0; //在按键切换显示内容后清屏
- void GPIOInit(void);
- void SysTick_Handler(void);
- void GPIOJ_IRQHandler(void);
- int main(void)
- {
- OLED_Init(); //初始化OLED
- OLED_Clear(); //OLED清屏
- while (1)
- {
- if (oled_clear_flag == 1)
- OLED_Clear();
- oled_clear_flag = 0;
- switch (key_cnt)
- {
- case 1:
- OLED_ShowString(48, 2, "2021");
- break;
- case 2:
- OLED_ShowString(48, 2, "8.4");
- break;
- case 3:
- OLED_ShowString(16, 2, "NUEDC Contest");
- break;
- case 4:
- OLED_ShowCHinese(0, 2, 0); //全
- OLED_ShowCHinese(18, 2, 1); //国
- OLED_ShowCHinese(36, 2, 2); //大
- OLED_ShowCHinese(54, 2, 3); //学
- OLED_ShowCHinese(72, 2, 4); //生
- OLED_ShowCHinese(90, 2, 5); //电
- OLED_ShowCHinese(108, 2, 6); //子
- OLED_ShowCHinese(0, 4, 7); //设
- OLED_ShowCHinese(18, 4, 8); //计
- OLED_ShowCHinese(36, 4, 9); //竞
- OLED_ShowCHinese(54, 4, 10); //赛
- OLED_ShowCHinese(72, 4, 11); //培
- OLED_ShowCHinese(90, 4, 12); //训
- OLED_ShowCHinese(108, 4, 13); //网
- break;
- case 5:
- OLED_DrawBMP(0, 0, 128, 8, BMP1); //1电赛徽章图片显示
- break;
- case 6:
- OLED_DrawBMP(0, 0, 128, 8, BMP4); //4TI标志图片显示
- break;
- case 7:
- OLED_ShowString(8, 0, "https://www.");
- OLED_ShowString(8, 2, "nuedc-training.");
- OLED_ShowString(8, 4, "com.cn/");
- break;
- default:
- OLED_Clear();
- }
- }
- }
- //Gpio初始化程序
- void GPIOInit(void)
- {
- ...
- }
- //系统定时器中断处理程序,用于控制LED2指示灯
- void SysTick_Handler(void)
- {
- if (gpioState != 3)
- gpioState++;
- else
- gpioState = 0;
- /* 将GPIO的新值写入端口引脚。 API将生成位带区地址,以写入特定的端口引脚*/
- MAP_GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_0, gpioState); //LED2亮灭
- }
- //GPIOJ中断处理,按键SW1触发
- void GPIOJ_IRQHandler(void)
- {
- ...
- if ((key_cnt < 1) || (key_cnt > 7))
- key_cnt = 0;
- }
复制代码
|
打赏
-
查看全部打赏
|