51单片机通过两片74HC595级联,用8位LED数码管,分别显示当前日期,如:“2”、“0”、“-”、“0”、“5”、“-”、“2”、“6”,用Proteus仿真实现。

这篇具有很好参考价值的文章主要介绍了51单片机通过两片74HC595级联,用8位LED数码管,分别显示当前日期,如:“2”、“0”、“-”、“0”、“5”、“-”、“2”、“6”,用Proteus仿真实现。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.先上仿真图,但这么连仿真图是不太正确的,要注意。展示的话能用就行。

单片机数码管显示年月日,51单片机,proteus,单片机

2.从上到下依次放上数据手册上的引脚解释和逻辑功能和时序图

单片机数码管显示年月日,51单片机,proteus,单片机

单片机数码管显示年月日,51单片机,proteus,单片机

 单片机数码管显示年月日,51单片机,proteus,单片机

 3.贴上代码:写了发送一字节数据函数,发送全部字节函数,加上一些写了很久的解释(求赞)。文章来源地址https://www.toymoban.com/news/detail-716188.html

#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#define uint unsigned int 
#define uchar unsigned char
#define p0 P0
#define p1 P1
#define p2 P2
#define p3 P3
//参考数据手册对引脚功能进行理解,
//老师发的数据手册的第3和6页解释了各输入引脚与输出引脚的电平关系,第七页解释了每个引脚的时序关系;
//级联需要两个芯片接同个STCP和SHCP时钟,第二个的DS引脚接在第一个芯片引脚的最高位的取反脚。
//第一个u6芯片控制段选,第二个芯片控制位选;

sbit STCP=P2^0;//第三,STCP的英语解释是storage register— clock input
//意思是储存寄存器的每一位输入值用来准备输出,1为真,而OE引脚低电平就会允许输出寄存器的内容;
//如果stcp的处于低电平,寄存的值就不会允许输出,

sbit SHCP=P2^1;//第一,SHCP的英语解释是 shift register_ clock input,
//移位寄存器,可以理解为允许且给寄存器输入一位又一位的二进制数据,是总的时钟信号
sbit DS	 =P2^2;//第二,ds下降的时候,stcp上升,stcp下降一会ds再上升
//ds在shcp下降时触发上边沿

//结合第6页的逻辑功能解释,加上数据手册第七页的时序图,可以明白一下操作规则
//DS先置为高电平,引来SHCP的第一次上升沿的时候就会将数据放置进入74HC芯片移位寄存器;
//有8位,进行移位操作,相当于<<1和crol函数,通过移位也能实现串行级联
//如果STCP迎来上升沿,会将移位寄存器内部的值准备通过并行输出8位的值


uchar code data2[]={0xa4,0xb0,0xbf,0xc0,0x99,0xbf,0xa4,0x99};//段选
uchar code data1[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//位选
//data1放位码,data2放段码

//一个延时函数
	void delay(uint i)
{
	uchar m,n;
	for(m=0;m<i;m++)
	for(n=0;n<i;n++);
}


//一个传输一字节(8位二进制数字)的函数
void send_byte(uchar data1)
{
	
	uchar i;
	for(i=0;i<8;i++)
	{
		SHCP=0;//每次开始传输前先把SCHP置0,
		DS=(data1)&0x80;//开始通过DS,data1的长度是一个字节,即8位二进制数字
		//data1和0x80求与的作用:
		//1.0x80的二进制数为:1000 0000
		//2.和data1求与只会有两个结果,为真或者为0;求与的结果是最高位由data1决定,而其他位全部置零
		//3.通过位求与的方式屏蔽掉数据data1转为二进制后最左边即最高位以外的其他7位。
		//为方便理解,可以写为:
		//if((data1&0x80)!=0)
		//		DS=1;
		//else 
		//		DS=0;
		data1=(data1)<<1;//通过对data1二进制的不断左移位,判断出data1每一位的值为0或者为1;
		
		SHCP=1;//通过一个上升沿,允许DS数据输入移位寄存器;
		_nop_();//等待一个机器周期,保证符合时序图。
	}
	_nop_();
	_nop_();
}

//写一个显示函数,通过将位码和段码先后输入两个74HC595芯片来显示内容。
void display()
{
	uchar i;
	SHCP=0;//将三个可控输入都初始化值为0。
	STCP=0;
	DS=0;
	//正如前面所述,开发板上有两个595芯片,并且已经是级联和OE MR等线都连好了的。
	//我们需要控制的只有shcp,stcp,ds三个引脚的高低电平输入时序,
	//板上有两片595,第一个595用来控制一个数码管上显示的内容,第二个用来控制要让8个数码管哪个点亮
	//单片机的输出频率很快,虽然我们是一个个数码管依次显示,但是因为频率太快,人眼无法分辨
	
	//通过上述解释,我们可以理解:
	//1.每次我们要选择第几个数码管显示什么样的内容,我们要输入段码和位码两次数据一个给芯片1,一个给芯片2;
	//2.因为595是移位寄存器,即在允许串行输出的情况下,最先进入移位寄存器的值最终会被通过串行输出引脚发送到下一个移位寄存器,即芯片2
	//3.根据版图所接引脚,我们要先输入位码,再输入段码。
	for(i=0;i<8;i++)
	{
	  send_byte(data1[i]);//位码
		send_byte(data2[i]);//段码
		STCP=1;//置2,允许输出全部8位寄存器的数据
  	_nop_();//延时一个机器周期再置0
	  STCP=0;
	 delay(2);//数据手册的时序图上看得出延时2us或者两个机器周期以上才能再输入DS。
	}
}
void main(void)
{
	//p2=0xff;

	delay(10);
	while(1)
	{
		display();
	}
}
	

到了这里,关于51单片机通过两片74HC595级联,用8位LED数码管,分别显示当前日期,如:“2”、“0”、“-”、“0”、“5”、“-”、“2”、“6”,用Proteus仿真实现。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【74HC595】51单片机(普中A2开发板)LED点阵屏点亮以及74HC595芯片的使用笔记

    纯小白写的文章,如有问题,欢迎评论区讨论,反驳,指正。 如果你只想了解74HC595如何使用,建议只看2.3。 通过查看普中A2开发板的原理图(图1)可以知道,通过P0(P0_0、P0_1…P0_7)口和DPa、DPb…DPh来控制哪一颗LED点亮。我这个开发板上的点阵模块没有按照他给的原理图上

    2024年02月05日
    浏览(50)
  • 51单片机——IO拓展(串转并)-74HC595 小白详解

    74HC595 芯片介绍 74HC595 是一个 8 位串行输入、并行输出的位移缓存器,其中并行输出为三 态输出(即高电平、低电平和高阻抗)。芯片管脚及功能说明如下:图1 上面两张都是 74HC595 芯片管脚图,细心的朋友就会发现左侧的 1 脚是 QB, 而右侧芯片的 1 脚是 Q1,左侧芯片的 11

    2024年02月04日
    浏览(31)
  • 51单片机驱动8位数码管(74HC595驱动)滚动显示

    原文链接:https://www.yourcee.com/newsinfo/2929591.html 点击图片购买 主要关注下供电电压是3.0-5.0v(建议5V),请在规定范围内供电。 模块上芯片引出5个引脚,芯片引脚与模块引脚对应关系是:VCC-VCC SCK-SCLK, RCK-RCLK,SER-DIO,GND-GND 可以对比程序学习时序图,便于理解。 1.显示异常可排除

    2024年02月15日
    浏览(37)
  • 使用74HC595完成16*16led矩阵广告牌(51单片机软件仿真)

    目录 74HC595简介(个人理解)与模块代码 软件仿真和代码  SHCP是写入595芯片数据的配置 STCP是发送595芯片内信息的配置 DS是数据配置的区域 595芯片有9个输出引脚,最后一个是供给下一块串联的595使用的,下一块串联的595stcp和shcp与上一块连接的引脚一致,下一块的DS与上一块

    2024年02月06日
    浏览(31)
  • 51单片机LED点阵控制原理、74HC595工作原理和字母和滚动显示实验代码

    目录 1. 74HC595工作原理图解  2.LED点阵控制原理 3.点阵LED实验 3.1 配置74HC595代码 3.2 D点阵LED显示H   3.3 滚动LED  (1) 滚动扫描图示  (2)程序代码 4.遇到奇怪的bug    :        输出使能,输入低电平允许输出,因此需要用接线帽j24让oe和地短接。 (但是我普中A2的板子,不

    2024年02月04日
    浏览(42)
  • 单片机(二):3个IO扩展n*8个IO,基于74hc595与74hc165的8x8矩阵键盘

    3个IO通过一片74hc595扩展8个输出IO,3个IO通过一片74hc1655扩展8个输入IO,最终成为8X8的矩阵键盘。对于普通的矩阵键盘,再加入防止鬼键、消抖和按下与松开识别。 74HC595是一个8位串行输入、并行输出的移位缓存器。通俗的来讲就是在输入时钟的上升沿数据输入端的数据可以位

    2024年02月10日
    浏览(43)
  • stm32 74hc595级联编程

    原理图如下  代码如下\\\"xl74hc595.c\\\" \\\"xl74hc595.h\\\" 代码如下 GPIO初始化 具体IO口根据实际需求进行修改 支持任意长度的的595芯片级联  

    2024年02月06日
    浏览(32)
  • 利用芯片74hc165为单片机增加输入扩展端口proteus仿真arduino

    我们前面的博文《输入端口少如何扩展?74hc148或74ls148级联在arduino中实现16转4的应用》介绍了148,148输入后可以立即输出到数码管,可以说它是自带编BCD编码器的。而今天这里我们主要介绍的74hc165是没有编码器,这里我们以proteus为仿真环境,arduino作为编译代码环境。 文章原

    2024年02月07日
    浏览(38)
  • 51单片机蓝牙模块(HC05)运行原理

    在所有工作进行之前首先看一看自己的蓝牙模块是否是正常的,这一步很重要。一块正常的蓝牙模块是所有后续工作的基础! 首先把蓝牙模块链接到51单片机上 这时需要注意!!!我们需要将 蓝牙模块的RXD和单片机上的P30(RXD)引脚连接,将蓝牙模块的TXD和单片机上的P31(

    2023年04月08日
    浏览(46)
  • 基于51单片机hc-05,hc-06蓝牙传送数据到手机APP

           通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 1s (自己可设定)传输一批传感器数据      最近在封装一些传感器的程序,在通过蓝牙连接手机调试数据的时候遇到的一点小问题。蓝牙的介绍网上有很多,这里就不说。把51代码丢出来供大家移植。 通过蓝牙发送浮点型、

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包