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

📄 pcf8833.c

📁 这是用于lpc2106的自带ADC功能的演示,利用KEIL FOR ARM 开发,可以参考学习.
💻 C
字号:
/*

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

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

/*----------------------------------------------------------*\
 | Backlight Initialize                                     |
\*----------------------------------------------------------*/
void BacklightOn(void) {
	//PINSEL0=0x00000000;
	PINSEL1 |= 0x00000200;	//设置MAT1.3--P0.20 

	T1TCR=0x03;		//在设置之前,先将定时器复位 
	T1IR=0x01;		//清除中断标志位 
	T1PR=0x00;		//设置预分频器 
	T1PWMCON=0x08;	//使能相应PWM模式位MAT1.3 
	T1MCR=0x02;		//MR0匹配时,定时器复位 
	T1MR0=50;		//设置匹配寄存器 
	T1MR3=49;
	T1TCR=0x01;		//重新启动定时器 
	}
/*----------------------------------------------------------*\
 | 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;
	IOCLR=LCD_CS;

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

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

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

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

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

	IOSET=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) {
	BacklightOn();

	PINSEL0 &= 0xFFFF003F;	// 设置SPI管脚连接
	IODIR |= LCD_DATA|LCD_CS|LCD_CLK|LCD_RST;

	IOSET=LCD_CS;
	Delay(1);
	IOCLR=LCD_RST;
	Delay(6);
	IOSET=LCD_RST;
	Delay(6);
	IOSET=LCD_DATA;
	IOSET=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 "GB1616.h"	//16*16汉字字模

void PutGB1616(INT8U x, INT8U y, unsigned char c[2], INT16U f,INT16U b){
	unsigned int i,j,k;
	INT8U fRed,fGreenBlue,bRed,bGreenBlue;
	fRed = (f>>8) & 0xFF; fGreenBlue = f & 0xFF;
	bRed = (b>>8) & 0xFF; bGreenBlue = b & 0xFF;
	S1D15G00SetPageArea(x, y, x+16-1, y+16-1);
	for (k=0;k<49;k++) {
	  if ((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])){ 
    	for(i=0;i<32;i++) {
		  INT8U m=codeGB_16[k].Msk[i];
		  for(j=0;j<8;j++) {
			if((m&0x80)==0x80) {
				S1D15G00WriteData(fRed);
				S1D15G00WriteData(fGreenBlue);
				}
			else {
				S1D15G00WriteData(bRed);
				S1D15G00WriteData(bGreenBlue);
				}
			m<<=1;
			} 
		  }
		}  
	  }	
	}
*/
#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 + -