1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| #include "LCD1602.h"
GPIO_TypeDef *GPIOP; volatile static u8 position = 0x80; void initLCD(u8 x,u8 y, GPIO_TypeDef *DATA_PORT) { GPIOP = DATA_PORT; HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0); if (y) position=0xC0; position+=x; writeComd(0x38); writeComd(0x0c); writeComd(0x06); writeComd(0x01);
writeComd(position); HAL_Delay(2); }
void writeComd(u8 comd) { HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, 0); HAL_GPIO_WritePin(RW_GPIO_Port, RW_Pin, 0);
GPIOP->ODR = comd;
HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1); HAL_Delay(1); HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0); }
void writeData(u8 data) { HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, 1); HAL_GPIO_WritePin(RW_GPIO_Port, RW_Pin, 0);
GPIOP->ODR = data;
HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 1); HAL_Delay(1); HAL_GPIO_WritePin(E_GPIO_Port, E_Pin, 0);
if (position == 0x8F) { writeComd(0xc0); position = 0xc0; return; } position++; }
void deleteData() { if (position==0x80)return; writeComd(0x10); position--; writeData(0x01); writeComd(0x10); if (position == 0xc0) { writeComd(0x8f); writeData(0x01); writeComd(0x10); position = 0x8f; return; } position--; }
void makeCursor(u8 cfg) { if (cfg >= 2) { writeComd(0x0c); return; } writeComd(0x0f - cfg); } void writeText(u8 *text) { while ((*text) != 0) { writeData(*text); text++; } }
void WritePos(u8 xPos,u8 yPos) {
static u8 tmp; xPos&=0x0f; yPos&=0x01; if(yPos==0) tmp=xPos; else tmp=xPos+0x40; tmp|=0x80; writeComd(tmp); } void WriteString(u8 xPos,u8 yPos,unsigned char *s) { unsigned char i=0; WritePos(xPos,yPos); while(s[i]) { writeData(s[i]); i++; if (i>=16) break; } }
|