#include "dwin.h"
//#include "rtthread.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//作者:Sunshine_Geek
//迪文串口屏DMT48270C050_04WN初始化
//修改日期:2019/8/16
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 2019-2029
//All rights reserved
//********************************************************************************
//初始化lcd
int DwinSend_Buff_Size=5;
uint8_t *DWINSend_Buff;
volatile uint16_t Send_p = 0;
USART_TypeDef* Dwin_UART;
//帧头帧尾初始化
void Data_init()
{
DWINSend_Buff=(uint8_t *)malloc(DwinSend_Buff_Size);
/***********************************************************/
DWINSend_Buff[DwinSend_Buff_Size -DwinSend_Buff_Size ]=0xAA; //帧头//
/***********************************************************/
/***********************************************************/
DWINSend_Buff[DwinSend_Buff_Size -4]=0xCC; ////帧//
DWINSend_Buff[DwinSend_Buff_Size -3]=0x33; ////结//
DWINSend_Buff[DwinSend_Buff_Size -2]=0xC3; ////束//
DWINSend_Buff[DwinSend_Buff_Size -1]=0x3C; ////符//
/***********************************************************/
}
//迪文串口屏初始化
//传参:串口号
//例子:DWINLCD_Init(USART1); //迪文屏采用串口1发送
void DWINLCD_Init(USART_TypeDef* USARTx)
{
DwinSend_Buff_Size=6;
Data_init(); //更新数组
Dwin_UART=USARTx;
DWINSend_Buff[DwinSend_Buff_Size -5]=0x00; //握手指令
Send_Data(DWINSend_Buff); //发送数据
/**********判断回复消息,确认是否握手成功************/
}
//发送指令数据
void Send_Data(uint8_t *buff)
{
uint8_t i=DwinSend_Buff_Size;
Send_p = 0;
while(i--)
{
while((Dwin_UART->SR&0X40)==0); //循环发送,直到发送完毕
Dwin_UART->DR = (DWINSend_Buff[Send_p++]&(uint16_t)0x01FF);
}
free(DWINSend_Buff); //释放内存
}
//迪文屏背光亮度调节
//背光亮度值范围:0x00-0xFF
/*注意:0x00 背光关闭,0xFF 背光最亮,其中 0x01-0x1F 设置值背光可能会闪烁。*/
void DWIN_LightSet(uint8_t Light)
{
DwinSend_Buff_Size=7; //指令数据长度为7(帧头+指令+数据+帧尾)
Data_init(); //重新更新数组
DWINSend_Buff[DwinSend_Buff_Size -6]=0x30; //背光指令
DWINSend_Buff[DwinSend_Buff_Size -5]=Light; //背光值
Send_Data(DWINSend_Buff); //发送数据
}
//迪文屏全局清屏
//
void DWINLCD_Clear(uint16_t Color) //全局清屏
{
DwinSend_Buff_Size=8; //指令数据长度为8(帧头+指令+数据+帧尾)
Data_init(); //重新更新数组
DWINSend_Buff[DwinSend_Buff_Size -7]=0x01; //清屏指令
DWINSend_Buff[DwinSend_Buff_Size -6]=Color>>8; //清屏颜色高8位
DWINSend_Buff[DwinSend_Buff_Size -5]=Color&0x00FF; //清屏颜色低8位
Send_Data(DWINSend_Buff); //发送数据
delay_ms(10);
}
//___________________________________画点 ____________________________________________\\
//指令:帧头+指令+画点颜色+画点像素大小(Nx,Ny)+画点位置【(X1,Y1)+(X2,Y2)+.........】+帧尾
//置点;处理时间=0.4*Nx*Ny*置点数目 uS。
//Color:置点颜色。
//Nx:实际像素点 X 方向像素大小,0x01-0x0F。
//Ny:实际像素点 Y 方向像素大小,0x01-0x0F。
//(Xn,Yn):置点坐标序列。
//举例:AA 02 F8 00 04 04 00 08 00 08 CC 33 C3 3C
/**************画点协议指令可以一次画多点(本函数只画一个位置的像素点)********************/
void DWINLCD_DrawPoint(uint16_t Color,uint8_t Nx,uint8_t Ny,uint16_t X1,uint16_t Y1) //画点
{
DwinSend_Buff_Size=14; //指令数据长度为14(帧头+指令+数据+帧尾)
Data_init(); //重新更新数组
DWINSend_Buff[DwinSend_Buff_Size -13]=0x02; //画点指令
DWINSend_Buff[DwinSend_Buff_Size -12]=Color>>8; //画点颜色高8位
DWINSend_Buff[DwinSend_Buff_Size -11]=Color&0x00FF; //画点颜色低8位
DWINSend_Buff[DwinSend_Buff_Size -10]=Nx; //Nx:实际像素点 X 方向像素大小,0x01-0x0F
DWINSend_Buff[DwinSend_Buff_Size -9]=Ny; //Ny:实际像素点 Y 方向像素大小,0x01-0x0F
DWINSend_Buff[DwinSend_Buff_Size -8]=X1>>8; //X1置点X坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -7]=X1&0xFF; //X1置点X坐标低八位
DWINSend_Buff[DwinSend_Buff_Size -6]=Y1>>8; //Y1置点Y坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -5]=Y1&0xFF; //Y1置点Y坐标低八位
Send_Data(DWINSend_Buff); //发送数据
}
//_________________________________画线________________________________________\\
//指令:帧头+指令+画线颜色+画点起点位置(X1,Y1)+画点起点位置(X2,Y2)+帧尾
//Color:画线颜色
//起始坐标:(x1,y1)
//终点坐标:(x2,y2)
void DWINLCD_DrawLine(uint16_t Color,uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) //画线
{
DwinSend_Buff_Size=16; //指令数据长度为16(帧头+指令+数据+帧尾)
Data_init(); //重新更新数组
DWINSend_Buff[DwinSend_Buff_Size -15]=0x03; //画线指令
DWINSend_Buff[DwinSend_Buff_Size -14]=Color>>8; //画线颜色高8位
DWINSend_Buff[DwinSend_Buff_Size -13]=Color&0x00FF; //画线颜色低8位
DWINSend_Buff[DwinSend_Buff_Size -12]=x1>>8; //X1坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -11]=x1&0xFF; //X1坐标低八位
DWINSend_Buff[DwinSend_Buff_Size -10]=y1>>8; //Y1坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -9]=y1&0xFF; //Y1坐标低八位
DWINSend_Buff[DwinSend_Buff_Size -8]=x2>>8; //X2坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -7]=x2&0xFF; //X2坐标低八位
DWINSend_Buff[DwinSend_Buff_Size -6]=y2>>8; //Y2坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -5]=y2&0xFF; //Y2坐标低八位
Send_Data(DWINSend_Buff); //发送数据
}
//___________________________________画矩形框____________________________________________\\
//指令:帧头+指令+模式+画线颜色+矩形框左上角起点坐标(Xs,Ys)+矩形框右下角坐标(Xe,Ye)+帧尾
//模式: (0)0x00 显示矩形框颜色
// (1)0x01 显示矩形区域填充颜色
// (2)0x02 XOR 矩形区域数据,多用于菜单选中/不选中着色
//Color:矩形框颜色/矩形框填充颜色
//(Xs,Ys):矩形框左上角起点坐标
//(Xe,Ye):矩形框右下角终点坐标
void DWINLCD_DrawRectangle(uint8_t Mode,uint16_t Color,uint16_t Xs, uint16_t Ys, uint16_t Xe, uint16_t Ye) //画矩形
{
DwinSend_Buff_Size=17; //指令数据长度为16(帧头+指令+数据+帧尾)
Data_init(); //重新更新数组
DWINSend_Buff[DwinSend_Buff_Size -16]=0x05; //画矩形指令
DWINSend_Buff[DwinSend_Buff_Size -15]=Mode; //模式选择
DWINSend_Buff[DwinSend_Buff_Size -14]=Color>>8; //画线颜色高8位
DWINSend_Buff[DwinSend_Buff_Size -13]=Color&0x00FF; //画线颜色低8位
DWINSend_Buff[DwinSend_Buff_Size -12]=Xs>>8; //Xs坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -11]=Xs&0xFF; //Xs坐标低八位
DWINSend_Buff[DwinSend_Buff_Size -10]=Ys>>8; //Ys坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -9]=Ys&0xFF; //Ys坐标低八位
DWINSend_Buff[DwinSend_Buff_Size -8]=Xe>>8; //Xe坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -7]=Xe&0xFF; //Xe坐标低八位
DWINSend_Buff[DwinSend_Buff_Size -6]=Ye>>8; //Ye坐标高八位
DWINSend_Buff[DwinSend_Buff_Size -5]=Ye&0xFF; //Ye坐标低八位
Send_Data(DWINSend_Buff); //发送数据
}
//____________________________________屏幕区域移动_________________________________________\\
//指�
评论3