历史上的今天
今天是:2025年06月01日(星期日)
2019年06月01日 | stemwin 19264液晶屏底层驱动编写
2019-06-01 来源:eefocus
使用stemwin会使开发界面编的简单快捷。对于单色屏19264只需要编写打点和获取点这两个函数。19264在Y方向显示上使用分页显示,即有8页 192列,所以在编写dadi大点函数时最简便的方法就是分配一块显示hua缓存,所有数据的显示都通过操作这块现存来实现。下面贴出代码方便以后查看
//定义显示缓存64行192列 由于64行 必须同时操作一页所以数组定义64/8页
char g_arrDispBuf[64/8][192]={0,};
const uint8_t aOrTab[8] = {0x01, 0x02, 0x04, 0x08,0x10,0x20,0x40,0x80};
const uint8_t aAndTab[8] = {0xFE, 0xFD, 0xFB, 0xF7,0xEF,0xDF,0xBF,0x7F};
#define LCD_RST_0 LCD_RST_PORT->BSRRH = LCD_RST_PINS
#define LCD_RST_1 LCD_RST_PORT->BSRRL = LCD_RST_PINS
#define LCD_CS_0 LCD_CS_PORT->BSRRH = LCD_CS_PINS
#define LCD_CS_1 LCD_CS_PORT->BSRRL = LCD_CS_PINS
#define LCD_CD_0 LCD_CD_PORT->BSRRH = LCD_CD_PINS
#define LCD_CD_1 LCD_CD_PORT->BSRRL = LCD_CD_PINS
#define LCD_SCK_0 LCD_SCK_PORT->BSRRH = LCD_SCK_PINS
#define LCD_SCK_1 LCD_SCK_PORT->BSRRL = LCD_SCK_PINS
#define LCD_SDA_0 LCD_SDA_PORT->BSRRH = LCD_SDA_PINS
#define LCD_SDA_1 LCD_SDA_PORT->BSRRL = LCD_SDA_PINS
#define LCD_BL_ON LCD_BL_PORT->BSRRH = LCD_BL_PINS
#define LCD_BL_OFF LCD_BL_PORT->BSRRL = LCD_BL_PINS
//写指令到 LCD 模块
void LCD_SendCmd(int data)
{
char i;
LCD_CS_0;
LCD_CD_0;
for(i=0;i<8;i++)
{
LCD_SCK_0;
if(data&0x80)
{
LCD_SDA_1;
}
else
{
LCD_SDA_0;
}
LCD_SCK_1;
data=data<<=1;
}
LCD_CS_1;
}
//写数据到 LCD 模块
void LCD_SendData(int data)
{
char i;
LCD_CS_0;
LCD_CD_1;
for(i=0;i<8;i++)
{
LCD_SCK_0;
if(data&0x80)
{
LCD_SDA_1;
}
else
{
LCD_SDA_0;
}
LCD_SCK_1;
data=data<<=1;
}
LCD_CS_1;
}
//u8 page(0-7共8页),
//u8 column(列0-191)
void LCD_SetAddr(u8 page,u8 column)
{
//设置页地址。每页是 8 行。一个画面的 64 行被分成 8 个页。
//0-7页共8页
LCD_SendCmd(0xb0+page);
//0-191列共192列
//设置列地址的高 4 位
LCD_SendCmd(((column>>4)&0x0f)+0x10);
//设置列地址的低 4 位
LCD_SendCmd(column&0x0f);
}
/*
(x 0,y 0)
..............................................(y 0,x 191)
. |
. |
. |
.-----------.(y 4,x 12)
.
.
.
.
.
(y 63,x 0)
*/
//y(0-63) x(0-191) nColor(0不显示 1显示)
void LCD_DrawDots(u8 x,u8 y, u8 nColor)
{
//判断X(列0-191)在哪一列
u8 nColumnIndex;
//判断Y(行0-64)在哪一页
u8 nPageIndex ;
//判断这一页的哪一位
u8 nBitIndex;
u8 h = y;//行
u8 l = x;//列
//y(0-63) x(0-191)
//LIMIT(0,l,191);
//LIMIT(0,h,63);
//判断列(0-191)在哪一列
nColumnIndex = l;
//判断行(0-64)在哪一页
//nPageIndex = row/8;
nPageIndex = h>>3;
//判断这一页的哪一位
//nBitIndex = row%8;
nBitIndex = h-(nPageIndex<<3);
//显示
if(nColor == 0)
{
//g_arrDispBuf[nColumnIndex][nPageIndex] |= (0x01< } else { //g_arrDispBuf[nColumnIndex][nPageIndex] &= ~(0x01< } //设置地址 LCD_SetAddr(nPageIndex,nColumnIndex); //写数据 LCD_SendData(g_arrDispBuf[nPageIndex][nColumnIndex]); } //y(0-63) x(0-191) nColor(0不显示 1显示) u8 LCD_GetDots(u8 x,u8 y) { //判断X(列0-191)在哪一列 u8 nColumnIndex; //判断Y(行0-63)在哪一页 u8 nPageIndex ; //判断这一页的哪一位 u8 nBitIndex; //查找出这一页的这一列缓存数据 u8 h = y;//行 u8 l = x;//列 //判断列(0-191)在哪一列 nColumnIndex = l; //判断行(0-64)在哪一页 //nPageIndex = row/8; nPageIndex = h>>3; //判断这一页的哪一位 //nBitIndex = row%8; nBitIndex = h-(nPageIndex<<3); //显示 //return ((g_arrDispBuf[nPageIndex][nColumnIndex] & (0x01< } //全屏清屏 void LCD_ClearScreen(void) { //行row 列column u8 page,column; for(page=0;page<8;page++) { LCD_SetAddr(page,0); for(column=0;column<192;column++) { LCD_SendData(0x00); g_arrDispBuf
史海拾趣
|
身在嵌入式领域做设计的我们,是不是有时也会爆出这样的疑问:究竟什么是嵌入式?嵌入式未来几年将如何发展?目前市场最火的嵌入式应用有哪些?最新的嵌入式技术又包括什么?还有哪些是我们未曾想到的? 本期的专题,将携嵌入式领域诸多大 ...… 查看全部问答> |
|
小弟遇到难题,请教各位前辈!分都用完了,还请各位前辈帮帮我。 问题:在eboot启动后,添加从SD(fat or fat32)卡直接启动NK的工作。目前进展,nk.nb0已经可以读到ram,ce也已经起来了。 目前需要使nk.bin也可以这样放到SD卡里面启动。不知道nk ...… 查看全部问答> |
|
一家从事数字移动电视,宽带网络等产品开发的大型欧洲企业招聘硬件工程师,高级硬件工程师,Leader.工作职责包括: 客户需求分析; ?产品具体硬件技术规范的制定; ?完成复杂的技术模块的可行性研究,管理各种硬件设计工作,如:原理图设计,PCB ...… 查看全部问答> |
|
请问如果使用AXD和仿真器调试,板子的flash上要先烧boot么? 我每次都要先烧一个boot来初始化CPU,才能用AXD和仿真器调试其他程序。 是不是一定要烧BOOT呢? 我想如果仿真器连上芯片,应该和板子上的程序无关才对啊~… 查看全部问答> |
|
有没有domino中用ajax生成树形部门选择对话框的代码? 因人数较多时,一次显示出来有点慢,就像eeworld那样的,点击时异步计算下级菜单并显示出来。在domino中做出来的朋友提供一下,谢谢! 给出方案的送100分。… 查看全部问答> |
|
请问一下 OKI 1190C 针孔打印机 能不能旋转180度打印,我向打印的是 超市的标价签,有没有什么外部驱动什么的,打印机设置里面根本没有反转打印这一项,那位能帮个忙吗?… 查看全部问答> |
|
我现在使用的是STM8s103单片机,哪位大侠有这款单片机的捕获功能的例子,如果是用库函数写的程序就不用了,因为初学这个cpu所以想参考下,希望各位大侠帮个忙。。。。。。。我的邮箱307179045@qq.com… 查看全部问答> |




