天津城建大学
嵌入式系统及应用A实验报告
实验十二 点阵字符液晶显示实验
学专指成
生业导、
姓班教
名 级 师 绩
计算机与信息工程学院
实验十二 点阵字符液晶显示实验
一、 任务及要求
任务:编写程序控制LCD1602点阵字符液晶模块,使字符分两行显示,实现逐 字符显示“Welcome to MCU51 LCD Learning!”字样并以从左向右移动的方式显示 该字符串的效果。
要求:通过实验,掌握点阵字符液晶原理;熟悉单片机对点阵字符液晶编程方法。
二、 实验源程序
#include #define uchar unsigned char #define uint unsigned int #define LCDDataBus P2 //定义LCD数据总线 sbit RS = P1^2; sbit RW = P1^3; sbit EP = P1^4; // 延时函数 void delay(uchar k) { } // 写数据函数 void LCDWriteData(uchar Data) { } // 写指令函数 void LCDWriteCmd(uchar Cmd) { RS=0; //传输指令 RW=0; RS=1; //传输数据 RW=0; //写 LCDDataBus=Data; EP=1; delay(1); EP=0; unsigned char i; for(i = 121; i > 0; i--); for(; k > 0; k--) } LCDDataBus=Cmd; EP=1; delay(1); EP=0; // ================坐标转换函数 ============================ // 将坐标转换为LCD的坐标 // // row = 0x00在第一行显示,row = 0x01在第二行显示 column = 0~15在LCD上的可见域显示 // ========================================================= void LCDPosition(uchar row,uchar column) { } // ==============在指定位置写数据函数======================= // row指定行,column指定列位置,c为待写入的数据。 // ========================================================= void writeChar(uchar row,uchar column, char c) { } // ============写字符串函数================================ // row表示行,column1表示第一行起始地址,column2表示下一行起始地址,均从1开始。 // ========================================================= void writeString(uchar row,uchar column1,uchar column2, char *s) { char i; if((*s)=='\\0') { if((*(s+i)) == '\\0') return; for(i = 0; ; i++) LCDPosition(row,column); LCDWriteData(c); delay(500); LCDWriteCmd(position); delay(10); char position; if(row == 1) position = 0x80 + column - 1; position = 0xC0 + column - 1; else if(row == 2) } } { } break; if(i <= 15) writeChar(row,column1,*(s+i)); delay(2); column1++; if(i > 15 && i< 32) { } writeChar(row + 1,column2,*(s+i)); delay(2); column2++; // 移动字符串函数 void moveString(char *s) { } // 液晶初始化函数 void LCDInit(void) { LCDWriteCmd(0x38); //设置16*2显示,5*7点阵,8位数据接口 delay(30); LCDWriteCmd(0x01);//清屏 delay(30); LCDWriteCmd(0x06);//地址加一,整屏右移 delay(30); LCDWriteCmd(0x0f);//开显示,光标闪烁,显示光标 } // 主函数 void main(void) { LCDInit(); uchar i; writeString(1,25,25,s); for(i = 16; i > 0; i--) { } LCDWriteCmd(0x18); delay(900); //屏幕移动 } writeString(1,1,1,\"Welcome to MCU51 LCD Learning!\"); delay(100); moveString(\"Welcome to MCU51 LCD Learning!\"); while(1); 三、 仿真环境搭建 四、 实验总结 掌握点阵字符液晶原理;熟悉单片机对点阵字符液晶编程方法,学会了LCD的现实原理与编程技巧。 因篇幅问题不能全部显示,请点此查看更多更全内容