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

📄 st7529.c

📁 st7529源代码
💻 C
字号:
//=======================================Copyright (c)==================================================
//                                ANDORIN OptoElec Tech INC.
//                             HomePage http://www.andorin.com
//                             BBS  http://www.lcd-module.com.cn
//======================================================================================================
//Software:		st7529.c
//Description:	lcd controller
//Device:		
//======================================================================================================
// Created By: 		ARIN
// Created date:   	2008-12-10
// Version: 1.0
//======================================================================================================
// Modified by:
// Modified date:
// Version:
//======================================================================================================
#include "st7529.h"


//============================================================
// 设置指令寄存器
//============================================================

void St7529_SetLcdReg(char cdata)         /* Command write routine */
{
	RstIo0(CS);
	RstIo0(A0);
	WriteBus(cdata);
//	Delay(200);
	SetIo0(A0);
	SetIo0(CS);
}
void St7529_WriteLcdData(char pdata)        /* Data write (1 byte) routine */
{
	RstIo0(CS);
	SetIo0(A0);
	WriteBus(pdata);
//	Delay(200);
	SetIo0(CS);
}

/////////////////////LCD初始化//////////////////////////
void St7529_LcdInit(void)
{
	RstIo0(RST);
	OSTimeDly(OS_TICKS_PER_SEC/10);
	SetIo0(RST);
	OSTimeDly(OS_TICKS_PER_SEC/10);

	St7529_SetLcdReg(ExtModeOff);	// EXT=0

	St7529_SetLcdReg(ST7529_SleepOut);	// SLEEP OUT
	St7529_SetLcdReg(ST7529_InternalOscOn);// INTERNAL OSCILLATION ON

	St7529_SetLcdReg(ST7529_PowerCtrlSet);// POWER CONTROL SET
	St7529_WriteLcdData(0x08);		// TURN ON BOOSTER first;
	Delayms(10);
	St7529_SetLcdReg(ST7529_PowerCtrlSet);// POWER CONTROL SET
	St7529_WriteLcdData(0x0b);		// TURN ON BOOSTER AND REFERENCE VOLTAGE GENERATION CIRCUIT ;0bh

	St7529_SetLcdReg(ST7529_VolumnCtrl);// THREE COMMANDSET REFERENCE VOLTAGE SELECT MODE 
//	St7529_WriteLcdData(0x0a);// REFERENCE VOLTAGE PARAMETER ;16
	St7529_WriteLcdData(0x35);// REFERENCE VOLTAGE PARAMETER ;16
	St7529_WriteLcdData(0x04);// SET REFERENCE VOLTAGE PARAMETER ;04

	St7529_SetLcdReg(ST7529_DispCtrl); // DISPLAY CONTROL 
	St7529_WriteLcdData(0x00);// CL DIVIDING RATIO ,F1 AND F2 DRIVE PATTERN
	St7529_WriteLcdData(0x27);// DRIVER DUTY 1/160
	St7529_WriteLcdData(0x10);// FR INVERSE-SET VALUE 16

	St7529_SetLcdReg(ST7529_DispInv);// DISPLAY NORMAL

	St7529_SetLcdReg(ST7529_ComScan); // C0M0-->COM79,C0M159-->COM81
	St7529_WriteLcdData(0x02); 

	St7529_SetLcdReg(ST7529_DataScanDir); // data scan direction
//	St7529_WriteLcdData(0x00);     //normal mode
//	St7529_WriteLcdData(0x00);     //p1p2p3p1p2p3...
	St7529_WriteLcdData(0x02);     //inverse mode
	St7529_WriteLcdData(0x01);     //p3p2p1...
	St7529_WriteLcdData(0x02);     //3B3P

	St7529_SetLcdReg(ST7529_LineAddSet); // line address set
	St7529_WriteLcdData(0x00); 
	St7529_WriteLcdData(0x9f); 

	St7529_SetLcdReg(ST7529_ColumnAddSet);// THIRDCOMMAND SET COLUMN ADDRESS 
//	St7529_WriteLcdData(0x00);// START COLUMN
//	St7529_WriteLcdData(0x35);// ENDCOLUMN
	St7529_WriteLcdData(0x1f);// START COLUMN
	St7529_WriteLcdData(0x54);// ENDCOLUMN

	St7529_SetLcdReg(ExtModeOn); // EXT=1

	//==================================================== 
	St7529_SetLcdReg(ST7529_SetGray1);// SET GRAY VALUE

	St7529_WriteLcdData(0X00);// START PARA00
	St7529_WriteLcdData(0X03);// START PARA03 
	St7529_WriteLcdData(0X06);// START PARA06
	St7529_WriteLcdData(0X09);// START PARA09

	St7529_WriteLcdData(0X0B);// START PARA
	St7529_WriteLcdData(0X0D);// START PARA
	St7529_WriteLcdData(0X0E);// START PARA 
	St7529_WriteLcdData(0X0F);// START PARA
	 
	St7529_WriteLcdData(0X10);// START PARA
	St7529_WriteLcdData(0X11);// START PARA
	St7529_WriteLcdData(0X12);// START PARA 
	St7529_WriteLcdData(0X14);// START PARA

	St7529_WriteLcdData(0X16);// START PARA
	St7529_WriteLcdData(0X18);// START PARA
	St7529_WriteLcdData(0X1B);// START PARA 
	St7529_WriteLcdData(0X1F);// START PARA

	St7529_SetLcdReg(ST7529_SetGray2);// SET GRAY VALUE

	St7529_WriteLcdData(0X00);// START PARA00
	St7529_WriteLcdData(0X03);// START PARA03 
	St7529_WriteLcdData(0X06);// START PARA06
	St7529_WriteLcdData(0X09);// START PARA09

	St7529_WriteLcdData(0X0B);// START PARA
	St7529_WriteLcdData(0X0D);// START PARA
	St7529_WriteLcdData(0X0E);// START PARA 
	St7529_WriteLcdData(0X0F);// START PARA
	 
	St7529_WriteLcdData(0X10);// START PARA
	St7529_WriteLcdData(0X11);// START PARA
	St7529_WriteLcdData(0X12);// START PARA 
	St7529_WriteLcdData(0X14);// START PARA

	St7529_WriteLcdData(0X16);// START PARA
	St7529_WriteLcdData(0X18);// START PARA
	St7529_WriteLcdData(0X1B);// START PARA 
	St7529_WriteLcdData(0X1F);// START PARA

	St7529_SetLcdReg(ST7529_AnalogCircuitSet);// ANALOG CIRCUIT SET 
	St7529_WriteLcdData(0x00);// OSC FREQUENCEY ADJUSTMENT 0~3 -> 12.7Khz ~ 25Khz
	St7529_WriteLcdData(0x03);// BOOSTER EFFICIENCY SET	0~3 -> 3,6,12,24Khz
	St7529_WriteLcdData(0x01);// BIAS SETTING 0~7 -> 1/14,1/13,1/12,1/11,1/10,1/9,1/7,1/5

	St7529_SetLcdReg(ST7529_SoftInit);// DITHERER OFF

	St7529_SetLcdReg(ExtModeOff); // EXT=0
	St7529_SetLcdReg(ST7529_DispOn); // display on;

	//=====================================================  
}

void St7529_SetWindow(short x, short y, short x1, short y1)
{
short z;
	if(y > y1)
	{
		z = y;
		y = y1;
		y1 = z;
	}
	if(x > x1)
	{
		z = x;
		x = x1;
		x1 = z;
	}
	St7529_SetLcdReg(ST7529_LineAddSet); // line address set
	St7529_WriteLcdData(y); 
	St7529_WriteLcdData(y1);

	St7529_SetLcdReg(ST7529_ColumnAddSet);// THIRDCOMMAND SET COLUMN ADDRESS 

	St7529_WriteLcdData((95+x)/3);// START COLUMN
	St7529_WriteLcdData((95+x1)/3);// ENDCOLUMN

	return;
}

void St7529Update()
{
int i,j,n;
char detax;

	detax = 2 - ((160-1)%3);
	St7529_SetWindow(0,0,159,159);
	St7529_SetLcdReg(ST7529_MemWrite);//DATA WRITE 
	for(j=0;j<160;++j)
	{
		St7529_WriteLcdData(0x00);
		St7529_WriteLcdData(0x00);
		for(i=0;i<160/8;++i)
		{
			for(n=0;n<8;++n)
			{
				if(vram[j][i]&(0x80>>n))
					St7529_WriteLcdData(0x00);
				else
					St7529_WriteLcdData(0xff);
			}
		}
//		for(i=0;i<detax;++i)
//			St7529_WriteLcdData(0x00);
	}
}

⌨️ 快捷键说明

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