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

目录

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)
    {
        
    }
}

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值