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

📄 sms1907.h

📁 长沙太阳人液晶LCD应用请大家使用
💻 H
字号:
/*=====================================================================
本程序适用长沙太阳人生产的 SMS1907  LCD显示屏
可适用于同系列的 三线式串行接 只需修改对应的RAM
			STC5408AD  11.0592M
2008.06.18
======================================================================*/
#include <intrins.h>
#include <5410ad.h>
#define 	INT8U 		unsigned char
#define 	INT16U  	unsigned int

sbit DI   = P3^3;       //数据
sbit CLK  = P3^4;       //时钟
sbit CS2  = P3^5;       //选区
sbit CS1  = P3^7;       //选区

#define		CMDOFF		0		//控制器掉电(控制字)
#define		CMDON		1		//控制器上电(控制字)
#define		CMDLCDOFF	2		//控制器液晶关闭(控制字)
#define		CMDLCDON	3		//控制器液晶显示(控制字)
#define		CMDB3C4		0x29	//控制器液晶模式设置(控制字)

/*============LCD屏RAM说明
//					   0	1	2	 3	  4		5	6	 7		8	9
INT8U lcddata[10] = {0x7D,0x60,0x3E,0x7A,0x63,0x5B,0x5F,0x70,0x7F,0x7B};

	lcdwd(0x18,0,1);	//左(1过压2欠压4报警开8报警关)右(1A过流2B过流4C过流8漏电)														
	lcdwd(0x7D,2,1);	//0								  	
一	lcdwd(0x60,4,1);	//1  	8 为漏电开						
	lcdwd(0x3E,6,1);	//2   	8 为漏电关					
选	lcdwd(0x7A,8,1);	//3								   //		 5
	lcdwd(0x63,10,1);	//4							  	   //		 --
	lcdwd(0x5B,12,1);	//5		8 为年					   //	   1|2 |6
区	lcdwd(0x5F,14,1);	//6								   //		 --
	lcdwd(0x70,16,1);	//7		8 为月					   //	   3|4 |7
	lcdwd(0x7F,18,1);	//8							   	   //		 --
	lcdwd(0x7B,20,1);	//9		8 为日		   201818
	lcdwd(0xFF,0,2);	//	8为200A			   ■■■
	lcdwd(0x00,2,2);	//	8为300A			   ■■■
二	lcdwd(0x00,4,2);	//	8为500A			   ■■■
	lcdwd(0x00,6,2);	//	8为字符C		   ■■■20
	lcdwd(0x00,8,2);	//	8为字符B		   ■■■
选	lcdwd(0x00,10,2);	//	8为字符A		   ■■■
	lcdwd(0x00,12,2);	//					   ■■■
	lcdwd(0x80,14,2);	//					   ■■■
区	lcdwd(0x00,16,2);	//					   2222
	lcdwd(0x00,18,2);	//					 24■■■
	lcdwd(0x00,20,2);	//					 24■■■
	lcdwd(0x00,22,2);	//						    14高16高
	lcdwd(0xF0,24,2);		//低四位无用
*/

/*************************************************

  Function:      void lcdwc(INT8U cmd)	 	// 函数名称

  Description:     向LCD屏写入命令			    // 函数功能、性能等的描述

  Calls:          							// 被本函数调用的函数清单

  Called By:      							// 调用本函数的函数清单

  Table Accessed: 							// 被访问的表(此项仅对于牵扯到数据库操作的程序)

  Table Updated:  							// 被修改的表(此项仅对于牵扯到数据库操作的程序)
					
  Input:         							// 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
		要写入的命令

  Output:         							// 对输出参数的说明。

  Return:         							// 函数返回值的说明

  Others:         							// 其它说明

*************************************************/

void lcdwc(INT8U cmd)
{
	INT8U i=0;

	CS1	= 1; CS2 = 1; _nop_(); _nop_(); _nop_(); _nop_();
	CS1	= 0; CS2 = 0; _nop_(); _nop_(); _nop_(); _nop_();	//打开选区
	DI	= 1; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
	DI	= 0; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();

	for (i=8; i>0; i--){  						// 一次写一位,写入命令
		DI = cmd&0x80; _nop_(); _nop_(); _nop_();
    	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 1; _nop_(); _nop_(); _nop_(); _nop_(); 
    	cmd=cmd*2;
  	}
	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();	//空脉冲
	CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
	CS1 = 1; CS2 = 1;								//关闭选区
		
}

/*************************************************

  Function:       void lcdwd(INT8U udata,INT8U addr,INT8U area)	 	// 函数名称

  Description:     LCD屏写入一位要显示的数据    // 函数功能、性能等的描述

  Calls:          							// 被本函数调用的函数清单

  Called By:      							// 调用本函数的函数清单

  Table Accessed: 							// 被访问的表(此项仅对于牵扯到数据库操作的程序)

  Table Updated:  							// 被修改的表(此项仅对于牵扯到数据库操作的程序)
					
  Input:         							// 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
		 INT8U udata		要显示的数据
		 INT8U addr			要显示数据的地址
		 INT8U area			要显示的选区1或非1

  Output:         							// 对输出参数的说明。

  Return:         							// 函数返回值的说明

  Others:         							// 其它说明

****************写单个字符*********************************/

void lcdwd(INT8U udata,INT8U addr,INT8U area)
{ 

	INT8U i=0;
	
	if(1==area){   //选中一选区
		CS1	= 1; _nop_(); _nop_(); _nop_(); _nop_();
		CS1 = 0; _nop_(); _nop_(); _nop_(); _nop_();
	}
	else{	   	//选中二选区
		CS2	= 1; _nop_(); _nop_(); _nop_(); _nop_();
		CS2 = 0; _nop_(); _nop_(); _nop_(); _nop_();
	}
		DI	= 1; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
		DI	= 0; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
		DI	= 1; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
	

	for (i=6; i>0; i--){  						// 一次写一位,写入地址
		DI = addr & 0x20; _nop_(); _nop_(); _nop_();
    	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 1; _nop_(); _nop_(); _nop_(); _nop_(); 
    	addr = addr*2;
  	}

	for (i=8; i>0; i--){  						// 一次写一位,写入数据
		DI = udata & 0x80; _nop_(); _nop_(); _nop_();
    	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 1; _nop_(); _nop_(); _nop_(); _nop_(); 
    	udata = udata*2;
  	}
	if(1==area){								 //关闭选区
		CS1 = 1; _nop_(); _nop_(); _nop_(); _nop_();
	}
	else{
		CS2 = 1; _nop_(); _nop_(); _nop_(); _nop_();
	}
}

/*=====================================================================
Function:       void lcd(INT8U *udata,INT8U area)	 	// 函数名称

  Description:     LCD屏显示			    // 函数功能、性能等的描述

  Calls:          							// 被本函数调用的函数清单

  Called By:      							// 调用本函数的函数清单

  Table Accessed: 							// 被访问的表(此项仅对于牵扯到数据库操作的程序)

  Table Updated:  							// 被修改的表(此项仅对于牵扯到数据库操作的程序)
					
  Input:         							// 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
		*udata	要显示字符串的指针		area 要显示的选区(1或2)
		两次调用本函数显示不同选区,中断要有延时
  Output:         							// 对输出参数的说明。

  Return:         							// 函数返回值的说明

  Others:         							// 其它说明
=====================================================================*/
void lcd(INT8U *udata,INT8U area)
{ 

	INT8U i = 0;
	INT8U j = 0;
	INT8U temp = 0;
	if(1==area){		  //area为1选中一选区
		j = 11;
		CS1	= 1; _nop_(); _nop_(); _nop_(); _nop_();
		CS1 = 0; _nop_(); _nop_(); _nop_(); _nop_();
	}
	else{
		j = 13;			  //否则area为2选中二选区
		CS2	= 1; _nop_(); _nop_(); _nop_(); _nop_();
		CS2 = 0; _nop_(); _nop_(); _nop_(); _nop_();
	}

	DI	= 1; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
	DI	= 0; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
	DI	= 1; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
	CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();

	for (i=6; i>0; i--){  						// 一次写一位,写入地址
		DI = temp & 0x20; _nop_(); _nop_(); _nop_();
   	 	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
		CLK = 1; _nop_(); _nop_(); _nop_(); _nop_(); 
 	   	temp = temp*2;
 		}
	for(;j>0;j--){	   //写入数据串
		temp = *udata++;
		for (i=8; i>0; i--){  						// 一次写一位
			DI = temp & 0x80; _nop_(); _nop_(); _nop_();
   		 	CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
			CLK = 1; _nop_(); _nop_(); _nop_(); _nop_(); 
	    	temp = temp*2;
  		}
	}

	if(1==area){
		CS1 = 1; _nop_(); _nop_(); _nop_(); _nop_();		 //关闭选区
	}
	else{
		CS2 = 1; _nop_(); _nop_(); _nop_(); _nop_();
	}
}

/*************************************************

  Function:       void lcdreset(void)		 	// 函数名称

  Description:    LCD屏初始化			    // 函数功能、性能等的描述

  Calls:          							// 被本函数调用的函数清单
  				void lcdwc(INT8U cmd)
  Called By:      							// 调用本函数的函数清单

  Table Accessed: 							// 被访问的表(此项仅对于牵扯到数据库操作的程序)

  Table Updated:  							// 被修改的表(此项仅对于牵扯到数据库操作的程序)
					
  Input:         							// 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
		一个字符

  Output:         							// 对输出参数的说明。

  Return:         							// 函数返回值的说明

  Others:         							// 其它说明

*********************LCD初始化****************************/

void lcdreset(void)
{  
	lcdwc(CMDOFF);
	lcdwc(CMDLCDOFF);
	lcdwc(CMDON);
	lcdwc(CMDLCDON);
	lcdwc(CMDB3C4);
}

⌨️ 快捷键说明

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