【雕爷学编程】Arduino动手做(113)---5110液晶屏模块

news2024/11/16 7:56:18

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十三:蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD

在这里插入图片描述
PCD8544
是一块低功耗的CMOS LCD 控制驱动器,设计为驱动48 行84 列的图形显示。所有必须的显示功能集成在一块芯片上,包括LCD 电压及偏置电压发生器,只须很少外部元件且功耗小。

在这里插入图片描述
在这里插入图片描述
PCD8544 特征
单芯片 LCD 控制/驱动
48 行,84 列输出
显示数据 RAM 48*84 位
芯片集成:
——LCD 电压发生器(也可以使用外部电压供应)
——LCD偏置电压发生器
——振荡器不需要外接元件(也可以使用外部时钟)
外部 RES(复位)输入引脚
串行界面最高 4.0Mbits/S
CMOS 兼容输入
混合速率:48
逻辑电压范围 VDD 到 VSS:2.7V~3.3V
显示电压范围 VLCD 到 VSS:
——6.0~8.5V LCD内部电压发生器(充许电压发生器)
——6.0~9.0V LCD 外部电压供应(电压发生器关闭)
低功耗,适用于电池供电系统
关于 VLCD的温度补偿
使用温度范围:-25~70℃

在这里插入图片描述
在这里插入图片描述

这块屏原来是20多年前发布的诺基亚5110手机的屏幕

在这里插入图片描述
5110液晶屏模块特点

●84x48 的点阵LCD,可以显示4 行汉字,

●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有8条。支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。

●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。

●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。

●采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。

在这里插入图片描述
5110液晶屏模块底板为本站设计,四角有定位孔,同时提供上下两排接线端口,排列如下:
RST ——复位
CE —— 片选
DC —— 数据/指令选择
DIN —— 串行数据线
CLK —— 串行时钟线
VCC —— 电源输入(3.3v和5v均可,经过实验验证,没有问题)
BL —— 背光控制端
GND —— 地线
接口为串行SPI接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

工作原理
利用PC上的16×16点阵汉字库,提取后将点阵文件存入ROM,直接利用PC中汉字内码作为单片机系统的编码(不再形成新的汉字编码)。在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的“A”在字模的记载方式如图

在这里插入图片描述
在这里插入图片描述
Arduino接线示意图

在这里插入图片描述
Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十三:蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD 

1、安装“LCD5110_Basic”库(下载链接 http://www.rinkydinkelectronics. ... e=LCD5110_Basic.zip)

2、项目测试 :点亮模块

3、模块接线

Nokia 5110  Arduino

RST               6

CE                 7

DC                5

DIN              4

CLK              3

VCC            5V

BL              3V3

GND         GND

*/



#include <LCD5110_Basic.h>

LCD5110 myGLCD(3,4,5,6,7);

extern uint8_t SmallFont[];

extern uint8_t MediumNumbers[];

extern uint8_t BigNumbers[];



void setup(){

  myGLCD.InitLCD(); //Intializing LCD

  myGLCD.setContrast(69);//调整对比度0-127

}



void loop(){

  myGLCD.setFont(SmallFont);

  myGLCD.print("Hello World",CENTER,16);

  delay(1000);

  myGLCD.clrScr();

}


<LCD5110_Basic.h>常用函数

LCD5110(SCK,MOSI,DC,RST,CS);//设置引脚

Usage: LCD5110 myGLCD(8,9,10,11,12);

InitLCD([contrast]);//初始化

Usage:myGLCD.initLCD();

setContrast(contrast);//设置对比度(0-127)

Usage:myGLCD.setContrast(70);

enableSleep();//设置睡眠状态

Usage:myGLCD.enableSleep();

disableSleep();//关闭睡眠状态

Usage:myGLCD.disableSleep();

clrScr();//清屏

Usage:myGLCD.clrScr();

clrRow(row[,start_x[,end_x]]);//清除行的一部分或者整行

Usage:myGLCD.clrRow(542);

invert(mode);//倒置

Usage:myGLCD.invert(true);

print(st,x,y);//显示字符串

Usage:myGLCD.print("Hello Wrold", CENTER, 0);

printNumI(num,x,y[,length[,filler]]);//显示整数

Usage:myGLCD.printNumI(num, CENTER, 0);

printNumF(num,dec,x,y[,divider[,length[,filler]]]);//显示小数

Usage:myGLCD.printNumF(num, 3,CENTER, 0);

setFont(fontname);//设置字体大小

Usage:myGLCD.setFont(SmallFont);

drawBitmap(x,y,data,sx,sy);//用于显示自定义字符

Usage:myGLCD.drawBitmap(0,0,bitmap,32,32);


Arduino实验场景图

在这里插入图片描述
Arduino实验开源代码之二

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十三:蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD 

1、安装 "U8glib.h"库-工具-管理库-搜索-安装

2、项目测试 :简易数字示波器(显示X\Y坐标体系)

3、模块接线

Nokia 5110  Arduino

RST  6

CE  7

DC  5

DIN  4

CLK  3

VCC  5V

BL  3V3

GND  GND

*/

#include "U8glib.h"

int x,y; int Buffer[84];

U8GLIB_PCD8544 u8g(3, 4, 99, 5, 6);

// SPI Com: SCK = 3, MOSI = 4, CS = 接地, dc = 5, Reset = 6

void setup()

{

  analogReference(INTERNAL); //ADC使用单片机内部1.1V基准

  u8g.setContrast(100);//设置对比度0-255

}

void loop()

{

for(x = 0;x < 84;x++)  //信号采样

    Buffer[x] = 47-(analogRead(A0)>>4);

    u8g.firstPage();  //清屏

    do          //显示

    {

    for(x = 0;x < 83;x++)

    u8g.drawLine(x,Buffer[x],x,Buffer[x+1]);  //画相邻两点连线

    u8g.drawLine(42,0,42,47);  // 画x坐标轴

    u8g.drawLine(0,24,84,24); // 画y坐标轴

    for(x=2;x<84;x+=8)      //画x坐标轴刻度

    u8g.drawLine(x,23,x,25);

    for(x=0;x<48;x+=8)      //画y坐标轴刻度

    u8g.drawLine(41,x,43,x);  

    u8g.drawFrame(0,0,84,48); //画边框  

    }

    while(u8g.nextPage( ));

    delay(1000);

}

Arduino实验场景图

在这里插入图片描述

Arduino实验开源代码之三

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十三:蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD 

1、安装“LCD5110_Basic”库(下载链接 http://www.rinkydinkelectronics. ... e=LCD5110_Basic.zip)

2、项目测试 :尝试输出汉字“国庆快乐”

3、模块接线

Nokia 5110  Arduino

RST                 6

CE                   7

DC                  5

DIN                4

CLK                3

VCC               5V

BL                3V3

GND           GND

*/



int LCD_CE=7;

int LCD_RST=6;

int SCLK=3;

int SDIN=4;

int LCD_DC=5;

//****************************定义ASCII字符**********************//

/**********************************

6 x 8 font

1 pixel space at left and bottom

index = ASCII - 32

***********************************/

const unsigned char font6x8[][6] =

{

  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp

  { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },  // !

  { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },  // "

  { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },  // #

  { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },  // $

  { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },  // %

  { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },  // &

  { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },  // '

  { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },  // (

  { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },  // )

  { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },  // *

  { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },  // +

  { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },  // ,

  { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },  // -

  { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },  // .

  { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },  // /

  { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },  // 0

  { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },  // 1

  { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },  // 2

  { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },  // 3

  { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },  // 4

  { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },  // 5

  { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },  // 6

  { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },  // 7

  { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },  // 8

  { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },  // 9

  { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },  // :

  { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },  // ;

  { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },  // <

  { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },  // =

  { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },  // >

  { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },  // ?

  { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },  // @

  { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },  // A

  { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },  // B

  { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },  // C

  { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },  // D

  { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },  // E

  { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },  // F

  { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },  // G

  { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },  // H

  { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },  // I

  { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },  // J

  { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },  // K

  { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },  // L

  { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },  // M

  { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },  // N

  { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },  // O

  { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },  // P

  { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },  // Q

  { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },  // R

  { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },  // S

  { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },  // T

  { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },  // U

  { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },  // V

  { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },  // W

  { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },  // X

  { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },  // Y

  { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },  // Z

  { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },  // [

  { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },  // 55

  { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },  // ]

  { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },  // ^

  { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },  // _

  { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },  // '

  { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },  // a

  { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },  // b

  { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },  // c

  { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },  // d

  { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },  // e

  { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },  // f

  { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },  // g

  { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },  // h

  { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },  // i

  { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },  // j

  { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },  // k

  { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },  // l

  { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },  // m

  { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },  // n

  { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },  // o

  { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },  // p

  { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },  // q

  { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },  // r

  { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },  // s

  { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },  // t

  { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },  // u

  { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },  // v

  { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },  // w

  { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },  // x

  { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },  // y

  { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },  // z

  { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }  // horiz lines

};

static const byte hanzi12x16[][24]={

{0x00,0x00,0xFC,0x02,0x8A,0xF2,0x8A,0x8A,0x0A,0x02,0xFC,0x00,

0x00,0x00,0x3F,0x28,0x28,0x2F,0x28,0x2B,0x2C,0x20,0x1F,0x00}/*"国"0*/

,{0x00,0x00,0xF8,0x88,0x88,0x88,0xFC,0x88,0x88,0x88,0x88,0x00,

0xC0,0x38,0x87,0x40,0x20,0x18,0x07,0x06,0x18,0x20,0x40,0x00}/*"庆"1*/

,{0x00,0xE0,0xFE,0x20,0x40,0x10,0xFE,0x12,0x10,0xF0,0x00,0x00,

0x00,0x00,0x7F,0x80,0x40,0x31,0x0F,0x06,0x19,0x21,0x41,0x00}/*"快"2*/

,{0x00,0x00,0xF8,0x88,0x84,0x84,0xF4,0x84,0x84,0x80,0x80,0x00,

0x00,0x20,0x11,0x0C,0x00,0x40,0x7F,0x00,0x04,0x18,0x30,0x00}/*"乐"3*/

};

/************************LCD初始化函数********************************/  

void LCD_init(void)

{

  //先设置为输出

    pinMode(SCLK,OUTPUT);

    pinMode(SDIN,OUTPUT);

    pinMode(LCD_DC,OUTPUT);

    pinMode(LCD_CE,OUTPUT);

    pinMode(LCD_RST,OUTPUT);

  // 产生一个让LCD复位的低电平脉冲

    digitalWrite( LCD_RST, LOW);

    delayMicroseconds(1);

    digitalWrite( LCD_RST, HIGH);

  // 关闭LCD

    digitalWrite( LCD_CE, LOW);

    delayMicroseconds(1);

  // 使能LCD

    digitalWrite( LCD_CE, HIGH); //LCD_CE = 1;

    delayMicroseconds(1);

  LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式

  LCD_write_byte(0xc8, 0); // 设置偏置电压

  LCD_write_byte(0x06, 0); // 温度校正

  LCD_write_byte(0x13, 0); // 1:48

  LCD_write_byte(0x20, 0); // 使用基本命令

  LCD_clear();        // 清屏

  LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示

  // 关闭LCD

  digitalWrite( LCD_CE, LOW);  //LCD_CE = 0;

}

/************************LCD清屏函数*******************************/

void LCD_clear(void)

{

  unsigned int i;

  LCD_write_byte(0x0c, 0);  

  LCD_write_byte(0x80, 0);

  for (i=0; i<504; i++)

    {

      LCD_write_byte(0, 1);

    }  

}

/*************************设置字符位置函数**************************/

void LCD_set_XY(unsigned char X, unsigned char Y)

{

  LCD_write_byte(0x40 | Y, 0);// column

  LCD_write_byte(0x80 | X, 0);// row

}

/*************************ASCII字符显示函数*************************/

void LCD_write_char(unsigned char c)

{

  unsigned char line;

  c -= 32;

  for (line=0; line<6; line++)

  {

      LCD_write_byte(font6x8[c][line], 1);

  }

}

/*******************************************************************/

/*-------------------------------------------------

LCD_write_english_String  : 英文字符串显示函数

输入参数:*s    :英文字符串指针;

      X、Y  : 显示字符串的位置,x 0-83 ,y 0-5

--------------------------------------------------*/

void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)

{

  LCD_set_XY(X,Y);

  while (*s)  

  {

    LCD_write_char(*s);

    s++;

  }

}

/******************************************************************/

/*---------------------------------------------

LCD_write_byte  : 写数据到LCD

输入参数:data  :写入的数据;

      command :写数据/命令选择;

---------------------------------------------*/

void LCD_write_byte(unsigned char dat, unsigned char command)

{

  unsigned char i;

  digitalWrite( LCD_CE, LOW); // 使能LCD_CE = 0

  if (command == 0)

  {

    digitalWrite( LCD_DC, LOW);// 传送命令 LCD_DC = 0;

  }

  else

  {

    digitalWrite( LCD_DC, HIGH);// 传送数据LCD_DC = 1;

  }

  for(i=0;i<8;i++)

  {

    if(dat&0x80)

    {

      digitalWrite( SDIN, HIGH);//SDIN = 1;

    }

  else

  {

    digitalWrite( SDIN, LOW);//SDIN = 0;

    }

  digitalWrite( SCLK, LOW);//SCLK = 0;

  dat = dat << 1;

  digitalWrite( SCLK, HIGH);//SCLK = 1;

  }

  digitalWrite( LCD_CE, HIGH);//LCD_CE = 1;

}

/******************************************************************/

/*---------------------------------------------

void LCD_write_hanzi  : 汉字显示子函数

输入参数:row :写入汉字列 page :写入汉字行 row :写入汉字  ;

---------------------------------------------*/  

void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char dd) //row:列 page:页 dd:字符

{

      unsigned char i;      

      LCD_set_XY(row*8, page);// 列,页

      for(i=0; i<12;i++)

      {

          LCD_write_byte(hanzi12x16[dd],1);

      }

      

  LCD_set_XY(row*8, page+1);// 列,页

      for(i=12; i<24;i++)

      {

          LCD_write_byte(hanzi12x16[dd],1);

      }      

}

void setup()

{

  LCD_init();//初始化液晶    

  LCD_clear();

  delay(10) ;

}

void loop()

{

  LCD_write_hanzi(2,0,0) ;

  LCD_write_hanzi(4,0,1) ;

  LCD_write_hanzi(6,0,2) ;

  LCD_write_hanzi(8,0,3) ;

  delay(1000) ;

}


Arduino实验场景图

在这里插入图片描述
在这里插入图片描述

实验开源图形编程

在这里插入图片描述

Arduino实验开源代码之四

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十三:蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD 

  1、安装 "U8glib.h"库-工具-管理库-搜索-安装

  2、项目测试 :简易数字示波器之二

  3、模块接线

  Nokia 5110  Arduino

  RST  6

  CE  7

  DC  5

  DIN  4

  CLK  3

  VCC  5V

  BL  3V3

  GND  GND

*/



#include "U8glib.h"

//U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8

U8GLIB_PCD8544 u8g(3, 4, 7, 5, 6); // SPI Com: clk = 3, din = 4, ce = 7, dc = 5, rst = 6

int x, y;

int v0, v1;

int Buffer[84];//48*84的屏

void setup() {

  analogReference(INTERNAL); //ADC使用单片机内部1.1V基准

  u8g.setContrast(100);//设置对比度0-255

  u8g.firstPage();

  do {

  u8g.setFont(u8g_font_helvB14);

  u8g.drawStr(0, 14, "V=");

  u8g.drawStr(26, 14, "12.34");

  u8g.drawStr(0, 30, "A=");

  u8g.drawStr(26, 30, "56.789");

  u8g.setFont(u8g_font_helvR08);

  u8g.drawStr( 0, 39, "T=");

  u8g.drawStr(10, 39, "12.34");

  u8g.drawStr(37, 39, "\260C");

  u8g.drawStr(52, 39, "fan on");

  } while ( u8g.nextPage() );

  delay(2000);

}

void loop( )

{

  do {

  v0 = analogRead(A0);

  }

  while (v0 > 10);

  for (x = 0; x < 84; x++) //信号采样

  Buffer[x] = 31 - (analogRead(A0) >> 5);

  u8g.firstPage();  //清屏

  do//显示

  {

  for (x = 0; x < 83; x++)

    u8g.drawLine(x, Buffer[x], x, Buffer[x + 1]); //画相邻两点连线

  u8g.drawLine(42, 0, 42, 47); // 画坐标轴

  u8g.drawLine(0, 24, 84, 24);

  for (x = 0; x < 84; x += 21) //画坐标轴刻度

    u8g.drawLine(x, 23, x, 25);

  for (x = 0; x < 48; x += 8)

    u8g.drawLine(41, x, 43, x);

  u8g.drawFrame(0, 0, 84, 48); //画边框

  }

  while (u8g.nextPage( ));

}


Arduino实验场景图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6.1面向对象的介绍和内存

学习面向对象内容的三条主线 • Java 类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 • 面向对象的特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09; • 其他关键字的使用…

LC-1494. 并行课程 II(状压DP)

1494. 并行课程 II 难度困难116 给你一个整数 n 表示某所大学里课程的数目&#xff0c;编号为 1 到 n &#xff0c;数组 relations 中&#xff0c; relations[i] [xi, yi] 表示一个先修课的关系&#xff0c;也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。 在…

SSR渲染--01--初识Nuxt

SSR服务端渲染 SSR服务端渲染&#xff1a;在后端将html页面处理好&#xff0c;前端直接展示&#xff08;可以解决为后端给你传了一个html脚本&#xff0c;全段渲染&#xff09; 为什么要有SSR服务端渲染&#xff1f; 可以解决单页面首屏加载慢的问题&#xff0c;同时有利于用…

JUC之可见性和有序性

目录 java内存模型 可见性 现象出现 现象解释 解决方法 有序性 诡异的结果 解决方法 Happens-before规则 java内存模型 Java内存模型&#xff08;Java Memory Model&#xff0c;简称JMM&#xff09;定义了Java程序中各种变量、对象的访问方式和内存关系。JMM规定了线…

小程序-uniapp:uni-app-base 项目基础配置及使用,开箱可用

目前&#xff08;20230605&#xff09;uni-app最新版本&#xff08;3.8.4.20230531&#xff09; 一、官网文档 uni-app官网 二、创建项目 项目目标&#xff1a;vue3tsvitevscode 创建以 typescript 开发的工程&#xff08;如命令行创建失败&#xff0c;请直接访问 gitee 下…

consul入门案例及配置热更新的实现及Feign的使用

Consul的简单入门 当Producer启动时,会向Consul发送一个post请求,告诉Consul自己的ip和Port;Consul接收到producer的注册后,每个10S(默认),会向producer发送一个健康检查的请求,检验Producer是否健康当Consumer发送GET方式请求/api/address到Producer时,会先从Consul中拿到一个…

Linux常用命令——gdb命令

在线Linux命令查询工具 gdb 功能强大的程序调试器 补充说明 gdb命令包含在GNU的gcc开发套件中&#xff0c;是功能强大的程序调试器。GDB中的命令固然很多&#xff0c;但我们只需掌握其中十个左右的命令&#xff0c;就大致可以完成日常的基本的程序调试工作。 语法 gdb(选…

DeepFace:人脸识别库 DeepFace 简单认知

写在前面 工作中遇到&#xff0c;简单整理博文内容为 deepface 的简单介绍理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是…

HarmonyOS学习路之开发篇—Java UI框架(使用工具自动生成JS FA调用PA代码)

JS FA&#xff08;Feature Ability&#xff09;调用PA &#xff08;Particle Ability&#xff09;是使用基于JS扩展的类Web开发范式的方舟开发框架所提供的一种跨语言能力调用的机制&#xff0c;用于建立JS能力与Java能力之间传递方法调用、处理数据返回以及订阅事件上报的通道…

代码审计——目录遍历详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 目录遍历&#xff0c;即利用路径回溯符“../”跳出程序本身的限制目录实现下载任意文件。 例如Web应用源码目录、Web应用配置…

FastDeploy部署参考

一、FastDeploy的gitee地址 https://gitee.com/leiqing1/FastDeploy/blob/release/0.3.0/docs/cn/faq/use_sdk_on_windows.md#21-%E4%B8%8B%E8%BD%BD%E9%A2%84%E7%BC%96%E8%AF%91%E5%BA%93%E6%88%96%E8%80%85%E4%BB%8E%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E6%9C%80%E6%96%B0%…

When viruses are good for you 病毒,有时对人体是有益的 | 经济学人20230506版社论双语精翻

本篇来自《经济学人》&#xff08;The Economist&#xff09;2023年5月6日社论&#xff08;Leaders&#xff09;精选&#xff1a;《病毒&#xff0c;有时对人体是有益的》&#xff08;When viruses are good for you&#xff09;。 Bacteriophages 噬菌体 When viruses are goo…

onlyoffice变量提取,处理各种办公文档

onlyoffice变量提取,处理各种办公文档 使用 ONLYOFFICE Docs 在 HumHub 中处理各种办公文档。 带有 HumHub 连接器的 ONLYOFFICE Docs 企业版允许您在灵活的开源社交网络工具包 HumHub 中实时协作查看和编辑办公文档(Word、Excel 或 PowerPoint)。它包括 ONLYOFFICE Docs&#…

代码审计——SQL注入详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 当应用程序将用户输入的内容&#xff0c;拼接到SQL语句中&#xff0c;一起提交给数据库执行时&#xff0c;就会产生SQL注入威…

代码随想录训练营Day60|84. 柱状图中最大的矩形

84. 柱状图中最大的矩形 class Solution {public int largestRectangleArea(int[] heights) {int res0;// 数组扩容&#xff0c;在头和尾各加入一个元素int [] newHeights new int[heights.length 2];newHeights[0] 0;newHeights[newHeights.length - 1] 0;for (int index…

Docker desktop 怎么切换docker源

点击setting&#xff0c;点击docker Engine 进行编辑 {"registry-mirrors":["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://4jup2u41.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn&q…

校园预付费管理系统与水电计量设备仪表的实际应用 安科瑞 许敏

摘要&#xff1a;论文设计了适用于学生公寓的自助式预付费控电控水管理系统&#xff0c;采用多种智能功能&#xff0c;可以监测和显示漏电现象&#xff0c;通过短路、跳线、零线接地等方式防范和记录用户的偷电行为&#xff0c;通过报警和拉闸防止事故的发生。该系统采用先进的…

霍夫变换原理

文章目录 霍夫变换原理当点都在y轴上时&#xff0c;用ykxb形式是无法求出参数空间中的交点&#xff0c;也就是累计都一样。所以就用极坐标来表示参数空间。公式求证过程 霍夫变换原理 当点都在y轴上时&#xff0c;用ykxb形式是无法求出参数空间中的交点&#xff0c;也就是累计都…

linux服务器安装nodejs

注意&#xff1a; 本文针对的是有linux操作基础&#xff0c; 会使用vim的基本操作的同学。故有些很基础的东西没有赘述&#xff0c;如果是纯小白的同学&#xff0c;看起来可能会感觉缺失一些东西。 1.nodejs官网下载自己需要的版本的node node版本选择下载地址 我使用的是14.…

图像边缘检测原理

文章目录 图像边缘检测原理1:2:3:基本边缘检测算子 图像边缘检测原理 1: 图像的边缘指的是图像中像素灰度值突然发生变化的区域&#xff0c;如果将图像的每一行像素和每一列像素都描述成一个关于灰度值的函数&#xff0c;那么图像的边缘对应在灰度值函数中是函数值突然变大的…