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命令 * *-------------《嵌入式应用技术基础教程》---------
2、/ //[以下为子程序源代码] //[头文件] #include "GP32C.h" //包含头文件 #define LcdData PTB //Lcd显示数据传送口 #define LcdData_D DDRB //数据口方向寄存器 #define LcdCtrl PTC //Lcd控制信号传送口 #define LcdCtrl_D DDRC //控制口方向寄存器 #define LcdRS 0 //Lcd寄存器选择信号PTC0 #define LcdRW 1
3、 //读写信号接PTC1 #define LcdE 2 //Lcd使能信号接PTC2 //内部调用子程序 void Lcd_Command(unsigned char cmd); //命令执行子程序 void LcdInit(void); //Lcd初始化子程序 /*LcdShow:在HD44780显示屏上显示数据--------------------* *功能描述:在HD44780显示屏上显示str中的32个数据 * *参 数:str:待显示数组
4、 *
*返 回:无 *
*------------------以上为子程序说明-------------------*/
void lcdshow(unsigned char str[])
{
unsigned char i;
LcdInit(); //调用Lcd初始化子程序
//显示第1行16个字符
LcdCtrl&=~(1< 5、~(1< 6、
Lcd_Command(0b11000000); //后7位为DDRAM地址0x40
LcdCtrl|=1< 7、 *
*返 回:无 *
*-----------------------------------------------------*/
void LcdInit(void)
{
unsigned char i;
LcdData_D=0b11111111; //数据口为输出
LcdCtrl_D|=(1< 8、1< 9、0;i<250;i++); //延时>1.6ms
for(i=0;i<250;i++);
Lcd_Command(0b00010100); //光标右移一个字符位,AC自动加1
Lcd_Command(0b00001100); //开显示,关光标显示,不闪烁
}
/*Lcd_Command:执行给定的cmd命令------------------------*
*功 能:执行给定的cmd命令,且延时 *
*参 数:cmd:待执行的命令 10、 *
*返 回:无 *
*-----------------------------------------------------*/
void Lcd_Command(unsigned char cmd)
{
unsigned char i;
for (i=0;i<20;i++); //等待>40us
LcdData=cmd; //把指令码送到Lcd数据传送口
LcdCtrl|=(1< 11、 //Lcd开始接收数据
asm("NOP");
asm("NOP");
asm("NOP");
LcdCtrl&=~(1< 12、 *
*硬件连接: 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个字符时显示,重复此功能 *
*----------《嵌入式应用技术基础教程》教学实例---------*/
/*[头文件]*/
#include "SCI.h" //串行通信子程序头文件 13、
#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 data[32];
SCIInit(); //调串行口初始化子程序
lcdshow((unsigned char *)DispalyInit);
//程序总循环入口
while(1)
{
//接收PC机发送的32个数据,并存放到data数组中
if (SCIReN(32,data)==0)
//调用显示子程序把字符串送LCD显示
lcdshow((unsigned char *)data);
}
}






