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

📄 line.c

📁 该程序为一arm参考程序,实现在液晶屏上画垂直线,水平线和直线
💻 C
字号:
void Lcd_Draw_VLine (INT16 usY0, INT16 usY1, INT16 usX0, INT8U ucColor, INT16U usWidth)
{
	INT16 usLen;

    if (usY1 < usY0)
    {
        GUISWAP (usY1, usY0);
    }

    while(usWidth-- > 0)
    {
        usLen = usY1 - usY0 + 1;
        while(usLen-- > 0)
        {
        	LCD_PutPixel(usX0, usY0 + usLen, ucColor);
        }
        usX0++;
    }
}           //画垂直线


void Lcd_Draw_HLine (INT16 usX0, INT16 usX1, INT16 usY0, INT8U ucColor, INT16U usWidth)
{
	INT16 usLen;

    if (usX1 < usX0)
    {
        GUISWAP (usX1, usX0);
    }

    while(usWidth-- > 0)
    {
        usLen = usX1 - usX0 + 1;
        while(usLen-- > 0)
        {
        	LCD_PutPixel(usX0 + usLen, usY0, ucColor);
        }
        usY0++;
    }
}         //画水平线


void Lcd_Draw_Line1 (INT16 usX0, INT16 usY0, INT16 usX1, INT16 usY1, INT8U ucColor, INT16U usWidth)
{
	INT16 usDx;
	INT16 usDy;
	INT16 y_sign;
	INT16 x_sign;
	INT16 decision;
	INT16 wCurx, wCury, wNextx, wNexty, wpy, wpx;

	if (usY0 == usY1)
	{
		Lcd_Draw_HLine (usX0, usX1, usY0, ucColor, usWidth);
		return;
	}
	if (usX0 == usX1)
	{
		Lcd_Draw_VLine (usY0, usY1, usX0, ucColor, usWidth);
		return;
	}
	usDx = abs(usX0 - usX1);
	usDy = abs(usY0 - usY1);
	if (((usDx >= usDy && (usX0 > usX1)) ||
        ((usDy > usDx) && (usY0 > usY1))))
    {
        GUISWAP(usX1, usX0);
        GUISWAP(usY1, usY0);
    }
    y_sign = (usY1 - usY0) / usDy;
    x_sign = (usX1 - usX0) / usDx;

    if (usDx >= usDy)
    {
        for (wCurx = usX0, wCury = usY0, wNextx = usX1,
             wNexty = usY1, decision = (usDx >> 1);
             wCurx <= wNextx; wCurx++, wNextx--, decision += usDy)
        {
            if (decision >= usDx)
            {
                decision -= usDx;
                wCury += y_sign;
                wNexty -= y_sign;
            }
            for (wpy = wCury - usWidth / 2;
                 wpy <= wCury + usWidth / 2; wpy++)
            {
                    LCD_PutPixel(wCurx, wpy, ucColor);
            }

            for (wpy = wNexty - usWidth / 2;
                 wpy <= wNexty + usWidth / 2; wpy++)
            {
                    LCD_PutPixel(wNextx, wpy, ucColor);
            }
        }
    }
    else
    {
        for (wCurx = usX0, wCury = usY0, wNextx = usX1,
                wNexty = usY1, decision = (usDy >> 1);
            wCury <= wNexty; wCury++, wNexty--, decision += usDx)
        {
            if (decision >= usDy)
            {
                decision -= usDy;
                wCurx += x_sign;
                wNextx -= x_sign;
            }
            for (wpx = wCurx - usWidth / 2;
                 wpx <= wCurx + usWidth / 2; wpx++)
            {
                    LCD_PutPixel(wpx, wCury, ucColor);
            }

            for (wpx = wNextx - usWidth / 2;
                 wpx <= wNextx + usWidth / 2; wpx++)
            {
                    LCD_PutPixel(wpx, wNexty, ucColor);
            }
        }
    }
}             //画线

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -