51单片机LED点阵实验(74HC595)

发布者:csw520最新更新时间:2020-03-13 来源: eefocus关键字:51单片机  LED点阵  74HC595 手机看文章 扫描二维码
随时随地手机看文章

实验目的:用8*8的LED点阵显示一颗爱心。


实验仪器:普中开发板(非广告)


实验背景:出于一些原因,最近在看Arduino,但仍觉得51好玩。遂,一边看Arduino,一边整理51。


8*8的LED点阵电路如图一所示,有两种方式。单片机上集成的电路方式为第二种。


其中,行由P0口控制,列由D7~D0(HC595芯片控制,见下方)控制。

图一

首先考虑,如何先点亮一个灯?


eg:让P0^7的端口为低电平,P0的其他端口为高电平;D7的端口为高电平,则第一行第一列的led被点亮。


同样的方式也可以,让其他单独的led点亮。


接着考虑,如何控制多个led的点亮?


类似与数码管的动态显示,利用余晖来进行动态显示。


第一步:P0口先选通某一列,D7~D0控制这一列中哪些灯亮。


第二步:动态显示每一列。


为了减少单片机引脚的使用,这里使用了74HC595芯片。(注:图二中led的方向反了)。

图二

图三

图四

这图是丑的没法看了。但为了叙述清楚,目前也只能这样了。74HC595芯片详细的内容可以网上找,也可以直接评论区留言。


HC595芯片的功能:串行输入,并行输出。


看如何给芯片接线,并使用:(注:引脚上加一个“非横线”,表示低有效)


1、D0~D7,并行输出,接LED。


2、16号和8号引脚,分别接Vcc,Gnd。


3、OE,13号引脚,低电平才输出有效,让它接地。


4、10号引脚,主复位引脚,低有效。目前不需要复位,直接接VCC就好.


5、14号引脚SER,接在集成板的P3^4,为串行输入端。


6、11号引脚SRCLK,接在集成板的P3^6;上升沿时,将串行口RCLK的一位,移位输入。


7、12号引脚RCLK,接在集成板的P3^5;上升沿时,将移入的8位数据,送到存储寄存器


上面的只是使用方法,如果还想继续深究,可以查看数电当中的串并行输入输出。


代码:


#include

#include

 

typedef unsigned char uchar;

 

sbit SER=P3^4;//14号引脚,串行数据输入

sbit SRCLK=P3^6;//11号引脚,移位寄存器时钟输入

sbit RCLK=P3^5;//12号引脚,存储寄存器时钟输入

 

uchar code lie[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//p0^7~p0^0,单片机中,p0^7是高位

uchar code hang[]={0x00,0x38,0x3c,0x1e,0x1e,0x3c,0x38,0x00};//D7~D0

 

 

void Hc595SendByte(uchar dat)

{

int i; //编译可能有点老,变量的定义必须放在块的开头

SRCLK=0;//初始化

RCLK=0;

for(i=0;i<8;i++)//从高位到低位,依次串行输入

{

SER=dat>>7;

dat<<=1;

SRCLK=1;//上升沿,将数据串行输入

_nop_();//一个机器周期

_nop_();

SRCLK=0;

}

RCLK=1;//上升沿,将数据送入存储寄存器

_nop_();//一个机器周期

_nop_();

RCLK=0;

}

 

void delay(int i)

{

while(i--);

}

 

void main(void)

{

int i;

while(1)

{

for(i=0;i<8;i++)

{

P0=lie[i];//选通列

Hc595SendByte(hang[i]);//送入行

delay(100);

//Hc595SendByte(0x00);//消隐

P0=0xff;//消隐

}

}

}

 


补充:


1、不是只有整数才分有符号数和无符号数。char,字符型也有,我感觉挺奇怪的,哈哈。  unsigned char


2、我第一次写这个程序的头文件是#include,但是总是报错,提示RCLK重定义。我仔细检查程序并没有发现重定义的地方。后来参看例程序,将头文件改成#include,程序顺利通过。看来52的头文件中应该定义过该变量。就像P0一样。头文件reg51.h与reg52.h的区别


3、按照C语言的标准,变量的定义必须放在块的开头。比如我将主函数中的int i放在for之前写,程序会报错。


这个标准已近很老了,现在C99标准中,变量定义的位置比较随意了,只要使用之前定义就好了。(当然单单这么说不严谨,详细的可以去网上看看)


4、今天win10刚装的Kail,端口和win7的有些不同。成功解决win10下单片机开发板驱动识别问题


5、当然还有最后的结果

图五

 

用手机拍摄,还是能看到余晖,肉眼的效果还是很好的。


拓展:这里每次显示的都是爱心,所以整体是一个静态爱心的形状。


当如果动态显示的分别是I LOVE DOG,想来也是很好看。但是估计得16*16的尺寸。


苟日新,日日新。

关键字:51单片机  LED点阵  74HC595 引用地址:51单片机LED点阵实验(74HC595)

上一篇:51单片机实现8x8LED灯阵动态显示移动文字
下一篇:51的LED点阵笔记

推荐阅读最新更新时间:2024-11-18 18:15

C51单片机模块化编程万年历设计
原文地址: C51单片机模块化编程万年历设计 作者: 给力哈 哈 程序如下: main.h #ifndef __MAIN_H__ #define __MAIN_H__ #include regx52.h #include intrins.h #include absacc.h #define uchar unsigned char #define uint unsigned int #define DQ P3_7 #endif ds18b20.h #include main.h uint sec; uint min=41; uint hour=18; uint day=20; uint month=
[单片机]
基于51单片机的远程灯控箱系统
电脑是现今信息时代的标志,通过电脑实现远程实时自动化控制是今后发展的一种趋势。在大型商场、饭店、体育场馆及娱乐场所里,通常有许多照明设备。以往的开关控制和电闸控制,常常需要工作人员频繁亲临现场操作,或向控制室拉接较长的220V电线,实时性、安全性都较差。为了实现工作人员在控制室可以对分散在各个房间的远端照明设备进行实时有效的状态控制及状态查询,笔者开发了一种基于单片机的远程灯控箱系统。该系统由一台PC上位机控制多台远端灯控箱,通过RS-485总线串行传送指令,传输距离最远可达1.2km,并增强串行通信协议的制定,降低了噪声干扰。一台灯控箱可对16路灯进行控制。灯控箱中选用SST89C58型单片机,其方便的IAP功能可在线下载Hex
[单片机]
基于<font color='red'>51</font>型<font color='red'>单片机</font>的远程灯控箱系统
51单片机开发之串口通信
4.3 串口通信 4.3.1 通信的概念 通信一词按照传统的理解就是信息的传输与交换。 对于单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”;没有通信,单片机所实现的功能仅仅局限于单片机本身,就无法通过其它设备获得有用信息,也无法将自己产生的信息告诉其它设备。如果单片机通信没处理好的话,它和外围器件的合作程度就受到限制,最终整个系统也无法完成强大的功能,由此可见单片机通信技术的重要性。 UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用于单片机和电脑之间以及单片机和单片机
[单片机]
<font color='red'>51</font><font color='red'>单片机</font>开发之串口通信
STM8L151C8单片机学习例程(10)——WFE
STM8L_10_WFE 1.User:工程及main文件 2.Hardware:EXIT,RTC,CLK,LED,Delay 3.STM8L15x_StdPeriph_Driver:STM8自带库文件 4.Debug:hex文件存放于EXE文件夹 5.Function: WFE低功耗测试 WFE是wait for event等待事件发生,CPU停止,选中的外设继续进行。下面是电流测试结果图(3.3V供电)。 /** ****************************************************************************** * @file main.c * @a
[单片机]
STM8L151C8<font color='red'>单片机</font>学习例程(10)——WFE
空气PM2.5和PM10等测定(51单片机+攀藤PMS5003)
攀藤PMS5003主动式传输协议: 官方推荐的电路: 我的连接方式: 主程序: /* 功能说明: 读取攀藤PMS5003空气质量传感器数据并显示PM2.5和PM10的值。 */ #include config.h #include lcd1602.h void UART_init() { TMOD = 0x20; //T1工作模式2 8位自动重装 TH1 = 0xfd; TL1 = 0xfd; //比特率9600 TR1 = 1; //启动T1定时器 SM0 = 0; SM1 = 1; //串口工作方式1
[单片机]
空气PM2.5和PM10等测定(<font color='red'>51</font><font color='red'>单片机</font>+攀藤PMS5003)
51单片机介绍及头文件
上次买芯片无意间发现STC也有8个脚的单片机,在我印象中貌似只有ATMEAG有8只脚的。于是乎买了几个回来,今天下了手册研究以下。再次将心得写出来 STC的8脚单片机有直插和SOP两种形式的封装,其中有6个IO口,剩下2个是VCC和GND ,不需要带晶振内部自带有时钟发生电路,在此要说明这种型号的单片机有专用的烧录软件,在宏晶官网都有下载。这6个IO口实际上是我们普通单片机上的P3口,实际编程时也是使用P3.X来实现IO口操作。唯一的不同就是没有硬件的串口,需要用到定时器来模拟(这点不好),但是下载电路和STC的串口下载电路时一样的。不做修改。这个有点费解?下载时用到的是串口形式的下载电路,硬件上使用时却没有串口。杯具啊! 关于I
[单片机]
一文详解MCS-51单片机的中断系统
MCS-51中断系统:5个中断源(两个外部中断, 两个定时器, 一个串口),2个优先级 中断相关概念 中断:当CPU正在处理某件事情时,单片机外部或内部发生的某一紧急事件请求CPU立即去处理,于是,CPU暂时中止当前的工作,转去处理这个紧急事件,待处理完毕后,再回到原来被中止的地方,继续原来的工作。 中断过程 中断发生:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理; 中断响应和中断服务:CPU暂时中断当前的工作,转去处理事件B(B的优先级要高于A); 中断返回:待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A ; 中断源(中断请求源):能够向CPU发出中断申请的部件。 中断系统结
[单片机]
一文详解MCS-<font color='red'>51</font><font color='red'>单片机</font>的中断系统
51系列单片机输出PWM的两种方法
MCS-51系列单片机无PWM输出功能,可以采用定时器配合软件的方法实现,对精度要求不高的场合是非常实用的。电路图见图1,采用高速光隔6N137输出,并将PWM的信号倒相。   一、 工作原理(原理图如图1所示)   二、PWM输出   1. 固定脉宽PWM输出 用T0定时器完成PWM输出,脉宽固定为65536us。T0定时器设置成16位定时器,PWM波形如图2所示。   程序清单:(12MHz)   PwmData0;T0定时t1的初值(字)   PwmData1;T0定时t2的初值(字)   PwmF ;PWM输出标志 ;***************************   setb tr0;启动T0
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved