51单片机——74HC595、LED点阵、直流电动机C语言入门编程

  • Post author:
  • Post category:其他



目录


74HC595:


LED点阵屏:


1.IO扩展74HC595:LED点阵屏按行滚动显示


2.LED点阵:点亮左上角一个LED


3.LED点阵:显示数字0


4.LED点阵:显示心形图像


直流电动机:


ULN2003:


1.直流电动机:转动五秒后停止



74HC595:



是一个8位串行输入、并行输出的位移缓存器,其中并行输出为三态输出(即高电平、低电平和高阻抗)。移位寄存器和存储器是单独的时钟。

数据放在SER中,在SCK的上升沿输入,在RCK 的上升沿进入到存储器中。

移位寄存器有一个串行输入(DS),和一个串行输出(Q7非),和一个异步的低电平复位,存储寄存器有一个并行 8 位的,具有三态的总线输出,当 MR 为高电平,OE为低电平时,数据在SHCP上升沿进入移位寄存器,在STCP上升沿输 出到并行端口。(

先发高位后发低位

15和1到 7脚 QA–QH→并行数据输出;9脚QH非→串行数据输出;10脚SCLK非(MR)→低电平复位引脚;11脚SCK(SHCP)→ 移位寄存器时钟输入;12脚 RCK(STCP)→存储寄存器时钟输入;13脚G非(OE)→ 输出有效;14脚SER(DS)→串行数据输。


LED点阵屏:



是由发光二极管排列组成的显示器件, 使用比较多的就是8*8点阵。8*8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的

某一行置1电平,某一列置0电平

,则相应二极管点亮。(普中A2的点阵屏需要将跳线帽短接到GND)




1.IO扩展74HC595:

LED点阵屏按行滚动显示

#include <REGX52.H>
#include "DELAY.h"

sbit SER=P3^4;
sbit SCK=P3^6;
sbit RCK=P3^5;

void main()
{
    unsigned char i,j;
    SCK=0;//初始化
    RCK=0;//初始化
    P0=0;//每行都亮
    while(1)
    {
        for(j=0;j<8;j++)
        {
            for(i=0;i<8;i++)
            {
                SER=(0x80>>j)&(0x80>>i);
                SCK=1;
                SCK=0;
            }
            RCK=1;
            RCK=0;
            delay(500);//显示500ms后在移位
        }
    }
}


2.LED点阵:

点亮左上角一个LED

#include <REGX52.H>

sbit SER=P3^4;
sbit SCK=P3^6;
sbit RCK=P3^5;

void main()
{
    unsigned char i;
    SCK=0;
    RCK=0;
    P0=0x7f;
    for(i=0;i<8;i++)
    {
        SER=0x80&(0x80>>i);
        SCK=1;
        SCK=0;
    }
    RCK=1;
    RCK=0;
    while(1)
    {
        
    }
}


3.LED点阵:

显示数字0

点阵函数1

#include <REGX52.H>

code unsigned char mo[]={0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00};//需要显示的变量在这里改,放在Flash里减少占用空间

sbit SER=P3^4;
sbit SCK=P3^6;
sbit RCK=P3^5;

void dianzhen_Init(void)//初始化
{
    SCK=0;
    RCK=0;
}

void dianzhen(void)
{
    unsigned char i,j;
    for(j=0;j<8;j++)
    {
        for(i=0;i<8;i++)
        {
            SER=mo[j]&(0x80>>i);
            SCK=1;
            SCK=0;
        }
        P0=~(0x80>>j);//消影,先改变P0的电平,然后点亮
        RCK=1;
        RCK=0;
    }
}

主函数

#include <REGX52.H>
#include "dianzhen.h"

void main()
{
    dianzhen_Init();
    while(1)
    {
        dianzhen();
    }
}


4.LED点阵:

显示心形图像

点阵函数2

#include <REGX52.H>
#include "DElAY.h"

sbit SER=P3^4;
sbit SCK=P3^6;
sbit RCK=P3^5;

void dianzhen_Init(void)//初始化
{
    SCK=0;
    RCK=0;
}

void HC595_SendByte(unsigned char Byte)//LED点阵输入列数据
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
        SER=Byte&(0x80>>i);//先高位,后低位
        SCK=1;
        SCK=0;
    }
    RCK=1;
    RCK=0;
}

void dianzhen(unsigned char lie,hang)//LED点阵在某一列显示数据
{
    HC595_SendByte(hang);//高位在上,1为亮
    P0=~(0x80>>lie);//0~7,0在左
    delay(1);//消影
    P0=0xff;
}

主函数

#include <REGX52.H>
#include "dianzhen.h"

unsigned char mo[]={0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38};//心形字模

void main()
{
    unsigned char i;
    dianzhen_Init();
    while(1)
    {
        for(i=0;i<8;i++)
        {
            dianzhen(i,mo[i]);
        }
    }
}


直流电动机:


没有正负之分,在两端加上直流电就能工作

。需要知道直流电机的额定电压和额定功率,不能使之长时间超负荷运作。 在交换接线后,可以形成正反转。


ULN2003:

一个单片高电压、高电流的达林顿晶体管阵列集成电路。不仅可以驱动直流电动机,也可以驱动五线四相步进电机。因为ULN2003的输出是集电极开路,ULN2003要输出高电平,必须在输出口外接上拉电阻。不能直接将ULN2003的2个输出口接电机线,而

必须一根线接电源,另一个才接ULN2003输出口。(输出高电平来控制电 机旋转,输出低电源控制电机停止。)


1.直流电动机:

转动五秒后停止

#include <REGX52.H>
#include "DELAY.h"

void main()
{
    P1_0=1;
    delay(5000);
    P1_0=0;
    while(1)
    {
        
    }
}



版权声明:本文为m0_69169562原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。