欢迎来到泰骏兴电子,大家有问题可以直接联系管理员QQ:233619809单片机 QQ群:59194556 各位游客也可以注册玩玩,享受更多权益。温馨提示:本网站仅提供平台学习以及渠道,一切后果自行承担,还望广大用户提高自我意识,请不要轻易相信他人,请不要轻易相信他人,请不要轻易相信他人。为了更好的管理论坛工作,所以现在使用邮箱注册,如果以前的邮箱不能修改的,请联系管理员代为修改

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 224|回复: 0

自己做个简单的进度条

[复制链接]
发表于 2022-11-23 15:09:11 | 显示全部楼层 |阅读模式
本帖最后由 bcwx 于 2022-11-23 15:16 编辑

这是一个进度条小程序,非常简单,设置好参数直接调用就可以了,前提条件是要有画空心矩形程序,画填充程序



typedef struct
{   
            u16 x;//起始X地址
            u16 y;//起始Y地址
            u16 x_w;//结束X地址
            u16 y_h;//结束Y地址
            u16 rop_color; //颜色
            u16 br_color;//边框颜色
            u16 perc_bl_color;//进度条的背景
            u8 thk;//厚度
            u8 perc;//当前的百分比
}PS_bar;




void ProgressBar(PS_bar bar)
{
            u8 w;
            u16 q;
            q=(float)(bar.perc*((bar.x_w-bar.x)/100.0));//将百分比转换成在屏幕上的像素
            printf("%d%%-%d\r\n",bar.perc,q);
            if(bar.perc==0)//绘制 边框
    {
            POINT_COLOR=bar.br_color;//画矩形的颜色
            for(w=0;w<bar.thk;w++)    //边框的厚度
        {
            LCD_DrawRectangle(bar.x+w,bar.y+w,bar.x_w-w,bar.y_h-w);//调用画矩形程序
//画矩形程序,起始的X坐标,起始是Y标,结束的X坐标 ,结束的Y坐标
        }
    }
            else
    {
            if(bar.perc<99)//绘制进度条
        {
            LCD_Fill_dma(bar.x+bar.thk+q,bar.y+bar.thk,bar.x_w-bar.thk,bar.y_h-bar.thk+1,bar.perc_bl_color);//调用画填充矩形程序进度背景  

            LCD_Fill_dma(bar.x+bar.thk,bar.y+bar.thk,bar.x+bar.thk+q,bar.y_h-bar.thk+1,bar.rop_color);//调用画填充矩形程序已经过了的进度
//可以给这个程序换成自己的填充程序  填充程序的意思是,起始的X坐标,起始是Y标,结束的X坐标 ,结束的Y坐标,颜色

        }
    }
}
void xs()
{
            u8 q=0;
            PS_bar bar;
            bar.x=8;            //进度条起始地址
            bar.x_w=232;        //进度条结束地址
            bar.y=260;            //进度条起始Y地址
            bar.y_h=268;        //进度条结束Y地址
            bar.thk=2;            //进度条边框厚度
            bar.br_color=WHITE;    //进度条边框颜色
            bar.rop_color=RED;    //设置进度条颜色
            bar.perc=0;            //进度值
            bar.perc_bl_color=0;//进度条背景色
            ProgressBar(bar);    //第一次调用必须进度值为0,不然不显示边框
            while(1)
    {
            
            if(q==0)bar.perc++;
            else{bar.perc--;}//通过条件控制进度条增加还是减少
            
            if(bar.perc>99){q=1;}//进度条递减条件
            if(bar.perc==0){q=0;}//进度条递增条件
            
            ProgressBar(bar);//反应到进度条上
            
            
            POINT_COLOR=0xFFFF;
            BACK_COLOR=0;
            LCD_ShowNum(0,0,bar.perc,3,16);//这里是随便给进度显示出来
            delay_ms(10);            
    }
}





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|泰骏兴电子科技有限公司 ( 粤ICP备2023060260号-1 ) 单片机爱好者

GMT+8, 2026-5-27 02:30

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表