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

📄 main.c

📁 LCD彩显驱动 nokia 6100 LCD
💻 C
字号:
//ICC-AVR application builder : 2004-11-15 下午 07:08:16
// Target : M8
// Crystal: 8.0000Mhz

#include <iom8v.h>
#include <macros.h>
#include "G6610.h"
#include "lcd6610.c"

#define csl asm("cbi 0x12,1") //PB0
#define csh asm("sbi 0x12,1")

#define restl asm("cbi 0x12,0") //PB4
#define resth asm("sbi 0x12,0")

#define sclkl asm("cbi 0x18,5") //PB5
#define sclkh asm("sbi 0x18,5")

#define sdatal asm("cbi 0x18,3") //PB3
#define sdatah asm("sbi 0x18,3")


void port_init(void)
{
 PORTB = 0x00;
 DDRB  = 0xFF;
 PORTC = 0x7F; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0xFF;
}

//call this routine to initialise all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();

 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 //SEI(); //re-enable interrupts
 //all peripherals are now initialised
}

void glcdn_Delay(long ld)
{
	long d;
	for(d=0;d<ld;d++)
	{
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();

	}
}

//
void main(void)
{
 init_devices();
     OSCCAL=0xff;                        // 8M系统内部时钟校准    
    //设置MCU的I/O口
	DDRD=0xFF;
	PORTD=0x00;
    DDRB = 0xFF;
	PORTB=0x00;
//    SPSR |= BIT(SPI2X);                 // 设置SPI时钟倍速
//   SPCR |= BIT(SPE)|BIT(MSTR);		// 使能SPI接口,主机模式,4M时钟
//SPCR=0x51; 
//SPCR = 0x73; //setup SPI
//SPSR = 0x01; //setup SPI
SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL);
 //insert your functional code here...
// glcdn_Delay(9900000);

RGB2(255,255,255);
     glcdSetRect(glcd_Clip, 0, 0, 130, 130);
init_lcd();
top:
RGB2(255,255,255);
glcdn_ClearLcd();

sc_cbk(255,0,255,1);
sc_cfg(0,255,255,1);
sc_cfr(0,0,255,1);
sc_csh(0,0,255,1);
//cbk&=0x8000;
//RGBToChar(cbk);
//if(cbk&0x8000)
//circle(30,30,20,1);
//else
//circle(100,100,20,1);
//point(30,30,0);


glcdRectangle(1,1,31,31);

sc_cbk(255,0,255,0);

glcdRectangle(33,1,64,31);



sc_cfg(255,0,0,1);
sc_cbk(0,0,255,1);
RoundRect(66,1,31,31,4);
sc_cfg(0,0,255,1);
sc_cbk(100,0,208,0);
RoundRect(99,1,29,31,8);

sc_cfg(0,0,255,0);
sc_cbk(0,255,128,1);
RoundRect(1,33,31,31,6);

//glcdRectangle(3,8,10,20);
sc_cfg(0,255,0,1);

glcdCircle(48,48,15);
glcdEllipse(82,48,15,12);

RGB2(0,0,255);
sc_cfg(0,0,255,1);
sc_cbk(255,255,0,1);
sc_csh(0,0,255,1);
glcdFrame(1,66,31,97);
RGB2(255,0,255);
glcdLine(99,33,130,64);
//n6100DrawCircle(64,64,30);
//glcdn_InitDisplay();
//
// SPCR = (1<<MSTR)|(1<<SPE)|(1<<SPR0);
//backgroundColor=4;
while(1);
sc_cfg(0,255,255,1);
b2=1;
 while(1)
 {
//while(1);
//RGB2(255,255,255);
 //glcdn_ClearLcd();
// n6100DrawCircle(64,64,backgroundColor);
//RGB2(0,0,255);


 glcdCircle(64,64,backgroundColor);
 RoundRect(backgroundColor,backgroundColor,backgroundColor+5,backgroundColor+5,10);
backgroundColor++;

  if(backgroundColor>64)
 {backgroundColor=7;
 //b2++;
 //if(b2>64)b2=5;
 //goto top;
 
 b2=(b2+1)%2;
 sc_cbk(255,255,0,b2-1);
 }
 
//glcdn_InitDisplay2();
//glcdn_InitDisplay();
//glcdn_WriteCommand(0x5C);
//glcdn_WriteData(0x7f);
//glcdn_InitDisplay();
//init_lcd();
//glcdn_Delay(13900);
//glcdn_SetPageArea(GLCD_X_START, GLCD_X_END, GLCD_Y_START, GLCD_Y_END);
//while(1)
//glcdn_ClearLcd();
//	{glcdn_WriteCommand(MEM_WRITE);
//	glcdn_WriteData(RED);
//	glcdn_Delay(80);
	}
 
}

void sp(unsigned char dd,unsigned char cmd)
{
unsigned char i;
//csl;

sclkl;
if(cmd)
sdatah;
else
sdatal;
sclkh;

for(i=0;i<8;i++)
{
sclkl;
//NOP();
if(((dd<<i)&0x80)==0x80)
sdatah;
else
sdatal;

sclkh;
}

//csh;
}

void init_lcd(void)
{
int i;
	glcdn_Delay(20000);
    PORTB=0x00;
	GLCD_SER_DDR = 0xff;
	PORTD=0x00;
	DDRD=0xff;


    csh;
	NOP();
	csl;//sbi(GLCD_CTRL_PORT, GLCD_CE_);
	restl;
	glcdn_Delay(60000);
	resth;//sbi(GLCD_CTRL_PORT, GLCD_RES_);
	glcdn_Delay(60000);
	sclkh;//sbi(GLCD_SER_PORT, GLCD_SCLK);
	sdatah;//sbi(GLCD_SER_PORT, GLCD_MOSI);
	csh;
glcdn_Delay(60000);

	
	glcdn_WriteCommand(0x82);
	glcdn_WriteData(1);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	glcdn_WriteData(0);
	
glcdn_WriteCommand(0xD1);
glcdn_WriteCommand(0x94);



glcdn_WriteCommand(0xA9);

glcdn_WriteCommand(0xCA);
glcdn_WriteData(0b00001111);	
glcdn_WriteData(0b00100000);	
glcdn_WriteData(0b00001111);	
glcdn_WriteData(0b00000001);	

glcdn_WriteCommand(0x20);
glcdn_WriteData(0b00001111);	

glcdn_WriteCommand(0x81);
glcdn_WriteData(0b00001111);
glcdn_WriteData(0b00000101);

	
	glcdn_WriteCommand(0xA7);
	glcdn_WriteCommand(0xBC);
		glcdn_WriteData(0b00000101);
			glcdn_WriteData(0x00);
				glcdn_WriteData(0b00000100);
	//glcdn_WriteCommand(0x12);
	//glcdn_WriteCommand(GLCD_BSTRON);
	glcdn_Delay(50000);
	
	/*
glcdn_WriteCommand(0x75);
glcdn_WriteData(1);
glcdn_WriteData(129);
glcdn_WriteCommand(0x15);
glcdn_WriteData(1);
glcdn_WriteData(129);
*/

	glcdn_WriteCommand(0xBB);
	glcdn_WriteData(0b00000001);
glcdn_WriteCommand(0xAF);
	
	glcdn_WriteCommand(0xCE);
	


	
	//glcdn_WriteCommand(0xBC);
	
	glcdn_WriteData(0x00);
	glcdn_WriteData(0x02);
	glcdn_WriteData(0x04);
	glcdn_WriteData(0x06);
	glcdn_WriteData(0x09);
	glcdn_WriteData(0x0B);
	glcdn_WriteData(0x0D);
	glcdn_WriteData(0x0F);

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

	glcdn_WriteData(0x00);
	glcdn_WriteData(0x04);
	glcdn_WriteData(0x0B);
	glcdn_WriteData(0x0F);
	
glcdn_ClearLcd();


}

void glcdn_InitDisplay(void)
{int i;
	glcdn_Delay(20000);
    PORTB=0x00;
	GLCD_SER_DDR = 0xff;
	PORTD=0x00;
	DDRD=0xff;
	//csl;//sbi(GLCD_CTRL_PORT, GLCD_CE_);
	
	/*
	resth;
	glcdn_Delay(50);
	restl;
	glcdn_Delay(100);
	resth;//sbi(GLCD_CTRL_PORT, GLCD_RES_);
	csl;
	glcdn_Delay(50000);
	sclkh;//sbi(GLCD_SER_PORT, GLCD_SCLK);
	sdatah;//sbi(GLCD_SER_PORT, GLCD_MOSI);
	csh;//sbi(GLCD_CTRL_PORT, GLCD_CE_);
*/
    csh;
	NOP();
	csl;//sbi(GLCD_CTRL_PORT, GLCD_CE_);
	restl;
	glcdn_Delay(60000);
	resth;//sbi(GLCD_CTRL_PORT, GLCD_RES_);
	glcdn_Delay(60000);
	sclkh;//sbi(GLCD_SER_PORT, GLCD_SCLK);
	sdatah;//sbi(GLCD_SER_PORT, GLCD_MOSI);
	csh;
	//NOP();
	//csl;//sbi(GLCD_CTRL_PORT, GLCD_CE_);


	//SPCR = (1<<CPHA) | (0x01 << SPE) | (0x01 << MSTR) | (0x01 << CPOL);
	//SPSR = (1<<SPI2X);

	/*
while(1)
{
	glcdn_WriteCommand(GLCD_SWRESET);
	glcdn_WriteCommand(GLCD_SLEEPOUT);
	glcdn_WriteCommand(GLCD_DISPLAYON);
	glcdn_WriteCommand(GLCD_BSTRON);

	while(!(SPSR & 0x80));
	glcdn_Delay(8);
 }*/
 	//glcdn_WriteCommand(0xAE);
	//glcdn_WriteCommand(GLCD_SWRESET);
	glcdn_WriteCommand(0x94);
	
	glcdn_WriteCommand(0xAF);
	glcdn_WriteCommand(0xA6);
	glcdn_WriteCommand(0xBB);
	glcdn_WriteCommand(0xBC);
	
	glcdn_WriteCommand(0xCA);
	glcdn_WriteData(0xFF);
	glcdn_WriteData(0xFF);
	glcdn_WriteData(0xFF);
	glcdn_WriteData(0xFF);
	//glcdn_WriteCommand(0x12);
	//glcdn_WriteCommand(GLCD_BSTRON);
	glcdn_Delay(50000);

	//glcdn_WriteCommand(0xBC);
	glcdn_WriteData(GLCD_8BITCOLOR);
	
	glcdn_WriteCommand(0xBC);
	glcdn_WriteData(0x00);
	glcdn_WriteData(0x02);
	glcdn_WriteData(0x04);
	glcdn_WriteData(0x06);
	glcdn_WriteData(0x09);
	glcdn_WriteData(0x0B);
	glcdn_WriteData(0x0D);
	glcdn_WriteData(0x0F);

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

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

	//glcdn_WriteCommand(MEM_ACCESS_CTRL);
	//memAccessCtrl = (0x01 << MIRROR_X) | (0x01 << RGB);
	//glcdn_WriteData(memAccessCtrl);
	
	    glcdn_WriteCommand(MEM_ACCESS_CTRL);
    memAccessCtrl = (1 << MEM_MX) | (0 << MEM_MY) | (1 << MEM_RGB) | (0 << MEM_VW) | (0 << MEM_LAO);
    glcdn_WriteData(memAccessCtrl);
	glcdn_ClearLcd();
	
	//glcdn_WriteCommand(GLCD_DISPLAYON);
}

void glcdn_SetPageArea(char x1, char x2, char y1, char y2)
{
	glcdn_WriteCommand(ADDRX);
	glcdn_WriteData(x1+1);
	glcdn_WriteData(x2+1);
	glcdn_WriteCommand(ADDRY);
	glcdn_WriteData(y1+1);
	glcdn_WriteData(y2+1);
}

void glcdn_ClearLcd(void)
{unsigned long i;
unsigned char r=0,g=0,b=0;

	//glcdn_WriteCommand(GLCD_MADCTL);
	//glcdn_WriteData((1 << GLCD_MX) | (1 << RGB));

	glcdn_SetPageArea(0, GLCD_X_END, 0, GLCD_Y_END);
	glcdn_WriteCommand(MEMWRITE);
	//csl;
	for(i=0; i<(GLCD_PIXELX*GLCD_PIXELY);i++)//(GLCD_PIXELX*GLCD_PIXELY)
	{
		//glcdn_WriteData(RED);
		//sp(0,1);
		//sp(~backgroundColor,1);
		//sp(backgroundColor,1);
		//r+=0x1;
		//if(r>0xef)
		//{g+=0x1;
		//if(g>0xef)
		//b+=0x1;
		//}
		
		//RGB(255, 255, 0);
		//Color1=0b00001111;
		//Color2=0b00000000;
		glcdn_WriteData(Color1);
		glcdn_WriteData(Color2);
		//b2++;
		//glcdn_WriteData(backgroundColor);
	}
	//glcdn_WriteCommand(0x94);
	//csh;
}

void glcdn_WriteData(unsigned char myData)
{
		//SPCR = 0x00;

	csl;   //cbi(GLCD_CTRL_PORT, GLCD_CE_);
	sclkl; //cbi(GLCD_SER_PORT, GLCD_SCLK);
	sdatah;//sbi(GLCD_SER_PORT, GLCD_MOSI);
	sclkh; //sbi(GLCD_SER_PORT, GLCD_SCLK);
	
	 SPCR = 0x50; //setup SPI
// SPSR = 0x01; //setup SPI
	//SPCR = (1<<CPHA) | (0x01 << SPE) | (0x01 << MSTR) | (0x01 << CPOL);

	//SPSR = (1<<SPI2X);
	//SPCR = (0x01 << SPE) | (0x01 << MSTR) | (0x01 << CPOL);
//SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL);
SPDR = myData;
//csl;
//(myData,1);
//csh;
while(!(SPSR & 0x80));
	//sbi(GLCD_CTRL_PORT, GLCD_CE_);
	
	csh;
		SPCR = 0x00;

	
}

void glcdn_WriteCommand(unsigned char myData)
{
	//SPCR = 0x00;
	csl;//cbi(GLCD_CTRL_PORT, GLCD_CE_);

	sclkl;//cbi(GLCD_SER_PORT, GLCD_SCLK);
	sdatal;//cbi(GLCD_SER_PORT, GLCD_MOSI);
	sclkh;//sbi(GLCD_SER_PORT, GLCD_SCLK);
	
	 SPCR = 0x50; //setup SPI
// SPSR = 0x01; //setup SPI
 
	//SPCR = (1<<CPHA) | (0x01 << SPE) | (0x01 << MSTR) | (0x01 << CPOL);

	//SPSR = (1<<SPI2X);
//SPCR = (0x01 << SPE) | (0x01 << MSTR) | (0x01 << CPOL);
	//SPDR = cmd;
	//SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL);
	SPDR = myData;
//csl;
//sp(myData,0);
//csh;
	while(!(SPSR & 0x80));

	csh;//sbi(GLCD_CTRL_PORT, GLCD_CE_);
		SPCR = 0x00;

}


unsigned int RGB(unsigned char red,unsigned char green,unsigned char blue)
{
unsigned int c1,c2;
Color1=(red&0b11110000>>4);
Color2=(green&0b11110000)|((blue&0b11110000)>>4);
c1=(int)Color1;
c2=(int)Color2;

return (c1<<8)|c2;

}

void RGB2(unsigned char red,unsigned char green,unsigned char blue)
{
Color1=(red&0b11110000>>4);
Color2=(green&0b11110000)|((blue&0b11110000)>>4);
}


void RGBToChar(unsigned int color)
{
Color1=(char)(color>>8);
Color2=(char)color;
}


void point(unsigned char x,unsigned char y)
{glcdn_SetPageArea(x,GLCD_X_END,y, GLCD_Y_END);
	glcdn_WriteCommand(MEMWRITE);
		//RGBToChar(color);
		glcdn_WriteData(Color1);
		glcdn_WriteData(Color2);
}

void point2(void)
{glcdn_SetPageArea(zx,GLCD_X_END,zy, GLCD_Y_END);
	glcdn_WriteCommand(MEMWRITE);
		//RGBToChar(color);
		glcdn_WriteData(Color1);
		glcdn_WriteData(Color2);
}

void point3(void)
{//glcdn_SetPageArea(zx,GLCD_X_END,zy, GLCD_Y_END);
	glcdn_WriteCommand(MEMWRITE);
		//RGBToChar(color);
		glcdn_WriteData(Color1);
		glcdn_WriteData(Color2);
}

void circle(unsigned char Ox,unsigned char Oy,unsigned char Rx,unsigned char fill)
{
	unsigned char xx,xt,yt,rs;
	unsigned int rr;
	yt=Rx;
	rr=Rx*Rx+1;			//补偿 1 修正方形
	rs=(yt+(yt>>1))>>1;		//(*0.75)分开1/8圆弧来画
	for (xt=0;xt<=rs;xt++)
	{
		xx=xt*xt;
		while ((yt*yt)>(rr-xx))yt--;
		zx=Ox+xt;		//第一象限
		zy=Oy-yt;
		point2();
		zx=Ox-xt;		//第二象限
		point2();
		zy=Oy+yt;		//第三象限
		point2();
		zx=Ox+xt;		//第四象限
		point2();

/***************45度镜象画另一半***************/

		zx=Ox+yt;		//第一象限
		zy=Oy-xt;
		point2();
		zx=Ox-yt;		//第二象限
		point2();
		zy=Oy+xt;		//第三象限
		point2();
		zx=Ox+yt;		//第四象限
		point2();
	}
}

⌨️ 快捷键说明

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