⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 51系列单片机LCD液晶显示程序
💻 C
字号:
/************************************************************
               程序功能概述
利用uPSD3251的P4端口,采用并口方式控制实验开发系统上的LCD,
使其依次实现:
1.第0行的显示内容"uPSD32XX DEV-KIT"从右边滚动输入;
2.0.5s后,第1行的显示内容"P&S-ECNU-031025"在左边以右移方式输入;
3.静态显示2s后,画面向左滚动循环一周;
4.静态显示2s后,画面向右滚动循环一周;
5.静态显示2s后,清屏,返回1重复显示过程
连线图: *LCD----uPSD3251* *LCD---uPSD3251*
        *DB4----P4.4*     *RS----P4.0*
        *DB5----P4.5*     *RW----P4.1*
        *DB6----P4.6*     *E-----P4.2* 
        *DB7----P4.7* 
晶振频率为11.0592MHz
*************************************************************/
#include <upsd.h>
#define	uchar	unsigned char
#define uint	unsigned int

sbit 	E=P4^2;			// LCD使能信号
uchar 	BUSYFLAG;

/*软件延时,长度由形参count决定,单位ms*/
void delay_ms(uint count)
{
	uint i,j;
	for(i=0;i<count;i++)
		for(j=0;j<113;j++);		//1ms延时
}
/*检测LCD控制器状态,等待LCD控制器状态空闲*/
void WaitIdle(void)
{
	do
	{
	   P4 = 0xf2;// P4.4~P4.7置位,准备读;RS=0 RW=1,读指令寄存器
	   E = 1;	   
	   BUSYFLAG=P4&0x80;
	   E=0;
	   E=1;
	   E=0;
	}		
	while(BUSYFLAG);
}
/*****向LCD写入指令代码*****/
void WriteCom(uchar com)
{
	WaitIdle();
	P4=com&0xf0;		// RS=0,RW=0,写指令寄存器;写入指令代码的高四位
	E=1;
	E=0;
	P4=com<<4;			// 写入指令代码的低四位
	E=1;
	E=0;
}
/*****向LCD写入数据*****/
void WriteDat(uchar dat)
{	
	WaitIdle();
	P4=dat&0xf0|0x01;	// RS=1,RW=0,写数据寄存器;写入数据的高四位
	E=1;
	E=0;
	P4=(dat<<4)|0x01;	// 写入数据的低四位
	E=1;
	E=0;
}
/*LCD软件复位,初始化工作方式为4位总线*/
void lcd_init(void)
{
	P4 = 0x30;	E = 1;	E = 0;	delay_ms(10);
	P4 = 0x30;	E = 1;	E = 0;	delay_ms(10);
	P4 = 0X20;	E = 1; 	E = 0;
	WriteCom(0x28);			// 设置工作方式为4位总线
	WriteCom(0x01);			// 清屏
	WriteCom(0x0C);			// 设置显示方式:画面显示,光标不显示不闪烁
}
/*向LCD写入一行数据,每200ms写入一个*/
void Enter(uchar inputmode,uchar addr,uchar *tabptr)
{
	uchar i;
	WriteCom(inputmode);	// 设置输入方式	
	WriteCom(addr);			// 设置DDRAM地址
	for(i=0; i<16; i++)
	{
		WriteDat(*tabptr++);	// 写数据	
		delay_ms(200);
	}
}
/*滚动演示程序,每200ms滚动1个字符位*/
/*形参scrollmode决定滚动模式,len决定滚动字符位数*/
void scroll(uchar scrollmode,uchar len)
{
	uchar i;
	for(i=0; i<len; i++)
	{
		WriteCom(scrollmode);// 设置画面滚动1个字符位
		delay_ms(200);
	}
}	
main()
{	
	WDKEY=0x55;	
	lcd_init();			
	while(1)
	{
		Enter(0x07,0x90,"uPSD32XX DEV-KIT");// LCD上第0行的内容从右边向左滚动输入
		delay_ms(500);
		Enter(0x06,0xd0,"P&S-ECNU-031025 ");// 第1行的内容从左边右移输入
		delay_ms(2000);			//静态显示2s
		scroll(0x18,40);		//画面滚动左移40个字符位
		delay_ms(2000);
		scroll(0x1c,40);		//画面滚动右移40个字符位
		delay_ms(2000);	   
	   	WriteCom(0x01);			// 清屏
		delay_ms(2000);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -