st7920驱动OCMJ2X8C屏使用CGRAM自定义图标
1、官网地址:前台 - 肇庆市金鹏实业有限公司 (gptlcm.cn)
2、屏参数:点阵数128*32,显示2行8列。供电5v,注意供电不足5v时显示不清或不显示。
3、手册上相关说明
每个调用码可以存一个16*16的图标,所以总共能存4个16*16的图标。根据40H-4FH等地址存入,显示时使用调用码。
4、自定义图标放入CGROM操作步骤:
存入步骤:
- 设置为扩充指令集;
- 设置SR=0,允许设定CGRAM地址;
- 设置为基本指令集;
- 循环执行以下操作写入16个字节数据(设定CGRAM的存储地址,写入自定义数据);
- 显示步骤:
- 设置DDRAM地址;
- 写入CGRAM调用码
5、实现代码:
/*数据写入num:0,1,2,3,对应调用号0000H,0002H,0004H,0006Hpdat:图标数据
*/
void SET_CGRAM(uint8_t num,uint8_t *pdat)
{uint8_t i,add;wr_lcd (comm,0x34);//扩展指令集wr_lcd (comm,0x02); //允许写CGRAM地址wr_lcd (comm,0x30); //基本指令集add = (num <<4) | 0x40;//DB6=1,所以或0x40for(i=0;i<16;i++){wr_lcd (comm,add+i); wr_lcd (dat,pdat[i*2]);wr_lcd (dat,pdat[i*2+1]); }
}
void Set_Cursor(uint8_t x1,uint8_t y1)
{uint8_t i=0;switch(x1){case 0:i=0x80;break;case 1:i=0x90;break;}i=y+i;wr_lcd (comm,i);
}
/*显示函数形参:x1,y1显示坐标,num:0,1,2,3,对应调用号0000H,0002H,0004H,0006H
*/
void Display_CGRAM(uint8_t x1,uint8_t y1,uint8_t num)
{Set_Cursor(x1,y1);wr_lcd (dat,0); wr_lcd (dat,num*2);
}
6、代码解释:
wr_lcd (comm,0x34); 0x34=0011 0100 即DL=1 8bit接口,RE=1:扩充指令集 G=0 绘图OFF
wr_lcd (comm,0x02); 0x02: SR=0
CGRAM地址:从0x40开始,因为DB6=1 ,0100 0000=0x40
Display_CGRAM函数是写调用号。
7、函数调用
在main.c里初始化SET_CGRAM(1,Ret);
显示时调用 Display_CGRAM(0,1,1);
8、图片制作
- 先找图片,在阿里巴巴矢量库中找【返回】图片,下载-》字号16-》PNG下载,字模软件用的图片格式是bmp,所以图片用电脑自带的画图软件另存为bmp格式。
- 使用字模提取软件,
基本操作-》打开图像图标;
参数设置-》其他选项-》选横向取模,字节倒序不选。
取模方式-》C51
16*16的图片生成的字节数16*16/8=32个字节。一行16个点对应2个字节。
uint8_t Ret[32]={
0x00,0x00,0x00,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x70,0x00,0x7F,0xF8,0x70,0x1C,
0x38,0x06,0x0C,0x06,0x06,0x02,0x02,0x06,0x00,0x0E,0x07,0xFC,0x07,0xF0,0x00,0x00,
};
参考:带字库12864超详细扩展操作,写自定义字符,画图,画直线,画圆,读取数据等操作.doc (book118.com)
附OCMJ2X8C的初始化,用的stm32f103c8t6
#define uint unsigned int
#define uchar unsigned char
#define x 0x80
#define y 0x80
#define comm 0
#define dat 1#define Set_rs GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define Clr_rs GPIO_ResetBits(GPIOB,GPIO_Pin_11)
#define Set_rw GPIO_SetBits(GPIOB,GPIO_Pin_10)
#define Clr_rw GPIO_ResetBits(GPIOB,GPIO_Pin_10)
#define Set_e GPIO_SetBits(GPIOB,GPIO_Pin_1)
#define Clr_e GPIO_ResetBits(GPIOB,GPIO_Pin_1)vu32 nTime;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure; void wr_lcd (uchar dat_comm,uchar content); void chk_busy (void) //忙检测
{//PA7接DB7,设为输入,作为忙检测GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure);Clr_rs;Set_rw;Set_e;while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7)!=0);Clr_e;//转为输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*---------------显示汉字或字符----------------*/
void chn_disp (uchar *chn)
{uchar i,j;wr_lcd (comm,0x30);wr_lcd (comm,0x80);j=0;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);wr_lcd (comm,0x90);j=1;for (i=0;i<16;i++)wr_lcd (dat,chn[j*16+i]);
}
void Delay(vu32 time)
{nTime = time;while(nTime--);
}
void GPIO_Configuration(void) //初始化IO口
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);
}void init_lcd (void)
{
// rst=1;GPIO_Configuration();GPIO_SetBits(GPIOB,GPIO_Pin_0) ; //RST引脚置高Delay(1000);//Set_psb;wr_lcd (comm,0x30); /*30---基本指令动作*/ wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/wr_lcd (comm,0x06); /*光标的移动方向*/wr_lcd (comm,0x0c); /*开显示,关游标*/
}/*--------------清DDRAM------------------*/
void clrram (void)
{wr_lcd (comm,0x30);wr_lcd (comm,0x01);Delay(5000);
}
/*---------------------------------------*/void wr_lcd (uchar dat_comm,uchar content)
{ uint a;chk_busy ();//Delay(20); a=(uint)content; if(dat_comm){Set_rs; //dataClr_rw; //write}else {Clr_rs; //commandClr_rw; //write}//Delay(10);GPIO_Write(GPIOA,a);//Delay(20);Set_e;Delay(30);Clr_e;
}
/*----------------显示图形-----------------*/
void img_disp (uchar *img)
{uchar i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){wr_lcd (comm,0x34);wr_lcd (comm,y+j);wr_lcd (comm,x+i);wr_lcd (comm,0x30);wr_lcd (dat,img[j*16+i*2]);wr_lcd (dat,img[j*16+i*2+1]);}}wr_lcd (comm,0x36);
}
st7920驱动OCMJ2X8C屏使用CGRAM自定义图标相关推荐
- qss 更改图标_Qt实现自定义图标功能
Qt实现自定义图标功能 作者:hackett 微信公众号:加班猿 在上一节的基础上进行定义图标的功能 效果:要做的是应用的放大缩小.最小化功能,鼠标移动和点击图标变色 准备工作: 控件 ...
- ST7920驱动的LCD12864实现单行反白显示
参考链接: ST7920驱动的LCD12864实现单行反白显示 - jqdy - 博客园 12864液晶模块的详细使用_Rainlee随笔记-CSDN博客_12864使用 GDRAM空间有64×256 ...
- arduino上ESP8266用Adafruit_SSD1306库驱动OLED屏
关注.星标公众号,不错过精彩内容 编辑:Tony 来源:公众号TonyCode 在进行后续的ESP8266学习前,我们先来对OLED屏进行驱动,为后续学习提供直观的信息显示. 1. 安装驱动库 在之前 ...
- Android PC投屏简单尝试- 自定义协议章(Socket+Bitmap)
代码地址 :https://github.com/deepsadness/MediaProjectionDemo 效果预览 投屏效果预览 简单说明: 使用Android MediaProjection ...
- Ubuntu登录后黑屏,或者桌面图标消失不见
Ubuntu登录后黑屏,或者桌面图标消失不见 原因一 Ubuntu的图形界面模块损毁了 方法一 重新安装xserver-xorg-lts-quantal,如果提示没有包xserver-xorg-lts ...
- yota3墨水屏设置_使用ESP32驱动电子墨水屏
未经私信同意禁止转载! 一.简介 显示技术发展很快,高中的时候大家还在学习阴极射线管显示,天天在算电子的轨迹.而如今随处可见LED显示液晶显示. 今天给大家介绍一下电子墨水屏.目前生活中比较常见的是在 ...
- iview weapp icon组件自定义图标 小程序
写小程序图标没有想要的,需要自定义的时候.可以使用阿里巴巴矢量图标库自定义图标. 找到自己需要的,然后先加入购物车,点开购物车选择下载代码,然后解压压缩包. 复制 iconfont.css中的内容,到 ...
- elementUI-添加自定义图标
elementui的小图标有限,跟UI给的不一样,这个时候咋办呢?百度走起....参考了两篇博主分享的 自定义elementui中的图标 和 建立图标库,这里主要用到第一种 实际中: elementU ...
- MSP430F5529 DriverLib 库函数学习笔记(十)SPI驱动墨水屏
目录 上机实战 SPI 驱动 墨水屏 墨水屏介绍 电子纸的分类 电泳型电子纸技术详解 原理 结构 优势与不足 实验电路介绍 程序分析 引脚初始化 SPI模块初始化 发送和接收 全部源代码 main.c ...
最新文章
- js、css分别实现元素水平垂直居中
- Keepalived + LVS-DR搭建高可用Web服务器集群
- C++下简单的socket编程
- 八种架构设计模式及其优缺点概述
- [bzoj2400]Optimal Marks
- CSS中scoped的作用
- 大部分人其实根本就不上进,他们只是表现的很努力
- C/C++ Memory Layout
- 实验三:跟踪分析Linux内核的启动过程
- C++习题 对象数组输入与输出
- Kronecker 定理
- 通讯录管理软件Cardhop for Mac
- Golang 基础:接口使用、实现原理(eface iface)和设计模式
- html程序产品目录,产品目录(Catalog)制作大师
- 重新安装macOS 一直报no bag entry
- matlab中Rip是什么意思,rip什么意思
- 美团脱颖而出的经验_使用条件格式使重要的Outlook邮件脱颖而出
- 设施网络选址的基本方法,网络设施选址的方法
- python安装launcher要选吗_python launcher是什么
- OTT系统和IPTV系统不一样吗?有什么区别?
热门文章
- 典型工业数据分析场景解读:机械设备振动监测和故障诊断
- C语言字符串中 char char* char[] 区别
- 配置python环境变量_星座般配,星座般配图
- [debug004]_GPIO对地短路问题
- 2020部队技术干部计算机等级考试,带你了解专业技术军官
- 计算机专业符合直招士官吗,直招士官报名开始,这些专业可报名,你的专业符合吗?...
- 042-18 RMAN备份与恢复2
- MVC框架的简单描述
- js时间与当前时间比较
- IgnoreActorWhenMoving