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