📄 ziandpic.c
字号:
#include "config.h"
#include "order.h"
//文本方式设置显示坐标
static void glcd_xy(unsigned char x, unsigned char y)
{
int addr;
addr = glcd_T_BASE + (y * glcd_BYTES_PER_ROW) + x;
glcd_set_address(addr); //设置显示地址
}
//写字符串
//显示字符串ROM
void wrchar(unsigned char x,unsigned char y, const unsigned char *stringr)
{
unsigned char i;
glcd_xy(x,y); //CHAR ADDR
dataR4 = 0XB0;
Outin();
for (i = 0 ; (stringr[i])!= 0 ; i++)
{
Pr03();
//转换ASCII码为屏幕内码
ACC = (stringr[i]) - 0X20;
Outd(); //写字符,增加内部RAM指针
}
dataR4 = 0XB2;
Outin();
}
//写点阵
void hanzipic(unsigned char column , unsigned char row ,const unsigned char *pthanzi , unsigned char hsize , unsigned char wsize , bit zfbit)
{
unsigned char i;
unsigned char j;
unsigned int lcdadrtemp;
unsigned int lcdadr;
//*pthanzi = 0x50; //test const
if ((column >= glcd_HAIZIXMAX) || (row >= glcd_HAIZIYMAX))
return;
lcdadr = glcd_G_BASE + (row * glcd_BYTES_PER_ROW) + column;
for (i = 0 ; i < wsize/8 ; i++)
{
lcdadrtemp = lcdadr;
lcdadr = lcdadr + 1;
for ( j = 0 ; j < hsize ; j++)
{
glcd_set_address(lcdadrtemp);
dataR3 = *pthanzi;
if(zfbit == 0)
{
dataR3 = ~dataR3;
_nop_();
}
dataR4 = 0XC0;
Outi1();
pthanzi++;
lcdadrtemp = lcdadrtemp + 0X1E;
}
}
}
//画点
void lcd_pixel(unsigned char column , unsigned char row , bit show)
{
int addr; // memory address of byte containing pixel to write
if ((column>=glcd_XMAX) || (row>=glcd_YMAX))
return;
addr = glcd_G_BASE + (row*glcd_BYTES_PER_ROW) + (column/8);
glcd_set_address(addr); // set LCD addr. pointer
if (show == 1) // 0xf8为画点命令
{
dataR4 = (0xF8 | (7-column%8));
Outin();
}
else //0xf0为清点命令
{
dataR4 = (0xF0 | (7-column%8));
Outin();
}
}
//画线
void lcd_line(int x1, int y1, int x2, int y2, bit show)
{
int dy;
int dx;
int stepx , stepy , fraction;
dy = y2 - y1;
dx = x2 - x1;
if (dy < 0) //|dy|,setpy
{
dy = -dy;
stepy = -1;
}
else
{
stepy = 1;
}
if (dx < 0) //|dx|,setpx
{
dx = -dx;
stepx = -1;
}
else
{
stepx = 1;
}
dy <<= 1;
dx <<= 1;
lcd_pixel(x1,y1,show);
/*算法关键部分*/
if (dx > dy)
{
fraction = dy - (dx >> 1);
while (x1 != x2)
{
if (fraction >= 0)
{
y1 = y1 + stepy;
fraction = fraction - dx;
}
x1 = x1 + stepx;
fraction = fraction +dy;
lcd_pixel(x1,y1,show);
}
}
else
{
fraction = dx - (dy >> 1);
while (y1 != y2)
{
if (fraction >= 0)
{
x1 = x1 + stepx;
fraction = fraction - dy;
}
y1 = y1 + stepy;
fraction = fraction + dx;
lcd_pixel(x1,y1,show);
}
}
}
//画矩形
void lcd_box(int x1 , int y1 , int x2 , int y2 , bit show)
{
lcd_line(x1,y1,x2,y1,show); // up
lcd_line(x1,y2,x2,y2,show); // down
lcd_line(x2,y1,x2,y2,show); // right
lcd_line(x1,y1,x1,y2,show); // left
}
//以x,y为圆心,以radius为半径
//(show=1画点,show=0清点)
void lcd_circle(int x , int y , int radius , bit show)
{
int xc = 0;
int yc;
int p;
yc = radius;
p = 3 - (radius << 1);
while (xc <= yc)
{
lcd_pixel(x + xc, y + yc, show);
lcd_pixel(x + xc, y - yc, show);
lcd_pixel(x - xc, y + yc, show);
lcd_pixel(x - xc, y - yc, show);
lcd_pixel(x + yc, y + xc, show);
lcd_pixel(x + yc, y - xc, show);
lcd_pixel(x - yc, y + xc, show);
lcd_pixel(x - yc, y - xc, show);
if (p < 0)
{
p += (xc++ << 2) + 6;
}
else
{
p += ((xc++ - yc--)<<2) + 10;
}
}
}
//保留备用
/********************************************************************
以指定的数据进行画点
void glcd_show(unsigned char * s,int start_line,int how_many_line)
{
int addr,i;
addr = glcd_G_BASE +start_line*30;
glcd_set_address(addr);
glcd_cput(0xB0); //自动写模式
for(i=0;i<how_many_line*30;i++)
{
glcd_dput(s[i]);
}
glcd_cput(0xB2);
}
dataR2 = lcdadrtemp & 0X00FF;
dataR3 = (lcdadrtemp & 0XFF00) >> 8;
dataR4 = 0X24;
Outi2();
void wrchar(const unsigned char *ptchar , unsigned char charsize , unsigned int charadr)
{
unsigned char i;
glcd_set_address(charadr);
dataR4 = 0XB0;
Outin();
for (i = 0 ; i < charsize ; i++)
{
Pr03();
ACC = *ptchar;
Outd();
ptchar++;
}
dataR4 = 0XB2;
Outin();
}
***********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -