📄 lcm.c
字号:
#include "LCM.h"
#include "reg51.h"
//#include "font.h"
#define SOFT_RESET 0x01
#define SLEEP_OUT 0x11
#define DISPLAY_ON 0x29
#define BOOSTER_ON 0x03
#define COLOR_INTERFACE 0x3A
#define COLOR_8_BIT 0x02
#define COLOR_12_BIT 0x03
#define COLOR_16_BIT 0x05
#define COLOR_SET 0x2D
#define MEM_ACCESS_CTRL 0x36
#define MIRROR_X 6
#define MIRROR_Y 7
#define VERT_WRITE 5
#define RGB 3
#define MEM_WRITE 0x2C
#define SET_X_ADDR 0x2A
#define SET_Y_ADDR 0x2B
#define backc 0xff
#define DISP_X_START 0
#define DISP_Y_START 0
#define DISP_X_END 131
#define DISP_Y_END 131
#define RED 0xE0
#define GREEN 0x1C
#define BLUE 0x03
#define YELLOW 0xFC
#define MAGENTA 0xE3
#define CYAN 0x1F
#define BLACK 0x00
#define WHITE 0xFF
void delay5ms(void)
{
uint i;
for(i=0; i<2200; i++);
}
void n6100SendCommand(uint8_t dat)
{
uchar i=0;
CS=0;
SCLK=0;
SDATA=0;
SCLK=1;
SCLK=0;
if(dat&0x80)
SDATA=1;
else
SDATA=0;
SCLK=1;
SCLK=0;
if(dat&0x40)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x20)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x10)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x08)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x04)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x02)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x01)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;
CS=1; // CS wieder auf 1
//SPCR = 0x00; // SPI wieder disablen
}
void n6100SendData(uint8_t dat)
{
uchar i=0;
// CS auf Low setzen
CS=0;
// 1. Bit (Command/Data) per Software erzeugen
SCLK=0;
SDATA=1; // logisch 1 f黵 Daten
SCLK=1;
SCLK=0;
if(dat&0x80)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x40)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x20)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x10)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x08)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x04)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x02)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;//set(PORTB,SCLK);
SCLK=0;//cli(PORTB,SCLK);
if(dat&0x01)
SDATA=1;//set(PORTB,SDATA);
else
SDATA=0;//cli(PORTB,SDATA);
SCLK=1;
CS=1;
}
uint8_t memAccessCtrl=0;
void n6100SetDrawRect(uint8_t startX, uint8_t endX, uint8_t startY, uint8_t endY) {
n6100SendCommand(SET_X_ADDR);
n6100SendData(startX+1);
n6100SendData(endX+1);
n6100SendCommand(SET_Y_ADDR);
n6100SendData(startY+1);
n6100SendData(endY+1);
}
void n6100Clear(void)
{
uint i;
n6100SetDrawRect(DISP_X_START, DISP_X_END, DISP_Y_START, DISP_Y_END);
n6100SendCommand(MEM_WRITE);
for(i=0; i<18000; i++)
{
n6100SendData(backc);
}
}
void n6100Init(void)
{
uint8_t i;
SDATA=0;
SCLK=0;
SDATA=1;
SCLK=1;
SDATA=0;
SCLK=0;
SDATA=1;
SCLK=1;
CS=1;
REST=1;
delay5ms();
REST=0;
delay5ms();
REST=1;
SDATA=1;
SCLK=1;
CS=1;
n6100SendCommand(SOFT_RESET);
n6100SendCommand(SLEEP_OUT);
n6100SendCommand(DISPLAY_ON);
n6100SendCommand(BOOSTER_ON);
for(i=0; i<10; i++) {
delay5ms();
}
n6100SendCommand(COLOR_INTERFACE);
n6100SendData(COLOR_8_BIT);
n6100SendCommand(COLOR_SET);
// red
n6100SendData(0x00);
n6100SendData(0x02);
n6100SendData(0x03);
n6100SendData(0x04);
n6100SendData(0x05);
n6100SendData(0x06);
n6100SendData(0x08);
n6100SendData(0x0f);
// green
n6100SendData(0x00);
n6100SendData(0x02);
n6100SendData(0x03);
n6100SendData(0x04);
n6100SendData(0x05);
n6100SendData(0x06);
n6100SendData(0x08);
n6100SendData(0x0F);
// blue
n6100SendData(0x00);
n6100SendData(0x03);
n6100SendData(0x06);
n6100SendData(0x0F);
n6100SendCommand(MEM_ACCESS_CTRL);
memAccessCtrl = (0x01 << RGB);
n6100SendData(memAccessCtrl|0x80);
n6100SendCommand(0X25);//light
n6100SendData(40); //
n6100Clear();
}
void lcd_setxy(uchar x,uchar x1,uchar y,uchar y1)
{
n6100SendCommand(SET_X_ADDR);
n6100SendData(x);
n6100SendData(x1);
n6100SendCommand(SET_Y_ADDR);
n6100SendData(y);
n6100SendData(y1);
}
void display_china1(char *p,uchar f_cl,uchar b_cl,uchar x,uchar y)
{
uchar i=0;
uchar m=0;
uchar j=0;
for(i=0;i<16;i++)
{
lcd_setxy(x,131,y+i,131);
n6100SendCommand(MEM_WRITE);
j=*(p+i*2);
for(m=0;m<8;m++)
{
if(j&0x80)
n6100SendData(f_cl);
else
n6100SendData(b_cl);
j=j<<1;}
j=*(p+i*2+1);
for(m=0;m<8;m++)
{
if(j&0x80)
n6100SendData(f_cl);
else
n6100SendData(b_cl);
j=j<<1;
}
}
}
void display_picture(char *p,uchar f_cl,uchar b_cl,uchar x,uchar y)
{
uchar i,k=0;
uchar m=0;
uchar j=0;
for(i=0;i<32;i++)
{
lcd_setxy(x,131,y+i,131);
n6100SendCommand(MEM_WRITE);
for(k=0;k<4;k++)
{j=*(p+i*4+k);
for(m=0;m<8;m++)
{
if(j&0x80)
n6100SendData(f_cl);
else
n6100SendData(b_cl);
j=j<<1;} }
}
}
void display_char(char *p,uchar f_cl,uchar b_cl,uchar x,uchar y)
{
uchar i=0;
uchar m=0;
uchar j=0;
for(i=0;i<16;i++)
{
lcd_setxy(x,131,y+i,131);
n6100SendCommand(MEM_WRITE);
j=*(p+i);
for(m=0;m<8;m++)
{
if(j&0x80)
n6100SendData(f_cl);
else
n6100SendData(b_cl);
j=j<<1;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -