c语言595驱动数码管,74hc595驱动4位数码管电路连接图及程序解析 - 全文
本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口。74HC595部分电路图如下:
与单片机相连接的三个脚分别为: HC_DAT,HC_RCK,HC_CLK。两片595采用级联方式,即U2的第9脚接到U3的第14引脚。
74HC595是8位的移位寄存器,串入并出,并具有锁存功能,被广泛的用于数码管、点阵的驱动电路中。其管脚介绍如下:
15: 数据输出A-接数码管数据A段;
l: 数据输出B-接数码管数据B段;
2: 数据输出C-接数码管数据C段;
3: 数据输出D-接数码管数据D段;
4: 数据输出E-接数码管数据E段;
5: 数据输出F-接数码管数据F段;
6: 数据输出G-接数码管数据G段;
7: 数据输出H-接数码管数据H段;
16: 电源正脚-接电源正;
8: 电源负脚=接电源负;
14: 数据输入脚-接单片机管脚;
12: 数据锁存时钟-接单片机管脚;
11: 数据输入时钟-接单片机管脚;
13: 使能输出脚-低电平有效,接低电平;
10 :数据清零-不清零,接高电平;
9:数据级联输出-接下一片595的数据输入脚
74hc595时序图
通过时序可以看出:
SCK是上升沿的时候要把数据写入;
RCK是上升沿的时候数据才能锁存显示;
有数据操作的过程中RESET必须是高电平;
EN必须是低电平,595才能工作;
知道了以上4点就可以写程序了。其中3、4条是硬件连接上的事情(也可以用单片机的IO口来连接,这样的话可以随时控制74HC595的工作与否情况)。写程序主要靠1、2条。下面具体操作。
74hc595驱动4位数码管电路连接图
74hc595驱动4位数码管程序解析
//MCU:AT89S52
//晶振:11.0592M.
//采用4位共阳极数码管
#include 《regx51.h》
//#include 《INTRINS.H》
#define uint unsigned int
#define uchar unsigned char
#define nop() _nop_();_nop_();
sbit CLK=P2^0;
sbit DAT=P2^1;
sbit RCLK=P2^2;
sbit CS1=P2^3;
sbit CS2=P2^4;
sbit CS3=P2^5;
sbit CS4=P2^6;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0};//0-9,-,全灭,全亮——共阳极数码管
void write595(unsigned char word)
{
uchar num,c;
num=tab[word];
for(c=0;c《8;c++)
{
CLK=0;
DAT=num&0x80;
num=num《《1;
CLK=1;
}
RCLK=0;
// nop();
// nop();
RCLK=1;
}
void select1(void)
{
CS1=0;
CS2=1;
CS3=1;
CS4=1;
}
void select2(void)
{
CS1=1;
CS2=0;
CS3=1;
CS4=1;
}
void select3(void)
{
CS1=1;
CS2=1;
CS3=0;
CS4=1;
}
void select4(void)
{
CS1=1;
CS2=1;
CS3=1;
CS4=0;
}
int main(void)
{
//unsigned char i;
while(1)
{
write595(12);
select1();
//for(i=0;i《10;i++) _nop_();
write595(2);
select2();
//for(i=0;i《10;i++) _nop_();
write595(3);
select3();
//for(i=0;i《10;i++) _nop_();
write595(4);
select4();
//for(i=0;i《10;i++) _nop_();
}
}
c语言595驱动数码管,74hc595驱动4位数码管电路连接图及程序解析 - 全文相关推荐
- c语言595驱动数码管,74hc595驱动4位数码管程序解析 - 74hc595驱动4位数码管电路连接图及程序解析...
74hc595驱动4位数码管程序解析 //MCU:AT89S52 //晶振:11.0592M. //采用4位共阳极数码管 #include <regx51.h> //#include &l ...
- 基于51单片机定时器计数+74HC595移位寄存器+8位数码管时钟
基于51单片机+74HC595移位寄存器+8位数码管时钟 Proteus仿真 实例代码 #include "at89x52.h" sbit SHCP =P0^1; // 移位寄存器 ...
- arduino二位数码管_用arduino和2个74HC595级联控制8位数码管显示
初学者打出来的代码,可能不"美观",希望大家点评,多多留下意见,话不多说上代码-- 下面为8位数码管全部显示 #include "Arduino.h" void ...
- protues用一片74hc595控制两位数码管
前面的博文中我们介绍了一个arduino中用一片595来控制一位数码管,这里我们介绍一个595来控制两位数码管.两位数码管是应用最广泛的,如交通灯倒计时,计数器等都将用到两位数码管. 两位数码管的动态 ...
- c语言数码管显示小数点,8位数码管显示正整数和小数及解决鬼影问题
写的不知道好不好,有什么不对的地方还请指出,谢了. 正整数显示无异常,小数显示有点异常(小数会有精度问题,后面在处理,先给大家贴出来代码). 本次,使用了数组用来存放要显示的数值. 用单独的数码管显示 ...
- 基于51单片机之数码管设计#扩展三位数码管电路,完成0-999递增或递减计数功能,递减间隔200ms左右
这次给大家分享一个三位数码管实现0-999倒计时器 所需元器件如下: AT89C51芯片 *1 12MHz晶振 *1 33pF电容 *2 10uF电解电容 *1 10K电阻 *1 200Ω电阻 *21 ...
- 手把手教学51单片机 | 第四节 动态数码管,用6位数码管做一个时钟
1.利用定时器做一个流水灯的程序 //流水灯从上到下一次点亮,然后让全部灯闪烁两次,依次循环 #include<reg52.h> #include<intrins.h> #de ...
- arduino控制一位数码管、控制二位数码管动态显示(用不到中断程序)
目的: 1.利用arduino控制一位共阳极数码管显示 2.利用arduino控制二位共阳极数码管显示 前言: 前段时间,在网上看到了一个视频,是关于二位数码管动态显示的视频,感觉很新奇,就想把它做出 ...
- arduino利用三种方法产生pwm波使用l298n驱动12v小车电机(附电路连接图和pwm详解)
前段时间参加硕士复试,有一道题是pwm是什么,如何产生pwm,录取成功后接下来在这里写一下吧! 1.脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法,由于计算机不能输出模拟电压,只能输出0 ...
最新文章
- Dubbo的核心玩法三
- 解决maven cannot change version of project facet dynamic web module to 3.0
- 大数据读书笔记(1)
- 最全面详细讲解Oracle入门
- debian9 配置ssh 允许 root直接远程登录
- 懂集合吗?对,是dart中的集合
- html表格以pdf格式导出到本地
- php cdi_CDI和lambda的策略模式
- 从一条select语句看Oracle数据库查询工作原理
- tp auth 转载保存
- ES Filebeat 使用 Pipeline 处理日志中的 @timestamp
- 简记MobileNet系列
- 电路板上的这些标志你都知道是什么含义吗?——详解电子产品认证类型
- 查询硬盘序列号(serialNumber),系统安装日期等
- python random模块随机抽样专题
- 2020年8月8日美团笔试题
- CorelDRAW2022中文正式版特色功能介绍
- URLDownloadToFile缓存问题
- 常见的head内标签
- 基于matlab的傅里叶变换
热门文章
- 普歌--前端 vue-element-admin 实现第三方(无账号密码)登录
- 宁乡首届春耕节开幕,在寓教于乐中弘扬传统文化
- win32 009 masm32
- PDF标签文件用哪款条码标签打印软件制作?
- 2022-2028全球与中国应急服务5G技术市场现状及未来发展趋势
- 问卷生成选项,选项排序,设定答案
- 李宏毅老师《机器学习》课程笔记-4.1 Self-attention
- 手机故障手机通讯录被删除了怎么恢复
- 图灵计算机与网络论文,论文导读 | 阿兰·图灵《计算机器与智能》
- SaaS 软件开发为企业数字化转型赋能