📄 avrst7529.txt
字号:
LCD_CmdWrite(0X31); // EXT=1
LCD_CmdWrite(0X32); // ANALOG CIRCUIT SET
LCD_DataWrite(0X03); // OSC FREQUENCEY ADJUSTMENT
LCD_DataWrite(0X01); // BOOSTER EFFICIENCY SET
LCD_DataWrite(0X00); // BIAS SETTING
DelayXms(10);
LCD_CmdWrite(0X22); // WEIGHTING
LCD_DataWrite(0X03); // WEIGHTING VALUE
LCD_DataWrite(0X02); // EDGE VALUE
LCD_DataWrite(0X00); // ENABLE FLAG
LCD_CmdWrite(0X34); // DITHERER OFF
DelayXms(10);
//=====================================================
//====================================================
LCD_CmdWrite(0X20); // SET GRAY VALUE
LCD_DataWrite(0X00); // START PARA 00
LCD_DataWrite(0X03); // START PARA 03
LCD_DataWrite(0X06); // START PARA 06
LCD_DataWrite(0X09); // START PARA 09
LCD_DataWrite(0X0B); // START PARA
LCD_DataWrite(0X0D); // START PARA
LCD_DataWrite(0X0E); // START PARA
LCD_DataWrite(0X0F); // START PARA
LCD_DataWrite(0X10); // START PARA
LCD_DataWrite(0X11); // START PARA
LCD_DataWrite(0X12); // START PARA
LCD_DataWrite(0X14); // START PARA
LCD_DataWrite(0X16); // START PARA
LCD_DataWrite(0X18); // START PARA
LCD_DataWrite(0X1B); // START PARA
LCD_DataWrite(0X1F); // START PARA
//******************************************
LCD_CmdWrite(0X21); // SET GRAY VALUE
LCD_DataWrite(0X00); // START PARA 00
LCD_DataWrite(0X03); // START PARA 03
LCD_DataWrite(0X06); // START PARA 06
LCD_DataWrite(0X09); // START PARA 09
LCD_DataWrite(0X0B); // START PARA
LCD_DataWrite(0X0D); // START PARA
LCD_DataWrite(0X0E); // START PARA
LCD_DataWrite(0X0F); // START PARA
LCD_DataWrite(0X10); // START PARA
LCD_DataWrite(0X11); // START PARA
LCD_DataWrite(0X12); // START PARA
LCD_DataWrite(0X14); // START PARA
LCD_DataWrite(0X16); // START PARA
LCD_DataWrite(0X18); // START PARA
LCD_DataWrite(0X1B); // START PARA
LCD_DataWrite(0X1F); // START PARA
//******************************************
LCD_CmdWrite(0X30); // EXT=1
LCD_CmdWrite(0XBC); // FORTH COMMAND SET DATA SCAN DRECTION
LCD_DataWrite(0X01); // NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION
LCD_DataWrite(0X00); // RGB ARRANGEMENT
LCD_DataWrite(0X02); // 32 GRAY-SCALE 65K
LCD_CmdWrite(0X75); // THIRD COMMAND SET LINE ADDRESS
LCD_DataWrite(0X00); // START LINE
LCD_DataWrite(0X9f); // END LINE
DelayXms(5);
LCD_CmdWrite(0X15); // THIRD COMMAND SET COLUMN ADDRESS
LCD_DataWrite(0X00); // START COLUMN
LCD_DataWrite(0X35); // END COLUMN
DelayXms(5);
LCD_CmdWrite(0x030);
LCD_CmdWrite(0x07);
LCD_DataWrite(0x19);
LCD_CmdWrite(0x031);
LCD_CmdWrite(0XCD);
LCD_DataWrite(0X00);
DelayXms(20);
DelayXms(20);
DelayXms(20);
LCD_CmdWrite(0XFD);
DelayXms(20);
DelayXms(20);
DelayXms(20);
LCD_CmdWrite(0XCC);
LCD_CmdWrite(0x30);
}
//////////////LCD复位程序//////////////////////
void LCD_Reset(void )
{
LCD_RST1;
DelayXms(10);
LCD_RST0;
DelayXms(10);
LCD_RST1;
}
//////////////LCD写命令////////////////////////
void LCD_CmdWrite(unsigned char Cmd_Data)
{
LCD_RD1;
/*LCD_ChkBusy();*/ //Call LCD_ChkBusy to Check Busy Bit
LCD_Command = Cmd_Data;
LCD_RS0; //RS=0 写命令
LCD_CS0;
LCD_WR1;
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
LCD_WR0;
}
//////////////LCD写数据//////////////////////////////
void LCD_DataWrite(unsigned char Data_Data)
{
DDRD=0xFF; //写入
/*LCD_ChkBusy(); */ //Call LCD_ChkBusy to Check Busy Bit
LCD_RD1;
LCD_Data = Data_Data;
LCD_RS1; //RS=1 写数据
LCD_CS0;
LCD_WR1;
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
LCD_WR0;
}
///////////////////LCD读数据/////////////////////////////
unsigned char LCD_DataRead(void)
{
unsigned char Dat_m=0;
DDRD=0x00; //读出
LCD_CS1;
//LCD_Data=0XFF; //清P1, 注意WR=1或CS=1;
LCD_RS1;
LCD_CS0;
LCD_WR1;
LCD_RD1;
NOP();
NOP();
LCD_RD0;
NOP();
NOP();
Dat_m=LCD_Data_Out;
LCD_RD1;
NOP();
NOP();
return Dat_m;
} //第一个数据是“0xed”,后面是DDRAM数据。
///////////////////LCD的点测试程序/////////////////////
void WretPointTest(unsigned char ucData)
{
unsigned char i=0,l=0,j=0;
LCD_CmdWrite(0X30); //EXT=0
LCD_CmdWrite(0X75); //THIRD COMMAND SET LINE ADDRESS
LCD_DataWrite(00); //START LINE
LCD_DataWrite(0X9f); //END LINE
LCD_CmdWrite(0X15); //THIRD COMMAND SET COLUMN ADDRESS
LCD_DataWrite(0X00); //START COLUMN
LCD_DataWrite(0X35); //END COLUMN 设定行从0行开始到159行结束
LCD_CmdWrite(0X5C); //DATA WRITE
for(i=0;i<160;i++)
{
for (l=0;l<162;l++)
{
LCD_DataWrite(ucData);
}
}
}
//////////////////////////LCD显示汉字/////////////////////////////////////
char DisPlay(uchar ucStartX,uchar ucStartY,const uchar ucDisTable[],uchar ucFontWide,uchar ucFontHeight)
{
unsigned char ucLine=0,ucCol=0;
unsigned int uiPos=0;
//unsigned char ucPos=0;
if((ucStartX+ucFontWide)>160 || ((ucStartY+ucFontHeight)>160)) /*显示边界*/
{
return 1;
}
for(ucLine=0;ucLine<ucFontHeight;ucLine++)
{
for(ucCol=0;ucCol<ucFontWide;ucCol++)
{
// ucPos=ucCol/8+(ucLine*(ucFontHeight/8));
if( (ucDisTable[(uiPos>>3)] & (1<<(7-(ucCol%8)))) >0)
{
// SetWritePos(ucStartX+ucCol,ucStartY+ucLine);
WriteXY(ucStartX+ucCol,ucStartY+ucLine,0xff);
}
uiPos++;
}
}
return 0;
}
//////////////////////在坐标XY处开始写入1个点的数据,并且保持处于这列中的其它两个值不变////////////////////////
void WriteXY(uchar ucXpos,uchar ucYpos,uchar ucData)
{
unsigned char i=0,l=0,j=0;
unsigned char ucMem=0;
unsigned char ucData1,ucData2,ucData3,ucCol=0,ucSet=0;
unsigned int uiCount=0;
ucCol=ucYpos/3;//[得到Y轴上的列,一些写一个列,一个列里包含3个数据]
ucSet=ucYpos%3;//[得到块上3个点中的一个]
SetAddress(ucXpos,ucCol); //[因为选择了行不变,而列由3个竖条小列组成,所以一次要写3个点]
LCD_CmdWrite(0x5D); //从RAM内读坐标的值
LCD_DataRead(); //[空读一个头数据]
ucData1=LCD_DataRead(); //[读取原来的3个点的值]
ucData2=LCD_DataRead();
ucData3=LCD_DataRead();
SetAddress(ucXpos,ucCol); //在指定坐标的RAM内写入显示值
LCD_CmdWrite(0x5C);
switch(ucSet)
{
case 0:
ucData1=ucData;
//ucData2=0x00;
//ucData3=0x00;
break;
case 1:
//ucData1=0x00;
ucData2=ucData;
//ucData3=0x00;
break;
case 2:
//ucData1=0x00;
//ucData2=0x00;
ucData3=ucData;
break;
}
LCD_DataWrite(ucData1); //[写入新点的值,并且保持原来两个点的值不变]
LCD_DataWrite(ucData2);
LCD_DataWrite(ucData3);
}
///////////////////设置XY坐标/////////////////////////
void SetAddress(unsigned char ucXpos,unsigned char ucYpos)
{
LCD_CmdWrite(0X30); //EXT=0
LCD_CmdWrite(0X75); //THIRD COMMAND SET LINE ADDRESS
LCD_DataWrite(ucXpos); //START LINE
LCD_DataWrite(159); //END LINE
LCD_CmdWrite(0X15); //THIRD COMMAND SET COLUMN ADDRESS
LCD_DataWrite(ucYpos); //START COLUMN
LCD_DataWrite(0x53); //END COLUMN
}
/////////////////////////主程序////////////////////////////////////
void main(void)
{
uchar jj;
init_devices();
LCD_Reset();
LCD_INITIAL();
DelayXms(10);
while(1)
{
LCD_CmdWrite(0XAF); //Display on
WretPointTest(0x00);
LCD_CmdWrite(0XBC); //FORTH COMMAND SET DATA SCAN DRECTION
LCD_DataWrite(0X00); //NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION
LCD_DataWrite(0X00); // RGB ARRANGEMENT
LCD_DataWrite(0X02); // 32 GRAY-SCALE 3B3P
WretPointTest(0x00);
// while(1);
DisPlay(6,20,XiaoXin,144,104);
//DisPlay(行地址[0-159],小列地址[0-159],数组,行长度X,列长度Y);
// DisPlay(30,47,ucLi,32,32);
//DisPlay(30,83,ucDian,32,32);
// DisPlay(30,118,ucZi,32,32);
while(1)
{
led5_on();
DelayXms(100);//延时1S
led5_off();
DelayXms(100);
}
}
}
Re:[原创]使用AVR驱动ST7529芯片点亮液晶的程序
请问
LCD_CmdWrite(0X30); // EXT=1
LCD_CmdWrite(0XBC); // FORTH COMMAND SET DATA SCAN DRECTION
LCD_DataWrite(0X01); // NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION
LCD_DataWrite(0X00); // RGB ARRANGEMENT
LCD_DataWrite(0X02); // 32 GRAY-SCALE 65K
我把他改成
LCD_CmdWrite(0X30); // EXT=1
LCD_CmdWrite(0XBC); // FORTH COMMAND SET DATA SCAN DRECTION
LCD_DataWrite(0X01); // NORMAL/REVERSE DISPLAY OF ADDRESS AND ADDRESS SCAN DRICTION
LCD_DataWrite(0Xff); // 这里我做了修改
LCD_DataWrite(0X02); // 32 GRAY-SCALE 65K
我再把值改回去以后,屏幕好像就不能回复到原来的底色拉?
我要改变背景的颜色,应该这么做
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -