📄 lcm_240128.h
字号:
//column为水平点数,row为垂直点数
//show=1画点,show=0清点
void Lcd_Point(unsigned char x, unsigned char y, unsigned char draw)
{
unsigned int addr; // memory address of byte containing pixel to write
if( (x >= LCD_X_MAX) || (y >= LCD_Y_MAX) ) return;
addr = (y * LCD_WIDTH) + (x>>3) + LCD_GRAPH_BASE;
Lcd_SendCom2 ((unsigned char)(addr),(addr>>8),COMM_SET_POSITION); // set LCD addr. pointer
if(draw)
Lcd_SendCom0(COMM_BIT_SET|(7-x&0x07)); // 0xf8为画点命令
else
Lcd_SendCom0(COMM_BIT_CLR|(7-x&0x07)); // 0xf0为清点命令
}
/***********************************************************************
画一条x1,y1到x2,y2的直线
(show=1画点,show=0清点)
***********************************************************************/
void Lcd_Line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char draw)
{
int dx,dy,e,t;
if (x1 == x2) //画水平线
{
if (y1 > y2) e=-1;
else e=1;
for (;y1 != y2; y1+=e) Lcd_Point(x1,y1,draw);
Lcd_Point(x1,y1,draw);
return;
}
if (y1 == y2) //画竖直线
{
if (x1 > x2) e=-1;
else e=1;
for (;x1 != x2; x1 += e) Lcd_Point(x1,y1,draw);
Lcd_Point(x1,y1,draw);
return;
}
dx=x2-x1;
if (dx<0) //将第2、3象限转为1、4象限
{
t=x1;x1=x2;x2=t;
t=y1;y1=y2;y2=t;
dx=-dx;
}
dy=y2-y1;
if (dy>0) //第4象限,步进为1
{
t=1;
}
else //第1象限,步进为-1
{
t=-1;
dy=-dy;
}
Lcd_Point(x1,y1,draw);
if (dx>=dy) //斜率<1,x步进1,y由差值决定是否加t
{
e=dy-(dx>>1);
while (x1 != x2)
{
if (e>0)
{
y1+=t;
e-=dx;
}
x1++;
e+=dy;
Lcd_Point(x1,y1,draw);
}
}
else //斜率>1,y步进t,x由差值决定是否加1
{
e=dx-(dy>>1);
while (y1 != y2)
{
if (e>0)
{
x1++;
e-=dy;
}
y1+=t;
e+=dx;
Lcd_Point(x1,y1,draw);
}
}
}
/***********************************************************************
以x,y为圆心,以radius为半径画贺
(show=1画点,show=0清点)
***********************************************************************/
void Lcd_Circle(unsigned char x, unsigned char y, unsigned char r, unsigned char draw)
{
int xc = 0;
int yc ;
int p ;
yc=r;
p = 3 - (r<<1);
while (xc <= yc)
{
Lcd_Point(x + xc, y + yc, draw);
Lcd_Point(x + xc, y - yc, draw);
Lcd_Point(x - xc, y + yc, draw);
Lcd_Point(x - xc, y - yc, draw);
Lcd_Point(x + yc, y + xc, draw);
Lcd_Point(x + yc, y - xc, draw);
Lcd_Point(x - yc, y + xc, draw);
Lcd_Point(x - yc, y - xc, draw);
if (p < 0)
p += (xc++ << 2) + 6;
else
p += ((xc++ - yc--)<<2) + 10;
}
}
/*
//画半圆
void glcd_circle_half(int x, int y, int radius, unsigned char show)
{
int xc = 0;
int yc ;
int p ;
yc=radius;
p = 3 - (radius<<1);
while (xc <= yc)
{
// Lcd_Point(x + xc, y + yc, show);
Lcd_Point(x + xc, y - yc, show);
// Lcd_Point(x - xc, y + yc, show);
Lcd_Point(x - xc, y - yc, show);
// Lcd_Point(x + yc, y + xc, show);
Lcd_Point(x + yc, y - xc, show);
// Lcd_Point(x - yc, y + xc, show);
Lcd_Point(x - yc, y - xc, show);
if (p < 0)
p += (xc++ << 2) + 6;
else
p += ((xc++ - yc--)<<2) + 10;
}
}
*/
//画矩形
void Lcd_Box(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char draw, unsigned char fill)
{
if (fill)
{
for (; x1 != x2; x1++) Lcd_Line(x1,y1,x1,y2,draw);
}
else
{
Lcd_Line(x1,y1,x1,y2,draw);
Lcd_Line(x1,y1,x2,y1,draw);
Lcd_Line(x2,y1,x2,y2,draw);
Lcd_Line(x1,y2,x2,y2,draw);
}
}
//***********************************************************************
//以x,y点为原点,以degree为角度,画一条从内径到外径之间的线段
//(show=1画点,show=0清点)
//***********************************************************************
/*
void glcd_degree_line(int x, int y, int degree, int inner_radius, int outer_radius, unsigned char show)
{
int fx,fy,tx,ty;
fx = x + (inner_radius * sin(degree * 3.14 / 180)); // ???????????????
fy = y - (inner_radius * cos(degree * 3.14 / 180));
tx = x + (outer_radius * sin(degree * 3.14 / 180));
ty = y - (outer_radius * cos(degree * 3.14 / 180));
glcd_line(fx,fy,tx,ty,show);
}
//画上函数线段的包括线
void glcd_degree_line_bold(int x, int y, int degree, int inner_radius, int outer_radius, unsigned char show)
{
int fx,fy,tx,ty;
fx = x + (inner_radius * sin(degree * 3.14 / 180)); // ???????????????
fy = y - (inner_radius * cos(degree * 3.14 / 180));
tx = x + (outer_radius * sin(degree * 3.14 / 180));
ty = y - (outer_radius * cos(degree * 3.14 / 180));
glcd_line(fx,fy,tx,ty,show);
glcd_line(fx+1,fy+1,tx+1,ty+1,show);
glcd_line(fx-1,fy-1,tx-1,ty-1,show);
}
*/
//画进度条函数
/*
void glcd_fill(int x1, int y1, int x2, int y2, unsigned char persent,char first)
{
char M,horizon_line,horizon_line2,i,str1[10];
if(persent>100)return;
if(!first){
glcd_line(x1,y2,x2,y2,1); // down
glcd_line(x2,y1,x2,y2,1); // right
glcd_line(x1,y1,x1,y2,1); // left
first=1;
}
M=100/abs(y2-y1);
horizon_line=persent/M;
for(i=0;i<horizon_line;i++)
glcd_line(x1+2,y2-2-i,x2-2,y2-2-i,1);
horizon_line2=100/M;
for(i=horizon_line;i<horizon_line2;i++)
glcd_line(x1+2,y2-2-i,x2-2,y2-2-i,0);
sprintf(str1,"%02d%% ",persent);
glcd_print_ram( (x2+x1)/16-1 , (y2+y1)/16,str1);
}
*/
// 初始化端口
void Lcd_Setup()
{
LCD_CTRL_DDR |= (0x01<<LCD_WR)|(0x01<<LCD_RD)|(0x01<<LCD_CD)|(0x01<<LCD_CE);
LCD_CTRL_PORT |= (0x01<<LCD_WR)|(0x01<<LCD_RD)|(0x01<<LCD_CD)|(0x01<<LCD_CE);//|_BV(glcd_fs_PIN);
Lcd_SET_DATADIR_OUT();
}
// 初始化显存和显示模式
void Lcd_Init()
{
Lcd_ClrScreen();
// Lcd_SendCom2( 0x00,0x00,0x22 ); //设置偏移量寄存器,0x00
Lcd_SendCom2((unsigned char)(LCD_TEXT_BASE),(LCD_TEXT_BASE>>8),COMM_SET_CBUFFER ); //设置文字显示区域首地址CharAddr
Lcd_SendCom2( LCD_WIDTH,0x00,COMM_SET_CWIDTH); //设置文字显示区域宽度:30字节
Lcd_SendCom2((unsigned char)(LCD_GRAPH_BASE),(LCD_GRAPH_BASE>>8),COMM_SET_GBUFFER); //设置图形显示区域首地址GraphAddr
Lcd_SendCom2( LCD_WIDTH,0x00,COMM_SET_GWIDTH); //设置图形显示区域宽度:30字节
Lcd_ClrText(); //清文字缓冲区
Lcd_ClrGraph(); //清图形缓冲区
Lcd_SendCom0(COMM_CUR_MODE|0x07); //设置光标形状 cursor size 8x8
Lcd_SendCom0(COMM_SET_MODE|0x01); //设置显示方式: CGROM方式 文本\图形 "或"
Lcd_SendCom0(COMM_TEXT_GRAPH); //设置显示开关: 1001 1000 图形开,文字开
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -