0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Arduino驱动7段LED显示屏的不同方法

454398 来源:wv 2019-10-10 14:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:

使用Arduino驱动7段LED显示屏的不同方法

直接从Arduino/Atmega 328

通过Arduino/Atmega 328的移位寄存器

直接从Arduino/Atmega 328进行直接端口操作

通过Arduino/Atmega 328/按钮计数器的移位寄存器多路复用

通过Arduino/Atmega 328/电位器计数器的移位寄存器多路复用

1-直接从Arduino/Atmega 328

自动从零计数到九,然后重复

代码

///感谢Grumpy Mike http://www.thebox.myzen .co.uk/Tutorial/Arrays.html

//字节内的LED段分配= {DP ABCDEFG}

int引脚[] = {2、3、4、5、6、7、8、9} ;//分配给DP但未使用的引脚9(char tenCode中二进制数组的第一个元素)

int digit [] = {0,1,2,3,4,5,6,7,7,8,9,10 };

int计数器= 0;//将计数器初始化为零

int timer = 1000;//延迟计时器间隔

char tenCode [] = {B01111110,B00110000,B01101101,B01111001,B00110011,B01011011,B01011111,B01110000,B01111111,B01111011};

void setup()

{

(int i = 0; i 《8; i ++)//将数字引脚设置为OUTPUTS

pinMode(pins [i],OUTPUT);

}

void loop()

{

for(int j = 0; j 《10; j ++)

{ displayEleven(digit [j]);

delay(timer);

}

}

void displayEleven( int num)

{

int mask = 1; for(int i = 0; i 《8; i ++)

{((mask&tenCode [num])== 0)

digitalWrite(pins [i],LOW);

else digitalWrite(pins [i],HIGH);

mask = mask 《《1;

}

}

步骤2:

2-通过Arduino/Atmega 328的移位寄存器

从零自动计数到九,然后重复

代码

//字节= {内的LED段分配ABCDEFG DP}

int闩锁Pin = 8;//连接到移位寄存器的引脚12

int dataPin = 11;//连接到移位寄存器的引脚14

int clockPin = 12;////连接到移位寄存器的引脚11

int i = 0;

字节数字[] = {B11111100,B01100000,B11011010,B11110010,B01100110,B10110110,B10111110,

B11100000,B11111110,B11110110};

void setup()

{

pinMode(dataPin,OUTPUT);//将dataPin配置为OUTPUT

pinMode(latchPin,OUTPUT);//将闩锁引脚配置为OUTPUT

pinMode(clockPin,OUTPUT);//将clockPin配置为OUTPUT

}

void loop()

{

for(i = 0; i 《10; i ++)

{

digitalWrite(latchPin,LOW);//将锁存器拉低以开始发送数据

shiftOut(dataPin,clockPin,LSBFIRST,digit [i]);//发送数据

digitalWrite(latchPin,HIGH);//将闩锁拉到高电平以停止发送数据

delay(1000);

}

}

步骤3:

3-直接从Arduino/Atmega 328直接进行端口操作

从零开始自动计数到9,然后重复

代码

////因为直接端口操作使用引脚0和1,即RX和TX

//分别为引脚,上传代码时必须断开这些引脚

//字节= {DP ABCDEFG}

字节i = 0内的LED段分配;

字节数字[10] = {B01111110,B00110000,B01101101,B01111001,B00110011,B01011011,B01011111,B01110000,B01111111,B01111011};

无效setup()

{

DDRD = B11111111;//将PORTD(数字7〜0)设置为输出

}

void count()

{

for(i = 0; i 《10; i ++)

{

PORTD = digit [i];

delay(1000);

PORTD = 0;

}

}

void loop()

{

count();

}

步骤4:

4-通过从Arduino/Atmega 328/按钮计数器

按钮在0到8之间递增和递减计数器

代码

//7段LED计数器,使用74HC595 8位移位寄存器多路复用,通过按钮开关将计数器从0递增到8到零

//从这些源代码一起整理代码-感谢法尔斯

//http://www.sweeting.org/mark/blog/2011/11/27/arduino-74hc595-shift-register-and-a-7-segment-led-显示

//http://thecustomgeek.com/2011/06/29/multiplexing-for-a-7-yearold/

const int闩锁Pin = 5;//引脚连接到74HC595的引脚12(锁存器)

const int dataPin = 6;//引脚连接到74HC595的引脚14(数据)

const int clockPin = 7;//引脚连接到74HC595的引脚11(时钟

int upPin = 12;//按钮连接到引脚12

int downPin = 13;//按钮连接到引脚12

int currUpState = 1;//将currUpState初始化为HIGH

int currDownState = 1;//将currDownState初始化为HIGH

int prevUpState = 0;

int prevDownState = 0;

int counter = 0;//将计数器初始化为零

const字节编号[10] =//用显示段0、1、2、3、4、5、6、7、8、9 《描述每个数字/p》

{

B11111100,

B01100000,

B11011010,

B11110010,

B01100110,

B10110110,

B10111110,

B11100000,

B11111110,

B11100110,

};

void setup()

{

pinMode(latchPin,OUTPUT);//将SR引脚设置为输出

pinMode(clockPin,OUTPUT);

pinMode(dataPin,OUTPUT);

pinMode(upPin,INPUT);//将引脚12设置为按钮输入

pinMode(downPin,INPUT);//将引脚13设置为按钮输入

}

void loop()

{

currUpState = digitalRead(upPin);

if(prevUpState!= currUpState)//状态从

{//从高变为低,反之亦然

prevUpState = currUpState;

if(currUpState == HIGH)//如果按下按钮

counter ++;//将计数器加1

//延迟(1);

}

if(counter》 8)

计数器-= 1;

show(numbers [counter]);//显示当前数字

currDownState = digitalRead(downPin);

如果(prevDownState!= currDownState)//状态从

{//从高到低,反之亦然

prevDownState = currDownState;

if(currDownState == HIGH)//如果按下按钮

counter- = 1 ;//将计数器减1

//delay(1);

}

if(counter 《0)

counter ++ ;

show(numbers [counter]);//显示当前数字

}

void show(字节数)

{

////使用循环和按位AND移至组成

//七段显示的每一位(从左到右,A =》 G),然后检查

//看是否应该

for(int j = 0; j 《= 7; j ++)

{

byte toWrite = number&(B10000000 》》 j );

if(!toWrite){

Continue;

}//如果所有位均为0,则将其写入移位寄存器没有意义,因此

shiftIt(toWrite);继续操作。////否则将其移入寄存器

}

}

void shiftIt(字节数据)

{

digitalWrite(latchPin,LOW);//将这8位时钟输入到寄存器中时将闩锁引脚LOW

for(int k = 0; k 《= 7; k ++)

{

digitalWrite(clockPin,LOW);//ClockPin在发送位之前为低电平

if(data&(1 《

{

digitalWrite(dataPin,HIGH);//打开“

}

else

{

digitalWrite(dataPin,LOW);//将“关闭”

}

digitalWrite(clockPin,HIGH);//并为

}

digitalWrite(clockPin,LOW)中的位提供时钟//停止移出数据

digitalWrite(latchPin,HIGH);//将闩锁Pin设置为高电平以锁定并发送数据

}

步骤5:

5-通过Arduino/Atmega 328/电位计计数器的移位寄存器多路复用

电位计用于在0到8之间递增和递减计数器

Code

//7段LED计数器,使用74HC595 8位移位寄存器进行多路复用,通过电位计将计数器从0递增为8到0 资料来源-感谢法尔斯

//http://www.sweeting.org/mark/blog/2011/11/27/arduino-74hc595-shift-register-and-a-7-segment-led-display

//http://thecustomgeek.com/2011/06/29/multiplexing-for-a-7-yeard/

const int闩锁Pin = 5;//引脚连接到74HC595的引脚12(锁存器)

const int dataPin = 6;//引脚连接到74HC595的引脚14(数据)

const int clockPin = 7;//引脚连接到74HC595的引脚11(时钟)

int counter = 0;//将计数器初始化为零

int potReading = 0;

const字节编号[10] =//用显示段0、1、2、3、4、5来描述每个数字6,7,8,9

{

B11111100,

B01100000,

B11011010,

B11110010,

B01100110,

B10110110,

B10111110,

B11100000,

B11111110,

B11100110,

};

void setup()

{

pinMode(latchPin,OUTPUT);//将SR引脚设置为输出

pinMode(clockPin,OUTPUT);

pinMode(dataPin,OUTPUT);

}

void loop()

{

potReading =模拟读取(A0);

potReading = map(potReading,0,1023,0,8);

{

if(potReading》 8)

potReading-;

show(numbers [potReading]);

}

{

if(potReading 《0)

potReading ++;

show(numbers [potReading] );

}

}

void show(字节数)

{

//使用循环和按位AND移至使向上

//七段显示(从左到右,A =》 G),然后检查

//是否应打开

for(int j = 0; j 《= 7; j ++)

{

要写入的字节=数字&(B10000000 》》 j);

if(!toWrite){

continue;

}//如果全部位为0,则无意义将其写入移位寄存器,因此请中断并继续执行下一段。

shiftIt(toWrite);//否则将其移入寄存器

}

}

void shiftIt(字节数据)

{

digitalWrite(latchPin,LOW);//将这8位时钟输入到寄存器

时将闩锁引脚LOW设置为(int k = 0; k 《= 7; k ++)

{

digitalWrite(clockPin,LOW);//ClockPin在发送位之前为低电平

////请注意,在我们的示例中,对于

//“ On”,我们需要将pinState设置为0(LOW),因为74HC595吸收电流时使用常见的

//阳极显示器。如果要使用公共阴极显示器,则

//将其切换。

if(data&(1 《 {

digitalWrite(dataPin,HIGH);//打开“

}

else

{

digitalWrite(dataPin,LOW);//关闭“

}

digitalWrite(clockPin,HIGH);//并时钟

}

digitalWrite(clockPin,LOW);中的位//停止移出数据

digitalWrite(latchPin,HIGH);//将闩锁Pin设置为高电平以锁定并发送数据

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LED显示屏
    +关注

    关注

    39

    文章

    1865

    浏览量

    104303
  • Arduino
    +关注

    关注

    191

    文章

    6535

    浏览量

    197684
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    碳纤维led显示屏优势

    "约束项"。碳纤维作为长期服务于对强度重量比有极致要求的领域,因此,碳纤维LED显示屏正是在这一结构性转变中进入行业视野。 什么是碳纤维LED显示屏? 简单来说,碳纤维
    的头像 发表于 05-23 14:08 527次阅读
    碳纤维<b class='flag-5'>led</b><b class='flag-5'>显示屏</b>优势

    LED驱动LED显示驱动芯片数显LED原厂VK1Q68D

    LED数显IC、数显驱动原厂、LED驱动芯片、LED数显
    发表于 05-15 09:27

    RA8875驱动板:为40针TFT触摸显示屏赋能

    RA8875驱动板:为40针TFT触摸显示屏赋能 一、引言 各位电子工程师们,在项目开发中,我们常常会遇到这样的困扰:看着那些尺寸较大、分辨率高达800x480像素的4寸、5寸或7寸TFT显示
    的头像 发表于 05-10 16:05 702次阅读

    LED芯片点阵LED驱动点阵数码管显示芯片 VK1616

    、数显驱动、数显IC、数显芯片、数显驱动LED数显IC、数显驱动原厂、LED
    发表于 04-29 09:07

    LED驱动LED驱动芯片高抗干扰数显芯片VK1628

    IC、数显芯片、数显驱动LED数显IC、数显驱动原厂、LED驱动芯片、
    发表于 04-17 09:52

    MAX6952:4 线接口 5×7 矩阵 LED 显示驱动芯片深度解析

    MAX6952:4 线接口 5×7 矩阵 LED 显示驱动芯片深度解析 在电子设备的显示领域,LED
    的头像 发表于 02-03 15:15 441次阅读

    MAX20056B:汽车显示屏高亮度LED驱动的理想之选

    MAX20056B:汽车显示屏高亮度LED驱动的理想之选 在汽车显示屏应用中,高亮度LED驱动
    的头像 发表于 01-30 14:20 361次阅读

    LED显示屏常见故障分类及处理方法

    常见故障分类LED显示屏常见故障分为三类:LED模组常见故障、室内全彩显示屏故障及户外全彩显示屏故障。针对每一类故障,我们将详细分析可能的原
    的头像 发表于 12-18 15:48 1977次阅读
    <b class='flag-5'>LED</b><b class='flag-5'>显示屏</b>常见故障分类及处理<b class='flag-5'>方法</b>

    基于RK3568开发板显示屏调试适配方法(1)-如何在Uboot界面切换显示屏

    显示屏作为电子产品不可或缺的一部分,此文档的目的在于帮助用户调试适配其它显示屏。本文档将以调试适配7寸MIPI为例。本文档章节安排:第一章:帮助用户如何在Uboot界面切换
    的头像 发表于 11-07 16:19 554次阅读
    基于RK3568开发板<b class='flag-5'>显示屏</b>调试适配<b class='flag-5'>方法</b>(1)-如何在Uboot界面切换<b class='flag-5'>显示屏</b>

    力芯微矩阵型恒压LED驱动芯片为车载显示屏带来“智”变

    在汽车智能化飞速发展的今天,车载显示屏作为人车交互的重要窗口,其显示效果和性能直接影响到用户的驾驶体验和行车安全。力芯微矩阵型恒压LED驱动芯片,凭借其卓越的性能和创新的技术,为车载
    的头像 发表于 10-27 16:02 1691次阅读
    力芯微矩阵型恒压<b class='flag-5'>LED</b><b class='flag-5'>驱动</b>芯片为车载<b class='flag-5'>显示屏</b>带来“智”变

    解析LED显示屏背后的驱动方案

    当前,各式各样的LED显示屏正以创新的显示效果与丰富造型,拓展着人们感知视觉世界的维度。而这些视觉盛宴的背后,都离不开“幕后操控者”——LED驱动
    的头像 发表于 10-27 15:04 5040次阅读
    解析<b class='flag-5'>LED</b><b class='flag-5'>显示屏</b>背后的<b class='flag-5'>驱动</b>方案

    LED全息显示屏:1920Hz与3840Hz刷新率对比解析

    在科技飞速发展的当下,LED全息显示屏以其独特的视觉效果和广泛的应用场景,成为显示领域的焦点。其中,刷新率作为衡量显示屏性能的关键指标,直接影响着
    的头像 发表于 10-08 14:57 1932次阅读
    <b class='flag-5'>LED</b>全息<b class='flag-5'>显示屏</b>:1920Hz与3840Hz刷新率对比解析

    硕博电子7寸触摸显示屏,支持CAN通信和Codesy编程#工业显示屏 #汽车CAN总线  #触摸显示屏

    显示屏
    长沙硕博电子科技股份有限公司
    发布于 :2025年09月18日 15:29:59

    浮思特 | LED显示屏驱动IC技术解析,基础原理与创新应用

    在每一块惊艳的LED显示屏背后,驱动IC如同精密控制电流的“神经中枢”,默默决定着画面的流畅度、色彩的真实感与能耗的高低。从户外巨幕的强韧可靠,到室内高清屏的细腻呈现,再到虚拟拍摄的零瑕疵要求
    的头像 发表于 06-20 09:59 3516次阅读
    浮思特 | <b class='flag-5'>LED</b><b class='flag-5'>显示屏</b><b class='flag-5'>驱动</b>IC技术解析,基础原理与创新应用

    优质材料检验辨认出放心LED显示屏

    LED显示屏作为城市广告发展的一项重要媒介,其质量是广告投放方关注的重点。然而外形相似的LED显示屏,由于采用不同的生产工艺、元器件,产品质量和价格都差别很大。在中国市场,厂家的知识产
    的头像 发表于 06-18 14:49 939次阅读
    优质材料检验辨认出放心<b class='flag-5'>LED</b><b class='flag-5'>显示屏</b>