实例42-LCD显示图片实例

1970-01-01 08:00

【实例42】LCD显示图片实例

/*--------------- 文件名称: 122X32_test.C

功能 :在122X32的点阵液晶屏上显示图片

说明 :图片事先使用img2lcd等类似程序转换成图片数组文件 ----------------*/

/*-------------------------------------------------------------------------------------------------------- D0-----P0.0 D4-----P0.4 RW-------P1.1 A0--------P1.0 D1-----P0.1 D5-----P0.5 RS-------P2.1 V0接到GND D2-----P0.2 D6-----P0.6 E1-------P1.3 D3-----P0.3 D7-----P0.7 E2-------P1.2

---------------------------------------------------------------------------------------------------------*/ #include

#define uchar unsigned char #define uint unsigned int

#define E1 P1_3 //块1 左边使能 #define E2 P1_2 //块2 右边使能 #define RW P1_1

#define A0 P1_0 //A0为1时是数据,0时为指令数据 #define DATA P0 //数据

extern unsigned char code Bmp02[]={0x00,0x00,0x00,0x00,......};//图形代码数组 extern unsigned char code Bmp01[]={0x00,0x00,0x00,0x00,......};//图形代码数组 /******************************** 函数名称: void delay(unsigned int i) 功能 :延时函数

说明 :采用软延时方案实现延时 入口参数:i为延时常数,i越大延时越长 返回值 :无

********************************/ void delay(unsigned int i) {

unsigned char k=200; while(i>0) { i--; }

while(k>1)k--; }

/******************************** 函数名称: void OUTMD(unsigned char i) 功能 :发送左页数据 说明 :无

入口参数:i为要发送的数据 返回值 :无

********************************/ void OUTMD(unsigned char i) {

A0=1; //写数据 E1=1; DATA=i; E1=0; }

/******************************** 函数名称: void OUTMI(unsigned char i) 功能 :发送左页命令 说明 :无

入口参数:i为要发送的命令码 返回值 :无

********************************/ void OUTMI(unsigned char i) {

A0=0; //写指令 E1=1; DATA=i; E1=0; }

/******************************** 函数名称: void OUTSD(unsigned char i) 功能 :发送右页数据 说明 :无

入口参数:i为要发送的数据 返回值 :无

********************************/ void OUTSD(unsigned char i) {

A0=1; //写数据 E2=1; DATA=i; E2=0; }

/******************************** 函数名称: void OUTSI(unsigned char i) 功能 :发送右页命令 说明 :无

入口参数:i为要发送的命令码 返回值 :无

********************************/ void OUTSI(unsigned char i)

{

A0=0; //写指令 E2=1; DATA=i; E2=0; }

/******************************** 函数名称: void lcdini(void) 功能 :初始化液晶屏

说明 :液晶屏被复位,并初始化到图形模式 入口参数:无 返回值 :无

********************************/ void lcdini(void) { RW=0; OUTMI(0XE2);

OUTSI(0XE2); //复位 OUTMI(0XAE);

OUTSI(0XAE); //POWER SAVE OUTMI(0XA4);

OUTSI(0XA4); //动态驱动 OUTMI(0XA9);

OUTSI(0XA9); //1/32占空比 OUTMI(0XA0);

OUTSI(0XA0); //时钟线输出 OUTMI(0XEE);

OUTSI(0XEE); //写模式 OUTMI(0X00); OUTMI(0XC0); OUTSI(0X00); OUTSI(0XC0); OUTMI(0XAF); OUTSI(0XAF); }

/********************************

函数名称: void SetPage(uchar page0,uchar page1) 功能 :同时设置左右页面地址0-3页

说明 :对液晶屏操作时,要先设置页面地址,不影响当前液晶屏的显示内容 入口参数:page0为左页地址,page1为右页地址 返回值 :无

********************************/ void SetPage(uchar page0,uchar page1) {

OUTMI(0xB8|page1); OUTSI(0xB8|page0); }

/********************************

函数名称: void SetAddress(uchar address0,uchar address1) 功能 :设置左右屏列地址0-121 说明 :设置要操作的左右屏地址

入口参数:address0为左页地址,address1为右页地址 返回值 :无

********************************/ void SetAddress(uchar address0,uchar address1) {

OUTMI(address1); OUTSI(address0); }

/******************************** 函数名称: void PutCharR(uchar ch) 功能 :向右屏当前地址画一个字节8个点 说明 :无

入口参数:ch为要显示的数据 返回值 :无

********************************/ void PutCharR(uchar ch) {

OUTSD(ch); }

/******************************** 函数名称: void PutCharL(uchar ch) 功能 :向右屏当前地址画一个字节8个点 说明 :无

入口参数:ch为要显示的数据 返回值 :无

********************************/ void PutCharL(uchar ch) {

OUTMD(ch); }

/******************************** 函数名称: void clrscr(void) 功能 :清屏 说明 :无 入口参数:无 返回值 :无

********************************/

void clrscr(void) {

uchar i; uchar page;

for (page=0;page<4;page++) {

SetPage(page,page); SetAddress(0,0); for (i=0;i<61;i++) {

PutCharR(0); PutCharL(0); } } }

/********************************

函数名称: void DrawBmp1(uchar x_add, uchar width,uchar *bmp) 功能 :在屏幕显示图片

说明 :图片数组可采用字模软件生成

入口参数:x_add为要显示的横坐标,width为要显示的图片的宽度,*bmp为指向图片数组的指针 返回值 :无

********************************/

void DrawBmp1(uchar x_add, uchar width,uchar *bmp) {

uchar x, address, i=0; //address 表示显存的物理地址 uchar page=0; //page表示上下两页 uchar window=0; //window表示左右两页 for (x=width;x>1;x--) {

if (x_add>60) {

window=1; address=x_adda; } else

address=x_add; SetPage(0,0);

SetAddress(address,address); if(window==1) PutCharR(bmp[i]); else

PutCharL(bmp[i]); SetPage(1,1);

SetAddress(address,address);

if(window==1)

PutCharR(bmp[i+width]); else

PutCharL(bmp[i+width]); SetPage(2,2);

SetAddress(address,address); if(window==1)

PutCharR(bmp[i+width+width]); else

PutCharL(bmp[i+width+width]); SetPage(3,3);

SetAddress(address,address); if(window==1)

PutCharR(bmp[i+width+width+width]); else

PutCharL(bmp[i+width+width+width]); i++; x_add++; } }

/******************************** 函数名称: void delay1s(unsigned char i) 功能 :一秒延时 说明 :无

入口参数:i为延时参数,数值越大,延时越长 返回值 :无

********************************/ void delay1s(unsigned char i) {

while(i>1) { i--;

delay(65530); } } //主函数 void main() {

lcdini(); //复位初始化液晶屏 clrscr(); //清屏

while(1) //交替显示Bmp01和Bmp02 {

delay1s(3);

clrscr(); //

DrawBmp1(10,101,Bmp01); // delay1s(8); clrscr(); //

DrawBmp1(0,122,Bmp02); // delay1s(8); } }


实例42-LCD显示图片实例.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中历史比较型选择题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: