电子发烧友App

硬声App

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

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

3天内不再提示
电子发烧友网>电子资料下载>电子资料>使用ATmega328的七段显示驱动程序

使用ATmega328的七段显示驱动程序

2022-12-16 | zip | 0.24 MB | 次下载 | 2积分

资料介绍

描述

该项目涉及使用 ATmega328 设计七段显示 (SSD) I2C 驱动程序。

七段显示器通常采用十针封装。虽然八个引脚对应于八个 LED,但其余两个引脚(中间)是公共的并且内部短路。因此,当使用微控制器操作七段 LED 显示屏时,需要 8 个引脚来控制显示屏中的各个 LED,使用解码器可以将其减少到 4 个。随着越来越多的 SSD 添加到显示器中,这个数字会增加。

poYBAGOX5sSATrFvAAAc8c_WUUI567.png
共阳极 SSD [来源:http://www.circuitstoday.com/7-segment-display-to-avr-atmega32-using-cd4511b]
 

然而,在大多数应用中,使用单个数字七段显示器 (SSD) 可能不足以显示全部信息,因此多个 SSD 单元并联连接。为了显示不同的字符、符号或数字,每个 SSD 上显示的数据必须不同。但是,要同时驱动多个此类 SSD,控制它们所需的引脚数乘以正在使用的 SSD 数量。由于微控制器或驱动器上可用的 I/O 引脚数量有限,这将成为一个重大问题。该问题最广泛使用的解决方案是 SSD 数据的时分复用。在任何时刻,控制器或 SSD 解码器仅在单个 SSD 上运行,而不是同时在多个 SSD 上运行。这必须以足够快的速度完成以避开人类的视觉暂留,但必须足够慢以使显示屏上的 LED 有足够的时间来执行切换动作。使用通常由晶体管作为开关组成的另一个电路来选择单个 SSD。

pYYBAGOX5saAB5LcAADcZjeaGZk870.png
与微控制器接口 [来源:https://www.electronicshub.org/interfacing-7-segment-display-8051/]
 

除了在 SSD 显示屏上显示信息外,微控制器可能还需要执行其他功能,这可能需要也可能不需要使用 I/O 线。但是,这可能会影响 SSD 的显示时序,并可能导致不必要的暂停或关闭显示,直到 CPU 完成执行相应的指令集。

在将微控制器与 SSD 显示器连接的情况下,使用另一个微控制器作为驱动程序作为主微控制器的外围设备会非常有帮助。它还可以使显示系统隔离,并且可以使主微控制器自由执行其他指令。驾驶员必须注意显示系统中适当组件的时序和切换。主控制器和 I2C 驱动控制器之间的接口可以使用各种通信协议来完成,例如 SPI(串行外设接口)、UART(通用异步接收器发送器)、I2C(内部集成电路)等。其中,UART 是不可扩展,仅适用于固定的设备到设备通信,并且像 SPI 一样,不保证验证数据是否已正确发送。I2C 提供了所有这些优势,并且只需 2 条时钟 (SCL) 线和数据 (SDA) 线即可实现成本更低。I2C 还允许同一总线上的多个主机和从机,因此多个设备可以访问同一资源(SSD 显示器)。

设置:

poYBAGOX5tKAPJPIAAGzt8kKWDM890.png
 

用作主机的设备:Arduino UNO R3

用于驱动的​​微控制器:Atmel ATMEGA328(启动加载)

使用的编程器:FTDI R232RL(USB转串口TTL逻辑)

使用的编程平台:Arduino IDE 1.8.9

显示类型:6x1 SSD LED共阳极显示

SSD显示器与驱动的连接如下:

 
 
 
pYYBAGOX5teALrKmAAE1fHAaAGk730.png
 
1 / 2电路 1(上半场)
 

I2C 主设备(主控制器)从连接到其 ADC 引脚 A0 的 LDR 收集数据,并使用从地址将数据传输到 I2C 从设备(SSD 驱动器)。驱动程序在复位时在 SSD 显示屏上显示从地址。当它从主设备接收到数据时,它会一次更改数据缓冲区上的一个数字的数据,并继续将缓冲区上的数据显示到 SSD 显示器上。

LUT(查找表)将被写入主设备以获得更大的灵活性。段的数据被认为是二进制 1 表示 LED 亮,但是,使用的设备是共阳极类型的,因此,在显示之前,驱动程序将逻辑反转。主机首先发送数字位置的地址,然后是要由段显示的数据。该地址应在 1-6 范围内,如硬件中使用的那样。驱动程序拒绝此范围之外的任何地址。

编程:

链接以下载从属固件。

从站:SSD_Driver.ino

#include //library;

int flag=1,m=0,n=0;                       //preset conditions;
byte arr[6]={0,0,0,0,0,0};                //initial buffer;
int segment[8]={0,1,2,3,4,5,6,7};         //segment/LED a,b,c,d,e,f,g,h;               
int select[6]={13,12,11,10,9,8};          //digit number 1,2,3,4,5,6;
byte LUTmap=B11111111;                    //initial state – all LEDs off;

void setup() {
    for(int i=0;i<=13;i++)
        pinMode(i,OUTPUT);                //all pins are output;
    callforsegment(B00000000); flag++;    //select digit 1;
    callforsegment(B11111100); flag++;    //display 0;
    callforsegment(B00000010); flag++;    //select digit 3;
    callforsegment(B11110010); flag++;    //display 3;
    callforsegment(B00000011); flag++;    //select digit 4;
    callforsegment(B11111110); flag++;    //display 8;
    callforsegment(B00000100); flag++;    //select digit 5;
    callforsegment(B01101110); flag++;    //display H(hex address);
    Wire.begin(0x38);                 //i2c slave address for the driver;
    Wire.onReceive(receiveEvent);     //action on receiving data via i2c bus;
}

void segWrite(byte a) {
    LUTmap=~a;                        //convert to common anode logic;
    for(int i=0;i<8;i++)
        //display to each segment in a digit;
        digitalWrite(segment[i],bitRead(LUTmap,7-i));  
}

void loop() {
    for(int i=0;i<6;i++) {
        digitalWrite(select[i],HIGH);   //selecting one of the digits;
        segWrite((byte)arr[i]);         //writing data to the digit;
        delay(5);                       //ON time;
        digitalWrite(select[i],LOW);    //deactivating the selected digit;
    }
}

void callforsegment(int a) {
    if(flag%2==1 && a<=7 && a>=0)
        m=a;                        //first byte about digit location;
    else {
        n=a;                        //second byte about data for the digit;
        flag=0;
    }
    arr[m]=(byte)n;                 //store data to the buffer space;
}

void receiveEvent(int howMany) {
    while (1 < Wire.available())    //loop through all except last;
    char c = Wire.read();           //receive byte as a character;
    int x = Wire.read();            //receive byte as an integer;
    callforsegment(x);
    flag++;
}

主:ADC_master.ino

链接下载库。

#include 
#include //include library;
SSDmaster device(0x38);                       //address of slave driver;
void setup() {
    Wire.begin();
}
void loop() {    
    int ldrval=analogRead(A0);                //variable to store ADC data;                     
    device.ssdDisplay(1,B00011100);           //display L;
    device.ssdDisplay(2,B01111010);           //display D;
    device.ssdDisplay(3,B00001010);           //display R;
    device.ssdDisplaynum(4,(byte)ldrval);     //display ADC value;
    delay(250);                               //rate of updation;
}

结果:

 
 
 
poYBAGOX5wKALCOUAAfTCJNiA8Q394.jpg
 
1 / 2主站开始通信之前
 

上电驱动显示 I2C 从地址。当与识别其从地址的适当 I2C 主设备连接时,从主设备发送的数据(在这种情况下为光强度)会打印到显示器上。

 

尾注:

使用 SSD_Driver 库构建所需的系统。


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费