历史上的今天
返回首页

历史上的今天

今天是:2025年03月13日(星期四)

正在发生

2020年03月13日 | 51单片机LED点阵实验(74HC595)

2020-03-13 来源:eefocus

实验目的:用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的尺寸。


苟日新,日日新。

推荐阅读

史海拾趣

EPIGAP公司的发展小趣事

为了进一步扩大市场份额,EPIGAP公司开始实施国际化战略。公司先后在多个国家和地区设立了办事处和研发中心,以便更好地了解当地市场需求和技术发展趋势。通过与国际客户的深入合作,EPIGAP公司的产品逐渐打入国际市场,赢得了广泛的认可和赞誉。

Electronic Concepts Inc公司的发展小趣事

随着市场的竞争加剧,ECI意识到只有不断创新才能在行业中立足。在总经理张女士的领导下,公司投入大量资源进行研发,成功推出了一系列具有竞争力的新产品。其中,一款集成了先进算法的智能传感器,因其高精度和低功耗特性,在市场上大受欢迎。这一创新不仅提升了ECI的品牌形象,也为公司带来了丰厚的利润。

Electrolube公司的发展小趣事

在电子行业的激烈竞争中,Electrolube公司始终坚持以客户需求为导向,不断创新和拓展产品线。除了UVCL涂层外,公司还推出了一系列树脂、涂料和热管理解决方案的产品组合,为EV电池提供全面保护。

这些产品不仅具有优异的性能表现,而且能够满足不同客户的需求。例如,某些产品具有优异的耐高温性能,适用于高温环境下的电子设备;而另一些产品则具有出色的耐化学腐蚀性能,能够在恶劣的工作环境中保持稳定的性能。

Electrolube公司通过不断的技术创新和产品优化,成功拓展了市场份额,并在电子行业中树立了良好的品牌形象。同时,公司还积极与各大汽车制造商合作,共同推动电动汽车产业的发展。

DBLECTRO公司的发展小趣事

进入21世纪后,随着全球对环保和可持续发展的关注度不断提高,迪贝电子也积极响应这一趋势,将环保和社会责任融入到企业的经营理念中。公司投入大量资金研发更加环保、节能的产品,并积极参与各种环保公益活动。同时,迪贝电子还积极推广绿色制造理念,通过优化生产流程、降低能耗和减少废弃物排放等措施,实现了企业的可持续发展。

Ferroperm公司的发展小趣事

Ferroperm公司非常重视产品的品质管理。他们建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都实行严格的质量控制。同时,Ferroperm还注重持续改进,不断引进先进的生产设备和检测技术,提高产品的质量和性能。这种对品质的执着追求使得Ferroperm的产品在市场上获得了良好的口碑和信誉。

Crouzet公司的发展小趣事

经过多年的发展,Crouzet已经成为全球知名的自动化产品供应商之一。公司在全球拥有20家工厂和5家研发中心,分布在欧洲、亚洲、北美洲等地区。同时,Crouzet还在全球17个国家设有销售网络,为全球客户提供优质的产品和服务。展望未来,Crouzet将继续秉承创新、卓越的理念,不断推动自动化技术的发展,为全球客户提供更加高效、可靠的自动化解决方案。

通过以上五个故事,我们可以看到Crouzet公司在电子行业发展的历程中,始终保持着对技术创新和市场需求的敏锐洞察,通过不断的产品创新和市场拓展,逐步发展成为全球知名的自动化产品供应商之一。

问答坊 | AI 解惑

冒昧的问一些如何根据元件大小选取元件的封装形式的问题

各位达人,我在做PCB板的时候对于如何根据元件数值选取元件封装时感到很吃力,举个例子 1.在选取三极管的时候,什么时候选TO-92A,什么时候选TO-92B? 2.一个电容比如一个100N/250V的电容,选取的是RAD0.3,这个电压的要求是不是贴片难以达到, ...…

查看全部问答>

in [求助] 中, 换了一个电源带来的问题

in [求助] 中, 换了一个电源带来的问题 我的问题这样的, 主机只是简单的扫描端口, 子机负责把信息显示出来(用LED),开机时会读取一下EEPROM中字符,总共才20个字符。 原来我用子机的电源,主机的电源也是从子机那里拉过来的,很正常,也很 ...…

查看全部问答>

今年题型有变,没有通信,该如何准备呢?

本帖最后由 paulhyde 于 2014-9-15 09:47 编辑 传闻今年没有无线通信题目了,不知是否属实。 如果真的没有了,以前做无线通信的该怎么准备呢?  …

查看全部问答>

ARM启动代码学习(一)RO和RW还有ZI代表什么?(转载)

    一般而言,一个程序包括只读的代码段和可读写的数据段。在ARM的集成开发环境中,只读的代码段和常量被称作RO段(ReadOnly);可读写的全局变量和静态变量被称作RW段(ReadWrite);RW段中要被初始化为零的变量被称为ZI段(ZeroInit) ...…

查看全部问答>

嵌入式单片机安卓画板研发和培训,高薪包就业!

嵌入式单片机安卓画板研发和培训,高薪包就业! 改变人生轨迹 规划职业蓝图! ----信盈达成就您的高薪梦想!         技术顾问:欧阳老师15989362803,QQ:877037118     信盈达科技有限公司专业提供嵌入式Arm+Lin ...…

查看全部问答>

ti5402的端口地址在哪找呢

ti5402的端口地址在哪找呢,手册里没发现呀。 ioport unsigned int port8FEE; 这句话后面的8FEE是在哪找的呀 我在手册上找不到 …

查看全部问答>

【PSoC4心得】capsense+led

找了capsense的例程,试着做了capsense控制led的工程。 功能介绍: 用手滑动capsense的触摸板,实现led颜色的改变。 具体连接: 下一步: 利用自带的放大器,完成模拟信号的放大滤波处理。…

查看全部问答>

51单片机计算器程序问题····

我C语言很基础····· 这个程序有很多地方都不明白·求大侠给讲解········· 红字部分是我自己理解的·和想不明白的地方············· 可能我表达的会有些不清楚···最好大侠能深刻的讲解下····· C语言我是自学 ...…

查看全部问答>

关于VIT加速度传感器测量倾角

小弟,最近做一个小项目想测量倾角,没用过VIT传感器,求教用过的朋友指导下。…

查看全部问答>