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

📄 lcd128_64.c

📁 CC2430的液晶显示程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "app_ex_main.h"
#include "app_ex_util.h"
#include "RF04EB.h"
#include "hal.h"
#include "Font.h"
//#include "mydefine.h"
#include "Font.h"


#define 	DATA    	1
#define 	COMMAND		0


/****************************************************
* B) Command Table per device *
****************************************************/
#define 	DisplayOff 	0xAE
#define 	DisplayOn 	0xAF
#define 	DisplayStart 	0x40
#define 	PageAddr 	0xB0
#define 	ColAddrHi 	0x10
#define 	ColAddrLo 	0x00
#define 	SegRemapOff 	0xA0
#define 	SegRemapOn 	0xA1
#define 	NormalDisp 	0xA6
#define 	ReverseDisp 	0xA7
#define 	ExitEntireD 	0xA4
#define 	EntEntireD 	0xA5
#define 	EnterRMW 	0xE0
#define 	ExitRMW 	0xEE
#define 	SWRest 		0xE2
#define 	ComRemapOff 	0xC0
#define 	ComRemapOn 	0xC8
#define 	PwrCtrlReg 	0x28
#define 	OPampBuffer 	0x01
#define 	IntReg 		0x02
#define 	IntVolBstr 	0x04
#define 	IntRegRatio 	0x20
#define 	ContCtrlReg 	0x81
#define 	CmdMuxRatio 	0x48
#define 	CmdBiasRatio 	0x50
#define 	DispOffset 	0x44
#define 	IconModeOn 	0xA3
#define 	IconModeOff 	0xA2
#define 	NlineInver 	0x4C
#define 	DCDCconver 	0x64
#define 	PowersavStandby 0xA8
#define 	PowersavSleep 	0xA9
#define 	PowersavOff 	0xE1
#define 	InterOsc 	0xAB
#define 	Device SSD1821 			/* device under demo */
#define 	ColNo 		132 		/* number of Column/Seg on LCD glass*/
#define 	RowNo 		64		/* number of Row/Com/Mux */
#define 	PS 		1 		/* fixed to Parallel mode */
#define 	PageNo 		10 		/* Total no of RAM pages */
#define 	IconPage 	10 		/* Icon Page number */
#define 	All0 		6 		/* 3 for all 0, 4 for all 1 */
#define 	All1 		4
#define 	iIntRegValue 	1 		/*Internal Regulator Resistor Ratio Value */
#define 	iContCtrlRegValue 16 		/* Contrast Control Register Value */
#define 	iIntRegValuea 	20 		/*Internal Regulator Resistor Ratio Value */
#define 	iContCtrlRegValuea 16 		/* Contrast Control Register Value */
#define 	iIntRegValueb 	1 		/*Internal Regulator Resistor Ratio Value */
#define 	iContCtrlRegValueb 16 		/* Contrast Control Register Value */
#define 	MSGNo 		16
#define 	MSGLength 	22
#define 	SSLNameNo 	4
#define 	DevicePg 	0 		//RAM page for showing device name
#define 	FeaturePg 	1 		//RAM page for showing feature
#define 	GRAPHICNo 	13
#define 	xlogo 		38
#define 	ylogo 		5
#define 	xsolomon 	91
#define 	ysolomon 	2
#define 	xsystech 	81
#define 	ysystech 	2
#define 	xlimited 	70
#define 	ylimited 	2
#define 	xcc 		16
#define 	ycc 		2
#define 	xpageq 		128
#define 	ypageq 		4
#define 	horizonal 	0
#define 	d_time 		60
////////////////////////////////////////////////////////////////////////////////////////////


void Print8(INT16U y,INT16U x, INT8U ch[],INT16U yn);

INT8U ContrastValue = 80;//对比度



void delay1(INT8U jj)
{
	INT8U i;
	for(i=0; i<jj; i++);
}





void delay_us(INT16U s)
{
	INT16U i;
	for(i=0; i<s; i++);
	for(i=0; i<s; i++);
}


//******************************************************************************
//函数名:void Write595(INT8U dat)
//输入:数据
//输出:无
//功能描述:595写数据,一次写入8位
//******************************************************************************
void Write595(INT8U dat)
{
	
	INT8U ii;		
			
	for(ii = 0 ; ii < 8; ii++)
	{
		if(dat & 0x80) 	LCD_595_DAT = 1;
		else		LCD_595_DAT = 0;
		
		dat <<= 1;
		LCD_595_CK = 1;	
		LCD_595_CK = 0;
	}
	LCD_595_LD = 1;
	LCD_595_LD = 0;
}




//*****************************************************************************
//*****************************************************************************
//函数名:WriteLCD(INT8U fs, INT8U da)
//功能描述:fs:1为命令,0为数据   da:待写数据
//*****************************************************************************
void WriteLCD(INT8U fs, INT8U da)
{
	delay1(1);
	LCD_CS1 = 0;
	LCD_RW = 0;			//写操作
	delay1(1);	

	if(fs){
		LCD_RS = 1;	
	}
	else{
		LCD_RS = 0;
	}
        delay1(1);

        Write595(da);
	LCD_E = 1;// = 1;
        delay1(1);
	LCD_E = 0;// = 0;					
	delay1(1);
	LCD_CS1 = 1;
}
/*

INT8U ReadLCD(INT8U fs)
{
	INT8U temp = 0;
	LCD_CS1 = 0;
	NOP;
	NOP;
	NOP;
	NOP;
	do{						
		LCD_RW = 1;
		LCD_RS = 0;
		LCD_E = 1;
		NOP;
		NOP;							
		temp = P1 & 0x80;			
		LCD_E = 0;			

	}while(temp != 0);	

	if(fs){
		LCD_RS = 1;	
	}
	else{
		LCD_RS = 0;
	}
	
	LCD_E = 1;
	NOP;	
	NOP;
	NOP;
	NOP;	
	temp = P1;	
	LCD_E = 0;	
	LCD_CS1 = 1;
	return(temp);
}
*/


void SetRamAddr(INT8U x ,INT8U y)
{
	INT8U temp;
	
	temp = 0x0f & x;
	WriteLCD(COMMAND , PageAddr|temp);

	temp = 0x0f & (y >> 4);
	WriteLCD(COMMAND , ColAddrHi|temp);
	temp = 0x0f & y;
	WriteLCD(COMMAND , ColAddrLo|temp);
}


/*******************************************************************************
//函数名:void SetContrast(INT8U Gain, INT8U Step)
//功能:lcd对比度设定
//输入:Gain,灰度 Step,对比度
//输出:无
********************************************************************************/
void SetContrast(INT8U Gain, INT8U Step)
{
	WriteLCD(COMMAND , IntRegRatio | (0x0f & Gain)); 	//设定内部电阻
	WriteLCD(COMMAND , ContCtrlReg); 			//设定内部对比控制器
	WriteLCD(COMMAND , 0x3f & Step);
}



/*******************************************************************************
//函数名:void InitDisplay(void)
//功能:lcd设定为正常显示状态
//输入:无
//输出:无
********************************************************************************/
void InitDisplay(void)
{
	WriteLCD(COMMAND , DisplayOff);			//关显示
	WriteLCD(COMMAND , SegRemapOn);    			//ks0713/ssd1815
	WriteLCD(COMMAND , ComRemapOn);    			//ssd1815
	SetContrast(iIntRegValue, iContCtrlRegValue); 	//设定缺省对比度
	WriteLCD(COMMAND , PwrCtrlReg | IntVolBstr | IntReg | OPampBuffer); //turn on booster, regulator & divider
	WriteLCD(COMMAND , DisplayOn);				//开显示
}


/*******************************************************************************
//函数名:void contrastctrl(INT8U start,stop)
//功能:lcd对比度调整
//输入:无
//输出:无
********************************************************************************/
void contrastctrl(INT8U start, INT8U stop)
{
	INT8U i;
	if (start < stop)
	{
		for (i=start; i<stop; i+=1)
		{
			SetContrast(iIntRegValue, i); //slowly turn on display
			delay_us(80);
		}
	}
	else
	{
		for (i=start; i>stop; i-=1)
		{
			SetContrast(iIntRegValue, i); //slowly turn off display
			delay_us(120);
		}
	}
}




void ClearScreen(void)
{
 	INT8U x,y;
	for(x = 0;x < 8 ;x++){
	  	for(y = 0 ; y < 128 ; y++){	  		
	  		SetRamAddr(x , y);			
			WriteLCD(DATA , 0x00);
		}		
	}
}




void LCDInit(void)
{	

        P1DIR |= 0xFF;
        P2DIR |= 0xFF;
        P0DIR |= 0xFF;
        P1_2 = 0;
	delay_us(1000);	
	WriteLCD(COMMAND , 0xE2);//复位

	delay_us(1000);
	WriteLCD(COMMAND , 0xA3);

	delay_us(1000);	
	WriteLCD(COMMAND , 0xA0);
	
	delay_us(1000);
	WriteLCD(COMMAND , 0xC8);

	delay_us(1000);	
	WriteLCD(COMMAND , 0x24);
	
	delay_us(1000);
	WriteLCD(COMMAND , 0x81);

	delay_us(1000);	
	WriteLCD(COMMAND , 0x14);
	
	delay_us(1000);
	WriteLCD(COMMAND , 0x2F);

	delay_us(1000);	
	WriteLCD(COMMAND , 0x40);//从第一列开始显示
	
	delay_us(1000);
	WriteLCD(COMMAND , 0xB0);

	delay_us(1000);	
	WriteLCD(COMMAND , 0x10);
	
	delay_us(1000);
	WriteLCD(COMMAND , 0x00);

	delay_us(1000);	
	WriteLCD(COMMAND , 0xAF);

	WriteLCD(COMMAND , 0x81);
	WriteLCD(COMMAND , 0x1b);
	ClearScreen();
        SetContrast(20,80);
}



/*******************************************************************************
//函数名:void Print6(INT8U xx, INT8U yy, INT8U ch1[], INT8U yn)
//功能:显示6*8字符串
//输入:xx ,yy 坐标,ch1待显示的字符串,yn是否反黑
//输出:无
********************************************************************************/
void Print6(INT8U xx, INT8U yy, INT8U ch1[], INT8U yn)		
{
	INT8U ii = 0;
	INT8U bb = 0;
	unsigned int index = 0 ;	
			
	while(ch1[bb] != '\0')
	{
                index = (unsigned int)(ch1[bb] - 0x20);
		index = (unsigned int)index*6;		
		for(ii=0;ii<6;ii++)
		{
			SetRamAddr(xx , yy);
			if(yn == 0)
			{
				WriteLCD(DATA, ~FontSystem6x8[index]);

⌨️ 快捷键说明

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