图形液晶显示实验

图形液晶显示实验
一. 实验目的
了解图形液晶模块(单色)的控制方法,实现简单图形显示算法。
二. 实验设备及器件
ibm pc 机 一台
dp-51proc 单片机综合仿真实验仪 一台
三. 实验内容
控制图形液晶模块显示ascii 字符,画直线。
四. 实验要求
掌握字符/图形在图形液晶上显示的理论知识,并能够编写相关操作函数。
五. 实验步骤
1. 将a2 区的a0~a2 分别连接到b3 区的a0~a2。
2. 将a2 区的p10 连接到b3 区的rst。
3. 将a3 区的/y0 连接到b3 区的/cs。
4. 将a2 区的a15~a10 分别连接到a3 区的相应接线柱,连接关系如下:
a15 --- /g2b
a14 --- /g2a
a13 --- g1
a12 --- c
a11 --- b
a10 --- a
5. 在b3 区的j92 插入图形液晶模块(单色,128×64 点)。
6. 将b3 区的jp21 短接,a3 区的jp4 短接。
7. 编写代码,使用tksmonitor51 仿真器进行仿真调试。
六. 实验预习要求
阅读本书的2.8.9 节内容,理解本实验仪硬件结构,分析实验连线分配给lcm 的
地址,编写实验程序,编译连接后使用tksmonitor51 仿真器进行仿真调试。
七. 实验参考程序
/*************************************************************
* 文件名:lcm_drive.c
* 功能:图形液晶tg12864b-2 驱动程序。
* 说明:在lcm_drive.h 文件中定义了lcm 操作地址,左半屏的写命令操作地址为
* 2004h,写数
*据操作地址为2005h,右半屏的写命令操作地址为2000h,写数据操作地址为2001h;
*于graphics.c 中使用了disp_buf 作为作图缓冲区,所以lcm_writebyte()、lcm_
*dispfill()均要更新disp_buf。
*************************************************************/
#include config.h
/* lcm 复位控制脚定义 */
sbit lcm_rst = p1^0;
/*************************************************************
* 名称:lcm_wr1command()
* 功能:写命令子程序,所选屏为左半屏(cs1)。
* 入口参数:command 要写入lcm 的命令字
*************************************************************/
#define lcm_wr1command(command) lcmcs1w_com = command
/*************************************************************
* 名称:lcm_wr2command()
* 功能:写命令子程序,所选屏为右半屏(cs2)。
* 入口参数:command 要写入lcm 的命令字
*************************************************************/
#define lcm_wr2command(command) lcmcs2w_com = command
/*************************************************************
* 名称:lcm_wr1data()
* 功能:写数据子程序,所选屏为左半屏(cs1)。
* 入口参数:wrdata 要写入lcm 的数据
*************************************************************/
#define lcm_wr1data(wrdata) lcmcs1w_dat = wrdata
/*************************************************************
* 名称:lcm_wr2data()
* 功能:写数据子程序,所选屏为右半屏(cs2)。
* 入口参数:wrdata 要写入lcm 的数据
*************************************************************/
#define lcm_wr2data(wrdata) lcmcs2w_dat = wrdata
/*************************************************************
* 名称:lcm_dispini()
* 功能:lcm 显示初始化。使能显示,设置显示起始行为0 并清屏。
* 入口参数:无
* 出口参数:无
*************************************************************/
void lcm_dispini(void)
{ uint16 i;
lcm_rst = 0; // 复位驱动芯片
for(i=0; i>3;
disp_buf[y][x] = wrdata;
if(x<64) // 选择液晶控制芯片(即cs1--控制前64 个点,cs2--控制后64 个点)
{ lcm_wr1command(lcm_addrstrx+x); // 设置当前列地址,即x 坐标
lcm_wr1command(lcm_addrstry+y); // 设置当前页地址,即y 坐标
for(x=0; x<5; x++); // 短延时
lcm_wr1data(wrdata);
}
else
{ x = x-64; // 调整x 变量值
lcm_wr2command(lcm_addrstrx+x);
lcm_wr2command(lcm_addrstry+y);
for(x=0; x<5; x++);
lcm_wr2data(wrdata);
}
}
/*************************************************************
* 名称:lcm_dispfill()
* 功能:向显示屏填充数据
* 入口参数:filldata 要写入lcm 的填充数据
* 出口参数:无
* 说明:会更新disp_buf 相应存储单元
*************************************************************/
void lcm_dispfill(uint8 filldata)
{ uint8 x, y;
lcm_wr1command(lcm_startrow); // 设置显示起始行为0
lcm_wr2command(lcm_startrow);
for(y=0; y<8; y++)
{ lcm_wr1command(lcm_addrstry+y); // 设置页(行)地址
lcm_wr1command(lcm_addrstrx); // 设置列地址
lcm_wr2command(lcm_addrstry+y);
lcm_wr2command(lcm_addrstrx);
for(x=0; x0; delayno--)
{ for(i=0; i<1000; i++);
}
}
/*************************************************************
* 名称:main()
* 功能:主函数,初始化图形液晶模块,在屏幕上的随机位置显示随机数字(0--9),
* 然后调用画直线函数以屏幕中心为中点画对称的直线,最后显示一个简单的窗口。
*************************************************************/
void main(void)
{ uint8 i;
uint8 bak;
while(1)
{ lcm_dispini(); // 初始化图形液晶模块
/* 提示加载程序,即显示load... */
lcm_dispstr(6, 3, load );
for(i=0; i<5; i++)
{ lcm_dispchar(6, i+7, '.');
delays(10);
}
/* 数字显示演示 */
srand(168); // 初始化随机种子
lcm_dispclr();
for(i=0; i<250; i++)
{ uint8 x, y;
x = rand()&0x07; // 取得随机显示位置
y = rand()&0x0f;
bak = rand()%10 + '0'; // 取得随机显示数字'0'--'9'
lcm_dispchar(x, y, bak);
delays(2);
}
#define center_x 64
#define center_y 32
/* 直线演示。由于直线要基于中心点,具有对称性,所以只要随机取出第一个点,
即可计算出总线对称点,两点便可确定一条直线。这样做达到不同直线不同角度
的目的。 */
lcm_dispclr();
for(i=0; i<250; i++)
{ uint8 x0, y0;
uint8 x1, y1;
/* 取第一个点坐标 */
x0 = rand()&0x7f; // 取得随机起点
y0 = rand()&0x3f;
/* 计算出中心对称点 */
x1 = 2*center_x - x0;
y1 = 2*center_y - y0;
line(x0, y0, x1, y1, 1);
delays(5);
}
/* 画窗口演示 */
lcm_dispclr();
rectangle(0, 0, 127, 63, 1); // 显示窗口
hline(0, 10, 127, 1);
rline(10, 0, 10, 1);
line(0, 0, 10, 10, 1);
line(10, 0, 0, 10, 1);
rline(120, 10, 63, 1); // 显示滚动条
rectanglefill(120, 20, 127, 30, 1);
lcm_dispstr(4, 4, dp-51proc ); // 在窗口中显示内容
lcm_dispstr(5, 1, www.zlgmcu.com );
delays(1500);
} // end of while(1) ...
}
八. 实验思考题
(1) 如何进行汉字显示?
(提示:汉字是由固定点阵格式组成的图形,字模一般有16×16 和24×24 等)
(2) 如何实现动画显示?
(提示:不断循环操作--显示图像,短延时,擦除原图像,显示新图像……)

德州仪器推出一款无缝转换降压升压转换器
法拉第加入MOBI区块链联盟 欲建全新数字移动生态
FPC在产品的结构设计和可靠性设计等方面的优势
Cypress新型演示工具,帮助展示PSoC 3架构的精确模
高通芯片大涨价,国内厂商不得不加快自主研发芯片进程
图形液晶显示实验
消防应急照明和疏散指示系统的设计与应用
预计:2021年第一季度全球智能手机出货量将达到3.4亿部
小米美图官宣小仙女 采用后置浴霸式三摄
如何打造中国IC产业发展的EDA供应链
小米MIX2设计方案曝光 屏占比预计提升到93%!
两会“部长通道”在人民大会堂举行,看看部长们都说了啥?
中比新能源宣布收到菲斯曼2024年价值约1.17亿欧元的锂电池订单
创维推出全新的酷开K7D全面屏护眼电视 能满足用户对电视的全部想象
LED广告牌制作最简单的教程
SCHMERSAL施迈赛限位开关的产品概述
兰州2.74吨过期电池将固化填
模拟电路网络课件 第三十二节:负反馈放大电路增益的表达式
Redmi Note 9 Pro工程机亮相,居中打孔+浴霸四摄
ds18b20测温电路图详解