📄 3510.c
字号:
#include "3510.h"
#include "aschz.h"
void LCD_Drawhz(uint8_t x, uint8_t y,uint8_t *n,uint8_t len,uint8_t color,uint8_t pen)
{
uint8_t ListLength;
uint8_t ii,i,dd,kk,aa;
ListLength=len;
for (kk=0;kk<ListLength;kk++)
{
LCD_SendCD(0x2a,CMD );//column address set
LCD_SendCD(x,DATA );
LCD_SendCD(x+7,DATA );
LCD_DataOver();
LCD_SendCD(0x2B,CMD );//page address set
LCD_SendCD(y,DATA );
LCD_SendCD(y+15,DATA );
LCD_DataOver();
LCD_SendCD(0x2C,CMD ); //memory write
for (i=0;i<16;i++)
{
aa=n[kk];
dd=asc[i+(n[kk]-32)*16];
for(ii=0;ii<8;ii++)
{
if(dd & 0x80)
LCD_SendCD(pen, DATA);
else
LCD_SendCD(color, DATA);
dd = dd << 1;
}
}
// ListLength++;
x=x+8;
}
LCD_DataOver();
}
//画线
void LCD_DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2,uint8_t Color)
{
uint8_t x, y, t;
if((x1 == x2) && (y1 == y2))
LCD_DrawPoint(x1, y1,Color);
else if(abs(y2 - y1) > abs(x2 - x1))
{
if(y1 > y2)
{
t = y1;
y1 = y2;
y2 = t;
t = x1;
x1 = x2;
x2 = t;
}
for(y = y1; y <= y2; y ++)
{
x = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
LCD_DrawPoint(x, y,Color);
}
}
else
{
if(x1 > x2)
{
t = y1;
y1 = y2;
y2 = t;
t = x1;
x1 = x2;
x2 = t;
}
for(x = x1; x <= x2; x ++)
{
y =(x - x1) * (y2 - y1) / (x2 - x1) + y1;
LCD_DrawPoint(x, y,Color);
}
}
}
//画点
void LCD_DrawPoint(uint8_t x, uint8_t y,uint8_t Color)
{
LCD_SendCD(0x2a,CMD );//column address set
LCD_SendCD(x,DATA );
LCD_SendCD(x,DATA );
LCD_DataOver();
LCD_SendCD(0x2B,CMD );//page address set
LCD_SendCD(y,DATA );
LCD_SendCD(y,DATA );
LCD_DataOver();
LCD_SendCD(0x2C,CMD ); //memory write
LCD_SendCD(Color,DATA );
LCD_DataOver();
}
// 短延时
void Delay5Ms(void)
{
uint16_t i = 5552;
while(i--);
}
//长延时
void Delay400Ms(void)
{
uint8_t i = 5;
uint16_t j;
while(i--)
{
j=17269;
while(j--);
};
}
void LCD_Reset(void)
{
cbi(LCD_RST_PORT, LCD_RST); //set RST = L
Delay5Ms();
sbi(LCD_RST_PORT, LCD_RST); //set RST = H
Delay5Ms();
}
void LCD_SendCD(uint8_t Sdata,uint8_t CD)
{
if (CD==CMD)
{
sbi(LCD_SIO_DDR, LCD_SIO); //set SDI.DDR = 1
cbi(LCD_CS_PORT, LCD_CS); //set CS = L
cbi(LCD_SCL_PORT, LCD_SCL); //set SCK = L
cbi(LCD_SIO_PORT, LCD_SIO); //send 0, for command
sbi(LCD_SCL_PORT, LCD_SCL); //set SCK = H, latch data
}
else
{
sbi(LCD_SIO_DDR, LCD_SIO); //set SDI.DDR = 1
cbi(LCD_CS_PORT, LCD_CS); //set CS = L
cbi(LCD_SCL_PORT, LCD_SCL); //set SCK = L
sbi(LCD_SIO_PORT, LCD_SIO); //send 1, for command
sbi(LCD_SCL_PORT, LCD_SCL); //set SCK = H, latch data
}
//Bit 0(MSB)
cbi(LCD_SCL_PORT, LCD_SCL);
if(Sdata & 0x80)
sbi(LCD_SIO_PORT, LCD_SIO);
else
cbi(LCD_SIO_PORT, LCD_SIO);
sbi(LCD_SCL_PORT, LCD_SCL);
//Bit 1
cbi(LCD_SCL_PORT, LCD_SCL);
if(Sdata & 0x40)
sbi(LCD_SIO_PORT, LCD_SIO);
else
cbi(LCD_SIO_PORT, LCD_SIO);
sbi(LCD_SCL_PORT, LCD_SCL);
//Bit 2
cbi(LCD_SCL_PORT, LCD_SCL);
if(Sdata & 0x20)
sbi(LCD_SIO_PORT, LCD_SIO);
else
cbi(LCD_SIO_PORT, LCD_SIO);
sbi(LCD_SCL_PORT, LCD_SCL);
//Bit 3
cbi(LCD_SCL_PORT, LCD_SCL);
if(Sdata & 0x10)
sbi(LCD_SIO_PORT, LCD_SIO);
else
cbi(LCD_SIO_PORT, LCD_SIO);
sbi(LCD_SCL_PORT, LCD_SCL);
//Bit 4
cbi(LCD_SCL_PORT, LCD_SCL);
if(Sdata & 0x08)
sbi(LCD_SIO_PORT, LCD_SIO);
else
cbi(LCD_SIO_PORT, LCD_SIO);
sbi(LCD_SCL_PORT, LCD_SCL);
//Bit 5
cbi(LCD_SCL_PORT, LCD_SCL);
if(Sdata & 0x04)
sbi(LCD_SIO_PORT, LCD_SIO);
else
cbi(LCD_SIO_PORT, LCD_SIO);
sbi(LCD_SCL_PORT, LCD_SCL);
//Bit 6
cbi(LCD_SCL_PORT, LCD_SCL);
if(Sdata & 0x02)
sbi(LCD_SIO_PORT, LCD_SIO);
else
cbi(LCD_SIO_PORT, LCD_SIO);
sbi(LCD_SCL_PORT, LCD_SCL);
//Bit 7(LSB)
cbi(LCD_SCL_PORT, LCD_SCL);
if(Sdata & 0x01)
sbi(LCD_SIO_PORT, LCD_SIO);
else
cbi(LCD_SIO_PORT, LCD_SIO);
sbi(LCD_SCL_PORT, LCD_SCL);
//done
}
//************************
//颜色模式设置:color=1为4096色模式
// :color=0为256色模式
//************************
void LCD_ColorSet(uint8_t Color)
{
if (Color==TRUE) {
LCD_SendCD(0x3a, CMD); //interface pixel format
LCD_SendCD(0x03, DATA); //0x03 为4096色,0x02为256色
LCD_DataOver();
}
else
{
LCD_SendCD(0x3a, CMD); //interface pixel format
LCD_SendCD(0x02, DATA); //0x03 为4096色,0x02为256色
LCD_DataOver();
LCD_SendCD(0x2d, CMD); //调色板设置
//red
LCD_SendCD(0x00, DATA);
LCD_SendCD(0x02, DATA);
LCD_SendCD(0x03, DATA);
LCD_SendCD(0x04, DATA);
LCD_SendCD(0x05, DATA);
LCD_SendCD(0x06, DATA);
LCD_SendCD(0x08, DATA);
LCD_SendCD(0x0f, DATA);
//green
LCD_SendCD(0x00, DATA);
LCD_SendCD(0x02, DATA);
LCD_SendCD(0x03, DATA);
LCD_SendCD(0x04, DATA);
LCD_SendCD(0x05, DATA);
LCD_SendCD(0x06, DATA);
LCD_SendCD(0x08, DATA);
LCD_SendCD(0x0f, DATA);
//blue
LCD_SendCD(0x00, DATA);
LCD_SendCD(0x03, DATA);
LCD_SendCD(0x06, DATA);
LCD_SendCD(0x0f, DATA);
LCD_DataOver();
}
}
//************************
//清屏:color=1为4096色模式清屏
// :color=0为256色模式清屏
//************************
void LCD_Clear(uint8_t Color)
{
uint8_t x, y;
LCD_SendCD(0x2a,CMD );//column address set
LCD_SendCD(0,DATA );
LCD_SendCD(97,DATA );
LCD_DataOver();
LCD_SendCD(0x2B,CMD );//page address set
LCD_SendCD(0,DATA );
LCD_SendCD(67,DATA );
LCD_DataOver();
LCD_SendCD(0x2C,CMD );//memory write
if (Color==TRUE)
{
for(y = 0; y < 68; y ++)
for(x = 0; x < 147; x ++)
LCD_SendCD(0,DATA );
}
else
{
for(y = 0; y < 68; y ++)
for(x = 0; x < 98; x ++)
LCD_SendCD(0,DATA );
}
LCD_DataOver();
}
void LCD_Initialize(void)
{
uint8_t i;
sbi(LCD_RST_PORT, LCD_RST); //set RST = H
sbi(LCD_RST_DDR, LCD_RST); //set RST.DDR = 1
sbi(LCD_CS_PORT, LCD_CS); //set CS = H
sbi(LCD_CS_DDR, LCD_CS); //set CS.DDR = 1
cbi(LCD_SIO_PORT, LCD_SIO); //set SDI = L
cbi(LCD_SIO_DDR, LCD_SIO); //set SDI.DDR = 0
sbi(LCD_SCL_PORT, LCD_SCL); //set SCK = H
sbi(LCD_SCL_DDR, LCD_SCL); //set SCK.DDR = 1
LCD_Reset();
LCD_SendCD(0x01, CMD); // LCD Software Reset
LCD_DataOver();
Delay5Ms();
LCD_SendCD(0xC6, CMD); // Initial Escape
LCD_DataOver();
LCD_SendCD(0xB9, CMD); // Refresh set
LCD_SendCD(0x00, DATA);
LCD_DataOver();
LCD_SendCD(0xB6, CMD); // Display Control
LCD_SendCD(128, DATA);
LCD_SendCD(128, DATA);
LCD_SendCD(129, DATA);
LCD_SendCD(84, DATA);
LCD_SendCD(69, DATA);
LCD_SendCD(82, DATA);
LCD_SendCD(67, DATA);
LCD_DataOver();
LCD_SendCD(0xB3, CMD); // Gray Scale Position
LCD_SendCD(1, DATA);
LCD_SendCD(2, DATA);
LCD_SendCD(4, DATA);
LCD_SendCD(8, DATA);
LCD_SendCD(16, DATA);
LCD_SendCD(30, DATA);
LCD_SendCD(40, DATA);
LCD_SendCD(50, DATA);
LCD_SendCD(60, DATA);
LCD_SendCD(70, DATA);
LCD_SendCD(80, DATA);
LCD_SendCD(90, DATA);
LCD_SendCD(100, DATA);
LCD_SendCD(110, DATA);
LCD_SendCD(127, DATA);
LCD_DataOver();
LCD_SendCD(0xB5, CMD); // Gamma Curve Set
LCD_SendCD(1, DATA);
LCD_DataOver();
LCD_SendCD(0xBD, CMD); // Power Control
LCD_SendCD(0x00, DATA);
LCD_DataOver();
LCD_SendCD(0xBE, CMD); // Power Control
LCD_SendCD(4, DATA);
LCD_DataOver();
LCD_SendCD(0x11, CMD); // Sleep out
LCD_DataOver();
LCD_SendCD(0xBA, CMD); // Power Control
LCD_SendCD(0x7F, DATA);
LCD_SendCD(0x03, DATA);
LCD_DataOver();
LCD_SendCD(0x36, CMD); // 扫描方式
LCD_SendCD(0xc0, DATA);
LCD_DataOver();
LCD_SendCD(0xB7, CMD); // Temperature gradient set
for(i=0; i<14; i++) {
LCD_SendCD(0, DATA);
}
LCD_DataOver();
LCD_SendCD(0x29, CMD); // Power Control
LCD_DataOver();
LCD_SendCD(0x03, CMD); // Booster Voltage ON
LCD_DataOver();
for(i=0; i<8; i++) { // Booster Voltage stabilisieren lassen
Delay5Ms();
}
LCD_SendCD(0x20, CMD); // Inversion control
LCD_DataOver();
LCD_SendCD(0x25, CMD); // Write contrast
LCD_SendCD(0x45, DATA);
LCD_DataOver();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -