⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ziandpic.c

📁 下位机程序 菜单一些模块 园
💻 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 + -