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