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