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

📄 clcd.c

📁 51单片机用c语言实例 包括ad
💻 C
字号:
/*******************************************************
 * 文件名: LCD.C
 * 功能描述: 液晶控制实验
 *     显示"唐都科教仪器公司欢迎您!", 滚屏一周
 *******************************************************/

#include "SST89x5x4.h"
#include "lcd.h"
sbit RW = P1^0;							//读写控制
sbit RS = P1^1;							//数据, 命令切换
sbit CS2 = P1^2;						//控制器2片选
sbit CS1 = P1^3;						//控制器1片选
sbit E  = P1^4;							//使能信号
sbit LT = P1^5;							//背景灯控制
void delay(char time);

void Query(char chip);					//状态查询
void Clear();							//清屏
void writehz(char xadd,char yadd,char chip,char* hz);

char Wdata;
char xadd;								//X地址
char yadd;								//Y地址

void SendMCmd(unsigned char cmd)		//向控制器1发送命令
{
	Query(1); delay(1);					//查询忙状态
	RS = RW = CS1 = 0;					//控制写入命令
	P0 = cmd;
	E = 0; E = 1; E = 0; CS1 = 1;
}
void SendSCmd(unsigned char cmd)		//向控制器2发送命令
{
	Query(2); delay(1);
	RS = RW = CS2 = 0;
	P0 = cmd;
	E = 0; E = 1; E = 0; CS2 = 1;
}
void SendMData(unsigned char dat)		//向控制器1写数据
{
	Query(1); delay(1);
	RS = 1; RW = 0; CS1 = 0;
    P0 = dat;
	E = 0; E=1; E=0; CS1 = 1;
}
void SendSData(unsigned char dat)		//向控制器2写数据
{
	Query(2); delay(1);
	RS = 1; RW = 0; CS2 = 0;
	P0 = dat;
	E=0; E=1; E=0; CS2 = 1;
}
void Query(char chip)					//状态查询,chip指出控制器号
{										//chip=1为控制器1
	unsigned char xdata statu, count = 100;
	RS = 0; RW = 1;
	if(chip == 1)	CS1 = 0;
	else CS2 = 0;
	do
	{
		E = 1; statu = P0; E = 0;
		if((statu&0x80)!=0x80) break;
	}while(count--);
	if(chip == 1)	CS1 = 1;
	else CS2 = 1;
}

void Clear()							//清除显示屏
{
	unsigned char i, j;
	for(i=0; i<8; i++)
	{
		xadd = 0xb8+i; yadd = 0x40;
		SendMCmd(xadd); SendSCmd(xadd);	//设置X,Y地址
		SendMCmd(yadd); SendSCmd(yadd);
		for(j=0; j<64; j++)
		{
			SendMData(0x00); SendSData(0x00);	//为所以RAM写00
		}
	}
}
void writehz(char xadd,char yadd,char chip,char* hz)
{                                       //写汉字子程序 16*16
	int x,y;
	if(chip==0x01)						//为控制器1
	{
		SendMCmd(xadd); SendMCmd(yadd);

		for(x=0;x<2;x++)				//写入汉字字模
		{
			for(y=0;y<16;y++)
			{
				Wdata = hz[y+(x*16)];
				SendMData(Wdata);
			}	
			xadd++;
			SendMCmd(xadd); SendMCmd(yadd);
		}
	}
	else								//为控制器2
	{
		SendSCmd(xadd); SendSCmd(yadd);

		for(x=0;x<2;x++)				//写入汉字字模
		{
			for(y=0;y<16;y++)
			{
				Wdata = hz[y+(x*16)];
				SendSData(Wdata);
			}	
			xadd++;
			SendSCmd(xadd); SendSCmd(yadd);
		}
	}
}

void main(void)
{
	unsigned char x; unsigned int y;
	LT = 0;								//关闭背景灯
	SendMCmd(0x3f); SendSCmd(0x3f);		//打开显示
	SendMCmd(0xc0); SendSCmd(0xc0);		//设置起始行
	Clear();
	writehz(0xba,0x40,1,tang);			//显示"唐"
	writehz(0xba,0x50,1,du);			//都
	writehz(0xba,0x60,1,ke);			//科
	writehz(0xba,0x70,1,jiao);			//教
	writehz(0xba,0x40,2,yi);			//仪
	writehz(0xba,0x50,2,qi);			//器
	writehz(0xba,0x60,2,gong);			//公
	writehz(0xba,0x70,2,si);			//司
	writehz(0xbc,0x60,1,huan);			//欢
	writehz(0xbc,0x70,1,ying);			//迎
	writehz(0xbc,0x40,2,nin);			//您
	writehz(0xbc,0x50,2,gantan);		//!

	for(x=0xc1;x<0xFF;x++)				//滚屏一周
	{
		SendMCmd(x); SendSCmd(x);
		for(y=0; y<0x1000; y++) delay(0xff);
	}
	while(1);
}

void delay(char time)
{
	char i;
	char j;
	for(i=0;i<=time;i++)
	{
		for(j=0;j<=0x10;j++);
	}
}

⌨️ 快捷键说明

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