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

📄 pcf8833.c

📁 智林z2148开发板测试源码
💻 C
字号:
/*

                         \\\|///
                       \\  - -  //
                        (  @ @  )
+---------------------oOOo-(_)-oOOo-------------------------+
|                                                           |
|                         CPU.c                             |
|                     by Xiaoran Liu                        |
|                        2005.3.16                          |
|                                                           |
|                    ZERO research group                    |
|                        www.the0.net                       |
|                                                           |
|                            Oooo                           |
+----------------------oooO--(   )--------------------------+
                      (   )   ) /
                       \ (   (_/
                        \_)     

*/
// 引入相关芯片的头文件 
#include <LPC214X.h>
#include "PCF8833.h"

/*----------------------------------------------------------*\
 | PCF8833 Initialize                                       |
\*----------------------------------------------------------*/
void  PCF8833SpiInit(void) {
	PCONP   |= 0x00000100;
	PINSEL0 |= 0x00001100;	// 设置SPI管脚连接
	S0SPCCR = 0x08;		// 设置SPI时钟分频
	S0SPCR = 0x934;		// 设置SPI接口模式,MSTR=1,CPOL=1,CPHA=1,LSBF=0
	}
/*----------------------------------------------------------*\
 | PCF8833 Write Command                                    |
\*----------------------------------------------------------*/
void  S1D15G00WriteCommand(INT8U Data) {
	INT16U temp=Data;
	IO0CLR=LCD_CS;

	temp&=0xFF;	// bit8 = 0 : command

	S0SPSR=0;
	S0SPDR = temp;
	while( 0==(S0SPSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕

	IO0SET=LCD_CS;
	}
/*----------------------------------------------------------*\
 | PCF8833 Write Data                                       |
\*----------------------------------------------------------*/
void  S1D15G00WriteData(INT8U Data) {
	INT16U temp=Data;
	IO0CLR=LCD_CS;

	temp|=0x100;	// bit8 = 1 : Data

	S0SPSR=0;
	S0SPDR = temp;
	while( 0==(S0SPSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕

	IO0SET=LCD_CS;
	}
/*----------------------------------------------------------*\
 | PCF8833 Set Page Area                                    |
\*----------------------------------------------------------*/
void S1D15G00SetPageArea(char x1, char y1, char x2, char y2) {
	S1D15G00WriteCommand(SET_X_ADDR);
	S1D15G00WriteData(x1);
	S1D15G00WriteData(x2);
	S1D15G00WriteCommand(SET_Y_ADDR);
	S1D15G00WriteData(y1);
	S1D15G00WriteData(y2);
	S1D15G00WriteCommand(MEM_WRITE);
}
/*----------------------------------------------------------*\
 | PCF8833 Clear LCD                                        |
\*----------------------------------------------------------*/
void LCD_Clear_Screen(void) {
	unsigned int i;

	S1D15G00SetPageArea(0, 0, GLCD_X_END, GLCD_Y_END);
//	S1D15G00WriteCommand(RAMWR);
	for(i=0; i<(GLCD_PIXELX*GLCD_PIXELY);i++)//(GLCD_PIXELX*GLCD_PIXELY)
	{
		S1D15G00WriteData(0xFF);
		S1D15G00WriteData(0xFF);
	}
}
/*----------------------------------------------------------*\
 | Delay                                                    |
\*----------------------------------------------------------*/
void  Delay(INT32U  dly) {
	INT32U  i;

	for(; dly>0; dly--) 
		for(i=0; i<50000; i++);
	}
/*----------------------------------------------------------*\
 | PCF8833 Initial                                          |
\*----------------------------------------------------------*/
void  PCF8833Init(void) {
	PINSEL0 &= 0xFFFF003F;	// 设置SPI管脚连接
	IO0DIR |= LCD_DATA|LCD_CS|LCD_CLK|LCD_RST;

	IO0SET=LCD_CS;
	Delay(1);
	IO0CLR=LCD_RST;
	Delay(6);
	IO0SET=LCD_RST;
	Delay(6);
	IO0SET=LCD_DATA;
	IO0SET=LCD_CLK;
	Delay(6);

	PCF8833SpiInit();

	S1D15G00WriteCommand(SOFT_RESET);         //Temperature gradient set
	S1D15G00WriteCommand(BOOSTER_ON);      //Internal oscillation on
	S1D15G00WriteCommand(SLEEP_OUT);      //Sleep out

	S1D15G00WriteCommand(COLOR_INTERFACE);      //Partial display out
		S1D15G00WriteData(COLOR_16_BIT);	

	S1D15G00WriteCommand(COLOR_SET);	//256-color position set
		S1D15G00WriteData(0x00);
		S1D15G00WriteData(0x02);
		S1D15G00WriteData(0x04);
		S1D15G00WriteData(0x06);
		S1D15G00WriteData(0x09);
		S1D15G00WriteData(0x0B);
		S1D15G00WriteData(0x0D);
		S1D15G00WriteData(0x0F);

		S1D15G00WriteData(0x00);
		S1D15G00WriteData(0x02);
		S1D15G00WriteData(0x04);
		S1D15G00WriteData(0x06);
		S1D15G00WriteData(0x09);
		S1D15G00WriteData(0x0B);
		S1D15G00WriteData(0x0D);
		S1D15G00WriteData(0x0F);

		S1D15G00WriteData(0x00);
		S1D15G00WriteData(0x04);
		S1D15G00WriteData(0x0B);
		S1D15G00WriteData(0x0F);

	S1D15G00WriteCommand(MEM_CONTROL);      //Display control
		S1D15G00WriteData((0 << MEM_MX) | (1 << MEM_MY) | (1 << MEM_RGB) | (0 << MEM_VW) | (0 << MEM_LAO));	

	Delay(60);
	S1D15G00WriteCommand(DISPLAY_ON);      //Display control

	}


#include "8X16.h"

void PutChar(INT8U x, INT8U y, char c, INT16U f, INT16U b) {
	unsigned int i,j;
	INT8U fRed,fGreenBlue,bRed,bGreenBlue;
	fRed = (f>>8) & 0xFF; fGreenBlue = f & 0xFF;
	bRed = (b>>8) & 0xFF; bGreenBlue = b & 0xFF;
	S1D15G00SetPageArea(x, y, x+8-1, y+16-1);
	for(i=0; i<16;i++) {
		INT8U m=font[c*16+i];
		for(j=0;j<8;j++) {
			if((m&0x80)==0x80) {
				S1D15G00WriteData(fRed);
				S1D15G00WriteData(fGreenBlue);
				}
			else {
				S1D15G00WriteData(bRed);
				S1D15G00WriteData(bGreenBlue);
				}
			m<<=1;
			}
		}
	}

void PutString(INT8U x, INT8U y, char *s, INT16U f, INT16U b) {
	INT8U l=0;
	while(*s) {
		PutChar(x+l*8,y,*s,f,b);
		s++;l++;
		}
	}

⌨️ 快捷键说明

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