使用C51单片机和74HC595芯片驱动数码管动态扫描

学习51单片机有一段时间了,最近想用51单片机做个多功能的时钟来实践一下。因为在制做的过程中总是突发奇想的加一些功能上去,比如加了个温湿度测量显示、加了个24C02·····为了节省io我使用了两片74HC595芯片联级驱动8位动数码。

关于74HC595芯片的资料可以参考 http://t.csdn.cn/cjber
 

以下是例程

使用74HC595的函数部分

#ifndef __74HC595_H
#define __74HC595_H

#include<reg52.h>
#include<intrins.h>


typedef unsigned char uchar;
typedef unsigned int uint;


sbit DS=P3^0;       //控制串行数据输入
sbit SH_CP=P3^1;    //串行输入时钟
sbit ST_CP=P3^2;    //存储寄存器时钟


void Send_Byte(uchar byte);//发送1byte数据
void Send_Doudle(uchar Place,uchar Data);//参数为原码  发送2byte数据
void Send_CP(uint place,uint Data);//参数为数字  发送2byte数据
void delay(int z);//延时1ms


#endif

#include"74HC595.h"

uchar smgduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,
	               0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0~9段码

void Send(uchar byte)
{
	uchar a;
	SH_CP=0;//拉低时钟线为传送数据准备
	ST_CP=0;
	for(a=0;a<8;a++)
	{
		DS=byte&0x80; //先发送最高位
		byte<<=1;
		SH_CP=1;//拉高时钟线移位寄存器往后移动1位接纳新传送的1位数据
		_nop_();
		_nop_();
		SH_CP=0;//复位	
	}
}


void Send_Byte(uchar byte)
{
	Send(byte);//发送8位数据移位寄存器
	
	ST_CP=1;//将移位寄存器的数据传输到存储寄存器
	_nop_();
	_nop_();
	ST_CP=0;//复位
}


void Send_Doudle(uchar Place,uchar Data)
{
	Send(Place);//先发送数码管位选数据到移位寄存器
	Send(Data);	//再发送数码管段选数据到移位寄存器
	
	ST_CP=1;//将移位寄存器的数据传输到存储寄存器
	_nop_();
	_nop_();
	ST_CP=0;//复位
}


void Send_CP(uint place,uint Data)
{
	Send(0x01<<place);//先发送数码管位选数据到移位寄存器
	Send(smgduan[Data]);//再发送数码管段选数据到移位寄存器
	
	ST_CP=1;//将移位寄存器的数据传输到存储寄存器
	_nop_();
	_nop_();
	ST_CP=0;//复位	
}

void delay(int z)//1ms延时
{
 int x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}





主函数部分

#include<reg52.h>
#include"74HC595.H"


void main()
{
	int a,b[8]={2,0,2,2,0,8,1,4};
    while(1)  
	 for(a=0;a<8;a++)
	 {
		 Send_CP(a,b[a]);
		 delay(3);
		 Send_Byte(0xff);//消隐
	 }	  
}

proteus仿真

 经过2片74HC595的联级操作只需要3个io就可控制8位的数码管大大的提高了io的利用率,甚至你还可以将更多片的74HC595串起来使用,以上就是本次分享的全部内容,由于水平有限如有错误请谅解!

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值