单片机并行驱动led_单片机驱动多组led双色灯驱动 - CSDN
  • 采用STC12C5A60S2单片机驱动标准的08接口全彩LED单元板。 整个系统由一片4-16译码器74HC154,8片串行输入并行输出移位寄存器74HC595组成来驱动8*8LED点阵模块。 LED单元板是64*32大小的,64列,32行,标准08接口...
  • 利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。在数码管上循环显示0-9数字,时间间隔0.2秒。
  • 8051单片机并行I/0口读写 作者:佚名 文章来源:本站原创 点击数:338 更新时间:2011-08-10 前两天看资料,见到关于I/O口作为输入时,要先输出1的说明,有点迷惑。今天特意查了一些资料,费了半天劲,虽然还...

    8051单片机并行I/0口读写

    作者:佚名    文章来源:本站原创    点击数:338    更新时间:2011-08-10

    前两天看资料,见到关于I/O口作为输入时,要先输出1的说明,有点迷惑。今天特意查了一些资料,费了半天劲,虽然还没有完全弄明白,但也算也所收获,下面就列出来,以便将来查询并进一步补充。

       

                                ‍单片机锁存器电路原理图


    1、作为I/O口使用时,输入和输出原理。

    I/O口使用时,在控制信号的作用下,与门关闭,V1截止,同时多路开关打向下边,与锁存器的反向输出端Q^相连。

    输出数据时,“写锁存器”端发出脉冲,将“内部总线”上的数据写入输出锁存器,由Q^端控制V2,从而在引脚上反应出相应的状态。此种应用时P0端口各引脚应外接上拉电阻。

    输入数据时,分为读引脚和读端口两种方式。读端口的位置就是上图中的“读锁存器”,而读引脚则是上图中的“读引脚”。至于何时读端口,何时读引脚则是根据不同的指令由硬件自动完成的,这不需要我们操心。

    (附:读端口的指令:读端口的指令为端口内容取反这样的-修改-指令。

    资料称:这样的指令才有Read-Modify-Write功效
    ANL (logical AND, e.G., ANL P1,A)
    ORL (logical OR, e.g., ORL P2,A)
    XRL (logical EX-OR, e.g., XRL P3,A)
    JBC (jump if bit = 1 and clear bit, e.g., JBC P1.1, LABEL)
    CPL (complement bit, e.g., CPL P3.0)
    INC (increment, e.g., INC P2)
    DEC (decrement, e.g., DEC P2)
    DJNZ (decrement and jump if not zero, e.g., DJNZ P3, LABEL)
    MOV PX.Y,C(move carry bit to bit Y of
     PORT X)
    CLR PX.Y(clear bit Y of
     PORT X)
    SETB PX.Y(set bit Y of
     PORT X)

    引脚的指令:如下所示,读之前应先将端口置1,即先输出1,修改锁存器的内容为1

    MOV A, P1
    MOV 20H, P1
    MOV R0, P1
    MOV @R0, P1

    2、为什么读之前要先写1

    从上图可知,如果不对端口置1,端口锁存器原来的状态有可能为0,Q端为0,Q^为1,加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1也会因端口的低阻抗而使信号拉低,使得外加的1信号读入后不一定是1,若先执行置1操作则可以使场效应管截止,引脚信号直接加到三态缓冲器中,实现正确的读入。

    3、实际应用

    P0、P1、P2、P3作I/0口使用时,如果要从外部读取数据,读取之前应先将端口置1。因初始化时,四个I/O均被初始化为0XFF,所以若端口在整个程序过程中无输出时,即输出锁存器的状态始终为1,则读数据时可不用手动置1。(附:参考引脚内部结构图可知,纵使锁存器D口数据在变(内部数据线),只要时钟触发端clk没有触发信号,锁存器中的内容永远都不会改变,也就是说,不管外部引脚信号如何变,也不管执行过多少次读引脚操作,端口锁存器中的内容是不会发生变化的。那么,端口内容何时变化?答曰:只要执行过一次输出,端口内容必为输出值,因为端口就是输出的数据锁存器。)

    而当端口实际应用时要不停地同外部数据交换时,即又有输出又有读入时,如单片机与存储器<?xml:namespace prefix = st1 />24C16通过I2C总线相连,SCL总是由单片机输出可不用考虑,而SDA则可通过单片机向外发数据,又可以从外部读数据,假若之前发送的最后一位数据为0时,此时若再读数据,因为锁存器的状态仍为0,则之后立即读数据时就有可能出错。所以实际操作时,在发送数据代码之后,总会有一个单片机主动将SDA拉高的指令,之后再读数据时才不会出问题。(本人浅见,不一定正确)

    而当P0P2口作总线使用与外部并口连接时,应该就不会有上面的问题,因为从上图可各,当作总线使用时,在控制信号的作用下,与门导通,同时多路开关通过反向器与“地址/数据总线”连接,此时V1V2的驱动电路形成反相,形成推拉式电路。在这种情况下输出时,可直接驱动电路,不需要接上拉电阻(因为V1导通)。而输入时,直接读引脚即可,不需置1。(因为输入时,地址/数据线上没有数据,V2应该截止(我认为的))

    ----------------------------------

    P1_0=!P1_0在KEIL中编译后的反汇编指令为CPL 1.0;从上面所述可知为读端口指令,所以可以在C中直接使用,如用作看门狗的清除脉冲和LED灯的闪烁等。

    读端口指令似乎是要对内部的端口寄存器(P0~P4)进行改写时才进行的,所有说要先读端口锁存器状态,改写完后同时有锁存器输出

    而读引脚指令没有改写寄存器

    展开全文
  • LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。   静态显示  静态驱动也称直流驱动。静态驱动是...

    LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。 

      静态显示

      静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

      动态显示

      LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

    展开全文
  • 2006-05-13 22:30:38  摘 要:介绍了一种利用89C52单片机的一个并行口实现多个LED数码管显示的简单方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用MCS-...
    2006-05-13 22:30:38

    字体变小字体变大
      摘 要:介绍了一种利用89C52单片机的一个并行口实现多个LED数码管显示的简单方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用MCS-51汇编语言编写的具体程序。

    关键词:89C52;数码管LED;并行口;移位寄存器;译码器

      在单片机应用系统中,普遍使用成本低廉、配置灵活的数码管(LED)做显示器。常用的为4~8位八段LED数码管显示器,即需要4~8个LED数码管。实现这种显示的方法很多,但是,必须采用相应的措施才能实现多个LED的显示。本文介绍了一种设计方法,利用该方法设计的多路LED数码管显示系统具有硬件设备简单,可移植性好,成本低廉的特点,在各种仪表显示系统中应用效果良好。

    1 硬件电路

      多位LED显示时,常将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由另一个8位I/O口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。本文将介绍一种利用单片机的一个并行I/O口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。其中,74LS138是3线-8线译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。
      

      显示时,其显示数据以串行方式从89C52的P12口输出送往移位寄存器74LS164的A、B端,然后将变成的并行数据从输出端Q0~Q7输出,以控制开关管WT1~WT8的集电极,然后再将输出的LED段选码同时送往数码管LED1~LED8。位选码由89C52的P14~P16口输出并经译码器74LS138送往开关管Y1~Y8的基极,以对数码管LED1~LED8进行位选控制,这样,8个数码管便以100ms的时间间隔轮流显示。由于人眼的残留效应,这8个数码管看上去几乎是同时显示。

    0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=96 src="http://www.sodz.com/TECH/gf/756143511.jpg" width=438>

    0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=108 src="http://www.sodz.com/TECH/gf/611693516.jpg" width=402>

     

     

     

     

    2 软件编程

      该系统的软件编程采用MCS-51系列单片机汇编语言完成,并把显示程序作为一个子程序,从而使主程序对其进行方便的调用。图2所示是其流程图。具体的程序编码如下:

    0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=273 src="http://www.sodz.com/TECH/gf/346928748.jpg" width=236>

    0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=272 src="http://www.sodz.com/TECH/gf/429252162.jpg" width=230>

    0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=249 src="http://www.sodz.com/TECH/gf/071883471.jpg" width=246>

    0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=272 src="http://www.sodz.com/TECH/gf/522451673.jpg" width=230>

    0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=272 src="http://www.sodz.com/TECH/gf/429252162.jpg" width=230>

    0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=232 src="http://www.sodz.com/TECH/gf/116329563.jpg" width=214>

    0 && image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" height=211 src="http://www.sodz.com/TECH/gf/703922302.jpg" width=188>

     

     

     

     


    3 结束语

      该设计方法已多次应用于学生单片机实验的显示电路和多种仪器显示系统中。只要将该显示程序调入其它主程序中,即可完成显示功能。经过多次使用证明:该方法可移植性好、实用性强。

    参考文献

    1.何立民.MCS-51系列单片机应用系统计.北京航空航天大学出版社.1999,6
    2.孙涵芳,徐爱卿.MCS-51/96系列单片机原理 及应用.2001,3

     

    展开全文
  • 其中16个NEG引脚接了74HC595(U16、U17)的并行输出端。我们通过排线把74HC595(U4、U5)的输出端接到J17、J18,使之连到16个POS引脚。所以,点阵的所有32个引脚接了4片74HC595的输出端。4片74HC595又级联起来。相当...

    硬件连接
    这里写图片描述
    这里写图片描述
    如图,16*16的点阵,分为16个POS引脚和16个NEG引脚。其中16个NEG引脚接了74HC595(U16、U17)的并行输出端。我们通过排线把74HC595(U4、U5)的输出端接到J17、J18,使之连到16个POS引脚。所以,点阵的所有32个引脚接了4片74HC595的输出端。4片74HC595又级联起来。相当于只有一个串行输入端P3.4。

    74HC595原理分析

    https://blog.csdn.net/huangyangquan/article/details/78332246
    总结:只需控制SER、SCLK、RCLK就能控制点阵的显示。

    软件设计

    /*********************************************************
    * 函 数 名         : dianzhen_all_on
    * 函数功能         : 全部点亮
    * 输    入         : 无
    * 输    出         : 无
    **********************************************************/
    void dianzhen_all_on(void)
    {
        unsigned char i = 0;
    
        for (i=0; i<16; i++)
        {
            SER = 0;
            delay10us();
            SCLK = 1;
            delay10us();
            SCLK = 0;
            delay10us();
        }
        for (i=0; i<16; i++)
        {
            SER = 1;
            delay10us();
            SCLK = 1;
            delay10us();
            SCLK = 0;
            delay10us();
        }
    
        RCLK = 1;                //锁存,显示
        delay10us();
        RCLK = 0;
    }

    总结:学习LED点阵就是为了学习74HC595的芯片,学会分析74HC595的工作原理与时序逻辑图。

    展开全文
  • 我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来...

     我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来),有并入串出的(相对前者而言)。具体用哪种类型要根据我们得实际情况。比如利用单片机显示数码管单纯的显示一个数码管如果仅仅是为了显示 那么动用单片机一个端口(如P0或P1/P2/P3)那没有什么,当然这里我说的数码管是8段的(如果利用BCD类型 16进制数码管那么只需四个即可)就拿51类型的单片机来说,总共32个I/O口,一般如果不是做太大的工程是完全够用的,但有些时候你会恨单片机怎么不多长几条“腿”,怎么省还是不够用。这个时候就需要用到并转串或者串转并芯片来进行IO口的扩展,74HC165就是一种并行转串行的芯片。

    74HC165是一款高速CMOS器件,74HC165遵循JEDEC标准no.7A。74HC165引脚兼容低功耗肖特基TTL(LSTTL)系列。        74HC165芯片有8位移位寄存器(并行输入,互补串行输出)   

     74hc165特性

      8位同步并行输入

      异步串行输出

      兼容JEDEC标准no.7A

      ESD保护

          简要说明
          54/74165为8位移位寄存器,其主要电特性的典型值如下:

    74hc165基本参数

      电压:2.0~6.0V

      驱动电流:+/-5.2mA

      传输延迟:16ns@5V

      最高频率:56MHz@5V

      逻辑电平:CMOS

      工作温度:-40~+85℃

      封装:SO16,SSOP16,DIP16,TSSOP16

     

    逻辑电路图:

    真值表:

    时序图:

     

     

       74HC165芯片的芯片引脚图:


         引脚功能介绍
    1、CLK,CLK INH : 时钟输入端(上升沿有效)
    2、A-H :并行数据输入端
    3、SER :串行数据输入端,为串行输入端 、 将数据串行进入到寄存器中、在每一个时钟的上升沿向右移动一位,利用这种特性,只要把 QH输出连接到下一级的SER输入 既可实现并转串扩展
    4、QH : 输出端
    5、!QH :互补输出端
    6、SH/!LD:移位控制/置入控制(低电平有效), 为低电平时 并行数据进入移位寄存器中,为高电平时并行数据不能传进移位寄存器

    ①当输入端(SH/LD)为低:

      从D0到D7口输入的并行数据将被异步地读取进寄存器内,然后通过DS输出。

    ②当输入端(SH/LD)为高:

      数据将从DS(10引脚)输入端串行进入寄存器,在每个时钟脉冲的上升沿向右移动一位。利用这种特性,只要把Q7输出绑定到下一级的DS输入,即可实现并转串扩展。(在我们的开发板,DS端是悬空的),通过时钟管脚,上升沿有效,在每个时钟脉冲的上升沿向右移动一位(D0→D1→D2→D3→…→D7)一位一位将数据往外读出和移出。

       芯片工作方法:  

        其实看一个芯片是如何使用的,不只是看引脚功能,更重要的是要看时序图和真值表,从其中我们可以详细的了解到它是如何使用的,然后转化成程序代码即可。

            从上面我们的真值表和时序图中我们要特别注意几个端口的变化,真值表中SH/LD只有在高电平的时候方才有效;CLK,CLK INH只有当其中一个为低电平的时候,另一个时钟才能正确的输入,这是非常重要的(一般的我们在使用时,可以将其中的一个直接接地,另一个做时钟输入端口使用)。但是我们做事要细心,要一丝不苟,从时序图中我们看到SH/LD有一个负脉冲这是什么缘故呢?在程序设计中如果忽略了此处,那么注定结果是悲剧的。从SH/LD的全称是: SHIFT/LOAD 这说明它有两种功能( SHIFT英文意思是移位,LOAD是装载)  ,故美其名曰: 移位控制(高电平有效)/置入控制端口(低电平有效)。在单片机接收数据前,必须将该引脚拉低,目的是为了将并行数据A--H上得数据装载到内部寄存器中,这里体现的时LOAD功能;接下来在接收数据的过程中必须将该引脚拉高,目的是为了使寄存器中的数据可以移动,从而从QH或QN'中移入单片机。这里体现的是SHIFT功能。74hc165中最重要的一个引脚就是该引脚 至于说时钟电路就显得逊色多了。我们只需将单品机的某一个端口拉低或抬高即可,这样数据就一步一步的被接收了。请务必记得上升沿有效。

    接下来看下使用到的开发板相关模块的电路原理图:

     

         开发板上的165并行输入端口 连接的IO口是与8个独立键盘相互共用,可以做独立键盘的输入扩展、QH串行输出端口是连接了P17引脚 加了个短路冒不用的时候可以断开避免影响P17的电平。 每次按键按下时,相应的发光二极管就会被点亮。

      硬件连线图:

     

    示例程序如下:

       #include "reg52.h"
       #include "intrins.h"
     
    
       typedef unsigned char u8;
       typedef unsigned int u16;
    
       #define GPIO_LED P0
       
       sbit IN_PL = P1^6;  //SHIFT/!LOA引脚
       sbit IN_Data = P1^7; // QH数据输出引脚
       sbit SCK = P3^6;  //CLOCK引脚
    
       u8 Read74HC165()
       {
       u8 indata;
       u8 i;
    
       IN_PL = 0;//装载8位并行数据
       _nop_();
       IN_PL = 1;//转换8位并行数据为串行数据
       _nop_();
    
       indata = 0;
       for(i = 0; i < 8; i ++) //将8个串行数据存入数组indata中
       {
        indata = indata << 1;//开始时,indata数组先左移一位,以后每个循环左移一次
    	SCK = 0;//时钟低电平到来后,并行数据开始转换串行数据
    	_nop_();
        
    	indata |= IN_Data; //将转换完成的串行数据一位位存入数组
    	SCK = 1;  //时钟变为高电平,再次变为低电平时,开始传出下一位串行数据
       }
       return indata;
       }
    
    
      
    
    
       void main()
       {
       u8 h165Value;
       while(1)
       {
       h165Value = 	Read74HC165();
       if(h165Value != 0xff)
       {
        GPIO_LED = ~h165Value; //根据传出的串行数据来点亮相应的发光二极管
       }
       }
       }

     

    展开全文
  •  了解51单片机I/O口的电气特性和驱动能力。2. 了解LED电路中加入限流电阻的原因。3. 掌握定时器原理及编程。4. 掌握并口程序的编辑、编译、调试和运行。二.实验设备和器件1. PC机 2. PROTEUS仿真软件 3. ...
  • 80C51单片机有4个8位的并行I/O接口,分别是P0、P1、P2和P3。各口都是由口锁存器、输出驱动器和输入缓冲器组成。各口编址于特殊功能寄存器中,既有字节地址又有位地址。对各口锁存器的读写,就可以实现口的输入/输出...
  • 实验三 6LED静态串行显示一、实验目的1、掌握数字、字符转换成由数码管显示的八段码的软件译码方法及译码过程;2、静态显示的原理和相关程序的编写。 二、实验电路静态显示 电路如图3-2所示。显示器由6个LED数码管...
  • 我们都知道通信从大的方面有两种:串行和并行。串行的最大优点是占用总线少,但是传输速率低;并行恰恰相反,占用总线多,传输速率高。市面上有很多这样的芯片,有串入并出的(通俗讲就是 一个一个进,最后一块出来...
  • 51单片机驱动16*64点阵

    2019-12-02 19:27:23
    单片机驱动74HC595做行控制,74HC154做列控制。 74HC595说明:一个串行输入,并行输出的芯片 引脚12:寄存器时钟 RCK (REGISTER CLOCK) 引脚14:数据串行输入引脚DS (DATA SERIAL) 引脚11:数据输入时钟,在上升...
  • (1)之所以用IO口扩展,是因为节省IO引脚(设想假如控制LED就需要八个引脚,那么如果需要很多功能实现的话,IO引脚定是不够的).。 (2)如果定义位变量 sbit RCLK=P3^5;时候会出现error C231: ‘RCLK’: ...
  • 前些日子,从淘宝上购得一块08接口的双色LED显示屏(打算做个音乐频谱显示器),捣鼓了好几天,终于搞清楚了其控制原理,在这里做个总结,算是备忘吧。   1.LED显示屏的扫描方式  LED显示屏的扫描方式有静态、1...
  • 并行I/O口扩展实例 //《51单片机原理及应用(第二版)——基于Keil C与Proteus》第四章例4.4 I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0、P2口用作地址总线和数据总线,此时能用的I/O口就只有...
  • 实验目的:用8*8的LED点阵显示一颗爱心。 实验仪器:普中开发板(非广告) 实验背景:出于一些原因,最近在看Arduino,但仍觉得51好玩。遂,一边看Arduino,一边整理51。 8*8的LED点阵电路如图一所示,有两种方式...
  •   我尝试通过移位寄存器级联+三八译码器,实现用3跟控制线,驱动16*16LED点阵屏的效果。这是第一篇博客,讲述74HC595芯片的工作原理   一般情况下,使用单片机来控制LED。一个引脚,控制一个LED,是最直观的方法...
  • 用 74HC595 驱动点阵显示屏可见:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/e4d7db39c77e9f35b9998f26.html看过一些资料,送往74HC595的串行信号,基本上都是用单片机并行接口的某个位,
  • 单片机 驱动 74ls164 窜转并 串行 转 并行 例子 汇编源码 汇编代码 以及proteus 仿真 单片机 做的 数码管显示时钟,数字时钟 电子中,无ds1302. proteus 模拟 单片机 eeprom e2prom 例子 c51 单片机 i2c 例子 以及 ...
1 2 3 4 5 ... 20
收藏数 945
精华内容 378
关键字:

单片机并行驱动led