12864带字库显示屏滚屏显示
/*****************************************************/
//描述:LCD12864的驱动
//作者:小四叶草
//时间:2015/07/16
//描述:显示屏的滚动,需要扩展指令
//卷地址只能滚屏64行,也就是2页(一页四行),那我只能定义虚拟页(page),让它来满足我一直滚屏显示我的文字。比我的文字是四页
/*****************************************************/
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File#define LCD_DATA (*((volatile Uint16 *)0x45EF))
#define E GpioDataRegs.GPBDAT.bit.GPIO61
#define RW GpioDataRegs.GPADAT.bit.GPIO27
#define RS GpioDataRegs.GPBDAT.bit.GPIO60
#define LOW 0
#define HIGH 1
#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H
#define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置
#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE 0x30 //工作模式:8位基本指令集
#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白
#define DISPLAY_OFF 0x08 //显示关
#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1
#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH
#define SET_DD_AC 0x80 #define DELAY_MS(A) DELAY_US((long double)A * 1000.0L)
#define DELAY_100US(B) DELAY_US((long double)B * 100.0L)void InitXintf(void);
void ConfigGpio(void);
void InitLcd(void);
void Read_Busy(void);
void WriteCmd12864(Uint16 cmd);
void WriteData12864(Uint16 dat);
void DisplayDdram(uchar *hz);
void DispBMP(uchar *adress);
void CLR_GDRAM(void);
void gunping(void);
void gunping1(void);
void gunping2(void);//=========一页========================
uchar tab1[]="晴天有月来几时?";
uchar tab2[]="我今停杯一问之。";uchar tab3[]="人攀明月不可得,";
uchar tab4[]="月行却与人相随。";
//========二页==========================
uchar tab5[]="胶白飞镜林丹阙,";
uchar tab6[]="绿烟灭尽清辉发。";uchar tab7[]="但见宵从海上来,";
uchar tab8[]="宁知晓向云间没?";
//========三页==========================
uchar tab9[]="白兔捣药秋复春,";
uchar tab10[] = "嫦娥孤栖与谁邻?";uchar tab11[] = "今人不见古时月,";
uchar tab12[]="今月曾经照古人";
//========四页==========================
uchar tab13[]="古人今人如流水,";
uchar tab14[]="共看明月皆如此。";uchar tab15[]="唯愿当歌对酒时,";
uchar tab16[]="月光长照金樽里。";void main(void)
{uchar i;uchar page = 0;InitSysCtrl();InitXintf();InitXintf16Gpio();DINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;ConfigGpio();InitLcd();WriteCmd12864(CLEAR_SCREEN);DELAY_US(50);gunping();WriteCmd12864(0x34); //开启扩展指令WriteCmd12864(0x03);//允许写入卷动地址for(i = 0;i < 64; i++){if((32 == i) & (0 == page)){WriteCmd12864(0x30); //返回到基本指令WriteCmd12864(0x80);DisplayDdram(tab5);WriteCmd12864(0x90);DisplayDdram(tab6);WriteCmd12864(0x88);DisplayDdram(tab7);WriteCmd12864(0x98);DisplayDdram(tab8);WriteCmd12864(0x34); //开启扩展指令WriteCmd12864(0x03);//允许写入卷动地址}else if((32 == i) & (1 == page)){WriteCmd12864(0x30); //返回到基本指令WriteCmd12864(0x80);DisplayDdram(tab9);WriteCmd12864(0x90);DisplayDdram(tab10);WriteCmd12864(0x88);DisplayDdram(tab11);WriteCmd12864(0x98);DisplayDdram(tab12);WriteCmd12864(0x34); //开启扩展指令WriteCmd12864(0x03);//允许写入卷动地址}else if((32 == i) & (2 == page)){WriteCmd12864(0x30); //返回到基本指令WriteCmd12864(0x80);DisplayDdram(tab13);WriteCmd12864(0x90);DisplayDdram(tab14);WriteCmd12864(0x88);DisplayDdram(tab15);WriteCmd12864(0x98);DisplayDdram(tab16);WriteCmd12864(0x34); //开启扩展指令WriteCmd12864(0x03);//允许写入卷动地址}else if((63 == i) & (0 == page)){i =0;page++;WriteCmd12864(0x30); //返回到基本指令gunping1();WriteCmd12864(0x34); //开启扩展指令WriteCmd12864(0x03);//允许写入卷动地址}else if((63 == i) & (1 == page)){i =0;page++;WriteCmd12864(0x30); //返回到基本指令gunping2();WriteCmd12864(0x34); //开启扩展指令WriteCmd12864(0x03);//允许写入卷动地址}else{}WriteCmd12864(0x40 + i);DELAY_MS(10);}WriteCmd12864(0x30); //返回到基本指令}void ConfigGpio(void)
{EALLOW;GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0;GpioCtrlRegs.GPADIR.bit.GPIO27 = 1;EDIS;
}void InitLcd(void)
{DELAY_100US(5);WriteCmd12864(FUN_MODE);DELAY_US(5);WriteCmd12864(FUN_MODE);DELAY_US(5);WriteCmd12864(0x0C);DELAY_US(5);WriteCmd12864(CLEAR_SCREEN);DELAY_US(30);WriteCmd12864(AC_INIT);DELAY_US(4);}
void Read_Busy() //读忙标志最高位为1,则busy,不能进行读写操作
{RS = LOW;RW = HIGH;E = HIGH;while(LCD_DATA & 0X80);E = LOW;
}
void WriteCmd12864(Uint16 cmd)
{Read_Busy();RS = LOW;RW = LOW;//写数据E = HIGH;LCD_DATA = cmd;E = LOW;
}void WriteData12864(Uint16 dat)
{Read_Busy();RS = HIGH;RW = LOW;//写数据E = HIGH;LCD_DATA = dat;E = LOW;
}void DisplayDdram(uchar *hz)
{while(*hz != '\0'){WriteData12864(*hz);//地址里面的值hz++;}
}void gunping()
{WriteCmd12864(0x80);DisplayDdram(tab1);WriteCmd12864(0x90);DisplayDdram(tab2);WriteCmd12864(0xA0);DisplayDdram(tab3);WriteCmd12864(0xB0);DisplayDdram(tab4);WriteCmd12864(0x88);DisplayDdram(tab3);WriteCmd12864(0x98);DisplayDdram(tab4);WriteCmd12864(0xA8);DisplayDdram(tab5);WriteCmd12864(0xB8);DisplayDdram(tab6);}
void gunping1()
{WriteCmd12864(0x80);DisplayDdram(tab5);WriteCmd12864(0x90);DisplayDdram(tab6);WriteCmd12864(0xA0);DisplayDdram(tab7);WriteCmd12864(0xB0);DisplayDdram(tab8);WriteCmd12864(0x88);DisplayDdram(tab7);WriteCmd12864(0x98);DisplayDdram(tab8);WriteCmd12864(0xA8);DisplayDdram(tab9);WriteCmd12864(0xB8);DisplayDdram(tab10);}void gunping2()
{WriteCmd12864(0x80);DisplayDdram(tab9);WriteCmd12864(0x90);DisplayDdram(tab10);WriteCmd12864(0xA0);DisplayDdram(tab11);WriteCmd12864(0xB0);DisplayDdram(tab12);WriteCmd12864(0x88);DisplayDdram(tab11);WriteCmd12864(0x98);DisplayDdram(tab12);WriteCmd12864(0xA8);DisplayDdram(tab13);WriteCmd12864(0xB8);DisplayDdram(tab14);}
12864带字库显示屏滚屏显示相关推荐
- QT 实现滚屏显示多张漂亮美眉图片(可放大缩小)
作为新手小白的一些分享....... 其中一部分功能要求显示多张图片,如果图片总高度超过工具窗口的高度就要有滚动条出现,实现滚屏的效果,网上这部分内容少之又少,我就把效果和代码都贴出来供大家参考. 想 ...
- c语言16x32点阵显示汉字,点阵16*32滚屏显示汉字
// matrix2pcs20140821.ino const int SH_CP = 8; const int DS = 9; const int ST_CP = 10; //声明4个数组临时变量 ...
- linux分屏命令,Linux中如何分屏显示的指令是什么
linux中如果想要把某个命令或者程序执行的输出结果分屏显示,可以使用more工具来实现.是几乎所有linux发行版都自带的一个分屏显示的工具. 1:如果只是输出一个文件的内容,可以直接用more来输 ...
- linux分屏显示两个文件内容,在linux中,如何分屏显示一个文件(如.txt)的内容?指令或快捷键...
linux中如果想要把某个命令或者程序执行的输出结果分屏显示,可以使用more工具来实现.是几乎所有linux发行版都自带的一个分屏显示的工具. 1:如果只是输出一个文件的内容,可以直接用more来输 ...
- 用STM32F103达成基于I2C协议的AHT20温湿度传感器和OLED屏显示汉字
目录 一 I2C协议简介 硬件I2C与软件I2C 二 代码和ATH20芯片实现温湿度的串口显示 三 用stm32f103芯片的SPI和IIC接口接上OLED屏显示中文姓名温湿度 1 先用文字字模生成器 ...
- 点阵LCD12864的显示原理(不带字库)
点阵LCD12864的显示原理(不带字库) 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果.对于显示英文操作,由于英文字母种类很少,只需要8位(一字节 ...
- STM32系列(HAL库)——F103C8T6硬件SPI点亮带字库OLED屏
1.软件准备 (1)编程平台:Keil5 (2)CubeMX (3)程序:点击下载 2.硬件准备 (1)1.3寸带字库OLED 注意,成品模块无RES引脚,模块正常工作时RES置于高电平,成品模块是硬 ...
- 1366*768 显示屏模式造成远程桌面不能全屏显示
1366*768 显示屏模式造成远程桌面不能全屏显示 补丁如下: 支持win8 win7 64bit KB Article Number(s): 2582172 Language: All (Glob ...
- 计算机屏幕节电模式,显示器黑屏显示省电模式是怎么回事_电脑显示屏省电模式黑屏如何解决...
最近有不少用户在使用电脑的时候,发现电脑的显示器突然黑屏,并显示省电模式,给用户们带来了很多困扰,许多用户高不知道显示器黑屏显示省电模式是怎么回事,为了帮助到大家,本文给大家讲解一下电脑显示屏省电模式 ...
最新文章
- Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了
- cgi硬盘安装器_简简单单,玩转虚拟硬盘装多系统
- reactjs组件实例的三大属性之props使用示例:在函数式组件中使用props
- 【项目管理】管理良好沟通
- href up test.php,test.php
- bottleneck resnet网络_深度学习|图像分类:ResNet(二)
- mysql把两个查询的结果合并为一个结果
- 关于个人博客转移的那些事
- Linux驱动段错误,linux驱动调试--段错误之oops信息分析
- 关于ENVI-FLAASH大气校正报 .. bin\flaash\scriptfile.006系统找不到指定的路径的错误
- 构建自己的Aleax查询服务
- adb:设置手机屏幕亮度
- 手机的RFID射频技术应用
- office 论文 页码_officexx论文页码【officexx设置论文页码】
- Q7:难道不想手工搞个环境?
- 用javascript和jquery部分知识实现的打地鼠小游戏
- 使用POI读写word doc文件
- JavaScript Date相关练习
- 【华人学者风采】张良培 武汉大学
- 9.高性能计算 期末复习
热门文章
- 会计要素的核算-资产的核算
- android 适配简单粗暴,Android10填坑适配指南(实际经验代码)
- 游戏商店系统定时限购玩法设计是否合理
- Nacos 源码启动报错derbyLocale_pl.jar (系统找不到),UnknownHostException: jmenv.tbsite.net,Unable to start embedd
- 天寒地冻正是读书好时节
- PythonBase(一)
- mysql数据库多表查询(内连接,外连接,自连接,子查询及案例分析)
- 正常使用计算机可以用多少年,网吧电脑的正常使用寿命是多长时间
- 2022了,连续第15年的回顾展望
- 中的实践 中兴_12.1112丨中兴公开课——感受5G先锋,学习数字化转型和管理之道...