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

📄 lcd.c

📁 这是keic环境下编写的C语言源程序
💻 C
字号:
/*********************************************************************************************************
**				                             320240ALCD控制
**
**
**--------------当前版本信息----------------------------------------------------------------------------
** 文件名: lcd.c
** 创建人: 刘明宇
** 日 期: 2005年10月11日
** 描 述: LCD320240A控制的主文件
** 硬件连接
** 51           lcd
** P0~7-------->D0~7
** P2.7-------->cs
** P2.6-------->A0
** P1.0-------->Res
** wr  -------->wr
** rd  -------->rd
**
**--------------历史版本信息----------------------------------------------------------------------------
** 无
**------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include <REG52.H>
#include <stdio.h>
#include <INTRINS.H>
#include <ABSACC.H>
#include "lcd.h"
#include "disdata.h"





/*LCD initial parameters*/
/*
	在下面的数据里面,第四个0x27对应是显示的横向范围,8位除去
-------------------240128的SYSTEM SET 参数-------------------------------
unsigned char SYSTAB[8]={0x30,0x87,0x09,0x1d,0x64,0xa0,0x1e,0x00};

unsigned char SCRTAB[10]={0x00,0x00,0xa0,0x00,0x00,0xa0,0x00,0x80,0x00,0x00};

Uchar code ParaSysTable8[]= {
		             0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00		  		// P1-P8参数
		};
*/
BYTE code SYSTAB[8]={0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
//BYTE code SYSTAB[8]={0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
BYTE code SCRTAB[10]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};

/****************************************************************************
* 名称:main
* 功能:主函数
* 入口参数:无
* 出口参数:无
****************************************************************************/
void main(void)
{
	BYTE i;
	serial_init();
	Lcd_res=0;
	Lcd_res=1;
	test_serial();

	INITLCD();
	CLRSCREEN();
	FULLSCREEN();
	while(1)
	{
		sam1();
		delaylong(50000);
		CLRSCREEN();
		delaylong(10000);
		FULLSCREEN();
		delaylong(10000);
	}
	
}


/*************************SBUROUTINES OF LCD DRIVE**************************/

/****************************************************************************
* 名称:WLCDCOM
* 功能:写LCD控制命令
* 入口参数:com
* 出口参数:无
****************************************************************************/
void WLCDCOM(BYTE com ) 
//写LCD控制命令
{
	SEDWRCOM=com;
	_nop_();
}

/****************************************************************************
* 名称:WLCDDATA
* 功能:写LCD控制参数和显示字符数据
* 入口参数:ref
* 出口参数:无
****************************************************************************/
void WLCDDATA(BYTE ref ) 
//写LCD控制参数和显示字符数据
{
	SEDWRDAT=ref;
	_nop_();
}

/****************************************************************************
* 名称:CLRVRAM
* 功能:显示存储器清零
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CLRVRAM(void) 
//显示存储器清零
{
	WORD i,j;
	WLCDCOM(CSRRGT);
	WLCDCOM(CSRW);
	WLCDDATA(0x00);
	WLCDDATA(0x00);
	WLCDCOM(MWRITE);
	for(i=0;i<=0xff;i++)
	{
		for(j=0;j<=0xff;j++)
		{
			WLCDDATA(0x00);
		}
	}
}

/****************************************************************************
* 名称:CLRSCREEN
* 功能:清除显示屏幕
* 入口参数:无
* 出口参数:无
****************************************************************************/
void CLRSCREEN(void)
//清除显示屏幕
{
	WORD i,j;
	//BYTE a;
	WLCDCOM(CSRRGT);
	WLCDCOM(CSRW);
	WLCDDATA(0X00);
	WLCDDATA(0X00);
	WLCDCOM(MWRITE);
	/*
	for(i=0;i<0xa0;i++)
	{
		for(j=0;j<0x1e0;j++)
		{
			WLCDDATA(0x00);
		}
	}*/
	for(i=0;i<9600;i++)
	{
		WLCDDATA(0x00);
	}
}

/****************************************************************************
* 名称:WNUMBER
* 功能:显示0~9等10个数字
* 入口参数:...
* 出口参数:无
****************************************************************************/
void WNUMBER(BYTE x,BYTE y,BYTE (*p)[16],BYTE num )
//功能:显示0~9等10个数字,num为要显示的数字的值(16×8)
//x坐标寄存器(字节),y坐标寄存器(点行)
{ 
	WORD temp; 
	BYTE hi,lo;
	BYTE a,b,c;
	temp=y*AP;
	hi=HIBYTE(temp);
	lo=LOBYTE(temp);
	lo=x+lo;
	if(CY==1) {hi+=0x01;CY=0;}
	
	WLCDCOM(CSRDOWN);
	WLCDCOM(CSRW);
	WLCDDATA(lo);
	WLCDDATA(hi);
	WLCDCOM(MWRITE);
	for(c=0;c<16;c++)
	{
		WLCDDATA(*(*(p+num)+c));
	}
	lo=lo+0x01;
	if(CY==1) {hi+=0x01;CY=0;}
}

/****************************************************************************
* 名称:WBLOCK
* 功能:显示16×8点字符
* 入口参数:...
* 出口参数:无
****************************************************************************/
void WBLOCK(BYTE x,BYTE y,BYTE (*p)[16],BYTE num )
//功能:显示16×8点字符,num为要显示的字符块长度
//x坐标为低8位寄存器(字节),y坐标寄存器(点行)
{ 
	WORD temp;
	BYTE hi,lo;
	BYTE a,b,c;
	temp=y*AP;
	hi=HIBYTE(temp);
	lo=LOBYTE(temp);
	lo=x+lo;
	if(CY==1) {hi+=0x01;CY=0;}
	
	WLCDCOM(CSRDOWN);
	WLCDCOM(CSRW);
	WLCDDATA(lo);
	WLCDDATA(hi);
	WLCDCOM(MWRITE);
	for(c=0;c<16;c++)
	{
		WLCDDATA(*(*(p+num-1)+c));
	}
	lo=lo+0x01;
	if(CY==1) {hi+=0x01;CY=0;}
}

/****************************************************************************
* 名称:FILLBLOCK
* 功能:显示16×16字符
* 入口参数:...
* 出口参数:无
****************************************************************************/
void FILLBLOCK(BYTE x,BYTE y,BYTE len )
//功能:显示16×16字符,len为要显示的字符块的长度
//x坐标为低8位寄存器(字节),y坐标寄存器(点行)
{ 
	WORD temp;
	BYTE hi,lo;
	BYTE a,b;
	temp=y*AP;
	hi=HIBYTE(temp);
	lo=LOBYTE(temp);
	lo=x+lo;
	if(CY==1) {hi+=0x01;CY=0;}
	for(b=0;b<0x10;b++)//**************************************************************这里要改 
	{
		WLCDCOM(CSRDOWN);
		WLCDCOM(CSRW);
		WLCDDATA(lo);
		WLCDDATA(hi);
		WLCDCOM(MWRITE);
		for(a=0;a<16;a++)
		{
			WLCDDATA(0xff);
		}
		lo=lo+0x01;
		if(CY==1) {hi+=0x01;CY=0;}
	}
}

/****************************************************************************
* 名称:CLRBLOCK
* 功能:清除16×8字符快
* 入口参数:...
* 出口参数:无
****************************************************************************/
void CLRBLOCK(BYTE x,BYTE y,BYTE len )
//清除16×8字符快,len为要清除的字符块的长度
//x坐标寄存器(字节),y坐标寄存器(点行)
{ 
	WORD temp;
	BYTE hi,lo;
	BYTE a,b;
	temp=y*AP;
	hi=HIBYTE(temp);
	lo=LOBYTE(temp);
	lo=x+lo;
	if(CY==1) {hi+=0x01;CY=0;}
	for(b=0;b<0x10;b++)//**********************************************************这里要改
	{
		WLCDCOM(CSRDOWN);
		WLCDCOM(CSRW);
		WLCDDATA(lo);
		WLCDDATA(hi);
		WLCDCOM(MWRITE);
		for(a=0;a<16;a++)
		{
			WLCDDATA(0x00);
		}
		lo=lo+0x01;
		if(CY==1) {hi+=0x01;CY=0;}
	}
}


/****************************************************************************
* 名称:WLCDCHR
* 功能:显示16×32字符
* 入口参数:...
* 出口参数:无
****************************************************************************/
void WLCDCHR(BYTE x,BYTE y,BYTE (*p)[32],BYTE num )
//功能:显示16×32字符,num为要显示字符数组的第一维的值
//x坐标寄存器(字节),y坐标寄存器(点行)
{ 
	WORD temp; 
	BYTE hi,lo;
	BYTE a,b,c;
	temp=y*AP;
	hi=HIBYTE(temp);
	lo=LOBYTE(temp);
	lo=x+lo;
	if(CY==1) {hi+=0x01;CY=0;}
	
	WLCDCOM(CSRDOWN);
	for(a=0;a<0x10;a++)//**********************************************************这里要改 
	{
		WLCDCOM(CSRW);
		WLCDDATA(lo);
		WLCDDATA(hi);
		WLCDCOM(MWRITE);
		for(c=0;c<0x20;c+=2)
		{
			WLCDDATA(*(*(p+a)+c));
		}
		lo=lo+0x01;
		if(CY==1) {hi+=0x01;CY=0;}
		
		WLCDCOM(CSRW);
		WLCDDATA(lo);
		WLCDDATA(hi);
		WLCDCOM(MWRITE);
		for(c=1;c<0x20;c+=2)
		{
			WLCDDATA(*(*(p+a)+c));
		}
		lo=lo+0x01;
		if(CY==1) {hi+=0x01;CY=0;}
	
	}
}

/****************************************************************************
* 名称:INITLCD
* 功能:初始化LCD显示参数以及界面
* 入口参数:...
* 出口参数:无
****************************************************************************/
void INITLCD(void) 
//初始化LCD显示参数以及界面
{
	WORD a,b,c;
	WLCDCOM(SYSSET);
	for(b=0;b<8;b++)
	{
		WLCDDATA(SYSTAB[b]);
	}
	WLCDCOM(SCROLL);
	for(b=0;b<10;b++)
	{
		WLCDDATA(SCRTAB[b]);
		//WLCDDATA(0x00);
	}
	WLCDCOM(HDOTSCR);
	WLCDDATA(0X00);
	WLCDCOM(OVLAY);
	WLCDDATA(0X1c);
	WLCDCOM(DISPOFF);
	WLCDDATA(0X56);
	CLRVRAM();
	WLCDCOM(CSRFORM);
	WLCDDATA(0X07);
	WLCDDATA(0X8f);
	WLCDCOM(DISPON);
	WLCDDATA(0X16);

}

/****************************************************************************
* 名称:FULLSCREEN
* 功能:清除显示屏幕
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FULLSCREEN(void)
//清除显示屏幕
{
	//WORD i,j;
	WORD i;
	//BYTE a;
	WLCDCOM(CSRRGT);
	WLCDCOM(CSRW);
	WLCDDATA(0X00);
	WLCDDATA(0X00);
	WLCDCOM(MWRITE);
	/*
	for(i=0;i<320;i++)
	{
		for(j=0;j<30;j++)
		{
			WLCDDATA(0xff);
		}
	}*/
	for(i=0;i<9600;i++)
	{
		WLCDDATA(0xff);
	}
}

/****************************************************************************
* 名称:FULLSCREEN
* 功能:清除显示屏幕
* 入口参数:无
* 出口参数:无
****************************************************************************/
void sam1(void)
{
	WORD i;
	WLCDCOM(CSRRGT);
	WLCDCOM(CSRW);
	WLCDDATA(0X00);
	WLCDDATA(0X00);
	WLCDCOM(MWRITE);
	
	for(i=0;i<320*5*2;i++)
	{
		WLCDDATA(Bmp1[i]);
	}
	
	for(i=0;i<320*5*2;i++)
	{
		WLCDDATA(Bmp1[i]);
	}
	
	for(i=0;i<320*5*2;i++)
	{
		WLCDDATA(Bmp1[i]);
	}
}

⌨️ 快捷键说明

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