ZhenDangBo2024/ZDB2024/user/Src/lcd.c

147 lines
3.3 KiB
C
Raw Normal View History

2024-11-18 10:44:27 +08:00
/*
* lcd.c
*
* Created on: Jul 2, 2024
* Author: 10425
*/
#include "lcd.h"
void LCD_setInt(uint16_t addr,uint16_t data)
{
while( __HAL_UART_GET_FLAG(&huart3,UART_FLAG_TXE) != SET );
HAL_Delay(1);
uint8_t cnt =0;
TXBuff[cnt++] = 0xA5;
TXBuff[cnt++] = 0x5A;
TXBuff[cnt++] = 0x05; //指令字节长度
TXBuff[cnt++] = 0x82; //指令
TXBuff[cnt++] = addr>>8; //变量地址
TXBuff[cnt++] = addr&0xFF;
TXBuff[cnt++] = data>>8; //数据
TXBuff[cnt++] = data&0xFF;
HAL_UART_Transmit_DMA(&huart3, TXBuff, cnt);
}
void LCD_setChar(uint16_t addr,uint8_t*data,uint8_t len)
{
while( __HAL_UART_GET_FLAG(&huart3,UART_FLAG_TXE) != SET );
HAL_Delay(1);
uint8_t cnt =0;
TXBuff[cnt++] = 0xA5;
TXBuff[cnt++] = 0x5A;
TXBuff[cnt++] = 5+len; //指令字节长度
TXBuff[cnt++] = 0x82; //指令
TXBuff[cnt++] = addr>>8; //变量地址
TXBuff[cnt++] = addr&0xFF;
for(uint8_t i=0;i<len;i++)
{
TXBuff[cnt++] = data[i]; //数据
}
TXBuff[cnt++] = 0xFF; //数据
TXBuff[cnt++] = 0xFF;
HAL_UART_Transmit_DMA(&huart3, TXBuff, cnt);
}
void LCD_setLine(uint16_t *data,uint8_t length)
{
while( __HAL_UART_GET_FLAG(&huart3,UART_FLAG_TXE) != SET );
HAL_Delay(1);
uint16_t cnt =0;
TXBuff[cnt++] = 0xA5;
TXBuff[cnt++] = 0x5A;
TXBuff[cnt++] = length*2+2; //指令字节长度
TXBuff[cnt++] = 0x84; //曲线显示指令
TXBuff[cnt++] = 0x01; //使用0通道
for(uint8_t i =0;i<length;i++)
{
TXBuff[cnt++]= data[i]>>8;
TXBuff[cnt++]= data[i]&0xFF;
}
HAL_UART_Transmit_DMA(&huart3, TXBuff, cnt);
}
void LCD_setLine_ISR(uint16_t *data,uint8_t length)
{
while( __HAL_UART_GET_FLAG(&huart3,UART_FLAG_TXE) != SET );
uint16_t cnt =0;
TXBuff[cnt++] = 0xA5;
TXBuff[cnt++] = 0x5A;
TXBuff[cnt++] = length*2+2; //指令字节长度
TXBuff[cnt++] = 0x84; //曲线显示指令
TXBuff[cnt++] = 0x01; //使用0通道
for(uint8_t i =0;i<length;i++)
{
TXBuff[cnt++]= data[i]>>8;
TXBuff[cnt++]= data[i]&0xFF;
}
HAL_UART_Transmit_DMA(&huart3, TXBuff, cnt);
}
void LCD_setFont(uint16_t addr,uint8_t data)
{
while( __HAL_UART_GET_FLAG(&huart3,UART_FLAG_TXE) != SET );
HAL_Delay(1);
uint8_t cnt =0;
TXBuff[cnt++] = 0xA5;
TXBuff[cnt++] = 0x5A;
TXBuff[cnt++] = 9; //指令字节长度
TXBuff[cnt++] = 0x82; //指令
TXBuff[cnt++] = addr>>8; //变量地址
TXBuff[cnt++] = addr&0xFF;
if(data == 0)
{
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 1;
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 2;
}
else if(data == 1)
{
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 3;
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 4;
}
else if(data == 2)
{
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 5;
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 6;
}
else if(data == 3)
{
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 7;
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 8;
}
else if(data == 4)
{
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 9;
TXBuff[cnt++] = 0;
TXBuff[cnt++] = 10;
}
TXBuff[cnt++] = 0xFF; //数据
TXBuff[cnt++] = 0xFF;
HAL_UART_Transmit_DMA(&huart3, TXBuff, cnt);
}
//蜂鸣器
void LCD_setBell(uint16_t data)
{
while( __HAL_UART_GET_FLAG(&huart3,UART_FLAG_TXE) != SET );
HAL_Delay(1);
uint8_t cnt =0;
TXBuff[cnt++] = 0xA5;
TXBuff[cnt++] = 0x5A;
TXBuff[cnt++] = 0x03; //指令字节长度
TXBuff[cnt++] = 0x80; //指令
TXBuff[cnt++] = 0x02; //变量地址
TXBuff[cnt++] = data/10;
HAL_UART_Transmit_DMA(&huart3, TXBuff, cnt);
}