学习液晶屏的一些体会Word文件下载.docx
- 文档编号:1507384
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:30
- 大小:20.27KB
学习液晶屏的一些体会Word文件下载.docx
《学习液晶屏的一些体会Word文件下载.docx》由会员分享,可在线阅读,更多相关《学习液晶屏的一些体会Word文件下载.docx(30页珍藏版)》请在冰点文库上搜索。
x行座标
*y列座标
*出口参数:
无
*说明:
*调用方法:
ili9320_SetCursor(10,10);
****************************************************************************/
__inlinevoidili9320_SetCursor(u16x,u16y)
{
if(DeviceCode==0x8989)
{
LCD_WriteReg(0x004e,y);
//行
LCD_WriteReg(0x004f,0x13f-x);
//列
}
elseif(DeviceCode==0x9919)
LCD_WriteReg(0x004e,x);
LCD_WriteReg(0x004f,y);
//列
else
LCD_WriteReg(0x20,x);
LCD_WriteReg(0x21,y);
}
虽然函数__inlinevoidili9320_SetCursor(u16x,u16y)是以ILI9320驱动命名的,但是里面却是可以实现好几种不同的控制器的液晶显示
所以一定要小心,用之前一定要用仿真器仿真一下,看程序往哪里跑,来确定自己液晶屏是哪一种控制器驱动的。
到这会有朋友问,液晶屏
的外表一样,驱动也一样吧?
如果这样想你就错了,我就是曾经这样想,才白白浪费了我一个星期的时间,到后面才发现自己的控制芯片是另外
一种,想死的心都有了!
在这就不废话那么多了!
要学液晶就要配合手册来学,一个个寄存器的去配置,其实也不难,难的是你看不懂洋文,总想找中文资料却找不到。
教大家一个方法,就是用
有道词典,不懂哪里点哪里!
下面是本人写的程序,液晶控制芯片是SSD1298,尺寸:
320*240:
与大家分享一下,希望写得不好的地方,高手
点评一下,低手学习一下(包括本人):
#include"
stm32f10x.h"
SSD1289.h"
Char8X16.h"
Char12X24.h"
Char20X40.h"
Char24X48.h"
ziku_X_.h"
China32.h"
/***************************************************************************************************
*函数描述:
函数的声明或者宏定义
*参数输入:
*参数输出:
*函数说明:
((LCD_TypeDef*)LCD_BASE)表示将LCD_BASE看成是一个指针,然后对其强制类型转换
0x60000000指向内存的一个地址,从此地址开始赋值。
例如:
LCD.LCD_REG=0x202是指
将0x202存放在0x6C000000所指向的内存中,是给LCD_REG赋值,但不是什么偏移地址。
****************************************************************************************************/
//LCDisconnectedtotheFSMC_Bank1_NOR/SRAM4andNE4isusedasshipselectsignal
#defineLCD_BASE((u32)(0x60000000|0x0C000000))
#defineLCD((LCD_TypeDef*)LCD_BASE)
数据命令结构体的初始化
typedefstruct
vu16LCD_REG;
//SSD1289写命令
vu16LCD_RAM;
//SSD1289写数据
}LCD_TypeDef;
/****************************************************************************************************
*函数名称:
LCD_writeReg
写寄存器函数
u8LCD_Reg:
写寄存器地址
u16LCD_RegValue:
写数据
无
*返回值:
*函数的调用:
LCD_writeReg(0x0020,256)
*****************************************************************************************************/
voidLCD_WriteReg(u8LCD_Reg,u16LCD_RegValue)
/*Write16-bitIndex,thenWriteReg*/
LCD->
LCD_REG=LCD_Reg;
//0x60000000
/*Write16-bitReg*/
LCD_RAM=LCD_RegValue;
LCD_ReadReg
读寄存器函数
无
u16LCD_RegValue
写寄存器地址,读回该地址的数据
Value=LCD_ReadReg()
u16LCD_ReadReg(u8LCD_Reg)
/*Write16-bitIndex(thenReadReg)*/
LCD_RAM;
/*Read16-bitReg*/
return(LCD->
LCD_RAM);
LCD_WriteRAM_Prepare
开始写GGRAM信号
LCD_WriteRAM_Prepare()
voidLCD_WriteRAM_Prepare(void)
LCD_REG=R34;
//0x22
LCD_WriteRAM
写数据到GGRAM
-RGB_Code:
thepixelcolorinRGBmode(5-6-5).
像素填充模式为:
5-6-5模式
voidLCD_WriteRAM(u16RGB_Code)
/*Write16-bitGRAMReg*/
LCD_RAM=RGB_Code;
LCD_ReadRAM
从GGRAM读回数据
LCDRAMValue:
即使LCD中RAM的值
u16LCD_ReadRAM(void)
vu16dummy;
/*SelectGRAMReg*/
dummy=LCD->
returnLCD->
LCD_SetCurso
设置光标
u16Xpos:
x坐标轴。
u16Ypos:
Y坐标轴。
voidLCD_SetCursor(u16Xpos,u16Ypos)
{
LCD_WriteReg(0x004E,Xpos);
//X坐标轴
LCD_WriteReg(0X004F,Ypos);
//Y坐标轴
}
Delay
延时函数
u32nCount:
时间值
voidDelay(u32nCount)
u32TimingDelay;
while(nCount--)
for(TimingDelay=0;
TimingDelay<
10000;
TimingDelay++);
voidSSD1289_SetCursor
设置屏幕座标
u16x:
行座标
*u16y列座标
SSD1289_SetCursor(0,0)
voidSSD1289_SetCursor(u16x,u16y)
SSD1289_SetWindows
设置窗口的区域
u16StartX:
起始行坐标
*u16StartY:
起始列坐标
*u16Height:
窗口高
*u16Width:
窗口宽
*u16Color:
窗口的区域的颜色值
SSD1289_SetWindows(0,0,119,159,Blue);
voidSSD1289_SetWindows(u16StartX,u16StartY,u16Height,u16Width,u16Color)
u16i;
LCD_WriteReg(0x44,StartX|(StartX+Width-1)<
<
8);
//设置水平方向GRAM起始地址(低字节为起始地址,高字节为结束地址)
LCD_WriteReg(0x45,StartY);
//设置窗口的Y方向的开始位置
LCD_WriteReg(0x46,StartY+Height-1);
//设置窗口的Y方向的结束位置
SSD1289_SetCursor(StartX,StartY);
LCD_WriteRAM_Prepare();
//开始写GGRAM信号
for(i=0;
i<
(Height*Width);
i++)//对区域进行颜色打点
LCD_WriteRAM(Color);
SSD1289_Clear
将指定大小屏幕填充指定成的颜色,如清屏,则填0xffff
u16Color:
填充颜色值
SSD1289_Clear(0,0,319,239,0xffff)
voidSSD1289_Clear(u16Color)
u32index=0;
LCD_SetCursor(0,0);
//以原点为起始坐标对320*240像素屏幕清
//开始写GGRAM信号
for(index=0;
index<
76800;
index++)//320*240=76800清屏像素
LCD_RAM=Color;
SSD1289_SetPoint
指定坐标画点函数
X坐标轴
*u16x:
*u16Color:
点颜色
SSD1289_SetPoint(10,10,Red)
voidSSD1289_SetPoint(u16x,u16y,u16Color)
if((x>
320)||(y>
240))return;
//判断写的坐标值是否超出范围
SSD1289_SetCursor(x,y);
SSD1289_DrawPicture
在指定座标范围显示一副图片
StartX行起始座标
*StartY列起始座标
*u16Width:
窗口宽
*pic图片头指针
SSD1289_DrawPicture(0,0,140,140,gImage_tupian);
voidSSD1289_DrawPicture(u16StartX,u16StartY,u16Height,u16Width,u8*pic)
u32i;
u16*bitmap=(u16*)pic;
LCD_SetCursor(StartX,StartY);
//设置光标
i++)//读取图片信息
LCD_WriteRAM(*bitmap++);
LCD_WriteReg(0x44,0|239<
//设置窗口的X方向开始位置和结束位置
LCD_WriteReg(0x45,0);
LCD_WriteReg(0x46,319);
SSD1289_PutChar8X16
在指定座标范围显示一个8X16ASCLL字符
u16X:
横座标
*u16Y:
纵座标
*u8c:
字符
*u16charColor:
字符颜色
*u16bkColor:
字符背景颜色
高:
16位像素点。
宽:
8位像素点
voidSSD1289_PutChar8X16(0,0,52,Red,Black)
**************************************************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 液晶屏 一些 体会