起码能显示
This commit is contained in:
parent
f0627331fc
commit
9b5fc13c0c
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"spi.h": "c"
|
"spi.h": "c",
|
||||||
|
"lcd.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -778,6 +778,30 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>6</GroupNumber>
|
||||||
|
<FileNumber>43</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\User\bsp\buzzer.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>buzzer.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>6</GroupNumber>
|
||||||
|
<FileNumber>44</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\User\bsp\buzzer.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>buzzer.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
@ -796,7 +820,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>43</FileNumber>
|
<FileNumber>45</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -808,7 +832,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>44</FileNumber>
|
<FileNumber>46</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -820,7 +844,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>45</FileNumber>
|
<FileNumber>47</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -832,7 +856,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>46</FileNumber>
|
<FileNumber>48</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -844,7 +868,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>47</FileNumber>
|
<FileNumber>49</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -856,7 +880,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>48</FileNumber>
|
<FileNumber>50</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -868,7 +892,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>8</GroupNumber>
|
<GroupNumber>8</GroupNumber>
|
||||||
<FileNumber>49</FileNumber>
|
<FileNumber>51</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -888,7 +912,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>50</FileNumber>
|
<FileNumber>52</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -900,7 +924,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>9</GroupNumber>
|
<GroupNumber>9</GroupNumber>
|
||||||
<FileNumber>51</FileNumber>
|
<FileNumber>53</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -920,7 +944,7 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>52</FileNumber>
|
<FileNumber>54</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -932,7 +956,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>53</FileNumber>
|
<FileNumber>55</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -944,7 +968,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>54</FileNumber>
|
<FileNumber>56</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -956,7 +980,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>55</FileNumber>
|
<FileNumber>57</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -968,7 +992,7 @@
|
|||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>10</GroupNumber>
|
<GroupNumber>10</GroupNumber>
|
||||||
<FileNumber>56</FileNumber>
|
<FileNumber>58</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
@ -978,6 +1002,30 @@
|
|||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>10</GroupNumber>
|
||||||
|
<FileNumber>59</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\User\device\lcd.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>lcd.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>10</GroupNumber>
|
||||||
|
<FileNumber>60</FileNumber>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\User\device\lcd.h</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>lcd.h</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
@ -1452,6 +1452,16 @@
|
|||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<FilePath>..\User\bsp\spi.h</FilePath>
|
<FilePath>..\User\bsp\spi.h</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>buzzer.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\User\bsp\buzzer.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>buzzer.h</FileName>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<FilePath>..\User\bsp\buzzer.h</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
@ -1540,6 +1550,16 @@
|
|||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<FilePath>..\User\device\device.h</FilePath>
|
<FilePath>..\User\device\device.h</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>lcd.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\User\device\lcd.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>lcd.h</FileName>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<FilePath>..\User\device\lcd.h</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
36
User/bsp/buzzer.c
Normal file
36
User/bsp/buzzer.c
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/* Includes ----------------------------------------------------------------- */
|
||||||
|
#include "bsp\buzzer.h"
|
||||||
|
|
||||||
|
#include <main.h>
|
||||||
|
#include <tim.h>
|
||||||
|
|
||||||
|
/* Private define ----------------------------------------------------------- */
|
||||||
|
/* Private macro ------------------------------------------------------------ */
|
||||||
|
/* Private typedef ---------------------------------------------------------- */
|
||||||
|
/* Private variables -------------------------------------------------------- */
|
||||||
|
/* Private function -------------------------------------------------------- */
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
int8_t BSP_Buzzer_Start(void) {
|
||||||
|
if (HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4) == HAL_OK) return BSP_OK;
|
||||||
|
return BSP_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 设置蜂鸣器频率和占空比
|
||||||
|
* @param freq
|
||||||
|
* @param duty_cycle
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int8_t BSP_Buzzer_Set(float freq, float duty_cycle) {
|
||||||
|
uint16_t pulse = (uint16_t)(duty_cycle * (float)UINT16_MAX);
|
||||||
|
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, pulse);
|
||||||
|
|
||||||
|
pulse = (uint16_t)freq;
|
||||||
|
__HAL_TIM_PRESCALER(&htim3, pulse);
|
||||||
|
return BSP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int8_t BSP_Buzzer_Stop(void) {
|
||||||
|
if (HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4) == HAL_OK) return BSP_OK;
|
||||||
|
return BSP_ERR;
|
||||||
|
}
|
22
User/bsp/buzzer.h
Normal file
22
User/bsp/buzzer.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ----------------------------------------------------------------- */
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "bsp/bsp.h"
|
||||||
|
|
||||||
|
/* Exported constants ------------------------------------------------------- */
|
||||||
|
/* Exported macro ----------------------------------------------------------- */
|
||||||
|
/* Exported types ----------------------------------------------------------- */
|
||||||
|
/* Exported functions prototypes -------------------------------------------- */
|
||||||
|
int8_t BSP_Buzzer_Start(void);
|
||||||
|
int8_t BSP_Buzzer_Set(float freq, float duty_cycle);
|
||||||
|
int8_t BSP_Buzzer_Stop(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
// /* SPI实体枚举,与设备对应 */
|
// /* SPI实体枚举,与设备对应 */
|
||||||
// typedef enum {
|
// typedef enum {
|
||||||
// BSP_SPI_ADC,
|
// BSP_SPI_LCD,
|
||||||
// } BSP_SPI_t;
|
// } BSP_SPI_t;
|
||||||
|
|
||||||
// /* Exported functions prototypes -------------------------------------------- */
|
// /* Exported functions prototypes -------------------------------------------- */
|
||||||
|
169
User/device/lcd.c
Normal file
169
User/device/lcd.c
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
#include "lcd.h"
|
||||||
|
#include "lcd_font.h"
|
||||||
|
|
||||||
|
|
||||||
|
// 写命令
|
||||||
|
static void LCD_WriteCommand(uint8_t cmd) {
|
||||||
|
LCD_DC_LOW();
|
||||||
|
LCD_CS_LOW();
|
||||||
|
HAL_SPI_Transmit(&hspi1, &cmd, 1, HAL_MAX_DELAY);
|
||||||
|
LCD_CS_HIGH();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写数据
|
||||||
|
static void LCD_WriteData(uint8_t data) {
|
||||||
|
LCD_DC_HIGH();
|
||||||
|
LCD_CS_LOW();
|
||||||
|
HAL_SPI_Transmit(&hspi1, &data, 1, HAL_MAX_DELAY);
|
||||||
|
LCD_CS_HIGH();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写16位数据
|
||||||
|
static void LCD_WriteData16(uint16_t data) {
|
||||||
|
uint8_t buf[2] = {data >> 8, data & 0xFF};
|
||||||
|
LCD_DC_HIGH();
|
||||||
|
LCD_CS_LOW();
|
||||||
|
HAL_SPI_Transmit(&hspi1, buf, 2, HAL_MAX_DELAY);
|
||||||
|
LCD_CS_HIGH();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化LCD
|
||||||
|
void LCD_Init(void) {
|
||||||
|
// 复位屏幕
|
||||||
|
LCD_RST_LOW();
|
||||||
|
HAL_Delay(10);
|
||||||
|
LCD_RST_HIGH();
|
||||||
|
HAL_Delay(10);
|
||||||
|
|
||||||
|
// 初始化命令序列(以ST7789为例)
|
||||||
|
LCD_WriteCommand(0x36); // Memory Data Access Control
|
||||||
|
LCD_WriteData(0xC0); // RGB Color Order
|
||||||
|
|
||||||
|
LCD_WriteCommand(0x3A); // Interface Pixel Format
|
||||||
|
LCD_WriteData(0x05); // 16-bit/pixel
|
||||||
|
|
||||||
|
LCD_WriteCommand(0xB2); // Porch Setting
|
||||||
|
LCD_WriteData(0x0C);
|
||||||
|
LCD_WriteData(0x0C);
|
||||||
|
LCD_WriteData(0x00);
|
||||||
|
LCD_WriteData(0x33);
|
||||||
|
LCD_WriteData(0x33);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0xB7); // Gate Control
|
||||||
|
LCD_WriteData(0x35);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0xBB); // VCOM Setting
|
||||||
|
LCD_WriteData(0x19);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0xC0); // LCM Control
|
||||||
|
LCD_WriteData(0x2C);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0xC2); // VDV and VRH Command Enable
|
||||||
|
LCD_WriteData(0x01);
|
||||||
|
LCD_WriteCommand(0xC3); // VRH Set
|
||||||
|
LCD_WriteData(0x12);
|
||||||
|
LCD_WriteCommand(0xC4); // VDV Set
|
||||||
|
LCD_WriteData(0x20);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0xC6); // Frame Rate Control
|
||||||
|
LCD_WriteData(0x0F);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0xD0); // Power Control 1
|
||||||
|
LCD_WriteData(0xA4);
|
||||||
|
LCD_WriteData(0xA1);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0xE0); // Positive Voltage Gamma Control
|
||||||
|
LCD_WriteData(0xD0);
|
||||||
|
LCD_WriteData(0x04);
|
||||||
|
LCD_WriteData(0x0D);
|
||||||
|
LCD_WriteData(0x11);
|
||||||
|
LCD_WriteData(0x13);
|
||||||
|
LCD_WriteData(0x2B);
|
||||||
|
LCD_WriteData(0x3F);
|
||||||
|
LCD_WriteData(0x54);
|
||||||
|
LCD_WriteData(0x4C);
|
||||||
|
LCD_WriteData(0x18);
|
||||||
|
LCD_WriteData(0x0D);
|
||||||
|
LCD_WriteData(0x0B);
|
||||||
|
LCD_WriteData(0x1F);
|
||||||
|
LCD_WriteData(0x23);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0xE1); // Negative Voltage Gamma Control
|
||||||
|
LCD_WriteData(0xD0);
|
||||||
|
LCD_WriteData(0x04);
|
||||||
|
LCD_WriteData(0x0C);
|
||||||
|
LCD_WriteData(0x11);
|
||||||
|
LCD_WriteData(0x13);
|
||||||
|
LCD_WriteData(0x2C);
|
||||||
|
LCD_WriteData(0x3F);
|
||||||
|
LCD_WriteData(0x44);
|
||||||
|
LCD_WriteData(0x51);
|
||||||
|
LCD_WriteData(0x2F);
|
||||||
|
LCD_WriteData(0x1F);
|
||||||
|
LCD_WriteData(0x1F);
|
||||||
|
LCD_WriteData(0x20);
|
||||||
|
LCD_WriteData(0x23);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0x21); // Inversion On
|
||||||
|
LCD_WriteCommand(0x11); // Sleep Out
|
||||||
|
HAL_Delay(120);
|
||||||
|
LCD_WriteCommand(0x29); // Display On
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清屏
|
||||||
|
void LCD_Clear(uint16_t color) {
|
||||||
|
LCD_WriteCommand(0x2A); // Column Address Set
|
||||||
|
LCD_WriteData16(X_OFFSET); // 起始列地址
|
||||||
|
LCD_WriteData16(X_OFFSET + LCD_WIDTH - 1); // 结束列地址
|
||||||
|
|
||||||
|
LCD_WriteCommand(0x2B); // Row Address Set
|
||||||
|
LCD_WriteData16(Y_OFFSET); // 起始行地址
|
||||||
|
LCD_WriteData16(Y_OFFSET + LCD_HEIGHT - 1); // 结束行地址
|
||||||
|
|
||||||
|
LCD_WriteCommand(0x2C); // Memory Write
|
||||||
|
for (uint32_t i = 0; i < LCD_WIDTH * LCD_HEIGHT; i++) {
|
||||||
|
LCD_WriteData16(color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绘制单个像素
|
||||||
|
void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color) {
|
||||||
|
if (x >= LCD_WIDTH || y >= LCD_HEIGHT) return; // 超出屏幕范围则返回
|
||||||
|
|
||||||
|
LCD_WriteCommand(0x2A); // 设置列地址
|
||||||
|
LCD_WriteData16(X_OFFSET + x);
|
||||||
|
LCD_WriteData16(X_OFFSET + x);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0x2B); // 设置行地址
|
||||||
|
LCD_WriteData16(Y_OFFSET + y);
|
||||||
|
LCD_WriteData16(Y_OFFSET + y);
|
||||||
|
|
||||||
|
LCD_WriteCommand(0x2C); // 写入内存
|
||||||
|
LCD_WriteData16(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在指定位置显示一个字符
|
||||||
|
void LCD_DrawChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bgColor) {
|
||||||
|
if (ch < 32 || ch > 126) return; // 字符范围检查 (ASCII 32-126)
|
||||||
|
|
||||||
|
const uint8_t *charData = ascii_1206[ch - 32]; // 获取字符点阵数据
|
||||||
|
for (uint8_t i = 0; i < FONT_HEIGHT; i++) { // 遍历字符的高度
|
||||||
|
uint8_t line = charData[i]; // 获取字符的每一行数据
|
||||||
|
for (uint8_t j = 0; j < FONT_WIDTH; j++) { // 遍历字符的宽度
|
||||||
|
if (line & (1 << j)) { // 判断当前像素是否为1
|
||||||
|
LCD_DrawPixel(x + j, y + i, color); // 绘制前景色
|
||||||
|
} else {
|
||||||
|
LCD_DrawPixel(x + j, y + i, bgColor); // 绘制背景色
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在指定位置显示字符串
|
||||||
|
void LCD_DrawString(uint16_t x, uint16_t y, const char *str, uint16_t color, uint16_t bgColor) {
|
||||||
|
while (*str) {
|
||||||
|
LCD_DrawChar(x, y, *str, color, bgColor); // 显示单个字符
|
||||||
|
x += FONT_WIDTH; // 移动到下一个字符位置
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
}
|
36
User/device/lcd.h
Normal file
36
User/device/lcd.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef __LCD_H
|
||||||
|
#define __LCD_H
|
||||||
|
|
||||||
|
#include "spi.h"
|
||||||
|
#include "gpio.h"
|
||||||
|
|
||||||
|
// 屏幕分辨率
|
||||||
|
#define LCD_WIDTH 135
|
||||||
|
#define LCD_HEIGHT 240
|
||||||
|
|
||||||
|
#define X_OFFSET 52
|
||||||
|
#define Y_OFFSET 40
|
||||||
|
|
||||||
|
|
||||||
|
// 常用颜色定义
|
||||||
|
#define BLACK 0x0000
|
||||||
|
#define WHITE 0xFFFF
|
||||||
|
#define RED 0xF800
|
||||||
|
#define GREEN 0x07E0
|
||||||
|
#define BLUE 0x001F
|
||||||
|
|
||||||
|
// 控制引脚
|
||||||
|
#define LCD_CS_LOW() HAL_GPIO_WritePin(TFT_CS_GPIO_Port, TFT_CS_Pin, GPIO_PIN_RESET)
|
||||||
|
#define LCD_CS_HIGH() HAL_GPIO_WritePin(TFT_CS_GPIO_Port, TFT_CS_Pin, GPIO_PIN_SET)
|
||||||
|
#define LCD_DC_LOW() HAL_GPIO_WritePin(TFT_RS_GPIO_Port, TFT_RS_Pin, GPIO_PIN_RESET)
|
||||||
|
#define LCD_DC_HIGH() HAL_GPIO_WritePin(TFT_RS_GPIO_Port, TFT_RS_Pin, GPIO_PIN_SET)
|
||||||
|
#define LCD_RST_LOW() HAL_GPIO_WritePin(TFT_RES_GPIO_Port, TFT_RES_Pin, GPIO_PIN_RESET)
|
||||||
|
#define LCD_RST_HIGH() HAL_GPIO_WritePin(TFT_RES_GPIO_Port, TFT_RES_Pin, GPIO_PIN_SET)
|
||||||
|
|
||||||
|
// 函数声明
|
||||||
|
void LCD_Init(void);
|
||||||
|
void LCD_Clear(uint16_t color);
|
||||||
|
void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color);
|
||||||
|
void LCD_DrawChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bgColor);
|
||||||
|
void LCD_DrawString(uint16_t x, uint16_t y, const char *str, uint16_t color, uint16_t bgColor);
|
||||||
|
#endif // __LCD_H
|
104
User/device/lcd_font.h
Normal file
104
User/device/lcd_font.h
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define FONT_WIDTH 6
|
||||||
|
#define FONT_HEIGHT 12
|
||||||
|
|
||||||
|
const unsigned char ascii_1206[][12]={
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
|
||||||
|
{0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x04,0x00,0x00},/*"!",1*/
|
||||||
|
{0x14,0x14,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
|
||||||
|
{0x00,0x00,0x0A,0x0A,0x1F,0x0A,0x0A,0x1F,0x0A,0x0A,0x00,0x00},/*"#",3*/
|
||||||
|
{0x00,0x04,0x0E,0x15,0x05,0x06,0x0C,0x14,0x15,0x0E,0x04,0x00},/*"$",4*/
|
||||||
|
{0x00,0x00,0x12,0x15,0x0D,0x15,0x2E,0x2C,0x2A,0x12,0x00,0x00},/*"%",5*/
|
||||||
|
{0x00,0x00,0x04,0x0A,0x0A,0x36,0x15,0x15,0x29,0x16,0x00,0x00},/*"&",6*/
|
||||||
|
{0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
|
||||||
|
{0x10,0x08,0x08,0x04,0x04,0x04,0x04,0x04,0x08,0x08,0x10,0x00},/*"(",8*/
|
||||||
|
{0x02,0x04,0x04,0x08,0x08,0x08,0x08,0x08,0x04,0x04,0x02,0x00},/*")",9*/
|
||||||
|
{0x00,0x00,0x00,0x04,0x15,0x0E,0x0E,0x15,0x04,0x00,0x00,0x00},/*"*",10*/
|
||||||
|
{0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,0x00,0x00},/*"+",11*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x01,0x00},/*",",12*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00},/*".",14*/
|
||||||
|
{0x00,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x01,0x00},/*"/",15*/
|
||||||
|
{0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"0",16*/
|
||||||
|
{0x00,0x00,0x04,0x06,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"1",17*/
|
||||||
|
{0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x02,0x01,0x1F,0x00,0x00},/*"2",18*/
|
||||||
|
{0x00,0x00,0x0E,0x11,0x10,0x0C,0x10,0x10,0x11,0x0E,0x00,0x00},/*"3",19*/
|
||||||
|
{0x00,0x00,0x08,0x0C,0x0C,0x0A,0x09,0x1F,0x08,0x1C,0x00,0x00},/*"4",20*/
|
||||||
|
{0x00,0x00,0x1F,0x01,0x01,0x0F,0x11,0x10,0x11,0x0E,0x00,0x00},/*"5",21*/
|
||||||
|
{0x00,0x00,0x0C,0x12,0x01,0x0D,0x13,0x11,0x11,0x0E,0x00,0x00},/*"6",22*/
|
||||||
|
{0x00,0x00,0x1E,0x10,0x08,0x08,0x04,0x04,0x04,0x04,0x00,0x00},/*"7",23*/
|
||||||
|
{0x00,0x00,0x0E,0x11,0x11,0x0E,0x11,0x11,0x11,0x0E,0x00,0x00},/*"8",24*/
|
||||||
|
{0x00,0x00,0x0E,0x11,0x11,0x19,0x16,0x10,0x09,0x06,0x00,0x00},/*"9",25*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00},/*":",26*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x04,0x00},/*";",27*/
|
||||||
|
{0x00,0x00,0x10,0x08,0x04,0x02,0x02,0x04,0x08,0x10,0x00,0x00},/*"<",28*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x3F,0x00,0x3F,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
|
||||||
|
{0x00,0x00,0x02,0x04,0x08,0x10,0x10,0x08,0x04,0x02,0x00,0x00},/*">",30*/
|
||||||
|
{0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x04,0x00,0x04,0x00,0x00},/*"?",31*/
|
||||||
|
{0x00,0x00,0x1C,0x22,0x29,0x2D,0x2D,0x1D,0x22,0x1C,0x00,0x00},/*"@",32*/
|
||||||
|
{0x00,0x00,0x04,0x04,0x0C,0x0A,0x0A,0x1E,0x12,0x33,0x00,0x00},/*"A",33*/
|
||||||
|
{0x00,0x00,0x0F,0x12,0x12,0x0E,0x12,0x12,0x12,0x0F,0x00,0x00},/*"B",34*/
|
||||||
|
{0x00,0x00,0x1E,0x11,0x01,0x01,0x01,0x01,0x11,0x0E,0x00,0x00},/*"C",35*/
|
||||||
|
{0x00,0x00,0x0F,0x12,0x12,0x12,0x12,0x12,0x12,0x0F,0x00,0x00},/*"D",36*/
|
||||||
|
{0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x12,0x1F,0x00,0x00},/*"E",37*/
|
||||||
|
{0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x02,0x07,0x00,0x00},/*"F",38*/
|
||||||
|
{0x00,0x00,0x1C,0x12,0x01,0x01,0x39,0x11,0x12,0x0C,0x00,0x00},/*"G",39*/
|
||||||
|
{0x00,0x00,0x33,0x12,0x12,0x1E,0x12,0x12,0x12,0x33,0x00,0x00},/*"H",40*/
|
||||||
|
{0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"I",41*/
|
||||||
|
{0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x07},/*"J",42*/
|
||||||
|
{0x00,0x00,0x37,0x12,0x0A,0x06,0x0A,0x12,0x12,0x37,0x00,0x00},/*"K",43*/
|
||||||
|
{0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x22,0x3F,0x00,0x00},/*"L",44*/
|
||||||
|
{0x00,0x00,0x3B,0x1B,0x1B,0x1B,0x15,0x15,0x15,0x35,0x00,0x00},/*"M",45*/
|
||||||
|
{0x00,0x00,0x3B,0x12,0x16,0x16,0x1A,0x1A,0x12,0x17,0x00,0x00},/*"N",46*/
|
||||||
|
{0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"O",47*/
|
||||||
|
{0x00,0x00,0x0F,0x12,0x12,0x0E,0x02,0x02,0x02,0x07,0x00,0x00},/*"P",48*/
|
||||||
|
{0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x17,0x19,0x0E,0x18,0x00},/*"Q",49*/
|
||||||
|
{0x00,0x00,0x0F,0x12,0x12,0x0E,0x0A,0x12,0x12,0x37,0x00,0x00},/*"R",50*/
|
||||||
|
{0x00,0x00,0x1E,0x11,0x01,0x06,0x08,0x10,0x11,0x0F,0x00,0x00},/*"S",51*/
|
||||||
|
{0x00,0x00,0x1F,0x15,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"T",52*/
|
||||||
|
{0x00,0x00,0x33,0x12,0x12,0x12,0x12,0x12,0x12,0x0C,0x00,0x00},/*"U",53*/
|
||||||
|
{0x00,0x00,0x33,0x12,0x12,0x0A,0x0A,0x0C,0x04,0x04,0x00,0x00},/*"V",54*/
|
||||||
|
{0x00,0x00,0x15,0x15,0x15,0x15,0x0E,0x0A,0x0A,0x0A,0x00,0x00},/*"W",55*/
|
||||||
|
{0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x0A,0x0A,0x1B,0x00,0x00},/*"X",56*/
|
||||||
|
{0x00,0x00,0x1B,0x0A,0x0A,0x0A,0x04,0x04,0x04,0x0E,0x00,0x00},/*"Y",57*/
|
||||||
|
{0x00,0x00,0x1F,0x09,0x08,0x04,0x04,0x02,0x12,0x1F,0x00,0x00},/*"Z",58*/
|
||||||
|
{0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1C,0x00},/*"[",59*/
|
||||||
|
{0x00,0x02,0x02,0x04,0x04,0x04,0x08,0x08,0x08,0x10,0x10,0x00},/*"\",60*/
|
||||||
|
{0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x00},/*"]",61*/
|
||||||
|
{0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F},/*"_",63*/
|
||||||
|
{0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1C,0x12,0x3C,0x00,0x00},/*"a",65*/
|
||||||
|
{0x00,0x03,0x02,0x02,0x02,0x0E,0x12,0x12,0x12,0x0E,0x00,0x00},/*"b",66*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x02,0x12,0x0C,0x00,0x00},/*"c",67*/
|
||||||
|
{0x00,0x18,0x10,0x10,0x10,0x1C,0x12,0x12,0x12,0x3C,0x00,0x00},/*"d",68*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1E,0x02,0x1C,0x00,0x00},/*"e",69*/
|
||||||
|
{0x00,0x18,0x24,0x04,0x04,0x1E,0x04,0x04,0x04,0x1E,0x00,0x00},/*"f",70*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x3C,0x12,0x0C,0x02,0x1C,0x22,0x1C},/*"g",71*/
|
||||||
|
{0x00,0x03,0x02,0x02,0x02,0x0E,0x12,0x12,0x12,0x37,0x00,0x00},/*"h",72*/
|
||||||
|
{0x00,0x04,0x04,0x00,0x00,0x06,0x04,0x04,0x04,0x0E,0x00,0x00},/*"i",73*/
|
||||||
|
{0x00,0x08,0x08,0x00,0x00,0x0C,0x08,0x08,0x08,0x08,0x08,0x07},/*"j",74*/
|
||||||
|
{0x00,0x03,0x02,0x02,0x02,0x1A,0x0A,0x06,0x0A,0x13,0x00,0x00},/*"k",75*/
|
||||||
|
{0x00,0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"l",76*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x0F,0x15,0x15,0x15,0x15,0x00,0x00},/*"m",77*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x37,0x00,0x00},/*"n",78*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x12,0x12,0x0C,0x00,0x00},/*"o",79*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x0E,0x02,0x07},/*"p",80*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x12,0x12,0x1C,0x10,0x38},/*"q",81*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x1B,0x06,0x02,0x02,0x07,0x00,0x00},/*"r",82*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x1E,0x02,0x0C,0x10,0x1E,0x00,0x00},/*"s",83*/
|
||||||
|
{0x00,0x00,0x00,0x04,0x04,0x1E,0x04,0x04,0x04,0x1C,0x00,0x00},/*"t",84*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x1B,0x12,0x12,0x12,0x3C,0x00,0x00},/*"u",85*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x00,0x00},/*"v",86*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x0E,0x0A,0x0A,0x00,0x00},/*"w",87*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x1B,0x0A,0x04,0x0A,0x1B,0x00,0x00},/*"x",88*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x33,0x12,0x12,0x0C,0x08,0x04,0x03},/*"y",89*/
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x1E,0x08,0x04,0x04,0x1E,0x00,0x00},/*"z",90*/
|
||||||
|
{0x18,0x08,0x08,0x08,0x08,0x0C,0x08,0x08,0x08,0x08,0x18,0x00},/*"{",91*/
|
||||||
|
{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},/*"|",92*/
|
||||||
|
{0x06,0x04,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x06,0x00},/*"}",93*/
|
||||||
|
{0x16,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
|
||||||
|
};
|
@ -1,6 +1,8 @@
|
|||||||
/* Includes ----------------------------------------------------------------- */
|
/* Includes ----------------------------------------------------------------- */
|
||||||
#include "task\user_task.h"
|
#include "task\user_task.h"
|
||||||
#include "bsp\led.h"
|
#include "bsp\led.h"
|
||||||
|
#include "bsp\buzzer.h"
|
||||||
|
#include "device\lcd.h"
|
||||||
|
|
||||||
/* Private typedef ---------------------------------------------------------- */
|
/* Private typedef ---------------------------------------------------------- */
|
||||||
/* Private define ----------------------------------------------------------- */
|
/* Private define ----------------------------------------------------------- */
|
||||||
@ -12,7 +14,11 @@ void Task_Monitor(void *argument) {
|
|||||||
(void)argument; // 消除未使用参数的警告
|
(void)argument; // 消除未使用参数的警告
|
||||||
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_MONITOR; // 100Hz
|
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_MONITOR; // 100Hz
|
||||||
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||||||
|
LCD_Init();
|
||||||
|
LCD_Clear(BLACK);
|
||||||
|
LCD_Clear(RED);
|
||||||
|
LCD_DrawChar(0, 0, '0', WHITE, BLACK); // 在屏幕上显示字符
|
||||||
|
LCD_DrawString(0, 20, "Hello", WHITE, BLACK); // 在屏幕上显示字符串
|
||||||
BSP_LED_Set(BSP_LED_RED, BSP_LED_ON, 0);
|
BSP_LED_Set(BSP_LED_RED, BSP_LED_ON, 0);
|
||||||
BSP_LED_Set(BSP_LED_BLUE, BSP_LED_ON, 0);
|
BSP_LED_Set(BSP_LED_BLUE, BSP_LED_ON, 0);
|
||||||
while (1) {
|
while (1) {
|
||||||
|
Loading…
Reference in New Issue
Block a user