📄 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 + -