博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
128*64液晶显示器
阅读量:5897 次
发布时间:2019-06-19

本文共 11037 字,大约阅读时间需要 36 分钟。

 

 

以数据并行的方式在DDRAM中实现基本的文本输出

#include 
#include
#define NOP() _nop_()#define uchar unsigned char#define uint unsigned int uchar code table0[] = "welcome zcmaker";uchar code table1[] = "我愿意这条情路";uchar code table2[] = "我会送你红色玫瑰";uchar code table3[] = "未来有你梦才会完美";sbit du = P2^6;sbit we = P2^7; sbit LCDRS = P3^5;sbit LCDRW = P3^6;sbit LCDEN = P3^4;sbit LCDPSB = P3^7;void delayNms(uchar ms);void init();void writeCmd(uchar cmd);void writeData(uchar dat);uchar readState();void main(){ uint i = 0; init(); /*注意点设定 与 游标或显示移位控制的区别: 当设定了点设定的内容时,写入的每一个内容都会 按照这个设定方式移动,而游标或显示移位控制只在 写入一条命令时移动一次 *//*****以下 实现了行屏幕左移动***************//* writeCmd(0x07);//点设顶,画面左移 writeCmd(0x87); while(table0[i] != '\0') { writeData(table0[i++]); delayNms(500); }*//******************************************/ /*********检测DDRAM的地址为0xa0之后能否显示,结果是不能,数据没有存入到DDRAM中*******//* writeCmd(0x9f); writeData('1'); delayNms(500); writeCmd(0x18);*//**************************************************************//**************游标或显示移位设定*****************************/ /*while(table0[i++] != '\0') { writeCmd(0x18); delayNms(500); }*//*********************************************************/ while(1);}void delayNms(uchar ms){ uchar i; while(ms--) { for(i = 105; i>0; i--) NOP(); } }void init(){ we = 0; du = 0; LCDPSB = 1; writeCmd(0x30);//功能设定,基本指令集 delayNms(1); writeCmd(0x30);//这里为什么又多了个功能设定 delayNms(1); writeCmd(0x0f);//显示开,游标开,游标位置开 delayNms(1); writeCmd(0x01);//清频 delayNms(0x015); writeCmd(0x06);//游标右移 ,整体显示不动}void writeCmd(uchar cmd){ LCDEN = 0; while((readState() & 0x80) !=0); //判忙 LCDRS = 0; LCDRW = 0; NOP(); LCDEN = 1; P0 = cmd; NOP(); NOP(); LCDEN = 0;}void writeData(uchar dat){ LCDEN = 0; while((readState() & 0x80) !=0); LCDRS = 1; LCDRW = 0; NOP(); LCDEN = 1; P0 = dat; NOP(); NOP(); LCDEN = 0;}uchar readState(){ uchar dat; LCDEN = 0; LCDRS = 0; LCDRW = 1; NOP(); LCDEN = 1; dat = P0; NOP(); NOP(); LCDEN = 0; return dat;}

 

在液晶上面实现了绘图的功能

#include 
#include
#define NOP() _nop_()#define uchar unsigned charconst uchar code fill[] = {
" "};const uchar code table0[] = {
"欢迎来到"};const uchar code table1[] = {
" zcmaker's lab"};const uchar code table2[] = {
"谢谢观看"}; const uchar code qq[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x7F,0x80,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFE,0x00,0x00,0x01,0xFF,0xE0,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFE,0x00,0x00,0x07,0xFF,0xF0,0x00,0x07,0xFF,0xF0,0x00,0x00,0x00,0x0F,0xF9,0xFD,0xFF,0x00,0x00,0x0F,0xFF,0xF8,0x00,0x0F,0xFF,0xF8,0x00,0x00,0x00,0x0F,0xF0,0xF0,0xFF,0x80,0x00,0x1F,0xFF,0xFC,0x00,0x1F,0xFF,0xFC,0x00,0x00,0x00,0x1F,0xF0,0x70,0x7F,0x80,0x00,0x3F,0xFF,0xFC,0x00,0x3F,0xFF,0xFC,0x00,0x00,0x00,0x1F,0xE1,0x70,0x7F,0x80,0x00,0x7F,0xFF,0xFE,0x00,0x7F,0xFF,0xFE,0x00,0x00,0x00,0x3F,0xE1,0x66,0x7F,0xC0,0x00,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x3F,0xE3,0xE0,0x7F,0xC0,0x01,0xFF,0xFF,0xFE,0x01,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x3F,0xE0,0x60,0x7F,0xE0,0x01,0xFF,0xEF,0xFF,0x01,0xFF,0xEF,0xFF,0x00,0x00,0x00,0x7F,0xF0,0xF0,0x7F,0xC0,0x03,0xFF,0x87,0xFF,0x03,0xFF,0x87,0xFF,0x00,0x00,0x00,0x3F,0xF0,0xF8,0xFF,0xE0,0x03,0xFF,0x83,0xFF,0x83,0xFF,0x81,0xFF,0x80,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xE0,0x07,0xFF,0x01,0xFF,0x07,0xFF,0x01,0xFF,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xF0,0x07,0xFF,0x00,0xFF,0x87,0xFF,0x00,0xFF,0x80,0x00,0x00,0x7F,0xE0,0x00,0xBF,0xF0,0x0F,0xFE,0x00,0xFF,0x8F,0xFE,0x00,0xFF,0x80,0x00,0x00,0xFF,0x80,0x00,0x0F,0xF0,0x0F,0xFE,0x00,0xFF,0x8F,0xFE,0x00,0xFF,0x80,0x00,0x00,0xFE,0x00,0x00,0x07,0xF0,0x1F,0xFC,0x00,0x7F,0x9F,0xFC,0x00,0x7F,0x80,0x00,0x00,0xFF,0xB0,0x00,0x5F,0xF0,0x0F,0xFC,0x00,0xFF,0x8F,0xFC,0x00,0x7F,0x80,0x00,0x01,0xFF,0xF8,0x01,0xFF,0xF0,0x1F,0xF8,0x3D,0xFF,0x9F,0xFC,0x3D,0xFF,0x80,0x00,0x01,0xFF,0xFF,0xDF,0xFF,0xF8,0x0F,0xFC,0x37,0x0F,0x8F,0xFC,0x37,0x9F,0x80,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xF8,0x1F,0xF8,0x66,0x07,0x1F,0xF8,0x26,0x0F,0x80,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFC,0x0F,0xFC,0x6C,0x63,0x8F,0xFC,0x66,0x63,0x80,0x00,0x1F,0xC7,0xFF,0xFF,0xFC,0xFE,0x0F,0xFE,0xEC,0x80,0x8F,0xFE,0xED,0x80,0x80,0x00,0x1F,0xC3,0xFF,0xFF,0xF0,0x7E,0x07,0xFF,0xFC,0x00,0x07,0xFF,0xFE,0x80,0x00,0x00,0x3F,0xC7,0xFF,0xFF,0x80,0x7F,0x07,0xFF,0xFE,0x00,0x07,0xFF,0xFE,0x00,0x00,0x00,0x3F,0xC3,0xFD,0xFA,0x00,0x3F,0x01,0xFF,0xFF,0x00,0x21,0xFF,0xFF,0x00,0x20,0x00,0x3F,0x87,0xF0,0x00,0x00,0x3F,0x00,0xFF,0xFF,0x00,0x40,0xFF,0xFF,0x00,0x40,0x00,0x7F,0x83,0xF8,0x00,0x00,0x3F,0x00,0x1F,0xFF,0x80,0x40,0x1F,0xFF,0xC0,0xC0,0x00,0x7F,0x87,0xF0,0x00,0x00,0x3F,0x00,0x00,0x00,0xC1,0x80,0x00,0x00,0xE3,0x80,0x00,0x7F,0xC3,0xF8,0x00,0x00,0x3F,0x80,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x7B,0x83,0xF0,0x00,0x00,0x3F,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x1C,0x00,0x00,0x79,0xC1,0xF0,0x00,0x00,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0xC0,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x40,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0x00,0x00,0x00,0xC0,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x30,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0x00,0x00,0x06,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x00,0x00,0x0C,0x60,0x07,0xF8,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x70,0x01,0x81,0xC0,0x00,0x38,0x10,0x03,0x30,0x00,0x00,0x00,0x03,0x60,0x00,0x00,0x30,0x01,0x00,0xF8,0x00,0xE0,0x10,0x03,0x30,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x03,0xAD,0x00,0x10,0x01,0xE1,0xE3,0xF7,0xF8,0x06,0x01,0xE1,0xE1,0xF0,0x00,0xA0,0x0B,0x0E,0xA2,0xA0,0x01,0xE3,0x31,0xC3,0x30,0x06,0x03,0x33,0x33,0x30,0x00,0x00,0x54,0x00,0x00,0x00,0x01,0xE3,0xF1,0x81,0xE0,0x06,0xF3,0x33,0x33,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE3,0x01,0x81,0xE0,0x06,0x63,0x33,0x33,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0x31,0x80,0xC0,0x03,0x63,0x33,0x33,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE3,0xE0,0xC0,0x01,0xC1,0xE1,0xE1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};sbit du = P2^6;sbit we = P2^7; sbit LCDRS = P3^5;sbit LCDRW = P3^6;sbit LCDEN = P3^4;sbit LCDPSB = P3^7;void delayNms(uchar ms);void init();void writeCmd(uchar cmd);void writeData(uchar dat);uchar readState();void funcTest();void clearGDRAM();void drawPic(uchar *dat);void writeChar(uchar loc, uchar *dat);void main(){ init(); writeCmd(0x0c);//光标不显示 writeChar(0x80, table0); delayNms(500); writeChar(0x90, table1); delayNms(500);// writeCmd(0x01);//清空DDRAM ,这句话导致图片显示的句子不正确,想不到是什么原因/**************一下4句话作为代替,清空DDRAM中的内容********************/ writeChar(0x80, fill); writeChar(0x88, fill); writeChar(0x90, fill); writeChar(0x98, fill);/***********************************************************************/ drawPic(qq); delayNms(500); clearGDRAM(); writeChar(0x88, table2); delayNms(500); writeCmd(0x01); /*writeCmd(0x01); drawPic(qq); delayNms(500); delayNms(500); delayNms(500); writeCmd(0x01);*/ while(1);}void delayNms(uchar ms){ uchar i; while(ms--) { for(i = 105; i>0; i--) NOP(); } }void init(){ we = 0; du = 0; LCDPSB = 1; writeCmd(0x30);//功能设定,基本指令集 delayNms(1); writeCmd(0x30);//这里为什么又多了个功能设定 delayNms(1); writeCmd(0x0f);//显示开,游标开,游标位置开 delayNms(1); writeCmd(0x01);//清频 delayNms(0x015); writeCmd(0x06);//游标右移 ,整体显示不动}void writeCmd(uchar cmd){ LCDEN = 0; while((readState() & 0x80) !=0); //判忙 LCDRS = 0; LCDRW = 0; NOP(); LCDEN = 1; P0 = cmd; NOP(); NOP(); LCDEN = 0;}void writeData(uchar dat){ LCDEN = 0; while((readState() & 0x80) !=0); LCDRS = 1; LCDRW = 0; NOP(); LCDEN = 1; P0 = dat; NOP(); NOP(); LCDEN = 0;}uchar readState(){ uchar dat; LCDEN = 0; LCDRS = 0; LCDRW = 1; NOP(); LCDEN = 1; dat = P0; NOP(); NOP(); LCDEN = 0; return dat;}void clearGDRAM(){ uchar i, j, k; writeCmd(0x34);//进入扩展指令集 就可以对GDRAM中的数据进行设定 k = 0x80; for(i = 0; i < 32; i++) { writeCmd(k++);//注意 writeCmd(0x80); for(j = 0; j < 16; j++ ) { writeData(0); writeData(0); } } writeCmd(0x30);//回到基本指令集}void drawPic(uchar *dat){ uchar i, j; writeCmd(0x34);//进入扩展指令集 就可以对GDRAM中的数据进行设定 for(i = 0; i < 32; i++) { writeCmd(0x80 + i);//注意 writeCmd(0x80); for(j = 0; j < 8; j++ ) { writeData(*dat++); writeData(*dat++); } } for( i = 0; i< 32; i++) { writeCmd(0x80 + i); writeCmd(0x88); for(j = 0; j< 8; j++) { writeData(*dat++); writeData(*dat++); } } writeCmd(0x36); writeCmd(0x30);//回到基本指令集 }void funcTest(){ writeCmd(0x34);//进入 补充指令集,不开绘图功能// writeCmd(0x04);//1 3反白// writeCmd(0x01);//进入待命模式// writeCmd(0x08);//睡眠模式 }void writeChar(uchar loc, uchar *dat){ uchar i = 0; writeCmd(loc); while(dat[i] != '\0') { writeData(dat[i++]); } }

转载于:https://www.cnblogs.com/zcmaker/archive/2012/11/23/2784512.html

你可能感兴趣的文章
[MODx] Build a CMP (Custom manager page) using MIGX in MODX 2.3 -- 1
查看>>
jQuery自动完成点击html元素
查看>>
[算法]基于分区最近点算法的二维平面
查看>>
webpack多页应用架构系列(七):开发环境、生产环境傻傻分不清楚?
查看>>
笨办法学C 练习1:启用编译器
查看>>
树的总结--树的性质(树的深度) leetcode
查看>>
nagios短信报警(飞信fetion20080522004-linrh4)
查看>>
【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!...
查看>>
linux 将大文件分成小文件
查看>>
CCNA- 距离矢量路由协议学习
查看>>
企业实践用户邮箱导入/导出(第2部分)
查看>>
我的友情链接
查看>>
如何学习Linux命令-初级篇
查看>>
从Oracle Public Yum为Oracle Linux建立本地的Yum源
查看>>
在 SELECT 查询中使用表表达式
查看>>
静态路由和默认路由
查看>>
谈一谈Spring-Mybatis在多数据源配置上的坑
查看>>
【精益生产】车间现场管理的八大浪费
查看>>
关于阿里开发者招聘节 |这5道笔试真题 你会吗!???
查看>>
C#的异常处理机制
查看>>