first commit
This commit is contained in:
1830
Drivers/BSP/160160D/160160D.C
Normal file
1830
Drivers/BSP/160160D/160160D.C
Normal file
File diff suppressed because it is too large
Load Diff
787
Drivers/BSP/160160D/160160D.h
Normal file
787
Drivers/BSP/160160D/160160D.h
Normal file
@@ -0,0 +1,787 @@
|
||||
#ifndef __160160D_H__
|
||||
#define __160160D_H__
|
||||
|
||||
#include "./SYSTEM/sys/sys.h"
|
||||
#include "./SYSTEM/delay/delay.h"
|
||||
|
||||
#define LCD_EXT extern
|
||||
|
||||
|
||||
|
||||
|
||||
#define DISPLAY_BLANK 0x00
|
||||
#define PROTEC_ON 0x01
|
||||
#define PROTEC_EXIT 0x02
|
||||
#define PROTEC_START 0x03
|
||||
#define PROTECT_TRIP 0x04
|
||||
#define HEART_ACCUM 0x05
|
||||
#define HEART_REDUCE 0x06
|
||||
#define NEXT_MENU 0x07
|
||||
#define UP_DOWN 0x08
|
||||
#define LEFT_RIGHT 0x09
|
||||
#define DERECTION_KEY 0x0a
|
||||
#define ENTER_KEY 0x0b
|
||||
#define ESC_KEY 0x0c
|
||||
#define ADD_DEC 0x0d
|
||||
#define DI_CLOSE 0x0e
|
||||
#define DI_OPEN 0x0f
|
||||
#define DI_UNCERT 0x10
|
||||
#define DELET_MESS 0x11
|
||||
#define HAVE_MESS 0x12
|
||||
#define CODE_PASS 0x13
|
||||
#define CODE_ERROR 0x14
|
||||
|
||||
|
||||
|
||||
LCD_EXT void display_datas(unsigned char datas); //R-G-B=4-4-4
|
||||
LCD_EXT void display_line(unsigned char datas);
|
||||
LCD_EXT void ReverseShow88(uint8_t column ,uint8_t lin,uint8_t const *address);
|
||||
LCD_EXT void ReverseShow916(uint8_t column ,uint8_t lin,uint8_t const *address);
|
||||
LCD_EXT void DisplayOneByteS(uint8_t ox, uint8_t oy, uint8_t byte1);
|
||||
LCD_EXT void DisplayOneText(uint8_t ox,uint8_t oy,uint8_t ascii_code);
|
||||
LCD_EXT void Clear_Line(uint8_t ox1,uint8_t ox2,uint8_t oy,uint8_t number1,uint8_t number2,uint8_t language);
|
||||
LCD_EXT void DisplayBrokenLine(uint8_t ox,uint8_t oy,uint8_t num);
|
||||
LCD_EXT void DisplaySolidLine(uint8_t ox,uint8_t oy,uint8_t num);
|
||||
LCD_EXT void DisplayLineText2(uint8_t ox,uint8_t oy,uint8_t number,uint8_t const *ptr);
|
||||
LCD_EXT void DisplayOneChinesetest(uint8_t column,uint8_t lin);
|
||||
LCD_EXT void REDisplayOneChinesetest(uint8_t column,uint8_t lin);
|
||||
LCD_EXT void ReverseDispOne(uint8_t ox,uint8_t oy,uint8_t ascii_code);
|
||||
LCD_EXT void ReverseLineText(uint8_t ox,uint8_t oy,uint8_t number,uint8_t const *ptr);
|
||||
LCD_EXT void ReverseDispLine(uint8_t ox,uint8_t oy,uint8_t number,uint8_t const *ptr);
|
||||
LCD_EXT void ReverseOneGraphics(uint8_t column,uint8_t lin,uint16_t hzcode,uint8_t tb_index);
|
||||
LCD_EXT void display_pic(unsigned char *p);
|
||||
LCD_EXT void display_pic1(unsigned char *p);
|
||||
LCD_EXT void DisplayOneGraphics(uint8_t column,uint8_t lin, uint16_t hzcode,uint8_t tb_index);
|
||||
LCD_EXT void DisplayConnectGraphics(uint8_t column,uint8_t lin,uint16_t hzcode);
|
||||
LCD_EXT void DisplayOneChinese(uint8_t column,uint8_t lin,uint8_t const *HzCode);
|
||||
LCD_EXT void DisplayLineChinese(uint8_t ox1,uint8_t oy1,uint8_t number1,uint8_t const *ptr1,uint8_t ox2,uint8_t oy2,uint8_t number2,uint8_t const *ptr2,uint8_t language);
|
||||
LCD_EXT void DeleteMenuCursor(uint8_t x1,uint8_t y1,uint8_t const *ptr1,uint8_t x2,uint8_t y2,uint8_t const *ptr2,uint8_t num,uint8_t num2,uint8_t language);
|
||||
LCD_EXT void DisplayMenuCursor(uint8_t x1,uint8_t y1,uint8_t const *ptr1,uint8_t x2,uint8_t y2,uint8_t const *ptr2,uint8_t num,uint8_t num2,uint8_t language);
|
||||
LCD_EXT void ClearScreen(void);
|
||||
void ReverseScreen(void);
|
||||
LCD_EXT void CloseDataCursor(void);
|
||||
LCD_EXT void DisplayDataCursor2(void);
|
||||
LCD_EXT void DisplayDataCursor(void);
|
||||
LCD_EXT void DisplayOneInt(uint8_t ox,uint8_t oy, uint16_t int_value);
|
||||
LCD_EXT void DisplayOneText2(uint8_t ox,uint8_t oy,uint8_t ascii_code);
|
||||
LCD_EXT void DisplayHoriLine(uint8_t column,uint8_t lin,uint8_t num);
|
||||
LCD_EXT void DisplayOneByte(uint8_t ox, uint8_t oy, uint8_t byte1);
|
||||
LCD_EXT void DisplayGraphicsScreen(void);
|
||||
LCD_EXT void DisplayLineText(uint8_t ox,uint8_t oy,uint8_t number,uint8_t const *ptr);
|
||||
LCD_EXT void DisplayOneInt2(uint8_t ox,uint8_t oy, uint16_t int_value);
|
||||
LCD_EXT void DisplayLongInt(uint8_t ox,uint8_t oy, uint32_t value,uint8_t redixs_point);
|
||||
LCD_EXT void DisplayOneByte2(uint8_t ox, uint8_t oy, uint8_t byte1);
|
||||
LCD_EXT void LcdInit(void);
|
||||
LCD_EXT void ReverseDispNum2(uint8_t ox,uint8_t oy,uint8_t ascii_code);
|
||||
LCD_EXT void DisplayCount(uint8_t ox, uint8_t oy, uint8_t byte1);
|
||||
LCD_EXT void DisplayHex(uint8_t ox,uint8_t oy,uint16_t number);
|
||||
LCD_EXT void ReverseDispOne2(uint8_t ox,uint8_t oy,uint8_t ascii_code);
|
||||
void Fault_Disp(void);
|
||||
void KeyRun_Disp(uint32_t Flag);
|
||||
void IP_Sprintf(uint8_t *buf, uint32_t IPdata);
|
||||
void IP_Printf(uint8_t x, uint32_t y, uint32_t IPdata, FlagStatus SetFlag, uint32_t cursor);
|
||||
void HZ12AndChar_Printf(uint8_t x, uint8_t y, const uint8_t *ptr, FlagStatus Flag);
|
||||
void HZ12AndChar_SignPrintf(uint8_t x, uint8_t y, const uint8_t *ptr, uint32_t SignNUM );
|
||||
void DisplayNL_LOGO(void);
|
||||
void DisplayNANRUI_LOGO(void);
|
||||
void DisplayNANRUI_BMP(void);
|
||||
void Display_BMP(uint32_t Width, uint32_t Height, const uint8_t* picture);
|
||||
void DisplayQQ_BMP(void);
|
||||
void ASCII_Printf(uint8_t x, uint32_t y, uint32_t data, FlagStatus Flag);
|
||||
void ASCII_SignPrintf(uint8_t x, uint32_t y, uint32_t data, uint32_t SignNUM);
|
||||
void IntValue_Printf(uint8_t x, uint32_t y, int32_t data, FlagStatus Flag);
|
||||
void FloatValue_Printf(uint8_t x, uint32_t y, float data, FlagStatus Flag);
|
||||
void FixLenIToF_Printf(uint32_t x, uint32_t y, int32_t data, uint32_t len, uint32_t dot, FlagStatus Flag, uint32_t cursor);
|
||||
void FixLenIToF_Sprintf(uint8_t* str, int32_t data, uint32_t len, uint32_t dot);
|
||||
void DisplayHorizontalLine(uint8_t x,uint8_t y,uint8_t len);
|
||||
void DisplayVerticalLine(uint8_t x,uint8_t y,uint8_t high, uint8_t value);
|
||||
void ClearMenuScreen(void);
|
||||
void ScreenPrintf(uint8_t* ptr);
|
||||
void Char6_Write(uint8_t x,uint8_t y, uint8_t CharCode, FlagStatus Flag);
|
||||
void MessageBox(void);
|
||||
void ClrMessageBox(void);
|
||||
void ClrMessageBoxContent(void);
|
||||
void MeunItem_Printf(uint8_t x, uint32_t y, int32_t data, FlagStatus Flag);
|
||||
void MessageSetBox(const uint8_t *title);
|
||||
void MessageSetBox_NoClear(const uint8_t *title);
|
||||
void ClrMessageSetBox(void);
|
||||
void DeleteMessageSetBox(void);
|
||||
void ProgramableMessageBox(uint8_t x, uint8_t y, uint8_t size);
|
||||
void DrawMenuComboBox(uint8_t x, uint8_t y, uint8_t len, uint8_t items);
|
||||
void DrawRecordBox(uint8_t x, uint8_t y, uint8_t len, uint8_t items);
|
||||
void BackLight_Close(void);
|
||||
void BackLight_ON(void);
|
||||
|
||||
static const uint8_t ASCII6x12[] =
|
||||
{
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
|
||||
|
||||
0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00,/*"!",1*/
|
||||
|
||||
0x00,0x28,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",2*/
|
||||
|
||||
0x00,0x00,0x28,0x28,0xFC,0x28,0x50,0xFC,0x50,0x50,0x00,0x00,/*"#",3*/
|
||||
|
||||
0x00,0x20,0x78,0xA8,0xA0,0x60,0x30,0x28,0xA8,0xF0,0x20,0x00,/*"$",4*/
|
||||
|
||||
0x00,0x00,0x48,0xA8,0xB0,0x50,0x28,0x34,0x54,0x48,0x00,0x00,/*"%",5*/
|
||||
|
||||
0x00,0x00,0x20,0x50,0x50,0x78,0xA8,0xA8,0x90,0x6C,0x00,0x00,/*"&",6*/
|
||||
|
||||
0x00,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",7*/
|
||||
|
||||
0x00,0x04,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x04,0x00,/*"(",8*/
|
||||
|
||||
0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00,/*")",9*/
|
||||
|
||||
0x00,0x00,0x00,0x20,0xA8,0x70,0x70,0xA8,0x20,0x00,0x00,0x00,/*"*",10*/
|
||||
|
||||
0x00,0x00,0x20,0x20,0x20,0xF8,0x20,0x20,0x20,0x00,0x00,0x00,/*"+",11*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80,/*",",12*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",13*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,/*".",14*/
|
||||
|
||||
0x00,0x08,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x00,/*"/",15*/
|
||||
|
||||
0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00,/*"0",16*/
|
||||
|
||||
0x00,0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,/*"1",17*/
|
||||
|
||||
0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x40,0x80,0xF8,0x00,0x00,/*"2",18*/
|
||||
|
||||
0x00,0x00,0x70,0x88,0x08,0x30,0x08,0x08,0x88,0x70,0x00,0x00,/*"3",19*/
|
||||
|
||||
0x00,0x00,0x10,0x30,0x50,0x50,0x90,0x78,0x10,0x18,0x00,0x00,/*"4",20*/
|
||||
|
||||
0x00,0x00,0xF8,0x80,0x80,0xF0,0x08,0x08,0x88,0x70,0x00,0x00,/*"5",21*/
|
||||
|
||||
0x00,0x00,0x70,0x90,0x80,0xF0,0x88,0x88,0x88,0x70,0x00,0x00,/*"6",22*/
|
||||
|
||||
0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x20,0x20,0x20,0x00,0x00,/*"7",23*/
|
||||
|
||||
0x00,0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x00,0x00,/*"8",24*/
|
||||
|
||||
0x00,0x00,0x70,0x88,0x88,0x88,0x78,0x08,0x48,0x70,0x00,0x00,/*"9",25*/
|
||||
|
||||
0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x60,0x60,0x00,/*":",26*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x20,0x00,/*";",27*/
|
||||
|
||||
0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00,/*"<",28*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,/*"=",29*/
|
||||
|
||||
0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00,/*">",30*/
|
||||
|
||||
0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x20,0x00,0x20,0x00,0x00,/*"?",31*/
|
||||
|
||||
0x00,0x00,0x70,0x88,0x98,0xA8,0xA8,0xB8,0x80,0x78,0x00,0x00,/*"@",32*/
|
||||
|
||||
0x00,0x00,0x20,0x20,0x30,0x50,0x50,0x78,0x48,0xCC,0x00,0x00,/*"A",33*/
|
||||
|
||||
0x00,0x00,0xF0,0x48,0x48,0x70,0x48,0x48,0x48,0xF0,0x00,0x00,/*"B",34*/
|
||||
|
||||
0x00,0x00,0x78,0x88,0x80,0x80,0x80,0x80,0x88,0x70,0x00,0x00,/*"C",35*/
|
||||
|
||||
0x00,0x00,0xF0,0x48,0x48,0x48,0x48,0x48,0x48,0xF0,0x00,0x00,/*"D",36*/
|
||||
|
||||
0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x48,0xF8,0x00,0x00,/*"E",37*/
|
||||
|
||||
0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x40,0xE0,0x00,0x00,/*"F",38*/
|
||||
|
||||
0x00,0x00,0x38,0x48,0x80,0x80,0x9C,0x88,0x48,0x30,0x00,0x00,/*"G",39*/
|
||||
|
||||
0x00,0x00,0xCC,0x48,0x48,0x78,0x48,0x48,0x48,0xCC,0x00,0x00,/*"H",40*/
|
||||
|
||||
0x00,0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00,/*"I",41*/
|
||||
|
||||
0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0xE0,0x00,/*"J",42*/
|
||||
|
||||
0x00,0x00,0xEC,0x48,0x50,0x60,0x50,0x50,0x48,0xEC,0x00,0x00,/*"K",43*/
|
||||
|
||||
0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x44,0xFC,0x00,0x00,/*"L",44*/
|
||||
|
||||
0x00,0x00,0xD8,0xD8,0xD8,0xD8,0xA8,0xA8,0xA8,0xA8,0x00,0x00,/*"M",45*/
|
||||
|
||||
0x00,0x00,0xDC,0x48,0x68,0x68,0x58,0x58,0x48,0xE8,0x00,0x00,/*"N",46*/
|
||||
|
||||
0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00,/*"O",47*/
|
||||
|
||||
0x00,0x00,0xF0,0x48,0x48,0x70,0x40,0x40,0x40,0xE0,0x00,0x00,/*"P",48*/
|
||||
|
||||
0x00,0x00,0x70,0x88,0x88,0x88,0x88,0xE8,0x98,0x70,0x18,0x00,/*"Q",49*/
|
||||
|
||||
0x00,0x00,0xF0,0x48,0x48,0x70,0x50,0x48,0x48,0xEC,0x00,0x00,/*"R",50*/
|
||||
|
||||
0x00,0x00,0x78,0x88,0x80,0x60,0x10,0x08,0x88,0xF0,0x00,0x00,/*"S",51*/
|
||||
|
||||
0x00,0x00,0xF8,0xA8,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,/*"T",52*/
|
||||
|
||||
0x00,0x00,0xCC,0x48,0x48,0x48,0x48,0x48,0x48,0x30,0x00,0x00,/*"U",53*/
|
||||
|
||||
0x00,0x00,0xCC,0x48,0x48,0x50,0x50,0x30,0x20,0x20,0x00,0x00,/*"V",54*/
|
||||
|
||||
0x00,0x00,0xA8,0xA8,0xA8,0x70,0x50,0x50,0x50,0x50,0x00,0x00,/*"W",55*/
|
||||
|
||||
0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x50,0x50,0xD8,0x00,0x00,/*"X",56*/
|
||||
|
||||
0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x20,0x20,0x70,0x00,0x00,/*"Y",57*/
|
||||
|
||||
0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x40,0x48,0xF8,0x00,0x00,/*"Z",58*/
|
||||
|
||||
0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00,/*"[",59*/
|
||||
|
||||
0x00,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x00,0x00,/*"\",60*/
|
||||
|
||||
0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00,/*"]",61*/
|
||||
|
||||
0x00,0x20,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",62*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,/*"_",63*/
|
||||
|
||||
0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",64*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x38,0x48,0x3C,0x00,0x00,/*"a",65*/
|
||||
|
||||
0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0x70,0x00,0x00,/*"b",66*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x40,0x40,0x38,0x00,0x00,/*"c",67*/
|
||||
|
||||
0x00,0x00,0x18,0x08,0x08,0x38,0x48,0x48,0x48,0x3C,0x00,0x00,/*"d",68*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x78,0x40,0x38,0x00,0x00,/*"e",69*/
|
||||
|
||||
0x00,0x00,0x1C,0x20,0x20,0x78,0x20,0x20,0x20,0x78,0x00,0x00,/*"f",70*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x3C,0x48,0x30,0x40,0x78,0x44,0x38,/*"g",71*/
|
||||
|
||||
0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0xEC,0x00,0x00,/*"h",72*/
|
||||
|
||||
0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x70,0x00,0x00,/*"i",73*/
|
||||
|
||||
0x00,0x00,0x10,0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0xE0,/*"j",74*/
|
||||
|
||||
0x00,0x00,0xC0,0x40,0x40,0x5C,0x50,0x70,0x48,0xEC,0x00,0x00,/*"k",75*/
|
||||
|
||||
0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00,/*"l",76*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xF0,0xA8,0xA8,0xA8,0xA8,0x00,0x00,/*"m",77*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0xEC,0x00,0x00,/*"n",78*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x30,0x00,0x00,/*"o",79*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0x70,0x40,0xE0,/*"p",80*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x38,0x08,0x1C,/*"q",81*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xD8,0x60,0x40,0x40,0xE0,0x00,0x00,/*"r",82*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x78,0x40,0x30,0x08,0x78,0x00,0x00,/*"s",83*/
|
||||
|
||||
0x00,0x00,0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x18,0x00,0x00,/*"t",84*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xD8,0x48,0x48,0x48,0x3C,0x00,0x00,/*"u",85*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x00,0x00,/*"v",86*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xA8,0xA8,0x70,0x50,0x50,0x00,0x00,/*"w",87*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xD8,0x50,0x20,0x50,0xD8,0x00,0x00,/*"x",88*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x20,0xC0,/*"y",89*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x78,0x10,0x20,0x20,0x78,0x00,0x00,/*"z",90*/
|
||||
|
||||
0x00,0x18,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x18,0x00,/*"{",91*/
|
||||
|
||||
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*"|",92*/
|
||||
|
||||
0x00,0x60,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0x60,0x00,/*"}",93*/
|
||||
|
||||
0x40,0xA4,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",94*/
|
||||
};
|
||||
|
||||
static const uint8_t ASCII8x12[] = {
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
|
||||
|
||||
0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x18,0x00,0x00,/*"!",1*/
|
||||
|
||||
0x00,0x12,0x24,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",2*/
|
||||
|
||||
0x00,0x00,0x24,0x24,0xFE,0x48,0x48,0xFE,0x48,0x48,0x00,0x00,/*"#",3*/
|
||||
|
||||
0x00,0x10,0x3C,0x54,0x50,0x30,0x18,0x14,0x54,0x78,0x10,0x00,/*"$",4*/
|
||||
|
||||
0x00,0x00,0xE4,0xA4,0xA8,0xF0,0x1E,0x2A,0x2A,0x4E,0x00,0x00,/*"%",5*/
|
||||
|
||||
0x00,0x00,0x30,0x48,0x48,0x7E,0xA4,0x94,0x88,0x77,0x00,0x00,/*"&",6*/
|
||||
|
||||
0x00,0x60,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",7*/
|
||||
|
||||
0x00,0x02,0x0C,0x08,0x10,0x10,0x10,0x10,0x08,0x08,0x06,0x00,/*"(",8*/
|
||||
|
||||
0x00,0x40,0x20,0x10,0x08,0x08,0x08,0x08,0x10,0x20,0x40,0x00,/*")",9*/
|
||||
|
||||
0x00,0x00,0x00,0x10,0x92,0x7C,0x7C,0x92,0x10,0x00,0x00,0x00,/*"*",10*/
|
||||
|
||||
0x00,0x00,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x00,0x00,0x00,/*"+",11*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x20,0x40,/*",",12*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",13*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,/*".",14*/
|
||||
|
||||
0x00,0x01,0x02,0x06,0x04,0x08,0x08,0x10,0x20,0x20,0x40,0x00,/*"/",15*/
|
||||
|
||||
0x00,0x00,0x3C,0x24,0x42,0x42,0x42,0x42,0x24,0x3C,0x00,0x00,/*"0",16*/
|
||||
|
||||
0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*"1",17*/
|
||||
|
||||
0x00,0x00,0x3C,0x42,0x42,0x04,0x08,0x10,0x62,0x7E,0x00,0x00,/*"2",18*/
|
||||
|
||||
0x00,0x00,0x3C,0x42,0x02,0x1C,0x02,0x02,0x42,0x3C,0x00,0x00,/*"3",19*/
|
||||
|
||||
0x00,0x00,0x0C,0x14,0x24,0x44,0x44,0x3C,0x04,0x0C,0x00,0x00,/*"4",20*/
|
||||
|
||||
0x00,0x00,0x7E,0x40,0x40,0x7C,0x02,0x02,0x42,0x3C,0x00,0x00,/*"5",21*/
|
||||
|
||||
0x00,0x00,0x1C,0x24,0x40,0x5C,0x62,0x42,0x62,0x3C,0x00,0x00,/*"6",22*/
|
||||
|
||||
0x00,0x00,0x7E,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x00,0x00,/*"7",23*/
|
||||
|
||||
0x00,0x00,0x3C,0x42,0x42,0x34,0x2C,0x42,0x42,0x3C,0x00,0x00,/*"8",24*/
|
||||
|
||||
0x00,0x00,0x18,0x64,0x42,0x46,0x3A,0x02,0x24,0x3C,0x00,0x00,/*"9",25*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x18,0x00,0x00,/*":",26*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x10,0x00,/*";",27*/
|
||||
|
||||
0x00,0x02,0x04,0x18,0x20,0x40,0x20,0x10,0x0C,0x02,0x00,0x00,/*"<",28*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,/*"=",29*/
|
||||
|
||||
0x00,0x40,0x20,0x18,0x04,0x02,0x04,0x08,0x30,0x40,0x00,0x00,/*">",30*/
|
||||
|
||||
0x00,0x00,0x3C,0x42,0x62,0x02,0x0C,0x08,0x00,0x18,0x00,0x00,/*"?",31*/
|
||||
|
||||
0x00,0x00,0x3C,0x46,0x9A,0xAA,0xAA,0xBC,0x40,0x3E,0x00,0x00,/*"@",32*/
|
||||
|
||||
0x00,0x00,0x10,0x18,0x28,0x24,0x24,0x7C,0x42,0xE7,0x00,0x00,/*"A",33*/
|
||||
|
||||
0x00,0x00,0xF8,0x44,0x44,0x78,0x46,0x42,0x42,0xFC,0x00,0x00,/*"B",34*/
|
||||
|
||||
0x00,0x00,0x3E,0x42,0x80,0x80,0x80,0x80,0x42,0x3C,0x00,0x00,/*"C",35*/
|
||||
|
||||
0x00,0x00,0xF8,0x44,0x42,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,/*"D",36*/
|
||||
|
||||
0x00,0x00,0xFC,0x42,0x48,0x78,0x48,0x40,0x42,0xFC,0x00,0x00,/*"E",37*/
|
||||
|
||||
0x00,0x00,0xFC,0x42,0x48,0x78,0x48,0x40,0x40,0xE0,0x00,0x00,/*"F",38*/
|
||||
|
||||
0x00,0x00,0x3C,0x44,0x80,0x80,0x8E,0x84,0x44,0x38,0x00,0x00,/*"G",39*/
|
||||
|
||||
0x00,0x00,0xE7,0x42,0x42,0x7E,0x42,0x42,0x42,0xE7,0x00,0x00,/*"H",40*/
|
||||
|
||||
0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*"I",41*/
|
||||
|
||||
0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x88,0xF0,0x00,/*"J",42*/
|
||||
|
||||
0x00,0x00,0xEE,0x44,0x48,0x70,0x50,0x48,0x44,0xEE,0x00,0x00,/*"K",43*/
|
||||
|
||||
0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x42,0xFE,0x00,0x00,/*"L",44*/
|
||||
|
||||
0x00,0x00,0xEE,0x6C,0x6C,0x6C,0x54,0x54,0x54,0xD6,0x00,0x00,/*"M",45*/
|
||||
|
||||
0x00,0x00,0xC7,0x62,0x52,0x52,0x4A,0x46,0x46,0xE2,0x00,0x00,/*"N",46*/
|
||||
|
||||
0x00,0x00,0x3C,0x44,0x82,0x82,0x82,0x82,0x44,0x38,0x00,0x00,/*"O",47*/
|
||||
|
||||
0x00,0x00,0xFC,0x42,0x42,0x7C,0x40,0x40,0x40,0xE0,0x00,0x00,/*"P",48*/
|
||||
|
||||
0x00,0x00,0x38,0x44,0x82,0x82,0x82,0xB2,0x4C,0x38,0x06,0x00,/*"Q",49*/
|
||||
|
||||
0x00,0x00,0xFC,0x42,0x42,0x7C,0x48,0x44,0x46,0xE3,0x00,0x00,/*"R",50*/
|
||||
|
||||
0x00,0x00,0x3E,0x42,0x40,0x38,0x04,0x02,0x42,0x7C,0x00,0x00,/*"S",51*/
|
||||
|
||||
0x00,0x00,0xFE,0x92,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,/*"T",52*/
|
||||
|
||||
0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,/*"U",53*/
|
||||
|
||||
0x00,0x00,0xE7,0x42,0x44,0x24,0x2C,0x28,0x18,0x10,0x00,0x00,/*"V",54*/
|
||||
|
||||
0x00,0x00,0xD6,0x92,0x92,0x92,0x9A,0x6C,0x64,0x44,0x00,0x00,/*"W",55*/
|
||||
|
||||
0x00,0x00,0xE7,0x66,0x24,0x18,0x18,0x24,0x66,0xE7,0x00,0x00,/*"X",56*/
|
||||
|
||||
0x00,0x00,0xEE,0x44,0x28,0x38,0x10,0x10,0x10,0x38,0x00,0x00,/*"Y",57*/
|
||||
|
||||
0x00,0x00,0x7E,0x84,0x08,0x10,0x10,0x20,0x42,0xFC,0x00,0x00,/*"Z",58*/
|
||||
|
||||
0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,/*"[",59*/
|
||||
|
||||
0x00,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x00,/*"\",60*/
|
||||
|
||||
0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00,/*"]",61*/
|
||||
|
||||
0x00,0x1C,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",62*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,/*"_",63*/
|
||||
|
||||
0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",64*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x3E,0x42,0x3F,0x00,0x00,/*"a",65*/
|
||||
|
||||
0x00,0x00,0xC0,0x40,0x40,0x5C,0x62,0x42,0x42,0x7C,0x00,0x00,/*"b",66*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x3C,0x62,0x40,0x42,0x3C,0x00,0x00,/*"c",67*/
|
||||
|
||||
0x00,0x00,0x06,0x02,0x02,0x1E,0x62,0x42,0x42,0x3F,0x00,0x00,/*"d",68*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x40,0x3E,0x00,0x00,/*"e",69*/
|
||||
|
||||
0x00,0x00,0x0F,0x10,0x10,0x7E,0x10,0x10,0x10,0x7C,0x00,0x00,/*"f",70*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x3E,0x44,0x38,0x40,0x7C,0x42,0x3C,/*"g",71*/
|
||||
|
||||
0x00,0x00,0xC0,0x40,0x40,0x5C,0x62,0x42,0x42,0xE7,0x00,0x00,/*"h",72*/
|
||||
|
||||
0x00,0x00,0x30,0x00,0x00,0x70,0x10,0x10,0x10,0x7C,0x00,0x00,/*"i",73*/
|
||||
|
||||
0x00,0x00,0x0C,0x00,0x00,0x1C,0x04,0x04,0x04,0x04,0x04,0x78,/*"j",74*/
|
||||
|
||||
0x00,0x00,0xC0,0x40,0x40,0x4E,0x58,0x70,0x48,0xEE,0x00,0x00,/*"k",75*/
|
||||
|
||||
0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*"l",76*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0xED,0x00,0x00,/*"m",77*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xD8,0x66,0x42,0x42,0xE7,0x00,0x00,/*"n",78*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00,/*"o",79*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xF8,0x46,0x42,0x42,0x7C,0x40,0xE0,/*"p",80*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x42,0x42,0x3E,0x02,0x07,/*"q",81*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xEE,0x30,0x20,0x20,0xF8,0x00,0x00,/*"r",82*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x3E,0x40,0x3C,0x42,0x7C,0x00,0x00,/*"s",83*/
|
||||
|
||||
0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x10,0x0C,0x00,0x00,/*"t",84*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xC6,0x42,0x42,0x42,0x3F,0x00,0x00,/*"u",85*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xE7,0x46,0x24,0x28,0x10,0x00,0x00,/*"v",86*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xD7,0x92,0x9A,0x6A,0x44,0x00,0x00,/*"w",87*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x6E,0x3C,0x18,0x3C,0x76,0x00,0x00,/*"x",88*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0xE7,0x46,0x24,0x18,0x18,0x10,0xE0,/*"y",89*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x7E,0x44,0x18,0x32,0x7E,0x00,0x00,/*"z",90*/
|
||||
|
||||
0x00,0x07,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x03,0x00,/*"{",91*/
|
||||
|
||||
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,/*"|",92*/
|
||||
|
||||
0x00,0x70,0x10,0x10,0x10,0x08,0x10,0x10,0x10,0x10,0x60,0x00,/*"}",93*/
|
||||
|
||||
0x30,0x4C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",94*/
|
||||
};
|
||||
|
||||
static const uint8_t ASCII12x12[] =
|
||||
{
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x02,0x00,0x02,0x00,0x02,0x00,
|
||||
0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,/*"!",1*/
|
||||
|
||||
0x00,0x00,0x06,0x60,0x0C,0xC0,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",2*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x10,0x40,0x10,0x40,0x7F,0xE0,0x10,0x40,0x20,0x80,0x7F,0xE0,
|
||||
0x20,0x80,0x20,0x80,0x00,0x00,0x00,0x00,/*"#",3*/
|
||||
|
||||
0x00,0x00,0x02,0x00,0x1F,0x80,0x32,0xC0,0x32,0x00,0x0E,0x00,0x03,0x80,0x02,0xC0,
|
||||
0x32,0xC0,0x1F,0x80,0x02,0x00,0x00,0x00,/*"$",4*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x70,0x80,0x89,0x80,0x89,0x00,0x72,0x00,0x05,0xC0,0x0A,0x20,
|
||||
0x12,0x20,0x21,0xC0,0x00,0x00,0x00,0x00,/*"%",5*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x1C,0x00,0x26,0x00,0x24,0x00,0x19,0xC0,0x78,0x80,0xCD,0x00,
|
||||
0xC6,0x00,0x7D,0xE0,0x00,0x00,0x00,0x00,/*"&",6*/
|
||||
|
||||
0x00,0x00,0x38,0x00,0x08,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",7*/
|
||||
|
||||
0x00,0x00,0x00,0x40,0x00,0x80,0x03,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,
|
||||
0x03,0x00,0x01,0x80,0x00,0x40,0x00,0x00,/*"(",8*/
|
||||
|
||||
0x00,0x00,0x20,0x00,0x18,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,
|
||||
0x0C,0x00,0x18,0x00,0x20,0x00,0x00,0x00,/*")",9*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x62,0x30,0x1A,0xC0,0x1F,0xC0,0x62,0x30,
|
||||
0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"*",10*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,
|
||||
0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"+",11*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x38,0x00,0x08,0x00,0x30,0x00,/*",",12*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",13*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,/*".",14*/
|
||||
|
||||
0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,
|
||||
0x10,0x00,0x20,0x00,0x40,0x00,0x00,0x00,/*"/",15*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x1F,0x80,0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
|
||||
0x30,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00,/*"0",16*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x02,0x00,0x3E,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,
|
||||
0x06,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,/*"1",17*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x1F,0x80,0x61,0xC0,0x60,0xC0,0x01,0x80,0x02,0x00,0x0C,0x00,
|
||||
0x30,0x40,0x7F,0xC0,0x00,0x00,0x00,0x00,/*"2",18*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x3F,0x00,0x61,0x80,0x01,0x80,0x0E,0x00,0x01,0x80,0x00,0xC0,
|
||||
0x61,0xC0,0x3F,0x00,0x00,0x00,0x00,0x00,/*"3",19*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x01,0x80,0x07,0x80,0x09,0x80,0x11,0x80,0x61,0x80,0x1F,0xC0,
|
||||
0x01,0x80,0x03,0xC0,0x00,0x00,0x00,0x00,/*"4",20*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x3F,0xC0,0x20,0x00,0x20,0x00,0x2F,0x80,0x10,0xC0,0x00,0xC0,
|
||||
0x61,0xC0,0x3F,0x00,0x00,0x00,0x00,0x00,/*"5",21*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0xC0,0x60,0x00,0x6F,0xC0,0x70,0x60,0x60,0x60,
|
||||
0x30,0x60,0x1F,0x80,0x00,0x00,0x00,0x00,/*"6",22*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x3F,0xE0,0x20,0x40,0x00,0x80,0x01,0x00,0x02,0x00,0x02,0x00,
|
||||
0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,/*"7",23*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x3F,0xC0,0x60,0xE0,0x60,0x60,0x1F,0x80,0x31,0xC0,0x60,0x60,
|
||||
0x70,0x60,0x1F,0x80,0x00,0x00,0x00,0x00,/*"8",24*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x1F,0x80,0x70,0xC0,0x60,0x60,0x70,0xE0,0x3F,0x60,0x00,0xE0,
|
||||
0x31,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,/*"9",25*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,/*":",26*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x06,0x00,0x06,0x00,0x00,0x00,/*";",27*/
|
||||
|
||||
0x00,0x00,0x00,0x60,0x00,0x80,0x03,0x00,0x0C,0x00,0x30,0x00,0x08,0x00,0x06,0x00,
|
||||
0x01,0x80,0x00,0x60,0x00,0x00,0x00,0x00,/*"<",28*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0,0x00,0x00,0x00,0x00,0x7F,0xE0,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"=",29*/
|
||||
|
||||
0x00,0x00,0x30,0x00,0x08,0x00,0x06,0x00,0x01,0x80,0x00,0x60,0x00,0x80,0x03,0x00,
|
||||
0x0C,0x00,0x30,0x00,0x00,0x00,0x00,0x00,/*">",30*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x1F,0x80,0x60,0xE0,0x60,0x60,0x00,0xC0,0x07,0x00,0x04,0x00,
|
||||
0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,/*"?",31*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x0F,0xC0,0x38,0x20,0x63,0xD0,0x64,0x90,0x69,0x90,0x6F,0xE0,
|
||||
0x38,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,/*"@",32*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x06,0x00,0x0F,0x00,0x0B,0x00,0x11,0x80,0x11,0x80,0x3F,0xC0,
|
||||
0x60,0xC0,0xF1,0xF0,0x00,0x00,0x00,0x00,/*"A",33*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xFF,0x80,0x60,0xC0,0x60,0xC0,0x7F,0x00,0x60,0xC0,0x60,0x60,
|
||||
0x60,0xE0,0xFF,0x80,0x00,0x00,0x00,0x00,/*"B",34*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x0F,0xE0,0x38,0x20,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,
|
||||
0x30,0x20,0x1F,0xC0,0x00,0x00,0x00,0x00,/*"C",35*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xFF,0x00,0x60,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
|
||||
0x60,0xC0,0xFF,0x00,0x00,0x00,0x00,0x00,/*"D",36*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xFF,0xC0,0x60,0x20,0x61,0x00,0x7F,0x00,0x61,0x00,0x60,0x00,
|
||||
0x60,0x20,0xFF,0xC0,0x00,0x00,0x00,0x00,/*"E",37*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xFF,0xC0,0x60,0x20,0x61,0x00,0x7F,0x00,0x61,0x00,0x60,0x00,
|
||||
0x60,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,/*"F",38*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x07,0xC0,0x38,0x40,0x60,0x00,0x60,0x00,0x63,0xF0,0x60,0xC0,
|
||||
0x30,0xC0,0x0F,0x00,0x00,0x00,0x00,0x00,/*"G",39*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xF0,0xF0,0x60,0x60,0x60,0x60,0x7F,0xE0,0x60,0x60,0x60,0x60,
|
||||
0x60,0x60,0xF0,0xF0,0x00,0x00,0x00,0x00,/*"H",40*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x3F,0xC0,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,
|
||||
0x06,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,/*"I",41*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x0F,0xF0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
|
||||
0x01,0x80,0x61,0x80,0x3F,0x00,0x00,0x00,/*"J",42*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xF1,0xE0,0x60,0x80,0x67,0x00,0x7C,0x00,0x62,0x00,0x61,0x00,
|
||||
0x60,0xC0,0xF0,0xF0,0x00,0x00,0x00,0x00,/*"K",43*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xF0,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,
|
||||
0x60,0x20,0xFF,0xC0,0x00,0x00,0x00,0x00,/*"L",44*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xF0,0xF0,0x70,0xE0,0x79,0x60,0x59,0x60,0x5E,0x60,0x4E,0x60,
|
||||
0x4C,0x60,0xE4,0xF0,0x00,0x00,0x00,0x00,/*"M",45*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xE0,0x70,0x70,0x20,0x58,0x20,0x46,0x20,0x43,0x20,0x41,0xE0,
|
||||
0x40,0x60,0xE0,0x20,0x00,0x00,0x00,0x00,/*"N",46*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x1F,0x80,0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
|
||||
0x30,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00,/*"O",47*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xFF,0xC0,0x60,0x60,0x60,0x60,0x7F,0xC0,0x60,0x00,0x60,0x00,
|
||||
0x60,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,/*"P",48*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x1F,0x80,0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x6E,0x60,
|
||||
0x31,0xC0,0x1F,0x00,0x00,0xE0,0x00,0x00,/*"Q",49*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xFF,0xC0,0x60,0x60,0x60,0x60,0x7F,0x80,0x63,0x00,0x61,0x80,
|
||||
0x60,0xC0,0xF0,0x70,0x00,0x00,0x00,0x00,/*"R",50*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x1F,0xE0,0x60,0x20,0x60,0x00,0x1F,0x00,0x01,0xC0,0x00,0x60,
|
||||
0x40,0xE0,0x7F,0x80,0x00,0x00,0x00,0x00,/*"S",51*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x7F,0xE0,0x86,0x10,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,
|
||||
0x06,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,/*"T",52*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xF0,0x70,0x60,0x20,0x60,0x20,0x60,0x20,0x60,0x20,0x60,0x20,
|
||||
0x60,0x60,0x3F,0xC0,0x00,0x00,0x00,0x00,/*"U",53*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xF8,0xF0,0x30,0x40,0x30,0x40,0x18,0x80,0x18,0x80,0x0D,0x00,
|
||||
0x0F,0x00,0x06,0x00,0x00,0x00,0x00,0x00,/*"V",54*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xF7,0x70,0x66,0x20,0x62,0x40,0x33,0x40,0x37,0x80,0x3F,0x80,
|
||||
0x19,0x80,0x11,0x00,0x00,0x00,0x00,0x00,/*"W",55*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x79,0xE0,0x18,0x80,0x0D,0x00,0x06,0x00,0x07,0x00,0x09,0x80,
|
||||
0x10,0x40,0x78,0xE0,0x00,0x00,0x00,0x00,/*"X",56*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0xF1,0xF0,0x20,0x40,0x10,0x80,0x09,0x00,0x06,0x00,0x06,0x00,
|
||||
0x06,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,/*"Y",57*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x3F,0xC0,0x60,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,
|
||||
0x10,0x20,0x3F,0xC0,0x00,0x00,0x00,0x00,/*"Z",58*/
|
||||
|
||||
0x00,0x00,0x07,0xE0,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,
|
||||
0x04,0x00,0x04,0x00,0x07,0xE0,0x00,0x00,/*"[",59*/
|
||||
|
||||
0x00,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,0x00,
|
||||
0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x00,/*"\",60*/
|
||||
|
||||
0x00,0x00,0x3F,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
|
||||
0x01,0x00,0x01,0x00,0x3F,0x00,0x00,0x00,/*"]",61*/
|
||||
|
||||
0x00,0x00,0x07,0x00,0x18,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",62*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,/*"_",63*/
|
||||
|
||||
0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",64*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x30,0xC0,0x1F,0xC0,
|
||||
0x60,0xC0,0x3F,0xF0,0x00,0x00,0x00,0x00,/*"a",65*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x70,0x00,0x30,0x00,0x30,0x00,0x37,0xC0,0x38,0x60,0x30,0x60,
|
||||
0x30,0x60,0x3F,0x80,0x00,0x00,0x00,0x00,/*"b",66*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x71,0x80,0x60,0x00,
|
||||
0x70,0x40,0x1F,0x80,0x00,0x00,0x00,0x00,/*"c",67*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x1F,0xC0,0x70,0xC0,0x60,0xC0,
|
||||
0x60,0xC0,0x3F,0xE0,0x00,0x00,0x00,0x00,/*"d",68*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x30,0x60,0x3F,0xE0,
|
||||
0x30,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,/*"e",69*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x07,0xE0,0x0C,0x00,0x0C,0x00,0x7F,0xC0,0x0C,0x00,0x0C,0x00,
|
||||
0x0C,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,/*"f",70*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x30,0xC0,0x1F,0x80,
|
||||
0x30,0x00,0x3F,0x80,0x60,0x60,0x3F,0xC0,/*"g",71*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x70,0x00,0x30,0x00,0x30,0x00,0x37,0x80,0x38,0xC0,0x30,0xC0,
|
||||
0x30,0xC0,0x79,0xE0,0x00,0x00,0x00,0x00,/*"h",72*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x06,0x00,0x06,0x00,
|
||||
0x06,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,/*"i",73*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x0F,0x80,0x01,0x80,0x01,0x80,
|
||||
0x01,0x80,0x01,0x80,0x01,0x80,0x3F,0x00,/*"j",74*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x70,0x00,0x30,0x00,0x30,0x00,0x33,0xC0,0x33,0x00,0x3E,0x00,
|
||||
0x31,0x00,0x79,0xE0,0x00,0x00,0x00,0x00,/*"k",75*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x3E,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,
|
||||
0x06,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,/*"l",76*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x66,0x60,0x66,0x60,
|
||||
0x66,0x60,0xF7,0x70,0x00,0x00,0x00,0x00,/*"m",77*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x00,0x38,0xC0,0x30,0xC0,
|
||||
0x30,0xC0,0x79,0xE0,0x00,0x00,0x00,0x00,/*"n",78*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x70,0xE0,0x60,0x60,
|
||||
0x70,0xE0,0x1F,0x80,0x00,0x00,0x00,0x00,/*"o",79*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0xC0,0x38,0x60,0x30,0x60,
|
||||
0x30,0xE0,0x3F,0x80,0x30,0x00,0x7C,0x00,/*"p",80*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x70,0xC0,0x60,0xC0,
|
||||
0x60,0xC0,0x3F,0xC0,0x00,0xC0,0x03,0xE0,/*"q",81*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF9,0xE0,0x1E,0x00,0x18,0x00,
|
||||
0x18,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,/*"r",82*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x30,0x00,0x0F,0x80,
|
||||
0x20,0x60,0x3F,0xC0,0x00,0x00,0x00,0x00,/*"s",83*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0C,0x00,0x7F,0x80,0x0C,0x00,0x0C,0x00,
|
||||
0x0C,0x40,0x03,0x80,0x00,0x00,0x00,0x00,/*"t",84*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0xC0,0x30,0xC0,0x30,0xC0,
|
||||
0x30,0xC0,0x1F,0xE0,0x00,0x00,0x00,0x00,/*"u",85*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xF0,0x10,0x40,0x08,0x80,
|
||||
0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,/*"v",86*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xB0,0x63,0x20,0x37,0xE0,
|
||||
0x3D,0xC0,0x18,0x80,0x00,0x00,0x00,0x00,/*"w",87*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0,0x1D,0x80,0x06,0x00,
|
||||
0x19,0x80,0x7F,0xE0,0x00,0x00,0x00,0x00,/*"x",88*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0xE0,0x10,0x80,0x19,0x00,
|
||||
0x0F,0x00,0x06,0x00,0x04,0x00,0x38,0x00,/*"y",89*/
|
||||
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x23,0x00,0x06,0x00,
|
||||
0x18,0x20,0x3F,0xE0,0x00,0x00,0x00,0x00,/*"z",90*/
|
||||
|
||||
0x00,0x00,0x01,0xC0,0x01,0x00,0x01,0x00,0x01,0x00,0x06,0x00,0x01,0x00,0x01,0x00,
|
||||
0x01,0x00,0x01,0x00,0x00,0xC0,0x00,0x00,/*"{",91*/
|
||||
|
||||
0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,
|
||||
0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,/*"|",92*/
|
||||
|
||||
0x00,0x00,0x38,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x06,0x00,0x08,0x00,0x08,0x00,
|
||||
0x08,0x00,0x08,0x00,0x30,0x00,0x00,0x00,/*"}",93*/
|
||||
|
||||
0x3C,0x00,0x47,0x10,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",94*/
|
||||
};
|
||||
#endif
|
||||
4351
Drivers/BSP/160160D/BMP.C
Normal file
4351
Drivers/BSP/160160D/BMP.C
Normal file
File diff suppressed because it is too large
Load Diff
16165
Drivers/BSP/160160D/ChineseLibrary12x12.h
Normal file
16165
Drivers/BSP/160160D/ChineseLibrary12x12.h
Normal file
File diff suppressed because it is too large
Load Diff
27307
Drivers/BSP/160160D/ChineseLibrary15x15.h
Normal file
27307
Drivers/BSP/160160D/ChineseLibrary15x15.h
Normal file
File diff suppressed because it is too large
Load Diff
11328
Drivers/BSP/160160D/ChineseLibraryCrossWise12x12.h
Normal file
11328
Drivers/BSP/160160D/ChineseLibraryCrossWise12x12.h
Normal file
File diff suppressed because it is too large
Load Diff
1181
Drivers/BSP/160160D/FONT5_7.C
Normal file
1181
Drivers/BSP/160160D/FONT5_7.C
Normal file
File diff suppressed because it is too large
Load Diff
57
Drivers/BSP/160160D/FONT5_7.H
Normal file
57
Drivers/BSP/160160D/FONT5_7.H
Normal file
@@ -0,0 +1,57 @@
|
||||
/****************************************************************************************
|
||||
* 文件名:FONT5_7.H
|
||||
* 功能:5*7 ASCII码字体显示函数。(头文件)
|
||||
* 作者:黄绍斌
|
||||
* 日期:2004.02.26
|
||||
* 备注:使用GUI_SetColor()函数设置前景颜色及背景色。
|
||||
****************************************************************************************/
|
||||
#ifndef FONT5_7_H
|
||||
#define FONT5_7_H
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* 名称:GUI_PutChar()
|
||||
* 功能:显示ASCII码,显示值为20H-7FH(若为其它值,则显示' ')。
|
||||
* 入口参数: x 指定显示位置,x坐标
|
||||
* y 指定显示位置,y坐标
|
||||
* ch 要显示的ASCII码值。
|
||||
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
|
||||
* 说明:操作失败原因是指定地址超出有效范围。
|
||||
****************************************************************************/
|
||||
extern unsigned char GUI_PutChar(unsigned int x, unsigned int y, unsigned char ch);
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* 名称:GUI_PutString()
|
||||
* 功能:输出显示字符串(没有自动换行功能)。
|
||||
* 入口参数: x 指定显示位置,x坐标
|
||||
* y 指定显示位置,y坐标
|
||||
* str 要显示的ASCII码字符串
|
||||
* 出口参数:无
|
||||
* 说明:操作失败原因是指定地址超出有效范围。
|
||||
****************************************************************************/
|
||||
extern void GUI_PutString(unsigned int x, unsigned int y, char *str);
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* 名称:GUI_PutNoStr()
|
||||
* 功能:输出显示字符串(没有自动换行功能),若显示的字符个数大于指定个数,则直接退出。
|
||||
* 入口参数: x 指定显示位置,x坐标
|
||||
* y 指定显示位置,y坐标
|
||||
* str 要显示的ASCII码字符串。
|
||||
* no 最大显示字符的个数
|
||||
* 出口参数:无
|
||||
* 说明:操作失败原因是指定地址超出有效范围。
|
||||
****************************************************************************/
|
||||
extern void GUI_PutNoStr(unsigned int x, unsigned int y, char *str, unsigned char no);
|
||||
|
||||
/****************************************************************************
|
||||
* 名称:GUI_PutHex()
|
||||
* 功能:显示HEX码,显示值为00H-FFH(若为其它值,则显示' ')。
|
||||
* 入口参数: x 指定显示位置,x坐标
|
||||
* y 指定显示位置,y坐标
|
||||
* v 要显示的HEX。
|
||||
*出口参数:无
|
||||
****************************************************************************/
|
||||
extern void GUI_PutHex(unsigned char x, unsigned char y,unsigned char v);
|
||||
#endif
|
||||
1475
Drivers/BSP/160160D/GraphicsLibrary.h
Normal file
1475
Drivers/BSP/160160D/GraphicsLibrary.h
Normal file
File diff suppressed because it is too large
Load Diff
175
Drivers/BSP/IIC/iic.c
Normal file
175
Drivers/BSP/IIC/iic.c
Normal file
@@ -0,0 +1,175 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @文件 iic.c
|
||||
* @作者 阜阳师范大学物电学院
|
||||
* @版本 V0.1
|
||||
* @日期 2025-03-27
|
||||
* @简介 软件 IIC 驱动程序
|
||||
******************************************************************************
|
||||
**/
|
||||
|
||||
#include "iic.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief IIC初始化函数
|
||||
* @note 初始化IIC通信所需的GPIO引脚,配置为开漏输出模式
|
||||
* @retval 无
|
||||
*/
|
||||
void iic_init()
|
||||
{
|
||||
GPIO_InitTypeDef gpio_init_struct;
|
||||
|
||||
IIC_SCL_GPIO_CLK_ENABLE();
|
||||
IIC_SDA_GPIO_CLK_ENABLE();
|
||||
|
||||
gpio_init_struct.Pin = IIC_SCL_GPIO_PIN;
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
gpio_init_struct.Pull = GPIO_PULLUP;
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(IIC_SCL_GPIO_PORT,&gpio_init_struct);
|
||||
|
||||
gpio_init_struct.Pin = IIC_SDA_GPIO_PIN;
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_OD;
|
||||
HAL_GPIO_Init(IIC_SDA_GPIO_PORT,&gpio_init_struct);
|
||||
|
||||
IIC_SDA(1);
|
||||
IIC_SCL(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief IIC总线延时函数
|
||||
* @note 提供固定2微秒的延时,满足IIC通信时序要求
|
||||
* @retval 无
|
||||
*/
|
||||
static void iic_delay(void)
|
||||
{
|
||||
delay_us(2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 产生IIC起始信号
|
||||
* @note 起始信号时序:SCL高电平时,SDA由高变低
|
||||
* @retval 无
|
||||
*/
|
||||
void iic_start(void)
|
||||
{
|
||||
IIC_SCL(1);
|
||||
IIC_SDA(1);
|
||||
iic_delay();
|
||||
IIC_SDA(0);
|
||||
iic_delay();
|
||||
IIC_SCL(0);
|
||||
iic_delay();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 向IIC总线发送一个字节数据
|
||||
* @param data:待发送的8位数据
|
||||
* @retval 无
|
||||
*/
|
||||
void iic_send_byte(uint8_t data)
|
||||
{
|
||||
uint8_t t;
|
||||
for(t = 0;t<8;t++)
|
||||
{
|
||||
IIC_SDA((data&0x80)>>7);
|
||||
iic_delay();
|
||||
IIC_SCL(1);
|
||||
iic_delay();
|
||||
IIC_SCL(0);
|
||||
data<<=1;
|
||||
}
|
||||
IIC_SDA(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 产生IIC停止信号
|
||||
* @note 停止信号时序:SCL高电平时,SDA由低变高
|
||||
* @retval 无
|
||||
*/
|
||||
void iic_stop(void)
|
||||
{
|
||||
IIC_SDA(0);
|
||||
iic_delay();
|
||||
IIC_SCL(1);
|
||||
iic_delay();
|
||||
IIC_SDA(1);
|
||||
iic_delay();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 等待IIC从机应答信号
|
||||
* @note 从机应答信号为SDA低电平,超时自动释放总线
|
||||
* @retval 1:未接收到应答,0:接收到应答
|
||||
*/
|
||||
uint8_t iic_wait_ack(void)//返回1:失败,0:成功
|
||||
{
|
||||
IIC_SDA(1);
|
||||
iic_delay();
|
||||
IIC_SCL(1);
|
||||
iic_delay();
|
||||
if(IIC_READ_SDA)
|
||||
{
|
||||
iic_stop();
|
||||
return 1;
|
||||
}
|
||||
IIC_SCL(0);
|
||||
iic_delay();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 主机发送应答信号
|
||||
* @note 应答信号时序:SCL高电平时,SDA保持低电平
|
||||
* @retval 无
|
||||
*/
|
||||
void iic_ack(void)
|
||||
{
|
||||
IIC_SCL(0);
|
||||
iic_delay();
|
||||
IIC_SDA(0);
|
||||
iic_delay();
|
||||
IIC_SCL(1);
|
||||
iic_delay();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 主机发送非应答信号
|
||||
* @note 非应答信号时序:SCL高电平时,SDA保持高电平
|
||||
* @retval 无
|
||||
*/
|
||||
void iic_nack(void)
|
||||
{
|
||||
IIC_SCL(0); /* 产生一个时钟 */
|
||||
iic_delay();
|
||||
IIC_SDA(1);
|
||||
iic_delay();
|
||||
IIC_SCL(1); /* 主机释放SDA线 */
|
||||
iic_delay();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 从IIC总线读取一个字节数据
|
||||
* @param ack:应答控制,0=发送非应答,1=发送应答
|
||||
* @retval 读取到的8位数据
|
||||
*/
|
||||
uint8_t iic_read_byte(uint8_t ack)
|
||||
{
|
||||
uint8_t i,receive = 0;
|
||||
|
||||
for(i=0;i<8;i++)
|
||||
{
|
||||
receive<<=1;
|
||||
IIC_SCL(1);
|
||||
iic_delay();
|
||||
if(IIC_READ_SDA) receive++;
|
||||
IIC_SCL(0);
|
||||
iic_delay();
|
||||
}
|
||||
if(!ack) iic_nack();
|
||||
else iic_ack();
|
||||
|
||||
return receive;
|
||||
}
|
||||
40
Drivers/BSP/IIC/iic.h
Normal file
40
Drivers/BSP/IIC/iic.h
Normal file
@@ -0,0 +1,40 @@
|
||||
#ifndef __IIC_H
|
||||
#define __IIC_H
|
||||
|
||||
|
||||
#include "./SYSTEM/sys/sys.h"
|
||||
#include "./SYSTEM/delay/delay.h"
|
||||
|
||||
|
||||
#define IIC_SCL_GPIO_PORT GPIOA
|
||||
#define IIC_SCL_GPIO_PIN GPIO_PIN_5
|
||||
#define IIC_SCL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
|
||||
#define IIC_SDA_GPIO_PORT GPIOA
|
||||
#define IIC_SDA_GPIO_PIN GPIO_PIN_6
|
||||
#define IIC_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
||||
|
||||
#define IIC_SCL(x) do{ x ? \
|
||||
HAL_GPIO_WritePin(IIC_SCL_GPIO_PORT, IIC_SCL_GPIO_PIN, GPIO_PIN_SET) : \
|
||||
HAL_GPIO_WritePin(IIC_SCL_GPIO_PORT, IIC_SCL_GPIO_PIN, GPIO_PIN_RESET); \
|
||||
}while(0) /* SCL */
|
||||
#define IIC_SDA(x) do{x? \
|
||||
HAL_GPIO_WritePin(IIC_SDA_GPIO_PORT,IIC_SDA_GPIO_PIN,GPIO_PIN_SET): \
|
||||
HAL_GPIO_WritePin(IIC_SDA_GPIO_PORT,IIC_SDA_GPIO_PIN,GPIO_PIN_RESET); \
|
||||
}while(0);
|
||||
#define IIC_READ_SDA HAL_GPIO_ReadPin(IIC_SDA_GPIO_PORT,IIC_SDA_GPIO_PIN)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void iic_init(void);
|
||||
void iic_start(void);
|
||||
uint8_t iic_read_byte(uint8_t ack);
|
||||
void iic_send_byte(uint8_t data);
|
||||
void iic_stop(void);
|
||||
uint8_t iic_wait_ack(void);
|
||||
void iic_ack(void);
|
||||
void iic_nack(void);
|
||||
#endif
|
||||
|
||||
292
Drivers/BSP/KEY/MultiButton.c
Normal file
292
Drivers/BSP/KEY/MultiButton.c
Normal file
@@ -0,0 +1,292 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Zibin Zheng <znbin@qq.com>
|
||||
* All rights reserved
|
||||
*/
|
||||
|
||||
#include "MultiButton.h"
|
||||
|
||||
// Macro for callback execution with null check
|
||||
#define EVENT_CB(ev) do { if(handle->cb[ev]) handle->cb[ev](handle); } while(0)
|
||||
|
||||
// Button handle list head
|
||||
static Button* head_handle = NULL;
|
||||
|
||||
// Forward declarations
|
||||
static void button_handler(Button* handle);
|
||||
static inline uint8_t button_read_level(Button* handle);
|
||||
|
||||
/**
|
||||
* @brief Initialize the button struct handle
|
||||
* @param handle: the button handle struct
|
||||
* @param pin_level: read the HAL GPIO of the connected button level
|
||||
* @param active_level: pressed GPIO level
|
||||
* @param button_id: the button id
|
||||
* @retval None
|
||||
*/
|
||||
void button_init(Button* handle, uint8_t(*pin_level)(uint8_t), uint8_t active_level, uint8_t button_id)
|
||||
{
|
||||
if (!handle || !pin_level) return; // parameter validation
|
||||
|
||||
memset(handle, 0, sizeof(Button));
|
||||
handle->event = (uint8_t)BTN_NONE_PRESS;
|
||||
handle->hal_button_level = pin_level;
|
||||
handle->button_level = !active_level; // initialize to opposite of active level
|
||||
handle->active_level = active_level;
|
||||
handle->button_id = button_id;
|
||||
handle->state = BTN_STATE_IDLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Attach the button event callback function
|
||||
* @param handle: the button handle struct
|
||||
* @param event: trigger event type
|
||||
* @param cb: callback function
|
||||
* @retval None
|
||||
*/
|
||||
void button_attach(Button* handle, ButtonEvent event, BtnCallback cb)
|
||||
{
|
||||
if (!handle || event >= BTN_EVENT_COUNT) return; // parameter validation
|
||||
handle->cb[event] = cb;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Detach the button event callback function
|
||||
* @param handle: the button handle struct
|
||||
* @param event: trigger event type
|
||||
* @retval None
|
||||
*/
|
||||
void button_detach(Button* handle, ButtonEvent event)
|
||||
{
|
||||
if (!handle || event >= BTN_EVENT_COUNT) return; // parameter validation
|
||||
handle->cb[event] = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the button event that happened
|
||||
* @param handle: the button handle struct
|
||||
* @retval button event
|
||||
*/
|
||||
ButtonEvent button_get_event(Button* handle)
|
||||
{
|
||||
if (!handle) return BTN_NONE_PRESS;
|
||||
return (ButtonEvent)(handle->event);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the repeat count of button presses
|
||||
* @param handle: the button handle struct
|
||||
* @retval repeat count
|
||||
*/
|
||||
uint8_t button_get_repeat_count(Button* handle)
|
||||
{
|
||||
if (!handle) return 0;
|
||||
return handle->repeat;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reset button state to idle
|
||||
* @param handle: the button handle struct
|
||||
* @retval None
|
||||
*/
|
||||
void button_reset(Button* handle)
|
||||
{
|
||||
if (!handle) return;
|
||||
handle->state = BTN_STATE_IDLE;
|
||||
handle->ticks = 0;
|
||||
handle->repeat = 0;
|
||||
handle->event = (uint8_t)BTN_NONE_PRESS;
|
||||
handle->debounce_cnt = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if button is currently pressed
|
||||
* @param handle: the button handle struct
|
||||
* @retval 1: pressed, 0: not pressed, -1: error
|
||||
*/
|
||||
int button_is_pressed(Button* handle)
|
||||
{
|
||||
if (!handle) return -1;
|
||||
return (handle->button_level == handle->active_level) ? 1 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read button level with inline optimization
|
||||
* @param handle: the button handle struct
|
||||
* @retval button level
|
||||
*/
|
||||
static inline uint8_t button_read_level(Button* handle)
|
||||
{
|
||||
return handle->hal_button_level(handle->button_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Button driver core function, driver state machine
|
||||
* @param handle: the button handle struct
|
||||
* @retval None
|
||||
*/
|
||||
static void button_handler(Button* handle)
|
||||
{
|
||||
uint8_t read_gpio_level = button_read_level(handle);
|
||||
|
||||
// Increment ticks counter when not in idle state
|
||||
if (handle->state > BTN_STATE_IDLE) {
|
||||
handle->ticks++;
|
||||
}
|
||||
|
||||
/*------------Button debounce handling---------------*/
|
||||
if (read_gpio_level != handle->button_level) {
|
||||
// Continue reading same new level for debounce
|
||||
if (++(handle->debounce_cnt) >= DEBOUNCE_TICKS) {
|
||||
handle->button_level = read_gpio_level;
|
||||
handle->debounce_cnt = 0;
|
||||
}
|
||||
} else {
|
||||
// Level not changed, reset counter
|
||||
handle->debounce_cnt = 0;
|
||||
}
|
||||
|
||||
/*-----------------State machine-------------------*/
|
||||
switch (handle->state) {
|
||||
case BTN_STATE_IDLE:
|
||||
if (handle->button_level == handle->active_level) {
|
||||
// Button press detected
|
||||
handle->event = (uint8_t)BTN_PRESS_DOWN;
|
||||
EVENT_CB(BTN_PRESS_DOWN);
|
||||
handle->ticks = 0;
|
||||
handle->repeat = 1;
|
||||
handle->state = BTN_STATE_PRESS;
|
||||
} else {
|
||||
handle->event = (uint8_t)BTN_NONE_PRESS;
|
||||
}
|
||||
break;
|
||||
|
||||
case BTN_STATE_PRESS:
|
||||
if (handle->button_level != handle->active_level) {
|
||||
// Button released
|
||||
handle->event = (uint8_t)BTN_PRESS_UP;
|
||||
EVENT_CB(BTN_PRESS_UP);
|
||||
handle->ticks = 0;
|
||||
handle->state = BTN_STATE_RELEASE;
|
||||
} else if (handle->ticks > LONG_TICKS) {
|
||||
// Long press detected
|
||||
handle->event = (uint8_t)BTN_LONG_PRESS_START;
|
||||
EVENT_CB(BTN_LONG_PRESS_START);
|
||||
handle->state = BTN_STATE_LONG_HOLD;
|
||||
}
|
||||
break;
|
||||
|
||||
case BTN_STATE_RELEASE:
|
||||
if (handle->button_level == handle->active_level) {
|
||||
// Button pressed again
|
||||
handle->event = (uint8_t)BTN_PRESS_DOWN;
|
||||
EVENT_CB(BTN_PRESS_DOWN);
|
||||
if (handle->repeat < PRESS_REPEAT_MAX_NUM) {
|
||||
handle->repeat++;
|
||||
}
|
||||
EVENT_CB(BTN_PRESS_REPEAT);
|
||||
handle->ticks = 0;
|
||||
handle->state = BTN_STATE_REPEAT;
|
||||
} else if (handle->ticks > SHORT_TICKS) {
|
||||
// Timeout reached, determine click type
|
||||
if (handle->repeat == 1) {
|
||||
handle->event = (uint8_t)BTN_SINGLE_CLICK;
|
||||
EVENT_CB(BTN_SINGLE_CLICK);
|
||||
} else if (handle->repeat == 2) {
|
||||
handle->event = (uint8_t)BTN_DOUBLE_CLICK;
|
||||
EVENT_CB(BTN_DOUBLE_CLICK);
|
||||
}
|
||||
handle->state = BTN_STATE_IDLE;
|
||||
}
|
||||
break;
|
||||
|
||||
case BTN_STATE_REPEAT:
|
||||
if (handle->button_level != handle->active_level) {
|
||||
// Button released
|
||||
handle->event = (uint8_t)BTN_PRESS_UP;
|
||||
EVENT_CB(BTN_PRESS_UP);
|
||||
if (handle->ticks < SHORT_TICKS) {
|
||||
handle->ticks = 0;
|
||||
handle->state = BTN_STATE_RELEASE; // Continue waiting for more presses
|
||||
} else {
|
||||
handle->state = BTN_STATE_IDLE; // End of sequence
|
||||
}
|
||||
} else if (handle->ticks > SHORT_TICKS) {
|
||||
// Held down too long, treat as normal press
|
||||
handle->state = BTN_STATE_PRESS;
|
||||
}
|
||||
break;
|
||||
|
||||
case BTN_STATE_LONG_HOLD:
|
||||
if (handle->button_level == handle->active_level) {
|
||||
// Continue holding
|
||||
handle->event = (uint8_t)BTN_LONG_PRESS_HOLD;
|
||||
EVENT_CB(BTN_LONG_PRESS_HOLD);
|
||||
} else {
|
||||
// Released from long press
|
||||
handle->event = (uint8_t)BTN_PRESS_UP;
|
||||
EVENT_CB(BTN_PRESS_UP);
|
||||
handle->state = BTN_STATE_IDLE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
// Invalid state, reset to idle
|
||||
handle->state = BTN_STATE_IDLE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Start the button work, add the handle into work list
|
||||
* @param handle: target handle struct
|
||||
* @retval 0: succeed, -1: already exist, -2: invalid parameter
|
||||
*/
|
||||
int button_start(Button* handle)
|
||||
{
|
||||
if (!handle) return -2; // invalid parameter
|
||||
|
||||
Button* target = head_handle;
|
||||
while (target) {
|
||||
if (target == handle) return -1; // already exist
|
||||
target = target->next;
|
||||
}
|
||||
|
||||
handle->next = head_handle;
|
||||
head_handle = handle;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Stop the button work, remove the handle from work list
|
||||
* @param handle: target handle struct
|
||||
* @retval None
|
||||
*/
|
||||
void button_stop(Button* handle)
|
||||
{
|
||||
if (!handle) return; // parameter validation
|
||||
|
||||
Button** curr;
|
||||
for (curr = &head_handle; *curr; ) {
|
||||
Button* entry = *curr;
|
||||
if (entry == handle) {
|
||||
*curr = entry->next;
|
||||
entry->next = NULL; // clear next pointer
|
||||
return;
|
||||
} else {
|
||||
curr = &entry->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Background ticks, timer repeat invoking interval 5ms
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
void button_ticks(void)
|
||||
{
|
||||
Button* target;
|
||||
for (target = head_handle; target; target = target->next) {
|
||||
button_handler(target);
|
||||
}
|
||||
}
|
||||
84
Drivers/BSP/KEY/MultiButton.h
Normal file
84
Drivers/BSP/KEY/MultiButton.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Zibin Zheng <znbin@qq.com>
|
||||
* All rights reserved
|
||||
*/
|
||||
|
||||
#ifndef _MULTI_BUTTON_H_
|
||||
#define _MULTI_BUTTON_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
// Configuration constants - can be modified according to your needs
|
||||
#define TICKS_INTERVAL 5 // ms - timer interrupt interval
|
||||
#define DEBOUNCE_TICKS 3 // MAX 7 (0 ~ 7) - debounce filter depth
|
||||
#define SHORT_TICKS (300 / TICKS_INTERVAL) // short press threshold
|
||||
#define LONG_TICKS (1000 / TICKS_INTERVAL) // long press threshold
|
||||
#define PRESS_REPEAT_MAX_NUM 15 // maximum repeat counter value
|
||||
|
||||
// Forward declaration
|
||||
typedef struct _Button Button;
|
||||
|
||||
// Button callback function type
|
||||
typedef void (*BtnCallback)(Button* btn_handle);
|
||||
|
||||
// Button event types
|
||||
typedef enum {
|
||||
BTN_PRESS_DOWN = 0, // button pressed down
|
||||
BTN_PRESS_UP, // button released
|
||||
BTN_PRESS_REPEAT, // repeated press detected
|
||||
BTN_SINGLE_CLICK, // single click completed
|
||||
BTN_DOUBLE_CLICK, // double click completed
|
||||
BTN_LONG_PRESS_START, // long press started
|
||||
BTN_LONG_PRESS_HOLD, // long press holding
|
||||
BTN_EVENT_COUNT, // total number of events
|
||||
BTN_NONE_PRESS // no event
|
||||
} ButtonEvent;
|
||||
|
||||
// Button state machine states
|
||||
typedef enum {
|
||||
BTN_STATE_IDLE = 0, // idle state
|
||||
BTN_STATE_PRESS, // pressed state
|
||||
BTN_STATE_RELEASE, // released state waiting for timeout
|
||||
BTN_STATE_REPEAT, // repeat press state
|
||||
BTN_STATE_LONG_HOLD // long press hold state
|
||||
} ButtonState;
|
||||
|
||||
// Button structure
|
||||
struct _Button {
|
||||
uint16_t ticks; // tick counter
|
||||
uint8_t repeat : 4; // repeat counter (0-15)
|
||||
uint8_t event : 4; // current event (0-15)
|
||||
uint8_t state : 3; // state machine state (0-7)
|
||||
uint8_t debounce_cnt : 3; // debounce counter (0-7)
|
||||
uint8_t active_level : 1; // active GPIO level (0 or 1)
|
||||
uint8_t button_level : 1; // current button level
|
||||
uint8_t button_id; // button identifier
|
||||
uint8_t (*hal_button_level)(uint8_t button_id); // HAL function to read GPIO
|
||||
BtnCallback cb[BTN_EVENT_COUNT]; // callback function array
|
||||
Button* next; // next button in linked list
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Public API functions
|
||||
void button_init(Button* handle, uint8_t(*pin_level)(uint8_t), uint8_t active_level, uint8_t button_id);
|
||||
void button_attach(Button* handle, ButtonEvent event, BtnCallback cb);
|
||||
void button_detach(Button* handle, ButtonEvent event);
|
||||
ButtonEvent button_get_event(Button* handle);
|
||||
int button_start(Button* handle);
|
||||
void button_stop(Button* handle);
|
||||
void button_ticks(void);
|
||||
|
||||
// Utility functions
|
||||
uint8_t button_get_repeat_count(Button* handle);
|
||||
void button_reset(Button* handle);
|
||||
int button_is_pressed(Button* handle);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
147
Drivers/BSP/KEY/key.c
Normal file
147
Drivers/BSP/KEY/key.c
Normal file
@@ -0,0 +1,147 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @文件 key.c
|
||||
* @作者 阜阳师范大学物电学院
|
||||
* @版本 V0.1
|
||||
* @日期 2026-01-15
|
||||
* @简介 按键驱动 - 基于 MultiButton 的高可移植性实现
|
||||
* @说明
|
||||
*
|
||||
****
|
||||
*/
|
||||
|
||||
#include "key.h"
|
||||
|
||||
|
||||
// 按键配置结构体
|
||||
typedef struct {
|
||||
uint16_t pin; // GPIO引脚
|
||||
GPIO_TypeDef* port; // GPIO端口
|
||||
KEY_TYPE key_type; // 按键ID
|
||||
} KeyConfig_t;
|
||||
|
||||
/*
|
||||
*******************详细引脚映射*****************************
|
||||
| 按键名称 | 端口 | 引脚 | 位定义 | 功能说明 |
|
||||
|---------|------|------|--------|----------|
|
||||
| KEY_ENTER | GPIOB | PB15 | KEY_ENTER_BIT | 确认键 |
|
||||
| KEY_UP | GPIOD | PD11 | KEY_UP_BIT | 上键 |
|
||||
| KEY_DOWN | GPIOD | PD10 | KET_DOWN_BIT | 下键 |
|
||||
| KEY_LEFT | GPIOD | PD13 | KET_LEFT_BIT | 左键 |
|
||||
| KEY_RIGHT | GPIOD | PD8 | KET_RIGHT_BIT | 右键 |
|
||||
| KEY_ESC | GPIOD | PD12 | KET_ESC_BIT | 取消键 |
|
||||
| KEY_ADD | GPIOD | PD14 | KET_ADD_BIT | 加键 |
|
||||
| KEY_DEC | GPIOD | PD9 | KET_DEC_BIT | 减键 |
|
||||
| KEY_RESET | GPIOD | PD15 | KET_RESET_BIT | 复位键 |
|
||||
***************************************************************
|
||||
*/
|
||||
// 按键配置表
|
||||
static const KeyConfig_t key_configs[] = {
|
||||
{15, GPIOB, KEY_ENTER},
|
||||
{11, GPIOD, KEY_UP},
|
||||
{10, GPIOD, KEY_DOWN},
|
||||
{13, GPIOD, KEY_LEFT},
|
||||
{8, GPIOD, KEY_RIGHT},
|
||||
{12, GPIOD, KEY_ESC},
|
||||
{14, GPIOD, KEY_ADD},
|
||||
{9, GPIOD, KEY_DEC},
|
||||
{15, GPIOD, KEY_RESET},
|
||||
};
|
||||
#define KEY_COUNT (sizeof(key_configs) / sizeof(key_configs[0]))
|
||||
|
||||
// 按键句柄数组
|
||||
static Button btn_handles[KEY_COUNT];
|
||||
// 业务逻辑回调函数指针(由main.c注册)
|
||||
static KeyCallback key_callback = NULL;
|
||||
|
||||
|
||||
/**
|
||||
* @brief 读取按键GPIO电平
|
||||
* @param button_id 按键ID
|
||||
* @retval 0:按下, 1:释放
|
||||
*/
|
||||
static uint8_t button_read_level(uint8_t button_id)
|
||||
{
|
||||
uint16_t pin_bit = HAL_GPIO_ReadPin(key_configs[button_id].port, key_configs[button_id].pin);
|
||||
return pin_bit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 统一的按键回调函数(内部使用,调用业务逻辑回调)
|
||||
* @param btn 按键句柄指针
|
||||
*/
|
||||
static void button_callback(Button* btn)
|
||||
{
|
||||
if (btn != NULL && key_callback != NULL)
|
||||
{
|
||||
// 通过button_id获取对应的按键类型
|
||||
uint8_t button_id = btn->button_id;
|
||||
if (button_id < KEY_COUNT)
|
||||
{
|
||||
// 调用业务逻辑层注册的回调函数
|
||||
key_callback(key_configs[button_id].key_type);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @brief 注册按键回调函数(供业务逻辑层调用)
|
||||
* @param callback 回调函数指针
|
||||
*/
|
||||
void Key_RegisterCallback(KeyCallback callback)
|
||||
{
|
||||
key_callback = callback;
|
||||
}
|
||||
/**
|
||||
* @brief 使能GPIO时钟
|
||||
* @param port: GPIO端口
|
||||
* @retval 无
|
||||
* @note 使用switch-case结构,代码更简洁清晰,支持所有GPIO端口(A-G)
|
||||
*/
|
||||
static void KEY_GPIO_ClockEnable(GPIO_TypeDef *port)
|
||||
{
|
||||
switch ((uint32_t)port) {
|
||||
case (uint32_t)GPIOA: __HAL_RCC_GPIOA_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOB: __HAL_RCC_GPIOB_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOC: __HAL_RCC_GPIOC_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOD: __HAL_RCC_GPIOD_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOE: __HAL_RCC_GPIOE_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOF: __HAL_RCC_GPIOF_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOG: __HAL_RCC_GPIOG_CLK_ENABLE(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
/**************************************************************************************
|
||||
* FunctionName : Key_Init()
|
||||
* Description : 按键硬件初始化(使用MultiButton库)
|
||||
* EntryParameter : none
|
||||
* ReturnValue : none
|
||||
**************************************************************************************/
|
||||
void Key_Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef gpio_init_struct;
|
||||
|
||||
// 统一配置GPIO参数
|
||||
gpio_init_struct.Mode = GPIO_MODE_INPUT;
|
||||
gpio_init_struct.Pull = GPIO_PULLUP;
|
||||
gpio_init_struct.Speed = GPIO_SPEED_HIGH;
|
||||
|
||||
// 批量初始化GPIO
|
||||
for (uint8_t i = 0; i < KEY_COUNT; i++)
|
||||
{
|
||||
/* 使能对应GPIO时钟 */
|
||||
KEY_GPIO_ClockEnable(key_configs[i].port);
|
||||
|
||||
// 配置并初始化引脚
|
||||
gpio_init_struct.Pin = key_configs[i].pin;
|
||||
HAL_GPIO_Init(key_configs[i].port, &gpio_init_struct);
|
||||
}
|
||||
|
||||
// 批量初始化MultiButton按键(active_level=0表示低电平有效)
|
||||
for (uint8_t button_id = 0; button_id < KEY_COUNT; button_id++)
|
||||
{
|
||||
button_init(&btn_handles[button_id], button_read_level, 0, button_id);
|
||||
button_attach(&btn_handles[button_id], BTN_SINGLE_CLICK, button_callback);
|
||||
button_start(&btn_handles[button_id]);
|
||||
}
|
||||
}
|
||||
|
||||
35
Drivers/BSP/KEY/key.h
Normal file
35
Drivers/BSP/KEY/key.h
Normal file
@@ -0,0 +1,35 @@
|
||||
#ifndef __KEY_H__
|
||||
#define __KEY_H__
|
||||
|
||||
|
||||
|
||||
#include "./SYSTEM/sys/sys.h"
|
||||
#include "MultiButton.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
KEY_NONE = 0, // 没有按键
|
||||
|
||||
KEY_ENTER, // 确认
|
||||
KEY_UP, // 向上
|
||||
KEY_DOWN, // 向下
|
||||
KEY_ESC, //取消
|
||||
KEY_ADD, //加
|
||||
KEY_DEC, //减
|
||||
KEY_LEFT, //左
|
||||
KEY_RIGHT, //右
|
||||
KEY_RESET, //复位
|
||||
KEY_FACTORY, //工厂
|
||||
} KEY_TYPE;
|
||||
|
||||
// 按键回调函数类型定义(业务逻辑层使用)
|
||||
// 参数: key_type - 按键类型
|
||||
typedef void (*KeyCallback)(KEY_TYPE key_type);
|
||||
|
||||
|
||||
|
||||
// 按键驱动函数(在key.c中实现,使用MultiButton库)
|
||||
void Key_Init(void); // 按键初始化
|
||||
void Key_RegisterCallback(KeyCallback callback); // 注册按键回调函数(业务逻辑层调用)
|
||||
#define Button_Ticks() button_ticks()
|
||||
#endif
|
||||
261
Drivers/BSP/LED/led.c
Normal file
261
Drivers/BSP/LED/led.c
Normal file
@@ -0,0 +1,261 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @文件 led.c
|
||||
* @作者 阜阳师范大学物电学院
|
||||
* @版本 V0.3
|
||||
* @日期 2026-01-15
|
||||
* @简介 LED 驱动 - 基于结构体的高可移植性实现
|
||||
* @说明 通过修改LED配置数组即可适配不同的硬件连接,无需修改其他代码
|
||||
* 所有硬件相关参数(端口、引脚、极性、速度、上拉下拉)都集中在配置数组中
|
||||
****
|
||||
*/
|
||||
|
||||
#include "led.h"
|
||||
|
||||
/* ============================================================================
|
||||
* LED配置数组 - 在此处修改硬件连接配置
|
||||
* 格式说明:
|
||||
* {端口, 引脚, 极性, 默认状态, 速度, 上拉下拉}
|
||||
*
|
||||
* 示例:
|
||||
* {GPIOA, GPIO_PIN_0, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP}
|
||||
* {GPIOB, GPIO_PIN_5, LED_POLARITY_HIGH_ACTIVE, GPIO_PIN_RESET, GPIO_SPEED_FREQ_MEDIUM, GPIO_NOPULL}
|
||||
* ============================================================================ */
|
||||
static const LED_Config_t led_config[LED_COUNT] = {
|
||||
/* LED1: PD6 - 低电平有效 */
|
||||
{GPIOD, GPIO_PIN_6, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED2: PD5 - 低电平有效 */
|
||||
{GPIOD, GPIO_PIN_5, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED3: PD4 - 低电平有效 */
|
||||
{GPIOD, GPIO_PIN_4, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED4: PD3 - 低电平有效 */
|
||||
{GPIOD, GPIO_PIN_3, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED5: PD2 - 低电平有效 */
|
||||
{GPIOD, GPIO_PIN_2, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED6: PD1 - 低电平有效 */
|
||||
{GPIOD, GPIO_PIN_1, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED7: PD0 - 低电平有效 */
|
||||
{GPIOD, GPIO_PIN_0, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED8: PC12 - 低电平有效 */
|
||||
{GPIOC, GPIO_PIN_12, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED9: PA12 - 低电平有效 */
|
||||
{GPIOA, GPIO_PIN_12, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED10: PA11 - 低电平有效 */
|
||||
{GPIOA, GPIO_PIN_11, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED11: PA10 - 低电平有效 */
|
||||
{GPIOA, GPIO_PIN_10, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED12: PA9 - 低电平有效 */
|
||||
{GPIOA, GPIO_PIN_9, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED13: PA8 - 低电平有效 */
|
||||
{GPIOA, GPIO_PIN_8, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED14: PC9 - 低电平有效 */
|
||||
{GPIOC, GPIO_PIN_9, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED15: PC8 - 低电平有效 */
|
||||
{GPIOC, GPIO_PIN_8, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED16: PC7 - 低电平有效 */
|
||||
{GPIOC, GPIO_PIN_7, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED17: PE3 - 低电平有效 */
|
||||
{GPIOE, GPIO_PIN_3, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED18: PE4 - 低电平有效 */
|
||||
{GPIOE, GPIO_PIN_4, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED19: PE2 - 低电平有效 */
|
||||
{GPIOE, GPIO_PIN_2, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
|
||||
/* LED20: PE5 - 低电平有效 */
|
||||
{GPIOE, GPIO_PIN_5, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
|
||||
};
|
||||
|
||||
/* LED状态数组 - 使用枚举类型提高类型安全性 */
|
||||
static LED_State_t led_state[LED_COUNT];
|
||||
|
||||
/**
|
||||
* @brief 使能GPIO时钟
|
||||
* @param port: GPIO端口
|
||||
* @retval 无
|
||||
* @note 使用switch-case结构,代码更简洁清晰,支持所有GPIO端口(A-G)
|
||||
*/
|
||||
static void LED_GPIO_ClockEnable(GPIO_TypeDef *port)
|
||||
{
|
||||
switch ((uint32_t)port) {
|
||||
case (uint32_t)GPIOA: __HAL_RCC_GPIOA_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOB: __HAL_RCC_GPIOB_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOC: __HAL_RCC_GPIOC_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOD: __HAL_RCC_GPIOD_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOE: __HAL_RCC_GPIOE_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOF: __HAL_RCC_GPIOF_CLK_ENABLE(); break;
|
||||
case (uint32_t)GPIOG: __HAL_RCC_GPIOG_CLK_ENABLE(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief LED初始化
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @note 自动初始化所有配置的LED,所有硬件参数从配置数组中读取
|
||||
* 无需手动逐个配置,修改硬件连接只需修改配置数组
|
||||
*/
|
||||
void LED_Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef gpio_init_struct;
|
||||
uint8_t i;
|
||||
|
||||
/* 遍历配置数组,初始化所有LED */
|
||||
for (i = 0; i < LED_COUNT; i++) {
|
||||
/* 使能对应GPIO时钟 */
|
||||
LED_GPIO_ClockEnable(led_config[i].port);
|
||||
|
||||
/* 从配置数组中读取GPIO参数 */
|
||||
gpio_init_struct.Pin = led_config[i].pin;
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽输出模式 */
|
||||
gpio_init_struct.Speed = led_config[i].speed; /* 速度配置 */
|
||||
gpio_init_struct.Pull = led_config[i].pull; /* 上拉下拉配置 */
|
||||
|
||||
/* 初始化GPIO引脚 */
|
||||
HAL_GPIO_Init(led_config[i].port, &gpio_init_struct);
|
||||
|
||||
/* 设置默认状态 */
|
||||
HAL_GPIO_WritePin(led_config[i].port, led_config[i].pin, led_config[i].default_state);
|
||||
|
||||
/* 初始化状态数组(根据默认状态和极性计算逻辑状态) */
|
||||
if (led_config[i].polarity == LED_POLARITY_LOW_ACTIVE) {
|
||||
led_state[i] = (led_config[i].default_state == GPIO_PIN_RESET) ? LED_ON : LED_OFF;
|
||||
} else {
|
||||
led_state[i] = (led_config[i].default_state == GPIO_PIN_SET) ? LED_ON : LED_OFF;
|
||||
}
|
||||
}
|
||||
LED_POW(LED_ON); /*上电指示灯亮*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 点亮LED
|
||||
* @param led_id: LED ID (0 ~ LED_COUNT-1)
|
||||
* @retval 无
|
||||
*/
|
||||
void LED_On(uint8_t led_id)
|
||||
{
|
||||
GPIO_PinState pin_state;
|
||||
|
||||
if (led_id >= LED_COUNT) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* 根据极性设置引脚状态 */
|
||||
if (led_config[led_id].polarity == LED_POLARITY_LOW_ACTIVE) {
|
||||
pin_state = GPIO_PIN_RESET; /* 低电平有效,输出低电平点亮 */
|
||||
} else {
|
||||
pin_state = GPIO_PIN_SET; /* 高电平有效,输出高电平点亮 */
|
||||
}
|
||||
|
||||
HAL_GPIO_WritePin(led_config[led_id].port, led_config[led_id].pin, pin_state);
|
||||
led_state[led_id] = LED_ON;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 熄灭LED
|
||||
* @param led_id: LED ID (0 ~ LED_COUNT-1)
|
||||
* @retval 无
|
||||
*/
|
||||
void LED_Off(uint8_t led_id)
|
||||
{
|
||||
GPIO_PinState pin_state;
|
||||
|
||||
if (led_id >= LED_COUNT) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* 根据极性设置引脚状态 */
|
||||
if (led_config[led_id].polarity == LED_POLARITY_LOW_ACTIVE) {
|
||||
pin_state = GPIO_PIN_SET; /* 低电平有效,输出高电平熄灭 */
|
||||
} else {
|
||||
pin_state = GPIO_PIN_RESET; /* 高电平有效,输出低电平熄灭 */
|
||||
}
|
||||
|
||||
HAL_GPIO_WritePin(led_config[led_id].port, led_config[led_id].pin, pin_state);
|
||||
led_state[led_id] = LED_OFF;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 翻转LED状态
|
||||
* @param led_id: LED ID (0 ~ LED_COUNT-1)
|
||||
* @retval 无
|
||||
*/
|
||||
void LED_Toggle(uint8_t led_id)
|
||||
{
|
||||
if (led_id >= LED_COUNT) {
|
||||
return;
|
||||
}
|
||||
|
||||
HAL_GPIO_TogglePin(led_config[led_id].port, led_config[led_id].pin);
|
||||
/* 翻转LED状态 - 使用显式条件判断,提高类型安全性 */
|
||||
led_state[led_id] = (led_state[led_id] == LED_ON) ? LED_OFF : LED_ON;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置LED状态
|
||||
* @param led_id: LED ID (0 ~ LED_COUNT-1)
|
||||
* @param state: LED状态 (LED_ON 或 LED_OFF)
|
||||
* @retval 无
|
||||
*/
|
||||
void LED_Set(uint8_t led_id, LED_State_t state)
|
||||
{
|
||||
if (state == LED_ON) {
|
||||
LED_On(led_id);
|
||||
} else {
|
||||
LED_Off(led_id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取LED状态
|
||||
* @param led_id: LED ID (0 ~ LED_COUNT-1)
|
||||
* @retval LED状态 (LED_ON 或 LED_OFF)
|
||||
*/
|
||||
LED_State_t LED_GetState(uint8_t led_id)
|
||||
{
|
||||
if (led_id >= LED_COUNT) {
|
||||
return LED_OFF;
|
||||
}
|
||||
return led_state[led_id];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 输出LED状态
|
||||
* @param ledbuf 状态字节
|
||||
* @retval 无
|
||||
*/
|
||||
void LED_Printf(uint8_t* ledbuf)
|
||||
{
|
||||
uint32_t leddata = (ledbuf[3]<<24) |(ledbuf[2]<<16) | (ledbuf[1]<<8) | ledbuf[0];
|
||||
uint32_t i = 0;
|
||||
LED_State_t state; /* 使用枚举类型,提高类型安全性 */
|
||||
LED_POW(LED_ON); /* 默认上电亮灯 */
|
||||
|
||||
for(i=1; i<LED_COUNT; i++)
|
||||
{
|
||||
/* 将位掩码结果转换为枚举类型:非0 -> LED_ON, 0 -> LED_OFF */
|
||||
state = (leddata & (1UL << i)) ? LED_ON : LED_OFF;
|
||||
LED_Set((uint8_t)i, state);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
44
Drivers/BSP/LED/led.h
Normal file
44
Drivers/BSP/LED/led.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#ifndef __LED_H__
|
||||
#define __LED_H__
|
||||
|
||||
#include "./SYSTEM/sys/sys.h"
|
||||
|
||||
/* LED状态枚举 - 使用枚举类型提高类型安全性 */
|
||||
typedef enum {
|
||||
LED_OFF = 0, /* LED熄灭 */
|
||||
LED_ON = 1 /* LED点亮 */
|
||||
} LED_State_t;
|
||||
|
||||
/* LED极性定义 */
|
||||
#define LED_POLARITY_LOW_ACTIVE 0 /* 低电平有效(低电平亮) */
|
||||
#define LED_POLARITY_HIGH_ACTIVE 1 /* 高电平有效(高电平亮) */
|
||||
|
||||
/* LED配置结构体 - 所有硬件相关参数集中在此 */
|
||||
typedef struct {
|
||||
GPIO_TypeDef *port; /* GPIO端口 (如: GPIOA, GPIOB, ...) */
|
||||
uint16_t pin; /* GPIO引脚 (如: GPIO_PIN_0, GPIO_PIN_1, ...) */
|
||||
uint8_t polarity; /* 极性:LED_POLARITY_LOW_ACTIVE 或 LED_POLARITY_HIGH_ACTIVE */
|
||||
GPIO_PinState default_state; /* 默认状态:GPIO_PIN_SET 或 GPIO_PIN_RESET */
|
||||
uint32_t speed; /* GPIO速度:GPIO_SPEED_FREQ_LOW/MEDIUM/HIGH */
|
||||
uint32_t pull; /* 上拉下拉:GPIO_PULLUP/GPIO_PULLDOWN/GPIO_NOPULL */
|
||||
} LED_Config_t;
|
||||
|
||||
/* LED数量定义 - 修改此值以适配不同数量的LED */
|
||||
#define LED_COUNT 20
|
||||
|
||||
/* 函数声明 */
|
||||
void LED_Init(void);
|
||||
void LED_On(uint8_t led_id);
|
||||
void LED_Off(uint8_t led_id);
|
||||
void LED_Toggle(uint8_t led_id);
|
||||
void LED_Set(uint8_t led_id, LED_State_t state);
|
||||
LED_State_t LED_GetState(uint8_t led_id);
|
||||
void LED_Printf(uint8_t* ledbuf);
|
||||
|
||||
|
||||
|
||||
/* 向后兼容的宏定义(基于新的API实现) */
|
||||
#define LED_POW(x) LED_Set(0, x) /* 电源指示灯 */
|
||||
#define LED_RUN 1 /* 运行指示灯 */
|
||||
|
||||
#endif
|
||||
208
Drivers/BSP/RS485/rs485.c
Normal file
208
Drivers/BSP/RS485/rs485.c
Normal file
@@ -0,0 +1,208 @@
|
||||
/******************************************************************************
|
||||
* @file rs485.c
|
||||
* @brief rs485串口配置,主要配置两种模式 中断接收模式 和 DMA 接收模式
|
||||
* @details
|
||||
* 1. DMA模式是主要工作模式
|
||||
* 2. 中断模式用于错误恢复和接收第一个短帧
|
||||
* 3. 中断处理完后自动切换回DMA模式
|
||||
* 4. 中断接收主要用于异常情况处理
|
||||
* @author 阜阳师范大学物电学院
|
||||
* @version V0.01
|
||||
* @date 2026.1.24
|
||||
* @note 通信协议:Modbus RTU
|
||||
* 通信接口:RS485
|
||||
* 主站地址:0x01
|
||||
******************************************************************************/
|
||||
|
||||
#include "rs485.h"
|
||||
|
||||
#define RS485_UX USART2
|
||||
#define RS485_UX_IRQn USART2_IRQn
|
||||
#define RS485_UX_IRQHandler USART2_IRQHandler
|
||||
#define RS485_UX_CLK_ENABLE() do{ __HAL_RCC_USART2_CLK_ENABLE(); }while(0) /* 时钟使能 */
|
||||
|
||||
#define RS485_SEND_ENABLE() do{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);}while(0)
|
||||
#define RS485_RECEIVE_ENABLE() do{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);}while(0)
|
||||
|
||||
#define RS485_ENABLE_GPIO_PORT GPIOA
|
||||
#define RS485_ENABLE_GPIO_PIN GPIO_PIN_1
|
||||
#define RS485_ENABLE_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) /* PA口时钟使能 */
|
||||
|
||||
#define RS485_TX_GPIO_PORT GPIOA
|
||||
#define RS485_TX_GPIO_PIN GPIO_PIN_2
|
||||
#define RS485_TX_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) /* PA口时钟使能 */
|
||||
|
||||
#define RS485_RX_GPIO_PORT GPIOA
|
||||
#define RS485_RX_GPIO_PIN GPIO_PIN_3
|
||||
#define RS485_RX_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) /* PA口时钟使能 */
|
||||
|
||||
RS485_REGISTER_TYPE RS485REG = {RESET, {0}, {0}}; /* 零初始化定义 */
|
||||
|
||||
// HAL库UART句柄
|
||||
UART_HandleTypeDef rs485_handle; /* UART句柄 */
|
||||
// HAL库DMA句柄(接收)
|
||||
DMA_HandleTypeDef hdma_rs485_rx;
|
||||
// HAL库DMA句柄(发送)
|
||||
DMA_HandleTypeDef hdma_rs485_tx;
|
||||
|
||||
|
||||
#define BAUDRATE (700000)
|
||||
|
||||
/**
|
||||
* @brief 串口X初始化函数
|
||||
* @param baudrate: 波特率, 根据自己需要设置波特率值
|
||||
* @note 注意: 必须设置正确的时钟源, 否则串口波特率就会设置异常.
|
||||
* 这里的USART的时钟源在sys_stm32_clock_init()函数中已经设置过了.
|
||||
* @retval 无
|
||||
*/
|
||||
void RS485_DMA_init()
|
||||
{
|
||||
/* 开启时钟 */
|
||||
RS485_TX_GPIO_CLK_ENABLE(); /* 使能串口TX脚时钟 */
|
||||
RS485_RX_GPIO_CLK_ENABLE(); /* 使能串口RX脚时钟 */
|
||||
RS485_ENABLE_GPIO_CLK_ENABLE(); /* 使能串口RX脚时钟 */
|
||||
RS485_UX_CLK_ENABLE(); /* 使能串口时钟 */
|
||||
|
||||
/*GPIO 初始化设置*/
|
||||
GPIO_InitTypeDef gpio_init_struct = {0};
|
||||
gpio_init_struct.Pin = RS485_TX_GPIO_PIN; /* 串口发送引脚号 */
|
||||
gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出 */
|
||||
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* IO速度设置为高速 */
|
||||
HAL_GPIO_Init(RS485_TX_GPIO_PORT, &gpio_init_struct);
|
||||
|
||||
gpio_init_struct.Pin = RS485_RX_GPIO_PIN; /* 串口RX脚 模式设置 */
|
||||
gpio_init_struct.Mode = GPIO_MODE_AF_INPUT;
|
||||
HAL_GPIO_Init(RS485_RX_GPIO_PORT, &gpio_init_struct); /* 串口RX脚 必须设置成输入模式 */
|
||||
|
||||
gpio_init_struct.Pin = RS485_ENABLE_GPIO_PIN;
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
HAL_GPIO_Init(RS485_ENABLE_GPIO_PORT, &gpio_init_struct);
|
||||
|
||||
/* 配置DMA接收句柄 */
|
||||
hdma_rs485_rx.Instance = DMA1_Channel6;
|
||||
hdma_rs485_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; // 外设到内存
|
||||
hdma_rs485_rx.Init.PeriphInc = DMA_PINC_DISABLE; // 外设地址不递增
|
||||
hdma_rs485_rx.Init.MemInc = DMA_MINC_ENABLE; // 内存地址递增
|
||||
hdma_rs485_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; // 外设数据对齐:字节
|
||||
hdma_rs485_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; // 内存数据对齐:字节
|
||||
hdma_rs485_rx.Init.Mode = DMA_NORMAL; // 正常模式
|
||||
hdma_rs485_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; // 最高优先级
|
||||
HAL_DMA_Init(&hdma_rs485_rx); /*初始化DMA 接收*/
|
||||
|
||||
/* 关联 DMA 到 UART(重要!)*/
|
||||
__HAL_LINKDMA(&rs485_handle, hdmarx, hdma_rs485_rx);
|
||||
|
||||
/* 使能DMA传输完成中断 */
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
|
||||
HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0);
|
||||
|
||||
/* UART 初始化设置 */
|
||||
rs485_handle.Instance = RS485_UX; /* USART_UX */
|
||||
rs485_handle.Init.BaudRate = BAUDRATE; /* 波特率 */
|
||||
rs485_handle.Init.WordLength = UART_WORDLENGTH_8B; /* 字长为8位数据格式 */
|
||||
rs485_handle.Init.StopBits = UART_STOPBITS_1; /* 一个停止位 */
|
||||
rs485_handle.Init.Parity = UART_PARITY_NONE; /* 无奇偶校验位 */
|
||||
rs485_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* 无硬件流控 */
|
||||
rs485_handle.Init.Mode = UART_MODE_TX_RX; /* 收发模式 */
|
||||
rs485_handle.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
HAL_UART_Init(&rs485_handle); /* 初始化UART */
|
||||
|
||||
HAL_NVIC_EnableIRQ(RS485_UX_IRQn); /* 使能USART中断通道 */
|
||||
HAL_NVIC_SetPriority(RS485_UX_IRQn, 1, 0); /* 组2,抢占优先级1,子优先级0 */
|
||||
|
||||
/* 启动DMA接收 */
|
||||
RS485_RECEIVE_ENABLE();
|
||||
HAL_UARTEx_ReceiveToIdle_DMA(&rs485_handle, (uint8_t *)RS485REG.DR, UART_RX_LEN);
|
||||
}
|
||||
/**
|
||||
* @brief 串口X初始化函数
|
||||
* @note 注意: 必须设置正确的时钟源, 否则串口波特率就会设置异常.
|
||||
*
|
||||
* @retval 无
|
||||
*/
|
||||
void RS485_init()
|
||||
{
|
||||
/* 开启时钟 */
|
||||
RS485_TX_GPIO_CLK_ENABLE(); /* 使能串口TX脚时钟 */
|
||||
RS485_RX_GPIO_CLK_ENABLE(); /* 使能串口RX脚时钟 */
|
||||
RS485_ENABLE_GPIO_CLK_ENABLE(); /* 使能串口RX脚时钟 */
|
||||
RS485_UX_CLK_ENABLE(); /* 使能串口时钟 */
|
||||
|
||||
/*GPIO 初始化设置*/
|
||||
GPIO_InitTypeDef gpio_init_struct;
|
||||
gpio_init_struct.Pin = RS485_TX_GPIO_PIN; /* 串口发送引脚号 */
|
||||
gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出 */
|
||||
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* IO速度设置为高速 */
|
||||
HAL_GPIO_Init(RS485_TX_GPIO_PORT, &gpio_init_struct);
|
||||
|
||||
gpio_init_struct.Pin = RS485_RX_GPIO_PIN; /* 串口RX脚 模式设置 */
|
||||
gpio_init_struct.Mode = GPIO_MODE_AF_INPUT;
|
||||
HAL_GPIO_Init(RS485_RX_GPIO_PORT, &gpio_init_struct); /* 串口RX脚 必须设置成输入模式 */
|
||||
|
||||
gpio_init_struct.Pin = RS485_ENABLE_GPIO_PIN;
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
HAL_GPIO_Init(RS485_ENABLE_GPIO_PORT, &gpio_init_struct);
|
||||
|
||||
|
||||
/*UART 初始化设置*/
|
||||
rs485_handle.Instance = RS485_UX; /* USART_UX */
|
||||
rs485_handle.Init.BaudRate = BAUDRATE; /* 波特率 */
|
||||
rs485_handle.Init.WordLength = UART_WORDLENGTH_8B; /* 字长为8位数据格式 */
|
||||
rs485_handle.Init.StopBits = UART_STOPBITS_1; /* 一个停止位 */
|
||||
rs485_handle.Init.Parity = UART_PARITY_NONE; /* 无奇偶校验位 */
|
||||
rs485_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* 无硬件流控 */
|
||||
rs485_handle.Init.Mode = UART_MODE_TX_RX; /* 收发模式 */
|
||||
HAL_UART_Init(&rs485_handle); /* 使能UART */
|
||||
|
||||
/* 该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量 */
|
||||
__HAL_UART_ENABLE_IT(&rs485_handle, UART_IT_RXNE);
|
||||
HAL_NVIC_EnableIRQ(RS485_UX_IRQn); /* 使能USART中断通道 */
|
||||
HAL_NVIC_SetPriority(RS485_UX_IRQn, 1, 0); /* 组2,抢占优先级1,子优先级0 */
|
||||
RS485_RECEIVE_ENABLE();
|
||||
}
|
||||
|
||||
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
|
||||
{
|
||||
if(huart->Instance == RS485_UX)
|
||||
{
|
||||
RS485REG.NewMessageFlag = SET;
|
||||
HAL_UARTEx_ReceiveToIdle_DMA(&rs485_handle, (uint8_t *)RS485REG.DR, UART_RX_LEN);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @brief 485串口中断服务函数
|
||||
* @param 无
|
||||
* @retval 无
|
||||
*/
|
||||
void RS485_UX_IRQHandler(void)
|
||||
{
|
||||
HAL_UART_IRQHandler(&rs485_handle);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* FunctionName : DMA1_Channel6_IRQHandler()
|
||||
* Description : 串口接收中断
|
||||
* EntryParameter : none
|
||||
* ReturnValue : none
|
||||
********************************************************************************/
|
||||
void DMA1_Channel6_IRQHandler(void)
|
||||
{
|
||||
HAL_DMA_IRQHandler(&hdma_rs485_rx);
|
||||
}
|
||||
/***********************************************************************
|
||||
* FunctionName : RS485_SendBuff()
|
||||
* Description : 485发送数组
|
||||
* EntryParameter : *ptr:待发送的字符串, len:待发送的数据个数
|
||||
* ReturnValue : ptrLen:发送的数据个数
|
||||
**************************************************************************/
|
||||
void RS485_SendBuff(uint8_t *ptr, uint32_t len)
|
||||
{
|
||||
RS485_SEND_ENABLE();
|
||||
|
||||
HAL_UART_Transmit(&rs485_handle, ptr,len, 1000);
|
||||
|
||||
RS485_RECEIVE_ENABLE();
|
||||
}
|
||||
|
||||
29
Drivers/BSP/RS485/rs485.h
Normal file
29
Drivers/BSP/RS485/rs485.h
Normal file
@@ -0,0 +1,29 @@
|
||||
#ifndef __RS485_H__
|
||||
#define __RS485_H__
|
||||
|
||||
|
||||
|
||||
#include "./SYSTEM/sys/sys.h"
|
||||
#include "./SYSTEM/delay/delay.h"
|
||||
|
||||
#define UART_RX_LEN (3208)
|
||||
#define UART_TX_LEN (8)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
volatile FlagStatus NewMessageFlag; //一帧数据接收完整
|
||||
volatile uint8_t DR[UART_RX_LEN]; //接收缓存
|
||||
volatile uint8_t TDR[UART_TX_LEN]; //发送缓存
|
||||
} RS485_REGISTER_TYPE;
|
||||
|
||||
extern RS485_REGISTER_TYPE RS485REG;
|
||||
|
||||
|
||||
|
||||
|
||||
void USART2_Init(void);
|
||||
void RS485_DMA_init(void);
|
||||
void RS485_SendBuff(uint8_t *ptr, uint32_t len);
|
||||
|
||||
|
||||
#endif
|
||||
128
Drivers/BSP/SPI/spi.c
Normal file
128
Drivers/BSP/SPI/spi.c
Normal file
@@ -0,0 +1,128 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @文件 spi.c
|
||||
* @作者 阜阳师范大学物电学院
|
||||
* @版本 V0.1
|
||||
* @日期 2025-03-28
|
||||
* @简介 硬件 SPI 驱动程序
|
||||
*******
|
||||
**/
|
||||
|
||||
#include "spi.h"
|
||||
|
||||
|
||||
// 定义一个SPI句柄结构体变量,用于存储SPI的初始化参数和状态信息
|
||||
SPI_HandleTypeDef SPI2_Handle;
|
||||
|
||||
|
||||
/**
|
||||
* @brief 初始化SPI2外设
|
||||
*
|
||||
* 该函数用于初始化SPI2外设,配置SPI的工作模式、数据大小、时钟极性等参数,
|
||||
* 并使能SPI2外设。
|
||||
*/
|
||||
void SPI_Init(void)
|
||||
{
|
||||
// 使能SPI2的时钟,确保SPI2外设能够正常工作
|
||||
SPI2_SPI_CLK_ENABLE();
|
||||
|
||||
// 指定SPI实例为SPI2
|
||||
SPI2_Handle.Instance = SPI2;
|
||||
// 设置SPI工作模式为主机模式,由该SPI设备控制通信过程
|
||||
SPI2_Handle.Init.Mode = SPI_MODE_MASTER;
|
||||
// 设置SPI通信方向为单线模式,即只使用一条数据线进行通信
|
||||
SPI2_Handle.Init.Direction = SPI_DIRECTION_1LINE;
|
||||
// 设置SPI数据大小为8位,每次传输8位数据
|
||||
SPI2_Handle.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||
// 设置SPI时钟极性为高电平,即空闲状态下时钟信号为高电平
|
||||
SPI2_Handle.Init.CLKPolarity = SPI_POLARITY_HIGH;
|
||||
// 设置SPI时钟相位为第二个边沿采样数据
|
||||
SPI2_Handle.Init.CLKPhase = SPI_PHASE_2EDGE; /*上升沿采样数据*/
|
||||
// 设置SPI片选信号为软件控制
|
||||
SPI2_Handle.Init.NSS = SPI_NSS_SOFT;
|
||||
// 设置SPI波特率预分频器为256,降低SPI通信速率
|
||||
SPI2_Handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
|
||||
// 设置SPI数据传输的起始位为高位在前
|
||||
SPI2_Handle.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
// 禁用SPI的TI模式
|
||||
SPI2_Handle.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
// 禁用SPI的CRC计算功能
|
||||
SPI2_Handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||
// 设置CRC多项式为7(虽然已禁用CRC计算,但仍需设置该参数)
|
||||
SPI2_Handle.Init.CRCPolynomial = 7;
|
||||
|
||||
// 根据上述配置初始化SPI2外设
|
||||
HAL_SPI_Init(&SPI2_Handle);
|
||||
// 使能SPI2外设,开始工作
|
||||
__HAL_SPI_ENABLE(&SPI2_Handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief SPI外设的底层硬件初始化函数
|
||||
*
|
||||
* 该函数用于初始化SPI外设所使用的GPIO引脚,包括时钟线、数据线等。
|
||||
*
|
||||
* @param hspi 指向SPI句柄结构体的指针,用于指定要初始化的SPI实例
|
||||
*/
|
||||
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
|
||||
{
|
||||
// 定义一个GPIO初始化结构体变量,用于配置GPIO引脚的参数
|
||||
GPIO_InitTypeDef gpio_init_struct;
|
||||
// 判断要初始化的SPI实例是否为SPI2
|
||||
if (hspi->Instance == SPI2)
|
||||
{
|
||||
// 使能SPI2的MOSI引脚的时钟
|
||||
SPI_MOSI_GPIO_CLK_ENABLE();
|
||||
// 注释掉的代码,原本可能用于使能SPI2的MISO引脚的时钟
|
||||
// SPI_MISO_GPIO_CLK_ENABLE();
|
||||
// 使能SPI2的时钟线引脚的时钟
|
||||
SPI_CLK_GPIO_CLK_ENABLE();
|
||||
|
||||
// 配置SPI2的时钟线引脚
|
||||
gpio_init_struct.Pin = SPI_CLK_GPIO_PIN;
|
||||
// 设置引脚模式为复用推挽输出,用于连接SPI时钟信号
|
||||
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
|
||||
// 设置引脚速度为高频
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
// 根据上述配置初始化SPI2的时钟线引脚
|
||||
HAL_GPIO_Init(SPI_CLK_GPIO_PORT, &gpio_init_struct);
|
||||
|
||||
// 注释掉的代码,原本可能用于配置SPI2的MISO引脚
|
||||
// MISO引脚模式设置(复用输出)
|
||||
// gpio_init_struct.Pin = SPI_MISO_GPIO_PIN;
|
||||
// HAL_GPIO_Init(SPI_MISO_GPIO_PORT, &gpio_init_struct);
|
||||
|
||||
// 配置SPI2的MOSI引脚
|
||||
gpio_init_struct.Pin = SPI_MOSI_GPIO_PIN;
|
||||
// 设置引脚模式为复用推挽输出,用于连接SPI数据输出信号
|
||||
gpio_init_struct.Mode = GPIO_MODE_AF_PP;
|
||||
// 设置引脚速度为高频
|
||||
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
// 根据上述配置初始化SPI2的MOSI引脚
|
||||
HAL_GPIO_Init(SPI_MOSI_GPIO_PORT, &gpio_init_struct);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @简介 SPI 写入一个字节8位
|
||||
* @输入参数 pData:要写入的数据指针
|
||||
* @输入参数 Size:要写入的数据大小
|
||||
* @输入参数 dir:1 数据从后面往前发送 0:数据从前往后发送
|
||||
* @注意事项 此函数是高位优先写入
|
||||
* @返回值 无
|
||||
*/
|
||||
void Hard_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint8_t dir)
|
||||
{
|
||||
uint16_t i = 0;
|
||||
|
||||
dir ? pData += (Size-1): pData;
|
||||
|
||||
for(i =0; i < Size; i++)
|
||||
{
|
||||
HAL_SPI_Transmit(hspi, pData, 1, 1000);
|
||||
dir ? pData--: pData++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
29
Drivers/BSP/SPI/spi.h
Normal file
29
Drivers/BSP/SPI/spi.h
Normal file
@@ -0,0 +1,29 @@
|
||||
#ifndef __SPI_H
|
||||
#define __SPI_H
|
||||
|
||||
#include "./SYSTEM/sys/sys.h"
|
||||
#include "./SYSTEM/delay/delay.h"
|
||||
|
||||
#define SPI2_SPI_CLK_ENABLE() do{__HAL_RCC_SPI2_CLK_ENABLE();}while(0)
|
||||
|
||||
|
||||
#define SPI_MOSI_GPIO_PIN GPIO_PIN_15
|
||||
#define SPI_MOSI_GPIO_PORT GPIOB
|
||||
#define SPI_MOSI_GPIO_CLK_ENABLE() do{__HAL_RCC_GPIOB_CLK_ENABLE();}while(0)
|
||||
|
||||
//#define SPI_MISO_GPIO_PIN GPIO_PIN_14
|
||||
//#define SPI_MISO_GPIO_PORT GPIOB
|
||||
//#define SPI_MISO_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOB_CLK_ENABLE();}while(0)
|
||||
|
||||
#define SPI_CLK_GPIO_PIN GPIO_PIN_13
|
||||
#define SPI_CLK_GPIO_PORT GPIOB
|
||||
#define SPI_CLK_GPIO_CLK_ENABLE() do{__HAL_RCC_GPIOB_CLK_ENABLE();}while(0)
|
||||
|
||||
|
||||
|
||||
|
||||
void SPI_Init(void);
|
||||
void Hard_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint8_t dir);
|
||||
|
||||
extern SPI_HandleTypeDef SPI2_Handle;
|
||||
#endif
|
||||
49
Drivers/BSP/TIM/gtim.c
Normal file
49
Drivers/BSP/TIM/gtim.c
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @文件 gtim.c
|
||||
* @作者 阜阳师范大学物电学院
|
||||
* @版本 V0.1
|
||||
* @日期 2025-04-1
|
||||
* @简介 通用定时器模板程序
|
||||
****
|
||||
*/
|
||||
|
||||
#include "gtim.h"
|
||||
#include "key.h"
|
||||
|
||||
TIM_HandleTypeDef g_timx_handle = {0}; /* 定时器句柄 */
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief 通用定时器 TIMx 定时中断初始化函数
|
||||
* @note
|
||||
* 定时器溢出时间计算方法: Tout = ((arr+1) * (psc + 1)) / Ft us
|
||||
* Ft=晶振工作频率:Mhz
|
||||
*
|
||||
* @param arr: 自动重装载值
|
||||
* @param psc: 时钟预分频数
|
||||
* @retval 无
|
||||
*/
|
||||
void gtim_timx_int_init(uint16_t arr, uint16_t psc)
|
||||
{
|
||||
GTIM_TIMX_INT_CLK_ENABLE(); /* 使能 TIMx 时钟 */
|
||||
|
||||
g_timx_handle.Instance = GTIM_TIMX_INT; /* 通用定时器x */
|
||||
g_timx_handle.Init.Prescaler = psc; /* 预分频系数 */
|
||||
g_timx_handle.Init.CounterMode = TIM_COUNTERMODE_UP; /* 递增计数模式 */
|
||||
g_timx_handle.Init.Period = arr; /* 自动装载值 */
|
||||
HAL_TIM_Base_Init(&g_timx_handle);
|
||||
|
||||
/*数字越小,优先级越高*/
|
||||
HAL_NVIC_SetPriority(GTIM_TIMX_INT_IRQn, 2, 0); /* 设置中断优先级,抢占优先级2,子优先级0 */
|
||||
HAL_NVIC_EnableIRQ(GTIM_TIMX_INT_IRQn); /* 开启 TIMx 中断 */
|
||||
|
||||
HAL_TIM_Base_Start_IT(&g_timx_handle); /* 使能定时器 x 和定时器 x 更新中断 */
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
19
Drivers/BSP/TIM/gtim.h
Normal file
19
Drivers/BSP/TIM/gtim.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef __GTIM_H__
|
||||
#define __GTIM_H__
|
||||
|
||||
|
||||
#include "./SYSTEM/sys/sys.h"
|
||||
|
||||
|
||||
#define GTIM_TIMX_INT TIM2
|
||||
#define GTIM_TIMX_INT_IRQn TIM2_IRQn
|
||||
#define GTIM_TIMX_INT_IRQHandler TIM2_IRQHandler
|
||||
#define GTIM_TIMX_INT_CLK_ENABLE() do{__HAL_RCC_TIM2_CLK_ENABLE();}while(0) /* TIM2 时钟使能 */
|
||||
|
||||
|
||||
|
||||
|
||||
void gtim_timx_int_init(uint16_t arr, uint16_t psc);
|
||||
extern TIM_HandleTypeDef g_timx_handle; /* 定时器句柄 */
|
||||
#endif
|
||||
|
||||
37
Drivers/BSP/WDOG/wdog.c
Normal file
37
Drivers/BSP/WDOG/wdog.c
Normal file
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @文件 wdog.c
|
||||
* @作者 阜阳师范大学物电学院
|
||||
* @版本 V0.1
|
||||
* @日期 2026-01-15
|
||||
* @简介 外部看门狗驱动程序
|
||||
* @说明 在 1.6s 内是 IO 口引脚产生电平反转就可以喂狗成功
|
||||
****
|
||||
*/
|
||||
#include "wdog.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief 外部看门狗初始化
|
||||
* @param 无
|
||||
* @retval 无
|
||||
* @note
|
||||
*/
|
||||
void WDog_Init(void){
|
||||
|
||||
GPIO_InitTypeDef gpio_init_struct;
|
||||
|
||||
|
||||
WDOG_GPIO_CLK_ENABLE(); // 时钟初始化
|
||||
|
||||
|
||||
// 配置LED引脚
|
||||
gpio_init_struct.Pin = WDOG_PIN;
|
||||
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /*推挽输出模式*/
|
||||
gpio_init_struct.Pull = GPIO_PULLUP;
|
||||
gpio_init_struct.Speed = GPIO_SPEED_HIGH;
|
||||
// 初始LED选引脚
|
||||
HAL_GPIO_Init(WDOG_GPIO_PORT, &gpio_init_struct);
|
||||
}
|
||||
|
||||
|
||||
18
Drivers/BSP/WDOG/wdog.h
Normal file
18
Drivers/BSP/WDOG/wdog.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#ifndef __WDOG_H__
|
||||
#define __WDOG_H__
|
||||
|
||||
#include "./SYSTEM/sys/sys.h"
|
||||
|
||||
|
||||
|
||||
/* WDOG */
|
||||
#define WDOG_PIN GPIO_PIN_0
|
||||
#define WDOG_GPIO_PORT GPIOA
|
||||
#define WDOG_GPIO_CLK_ENABLE() do{__HAL_RCC_GPIOA_CLK_ENABLE(); }while(0)
|
||||
|
||||
|
||||
/*看门狗引脚翻转进行喂狗*/
|
||||
#define Clear_Watchdog() do{ HAL_GPIO_TogglePin(WDOG_GPIO_PORT, WDOG_PIN); }while(0)
|
||||
|
||||
void WDog_Init(void);
|
||||
#endif
|
||||
Reference in New Issue
Block a user