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显示屏
    +关注

    关注

    35

    文章

    1821

    浏览量

    98739
  • Arduino
    +关注

    关注

    188

    文章

    6468

    浏览量

    186941
收藏 人收藏

    评论

    相关推荐

    #物联网 LED显示屏

    LED显示屏
    斯塔克物联科技
    发布于 :2024年11月01日 14:24:14

    液晶显示屏led显示屏的区别

    在现代电子设备中,显示屏是人机交互的重要界面。随着科技的发展,显示屏技术也在不断进步,其中液晶显示屏(LCD)和LED显示屏是两种主流的
    的头像 发表于 10-12 10:39 1239次阅读

    LED显示屏驱动电源:恒流与恒压,谁更胜一筹?

    。然而,在这背后,有一个不可或缺的元素在默默支撑着这一切——那就是LED显示屏驱动电源。 LED显示屏
    的头像 发表于 09-24 01:50 377次阅读
    <b class='flag-5'>LED</b><b class='flag-5'>显示屏</b><b class='flag-5'>驱动</b>电源:恒流与恒压,谁更胜一筹?

    LED透明显示屏生产 原理 技术 应用

    LED透明显示屏常指的是硬灯条透明,具有轻薄、通透、播放影像通透绚丽的特点。是对LED显示屏
    的头像 发表于 08-29 15:01 411次阅读

    全彩LED显示屏/天幕哪家好?#LED显示屏 #天幕# 多媒体宣传展示

    LED显示屏
    jf_50082260
    发布于 :2024年06月13日 07:24:59

    LED显示屏设计方案

    1、LED显示屏基础知识2、LED显示屏设计要素3、LED显示屏
    发表于 04-03 17:21 12次下载

    LED电子显示屏的相关报告

    LED电子显示屏是一种利用LED发光二极管作为显示元件,通过控制LED的亮灭来显示文字、图像、视
    发表于 04-03 17:18 0次下载

    LED显示屏模组逻辑驱动芯片:SM245的功能和应用

    LED显示屏模组逻辑驱动芯片是LED显示屏中的重要部件,它负责控制LED灯珠的亮度和颜色,从而实
    的头像 发表于 02-25 10:37 1090次阅读
    <b class='flag-5'>LED</b><b class='flag-5'>显示屏</b>模组逻辑<b class='flag-5'>驱动</b>芯片:SM245的功能和应用

    LED显示屏是什么材质 led显示屏参数设置

    LED显示屏是一种基于LED(Light Emitting Diode)技术的显示装置,用于在各种场合中展示文字、图像、视频等内容。它由多个LED
    的头像 发表于 02-03 14:33 3863次阅读

    Led显示屏控制系统怎么使用 led显示屏控制器怎么设置

    Led显示屏控制系统是一种用于控制LED显示屏的硬件设备,通过它可以实现对LED显示屏的亮度、颜
    的头像 发表于 02-03 14:03 7921次阅读

    LED显示屏都有哪些性能呢?

    LED显示屏是目前常用的户外以及室内的大显示,应该如何挑选一款性能高的LED显示屏呢,
    的头像 发表于 01-25 10:09 849次阅读

    商场外墙户外P5LED显示屏# P5LED显示屏# 商场LED显示屏# 广场LED显示屏# 小区LED显示屏

    LED显示屏
    LED显示屏生产厂家
    发布于 :2024年01月16日 20:24:01

    酒店会议室LED显示屏P2#酒店LED显示屏# P2LED显示屏# 会议室LED显示屏

    LED显示屏
    LED显示屏生产厂家
    发布于 :2024年01月16日 20:19:32

    什么是COB和GOB LED显示屏

    新技术,类似于模块封装。它正在使用整个显示屏模块(例如250 * 250mm)进行工作,方法是使用已获专利的透明胶水覆盖模块的PCB板表面,上面已经焊接了数千个SMD灯,蕞后模块在其表面上获得了特殊的屏蔽层。 它具有高防护性的LED
    的头像 发表于 01-16 20:17 1579次阅读
    什么是COB和GOB <b class='flag-5'>LED</b><b class='flag-5'>显示屏</b>?