极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6305|回复: 9

用 1602实现进度条

[复制链接]
发表于 2014-10-24 09:34:55 | 显示全部楼层 |阅读模式
本帖最后由 zoologist 于 2014-10-27 08:29 编辑

https://www.electronicsblog.net/ ... -custom-characters/ 这里发现比较有趣的代码:用1602LCD 实现一个进度条。根据文章指引,我也试验了一下。

弄明白了原理,程序非常简单:

//https://www.electronicsblog.net/
//Arduino LCD horizontal progress bar using custom characters
#include <Wire.h>
#include "LiquidCrystal_I2C.h"

#define lenght 16.0

double percent=100.0;
unsigned char b;
unsigned int peace;
int value=100;

// custom charaters

LiquidCrystal_I2C lcd(0x27,16,2);

//定义进度块
byte p1[8] = {
                0x10,
                0x10,
                0x10,
                0x10,
                0x10,
                0x10,
                0x10,
                0x10};

byte p2[8] = {
                0x18,
                0x18,
                0x18,
                0x18,
                0x18,
                0x18,
                0x18,
                0x18};

byte p3[8] = {
                0x1C,
                0x1C,
                0x1C,
                0x1C,
                0x1C,
                0x1C,
                0x1C,
                0x1C};

byte p4[8] = {
                0x1E,
                0x1E,
                0x1E,
                0x1E,
                0x1E,
                0x1E,
                0x1E,
                0x1E};

byte p5[8] = {
                0x1F,
                0x1F,
                0x1F,
                0x1F,
                0x1F,
                0x1F,
                0x1F,
                0x1F};

void setup() {
                lcd.init();                      //初始化LCD
                lcd.backlight();                 //打开背光

                        //将自定义的字符块发送给LCD
                        //P1 是第一个,P2 是第二个,以此类推
                lcd.createChar(0, p1);                         
                lcd.createChar(1, p2);
                lcd.createChar(2, p3);
                lcd.createChar(3, p4);
                lcd.createChar(4, p5);
}

void loop()
{
                //设置光标在左上角
                lcd.setCursor(0, 0);

                percent = value/1024.0*100.0;

                //当超过100%的时候自动校正为 100%
                if (percent>100) {percent=1;value=0;}

                lcd.print("     ");
                lcd.print(percent);
                lcd.print(" % ");

                //移动光标到第二行
                lcd.setCursor(0,1);

                double a=lenght/100*percent;

                // drawing black rectangles on LCD
                // 显示全黑块。
                if (a>=1) {
                    for (int i=1;i<a;i++) {
                                lcd.write(4);
                                b=i;
                        } //for (int i=1;i<a;i++)
                    a=a-b;
                }
                else {b=0;}

                peace=a*5;

                // drawing charater's colums
                // 显示除去全黑块之后的零头
                switch (peace) {
                  case 0:
                        break;
                  case 1:
                        lcd.write(0);
                        break;
                  case 2:
                        lcd.write(1);
                        break;
                  case 3:
                        lcd.write(2);
                        break;
                  case 4:
                        lcd.write(3);
                        break;
                  } //switch (peace)

               // clearing line
               // 用空格填充剩下的位置
              for (int i =0;i<(lenght-b);i++) {
                lcd.print(" ");
                }

                //递增
                value=value+10;                               
                delay(300);

  }

连接

1602pg-765x1024.jpg

大图

1602pg2.jpg

完整代码下载


pb1602.zip (5.51 KB, 下载次数: 46)
回复

使用道具 举报

发表于 2014-10-24 13:36:27 | 显示全部楼层
本帖最后由 xinhoujue 于 2014-10-24 13:37 编辑

好资料,谢谢分享啦~~~~~~~~~~~~晕,代码包无法下载??????

点评

恩 好奇怪,确实下不了了 这里可以 http://www.lab-z.com/wp-content/uploads/2014/10/pb1602.zip  发表于 2014-10-24 14:51
回复 支持 反对

使用道具 举报

发表于 2014-10-24 21:15:55 | 显示全部楼层
代码无法下砸啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-25 07:59:14 | 显示全部楼层
本帖最后由 弘毅 于 2014-10-26 19:32 编辑

再传一次试试看
回复 支持 反对

使用道具 举报

发表于 2014-10-25 14:12:18 | 显示全部楼层
好东西,想到一个玩法,两块1602,加上三轴传感器,可以显示体感状态。谢谢分享。
回复 支持 反对

使用道具 举报

发表于 2014-10-25 14:26:31 | 显示全部楼层
zoologist 发表于 2014-10-25 07:59
再传一次试试看

还是下载不了,是不是和弘毅联系一下。

点评

嗯嗯 联系了 问问他  发表于 2014-10-25 17:45
回复 支持 反对

使用道具 举报

发表于 2014-10-26 19:32:01 | 显示全部楼层
求帮忙重新传一下附件。。。。论坛打了补丁后。。附件上传功能出现故障,现在已经修复了。。。
回复 支持 反对

使用道具 举报

发表于 2020-3-30 19:29:29 | 显示全部楼层
好资料,谢谢分享。
回复 支持 反对

使用道具 举报

发表于 2020-4-9 18:48:43 | 显示全部楼层
點子不錯,繼續努力
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-7-9 11:05 , Processed in 0.069909 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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