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

    关注

    38

    文章

    1857

    浏览量

    103402
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

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

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

    户外显示屏驱动板的具体防护措施

    驱动板在户外显示屏中的防水设计是确保显示屏长期稳定运行的关键之一。
    的头像 发表于 04-22 15:58 663次阅读

    LED显示屏:点亮商业未来的璀璨之光

    LED显示屏不仅是展示工具,更是连接品牌与消费者的现代桥梁。在注意力经济时代,投资LED显示屏就是投资于企业的可见度和影响力。让我们携手,用LED
    的头像 发表于 04-16 15:25 731次阅读
    <b class='flag-5'>LED</b><b class='flag-5'>显示屏</b>:点亮商业未来的璀璨之光

    智慧路灯杆上 LED 显示屏的信息发布

    在智慧城市建设的浪潮中,智慧路灯杆作为重要的基础设施,正发挥着越来越多的功能。其中,安装在智慧路灯杆上的 LED 显示屏成为信息传播的新窗口,极大地提升了城市管理效率和居民生活体验。那么,这些
    的头像 发表于 04-12 21:59 811次阅读

    红冉LED显示屏:技术革新引领未来发展

    LED显示屏作为一种高效、灵活的显示技术,近年来经历了翻天覆地的变革。从最初的单色显示到全彩显示,再到小间距和微
    的头像 发表于 04-10 17:19 605次阅读
    红冉<b class='flag-5'>LED</b><b class='flag-5'>显示屏</b>:技术革新引领未来发展

    LED灯杆与常规LED显示屏的区别

    LED灯杆与常规LED显示屏的区别
    的头像 发表于 03-21 08:45 864次阅读
    <b class='flag-5'>LED</b>灯杆<b class='flag-5'>屏</b>与常规<b class='flag-5'>LED</b><b class='flag-5'>显示屏</b>的区别

    品质铸就辉煌:红冉LED显示屏品质质量保障之道

    )科技有限公司(以下简称视觉跳动)采用的优质LED灯珠具有更高的发光效率、更长的使用寿命和更稳定的性能表现。采用高品质LED芯片、驱动IC和PCB板材,能够确保显示屏在亮度、色彩一致性
    的头像 发表于 02-11 15:37 654次阅读
    品质铸就辉煌:红冉<b class='flag-5'>LED</b><b class='flag-5'>显示屏</b>品质质量保障之道

    LED户外显示屏的五大优势,你知道吗?

    LED户外显示屏的五大优势,你知道吗? LED户外显示屏在城市的夜晚中扮演着越来越重要的角色,其鲜艳的色彩、生动的画面为城市增添了一抹亮色。那么,L
    的头像 发表于 01-06 18:20 1320次阅读

    如何消除LED显示屏的摩尔纹

    导读:  我们经常会碰到使用数码相机或是手机拍摄屏幕类物体——诸如电视、显示器、手机、平板电脑屏幕、迈普光彩LED显示屏等等,都会有这样的困扰:明明看着非常清晰的屏幕,但用相机拍摄出
    的头像 发表于 12-30 10:28 2108次阅读

    LED电子显示屏的老化程序及处理步骤

    LED电子显示屏有一道必经最测试步骤,我们常称为显示屏老化过程,所有的显示屏只有经过老化才能在市场上使用。 一、全彩LED
    的头像 发表于 12-30 10:26 1668次阅读

    户外P5全彩LED显示屏,户外产品宣传效果就是好。

    LED显示屏
    迈普光彩LED显示屏
    发布于 :2024年12月13日 10:08:44