1、13.3.2 LCD编程C语言程序例(1)LCD编程C语言子函数 LCD编程汇编子函数(LcdShow.c)/*文件描述:本文件包含了用HD44780显示相关的3个子程序 * 1. LCDShow:在LCD上显示32个字符 * 2. LcdInit:初始化Lcd * 3. Lcd_Command:执行给定的cmd命令 *-嵌入式应用技术基础教程-*/以下为子程序源代码/头文件#include GP32C.h /包含头文件#define LcdData PTB /Lcd显示数据传送口#define LcdData_D DDRB /数据口方向寄存器#define LcdCtrl PTC /Lcd控
2、制信号传送口#define LcdCtrl_D DDRC /控制口方向寄存器#define LcdRS 0 /Lcd寄存器选择信号PTC0#define LcdRW 1 /读写信号接PTC1#define LcdE 2 /Lcd使能信号接PTC2/内部调用子程序void Lcd_Command(unsigned char cmd); /命令执行子程序void LcdInit(void); /Lcd初始化子程序/*LcdShow:在HD44780显示屏上显示数据-*功能描述:在HD44780显示屏上显示str中的32个数据 *参 数:str:待显示数组 *返 回:无 *-以上为子程序说明-*/v
3、oid lcdshow(unsigned char str) unsigned char i; LcdInit(); /调用Lcd初始化子程序 /显示第1行16个字符 LcdCtrl&=(1LcdRS); /RS、R/W=00,写指令LcdCtrl&=(1LcdRW); Lcd_Command(0b10000000); /后7位为DDRAM地址0x00 LcdCtrl|=1LcdRS; /RS、R/W=10,写数据到DDRAM中 LcdCtrl&=(1LcdRW); for (i=0;i16;i+) /逐个显示 Lcd_Command(stri); /显示第2行16个字符 LcdCtrl&=(
4、1LcdRS); /RS、R/W=00,写指令LcdCtrl&=(1LcdRW); Lcd_Command(0b11000000); /后7位为DDRAM地址0x40 LcdCtrl|=1LcdRS; /RS、R/W=10,写数据到DDRAM中LcdCtrl&=(1LcdRW); for (i=16;i32;i+) /逐个显示 Lcd_Command(stri); /*LcdInit:初始化Lcd-*功 能:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1 *参 数:无 *返 回:无 *-*/void LcdInit(void) unsigned char i; LcdData
5、_D=0b11111111; /数据口为输出 LcdCtrl_D|=(1LcdE); /控制口低三位为输出 LcdCtrl_D|=(1LcdRS); LcdCtrl_D|=(1LcdRW); LcdCtrl|=(1LcdE); /E=1 LcdCtrl&=(1LcdRS); /RS、R/W=00,写指令 LcdCtrl&=(1LcdRW); Lcd_Command(0b00111000); /8位数据接口,2行,5*7点阵 Lcd_Command(0b00001000); /关显示,关光标显示,不闪烁 Lcd_Command(0b00000001); /清屏 for(i=0;i1.6ms fo
6、r(i=0;i250;i+); Lcd_Command(0b00010100); /光标右移一个字符位,AC自动加1 Lcd_Command(0b00001100); /开显示,关光标显示,不闪烁 /*Lcd_Command:执行给定的cmd命令-*功 能:执行给定的cmd命令,且延时 *参 数:cmd:待执行的命令 *返 回:无 *-*/void Lcd_Command(unsigned char cmd) unsigned char i; for (i=0;i40us LcdData=cmd; /把指令码送到Lcd数据传送口 LcdCtrl|=(1LcdE); /Lcd开始接收数据 asm
7、(NOP); asm(NOP); asm(NOP); LcdCtrl&=(1LcdE); /Lcd结束接收数据 for (i=0;i40us (2)主函数 实例编号:C07 路径:CC07_ 液晶LCD显示(Lcd.prj)/*-*工 程 名:Lcd.prj *硬件连接: 1.LCD的DB0-7与MCU的B口的PTB0-7连接 * 2.LCD的RS,R/W,E与MCU的PTC0,PTC1,PTC2连接 *功能:1.初始显示:Wait Receiving. Soochow 2005.08 * 2.等待接收字符,当收到32个字符时显示,重复此功能 *-嵌入式应用技术基础教程教学实例-*/*头文件*
8、/#include SCI.h /串行通信子程序头文件#include GP32C.h /包含头文件/*函数声明*/extern void lcdshow(unsigned char *str);extern void SCIInit(void);/*主程序*/const unsigned char DispalyInit=Wait Receiving. Soochow 2005.08;void main(void) unsigned char data32; SCIInit(); /调串行口初始化子程序 lcdshow(unsigned char *)DispalyInit); /程序总循环入口while(1) /接收PC机发送的32个数据,并存放到data数组中 if (SCIReN(32,data)=0) /调用显示子程序把字符串送LCD显示 lcdshow(unsigned char *)data);