数码管与译码器

目录

数码管

显示的基本原理

LED数码管的显示方式

静态显示方式

动态显示方式

具体案例

数码管静态显示

电路图

keil文件

数码管动态显示

电路图

keil文件

74LS138译码器

简介

译码表

译码器案例

电路图

keil文件

74HC595译码器

前言

举例解释

简单案例

电路图

keil文件

进阶案例

电路图

keil文件

数码管

LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成的8字型器件

注意:8个LED构成了数码管,数码管的连接方式有共阴极和共阳极连接。

显示的基本原理

LED数码管的显示方式

静态显示方式

特点

  • 公共端直接接地或接电源
  • 每个数码管的段选线与一组IO接口线相连
  • 每个数码管一直在显示

动态显示方式

特点

  • 所有的数码管的段选线与一组IO接口线并联在一起
  • 每个数码管的公共端由一根IO线控制
  • 显示为逐个显示(利用人眼的视觉暂留原理,数码管切换的速度够快就好像多个数码管一起显示)

注意:段码线决定晶体管显示的是什么,位码线决定是哪个晶体管要显示;若想要四个数码管均显示不同的数字那么就需要以很小的时间内不断地切换四个数码管的显示(人眼的视觉暂留)

具体案例

数码管静态显示

需求:共阴极的方式实现0——9的不断循环。

电路图

keil文件
#include "reg51.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void delay(unsigned int n)
{unsigned int i=0,j=0;for(i=0;i<n;i++){for(j=0;j<120;j++);}
}
void seg()
{int i=0;for(i=0;i<10;i++){P2=s[i];delay(500);}
}
void main()
{while(1){seg();}
}

数码管动态显示

需求:在数码管上显示hello这个字符串。

电路图

注意:英文字母为段码线,数字为位码线;

keil文件
#include "reg51.h"
unsigned char str[]={0x76,0x79,0x38,0x38,0x3F};
unsigned char wei[]={0x01,0x02,0x04,0x08,0x10};
void delay(unsigned int n){unsigned int i=0,j=0;for(i=0;i<n;i++){for(j=0;j<120;j++);}
}
void seg(){int i=0;for(i=0;i<5;i++){P3=~wei[i];P2=str[i];delay(5);}
}
void main()
{while(1){seg();}
}

74LS138译码器

简介

前言:该译码器可以仅通过3个针脚来决定右面对应针脚的信号(其中一个为0剩下的全是1),进而对数码管的位选断进行选择。

理解:左边的针脚为数字输入端,右边的8个端口为数字输出端;上下两端分别为电源和接地;左下脚3个针脚为使能端(需要把G1接上高电平、G2A和G2B接上低电平)

译码表

  • 000——Y0
  • 001——Y1
  • 010——Y2
  • 011——Y3
  • 100——Y4
  • 101——Y5
  • 110——Y6
  • 111——Y7

注意:译码表输入端三个字母的排序为CBA 

译码器案例

需求:在特定位置显示特定数字。

电路图

keil文件

#include "reg51.h"
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_2=P3^2;
#1——9对应的段码
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void show(unsigned char location,unsigned char number){switch(location){case 1:P3_0=0;P3_1=0;P3_2=0;break;case 2:P3_0=1;P3_1=0;P3_2=0;break;case 3:P3_0=0;P3_1=1;P3_2=0;break;case 4:P3_0=1;P3_1=1;P3_2=0;break;case 5:P3_0=0;P3_1=0;P3_2=1;break;case 6:P3_0=1;P3_1=0;P3_2=1;break;case 7:P3_0=0;P3_1=1;P3_2=1;break;case 8:P3_0=1;P3_1=1;P3_2=1;break;}P2=s[number];
}
void main()
{while(1){#展示第三列的数字为8show(3,8);}
}

74HC595译码器

前言

含义:74HC595是串行输入并行输出的移位寄存器,可用三根线输入串行数据,8根线输出并行数据,多片级联后可输出16位、24位、32位等,常用于IO口扩展。

注意:左边为移位寄存器,右边为输出缓存寄存器。 

工作模式:首先SER(DS)串行数据要给其对应的移位寄存器输入,之后串行数据就会进入到移位寄存器(当SERCLK/SH_CP串行时钟每来一个上升沿,那么SER的串行数据就会向下进入一位)然后数据都走到了移位寄存器,那么就会根据RCK/ST_CP寄存器时钟的上升沿信号把移位寄存器内部的数据一位一位的搬到输出缓存中,因此就达到了串行输入并行输出的目的。

注意:QH撇是接另外一个74HC595的SER端,使其达到扩充移位寄存器的目的。

举例解释

需求:QA-QH输出00000101

解释:SER串行数据口写入1,控制时钟SERCLK来一个上升沿,那么1就会被移到移位寄存器的第一个块中,然后SERCLK上升沿清零回到默认低电平状态,然后继续向SER写数据0,SERCLK又来高电平,那么这个1就会移到移位寄存器的第二块,0就会被移到移位寄存器的第一块中,SERCLK又回到低电平,如此循环往复直到移位寄存器被填满,此时数据移位完成,RCLK来个高电平将移位寄存器中的数各个搬到输出缓存中,之后RCLK恢复到低电平。

简单案例

需求:通过74HC595用三条线在LED数码管中显示6

电路图

注意:MR杠和OE杠为功能脚,若MR杠接低电平,那么右边的Q0——Q7撇全输出低电平;若OE杠接高电平,那么Q0——Q7这个管脚就会被禁用。所以正常来说10管脚MR杠接高电平;13管脚OE杠接低电平。

keil文件

#include "reg51.h"
sbit SER=P2^1;
sbit SCK=P2^0;
sbit RCK=P2^3;
//74HC595
void WriteByte(unsigned char Byte){unsigned char i;for(i=0;i<8;i++){SER=Byte&(0x80>>i);SCK=1;SCK=0;}RCK=1;RCK=0;
}
void main()
{SCK=0;RCK=0;while(1){WriteByte(0x7D);}
}

进阶案例

需求:要求用3根线来实现控制多位数码管显示hello。

电路图

keil文件

#include "reg51.h"
unsigned char str[]={0x76,0x79,0x38,0x38,0x3F};
unsigned char wei[]={0x01,0x02,0x04,0x08,0x10};
sbit SER=P2^1;
sbit SCK=P2^0;
sbit RCK=P2^3;
void delay(unsigned int n){unsigned int i=0,j=0;for(i=0;i<n;i++){for(j=0;j<120;j++);}
}
void writeByte(unsigned char wei,unsigned char duan){unsigned char i,j;//位选unsigned char weidi=~wei;for(i=0;i<8;i++){SER=weidi&(0x80>>i);SCK=1;SCK=0;}//段选for(j=0;j<8;j++){SER=duan&(0x80>>j);SCK=1;SCK=0;}RCK=1;RCK=0;
}
void hello(){int i=0;for(i=0;i<5;i++){writeByte(wei[i],str[i]);delay(5);}
}
void main()
{SCK=0;RCK=0;while(1){hello();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/594068.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可变参数模板

可变参数模板的概念 可变参数模板是C11新增的最强大的特性之一&#xff0c;它对参数高度泛化&#xff0c;能够让我们创建可以接受可变参数的函数模板和类模板。 在C98/03中&#xff0c;类模板和函数模板中只能包含固定数量的模板参数&#xff0c;可变模板参数无疑是一个巨大的…

我与C++的爱恋:类与对象(一)

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 ​C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象&…

EfficientVMamba实战:使用 EfficientVMamba实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

java中大型医院HIS系统源码 Angular+Nginx+SpringBoot云HIS运维平台源码

java中大型医院HIS系统源码 AngularNginxSpringBoot云HIS运维平台源码 云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务&#xff0c;提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生工作站和护士工…

虚良SEO-蜘蛛池的作用与工作原理

蜘蛛池是一种SEO优化工具&#xff0c;其主要作用是吸引搜索引擎蜘蛛到特定网站进行爬行和索引&#xff0c;从而提高网站的可见性和排名。下面分别介绍蜘蛛池的作用和工作原理。 蜘蛛池的作用&#xff1a; 提高网站收录&#xff1a; 当一个网站新发布时&#xff0c;或者长时间…

Thread的基本用法

目录 正文&#xff1a; 1.线程创建 2.线程休眠 3.获取线程实例 4.线程中断 5.线程等待join() 总结&#xff1a; 正文&#xff1a; 1.线程创建 线程创建是多线程编程的第一步&#xff0c;它涉及到创建一个可以并行执行的新线程。在Java中&#xff0c;有几种不同的方法可…

c++的学习之路:11、string(3)

昨天写string的时候没有说全&#xff0c;这里就开始接着讲。 目录 一、resize 二、insert 三、erase 一、resize 昨天说这个的时候没有考虑到缩小范围时咋处理&#xff0c;然后发现报错了&#xff0c;接着我调试发现缩小就不能正常执行了&#xff0c;因为用的是strcap所以…

【Oracle】oracle、mysql、sql server三者区别

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Oracle》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识…

C++设计模式:观察者模式(三)

1、定义与动机 观察者模式定义&#xff1a;定义对象间的一种1对多&#xff08;变化&#xff09;的依赖关系&#xff0c;以便当一个对象&#xff08;Subject&#xff09;的状态发生比改变时&#xff0c;所有依赖于它的对象都得到通知并且自动更新 再软件构建过程中&#xff0c…

kubernetes有ingress-controler以及没有外部loadbalancer 的情况下使用istio-gateway.

那就配置一个ingress-使用已有ingress-controler代理istio-gateway class创建的gateway svc来公开。

基于ssm的家政服务中介网(java项目+文档+源码)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 家政服务中介网的主要使用者分为…

关于Idea无法正常启动

编辑这个文件 最后一行 加上 pause 双击文件 会显示报错信息