|
/*文件描述:本文件包含了用HD44780显示相关的3个子程序 * * 1. LCDShow:在LCD上显示32个字符 * * 2. LcdInit:初始化Lcd * * 3. Lcd_Command:执行给定的cmd命令 * *-------------《嵌入式应用技术基础教程》--------------*/ //[以下为子程序源代码] //[头文件] #i nclude "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 //读写信号接PTC1 #define LcdE 2 //Lcd使能信号接PTC2 //内部调用子程序 void Lcd_Command(unsigned char cmd); //命令执行子程序 void LcdInit(void); //Lcd初始化子程序 /*LcdShow:在HD44780显示屏上显示数据--------------------* *功能描述:在HD44780显示屏上显示str中的32个数据 * *参 数:str:待显示数组 * *返 回:无 * *------------------以上为子程序说明-------------------*/ void lcdshow(unsigned char str[]) { unsigned char i; LcdInit(); //调用Lcd初始化子程序 //显示第1行16个字符 LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令 LcdCtrl&=~(1<<LcdRW); Lcd_Command(0b10000000); //后7位为DDRAM地址0x00 LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中 LcdCtrl&=~(1<<LcdRW); for (i=0;i<16;i++) //逐个显示 Lcd_Command(str[i]); //显示第2行16个字符 LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令 LcdCtrl&=~(1<<LcdRW); Lcd_Command(0b11000000); //后7位为DDRAM地址0x40 LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中 LcdCtrl&=~(1<<LcdRW); for (i=16;i<32;i++) //逐个显示 Lcd_Command(str[i]); } /*LcdInit:初始化Lcd------------------------------------* *功 能:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1 * *参 数:无 * *返 回:无 * *-----------------------------------------------------*/ void LcdInit(void) { unsigned char i; LcdData_D=0b11111111; //数据口为输出 LcdCtrl_D|=(1<<LcdE); //控制口低三位为输出 LcdCtrl_D|=(1<<LcdRS); LcdCtrl_D|=(1<<LcdRW); LcdCtrl|=(1<<LcdE); //E=1 LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令 LcdCtrl&=~(1<<LcdRW); Lcd_Command(0b00111000); //8位数据接口,2行,5*7点阵 Lcd_Command(0b00001000); //关显示,关光标显示,不闪烁 Lcd_Command(0b00000001); //清屏 for(i=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:待执行的命令 * *返 回:无 * *-----------------------------------------------------*/ void Lcd_Command(unsigned char cmd) { unsigned char i; for (i=0;i<20;i++); //等待>40us LcdData=cmd; //把指令码送到Lcd数据传送口 LcdCtrl|=(1<<LcdE); //Lcd开始接收数据 asm("NOP"); asm("NOP"); asm("NOP"); LcdCtrl&=~(1<<LcdE); //Lcd结束接收数据 for (i=0;i<20;i++); //等待>40us } |