四位一体数码管电路图

合集下载

ADC0804的详细控制程序和仿真(595芯片和四位一体数码管)图

ADC0804的详细控制程序和仿真(595芯片和四位一体数码管)图

仿真电路图,经过测试,没问题下面是上个图的分解图模拟电路:设计模拟电路的原因主要有以下两点1.由于外界信号的复杂性,使得传感器直接输出的电信号可能会存在一些问题(如不稳定),这些不稳定信号如果直接送到A/D 芯片进行采样,则最终结果可能使得最后的显示值来回乱跳,而无法确定待测的外界信号到底是多少。

因此,可能需要设计一套模拟电路对传感器输出的不稳定电信号进行滤波等处理,去除干扰,使得进入A/D 转换芯片的电压值为一个稳定的信号。

2.每一个A/D 转换芯片都有一个参考电压,只有输入的模拟电压值在这个参考电压的范围内才能进行正确的转换,例如:本试验将ADC0804芯片的参考电压设置成0V ~5V ,因此如果输入的电压值大于5V ,则转换出的结果永远为0xFF,若输入的电压值小于0V,则转换出的结果永远为0,这样便无法正确的还原出被测信号的大小。

基于上述原因,我们可能需要设计一套模拟电路,传感器的输出电压值进行一些变换(放大,缩小),使得送到A/D转换芯片的电压值在转换芯片的参考电压范围内。

A/D转换芯片:即模拟/数字转换芯片,它将输入的模拟电压信号转换成单片机等控制处理器能够识别的数字二进制形式。

处理器芯片:处理器芯片有很多中(比如51单片机,ARM或者是PC上的奔腾处理器,AMD处理器)这些处理器虽然架构不一样,但是有个共同的特点,就是它们能够运行程序,因此它们能通过程序对A/D芯片送入的二进制形式的电压值进行处理,通过运算将其还原成待测的外界信号值,控制显示部件(如LCD,八段数码管)将这个值显示出来。

例如:假如ADC0804输出的二进制值0x80,则根据A/D转换公式可以推出ADC0804的输入电压大小为(0x80/0x100)*5V=2.5V。

假设信号经过模拟电路缩小了8倍,则可以推出传感器的输出电压为2.5V*8=20V,再根据传感器的转换公式(一般手册会给出)即可得到输入的外界信号的值。

显示:显示的作用是将计算出的待测外界信号的值展示给测量人员,显示的形式有很多种,如LCD,八段数码管,上位机软件等。

四位一体数码管的介绍

四位一体数码管的介绍

/upload/2009/8/18/364c7063-1b06-4b9a-8e6b-2fa8 3f3a64d6.rar" target=_blank>今天做了一下周立功的7290,在选用数码管时,由于周立功的7290只能选用共阴极的数码管,所以顺便学习了数码管一点知识,先把经验与大家分享,望大家赐教!
首先数码管有共阴极和共阳极之分,区别他们的方法是若公共端接地,其他端接电源,若各段测试能亮,说明是共阴的,反之共阳的;若公共端接电源,其他端分别接的,测得各端亮,则说明是共阳的,反之为共阴的。

世面上的四位一体的数码管一般都没有datasheet,所以掌握他们管脚的分布是很重要的一个环节。

下面是一张四位一体数码管引脚分布图
4位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。

a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。

1 a f
2
3 b。

e d dp c g 4
即:12-9-8-6为公共端,A-11 B-7 C-4 D-2 E-1 F-10 G-5 DP-3
下面是我在实验室用的一个数码管型号:
ark sr420561k 共阴极
ark sr410561k 共阳极
下面是我用6.9做的四位一体库图:很抱歉上次制作的数码管库没有定中心,我重新传了一次,不会有错误了,谢谢!2009.8.19。

项目六数码管显示原理分解

项目六数码管显示原理分解

项目六 数码管显示原理学习目的:1. 介绍 STC89C51的数码管显示的原理;2. 掌握单个数码管静态显示的原理;3. 熟悉四位一体数码管动态显示的原理;4. 掌握单片机数码管显示的 C51 程序编程。

常用的 LED 显示器有 LED 状态显示器(俗称发光二极管) 、 LED 七段显示器(俗称数码 管)和 LED 十六段显示器。

发光二极管可显示两种状态, 用于系统状态显示;数码管用于数 字显示; LED 十六段显示器用于字符显示。

一、数码管简介1.数码管的结构数码管由 8 个发光二极管 (以下简称字段) 构成,通过不同的组合可用来显示数字 0 ~9、 字符 A ~F 、H 、L 、P 、R 、U 、Y 、符号“ -”及小数点“ .”。

数码管的外形结构如下图所示。

数码管又分为共阴极和共阳极两种结构。

常用的 LED 显示器为 8 段(或 7 段,8 段比 7段多 了一个小数点“ dp ”段) 。

有共阳极和共阴极两种 其结构如下图所示:图 6-1 数码管结构图2.数码管工作原理共阳极数码管的 8 个发光二极管的阳极(二极管正端)连接在一起。

通常,公共阳极接 高电平(一般接电源) ,其它管脚接段驱动电路输出端。

当某段驱动电路的输出端为低电平 时,则该端所连接的字段导通并点亮。

根据发光字段的不同组合可显示出各种数字或字符。

此时,要求段驱动电路能吸收额定的段导通电流, 还需根据外接电源及额定段导通电流来确 定相应的限流电阻。

共阴极数码管的 8 个发光二极管的阴极(二极管负端)连接在一起。

通常,公共阴极接 低电平 (一般接地),其它管脚接段驱动电路输出端。

当某段驱动电路的输出端为高电平时, 则该端所连接的字段导通并点亮, 根据发光字段的不同组合可显示出各种数字或字符。

此时, 要求段驱动电路能提供额定的段导通电流, 还需根据外接电源及额定段导通电流来确定相应 的限流电阻。

3.数码管字形编码要使数码管显示出相应的数字或字符, 必须使段数据口输出相应的字形编码。

四位一体共阳数码管

四位一体共阳数码管

四位一体共阳数码管
四位一体共阳数码管是一种常用的显示设备,它由四个独立的数码管组成,每个数码管由7段条形发光二极管和一个圆点发光二极管组成。

通过控制ABCDEFG发光二极管的亮灭,可以显示0-F字符以及其他特殊字符,控制DP发光二极管的亮灭能控制是否显示小数点。

在使用时,12、9、8、6引脚需要分时接高电平,11、7、4、3、1、10、5、3引脚对应于数码的A-G、DP发光管,控制A-G、DP发光管的高低电平能控制对应发光管的灭亮。

四位一体数码管的动态扫描原理是利用人的视觉暂留原理,快速循环显示各个数码管的字符,形成连续的字符串。

在数码管显示“1234”字符的流程如下:
1. 第1位数码管显示“1”,第234位数码管不显示;
2. 经过时间t后,第2位数码管显示“2”,第134位数码管不显示;
3. 又经过时间t后,第3位数码管显示“3”,第124位数码管不显示;
4. 又经过时间t后,第4位数码管显示“4”,第123位数码管不显示;
5. 又经过时间t后,返回第1步显示第1位数码管,依次循环。

其中,扫描显示间隔t是很关键的参数,t太长将会导致数码管闪烁,一般选择5ms或者更短的时间为宜。

四位一体共阳数码管在各种电子设备中得到了广泛的应用,例如在单片机系统中,单片机P2脚接数码管A-G、DP引脚,P1.2-P1.5接数码管12、9、8、6引脚,用于控制数码管的显示。

51单片机第四节数码管

51单片机第四节数码管

51单⽚机第四节数码管本笔记默认学习者已拥有:1.Keil5和stc 烧写⼯具 等各种软件、驱动、环境;2.有⼀个属于⾃⼰的 51单⽚机开发板及相关零件 ;3.认识C 语⾔的语法;本⼈使⽤的51开发板为 郭天祥C51 TX-1C 增强版开发板 ;本笔记根据B 站up 主:江科⼤⾃化协的教学视频 整理得到ヾ(•ω•)4-1 静态数码管显⽰上图为TX-1C 的 数码管及LED 模块 原理图138译码器和74HC245 都是⽤来控制 数码管显⽰ 的;单数码管1.上图为 ⼀位数码管,数码管有两种连接⽅式(对应 右边上下两幅图);2.右上图的原理图,8个LED的阴极都连在⼀个引脚上,称为共阴极连接;3.右下图的原理图,8个LED的阳极都连在⼀个引脚上,称为共阳极连接;TX-1C 开发板的连接⽅式是 共阴极连接;4.左下⾓的 左边图⽚ ,定义了8个LED的名称;5.左下⾓的 右边图⽚ ,定义了引脚的名称,与右图的引脚名称⼀⼀对应假设数码管连接⽅式为 共阳极连接,观察可以发现,数码管中的 LED 的引脚引出,使⽤的是就近原则;假设数码管连接⽅式为 共阴极连接,如果上数码管显⽰ 数字6 ?1.要让数码管显⽰ 数字6,让要 LED-A、C、D、E、F、G亮起;2.共阴极的公共端 要接地(给数据‘0’,或者是低电平);3.阳极(称为位选端)根据LED的亮灭需求给 数据0或1(1亮、0灭) ,称为 段码(阳码) (1011 1110 即为段码);如果 共阳极连接,共阳极端 要接到 VCC (⾼电平),阴极给 数据0或1 (1灭,0亮),称为 段码(阴码),和共阴极正好是相反关系;共阳极连接→共阳极端接VCC 并选中→阴极(位选端)传递(阴码)段码(1亮、0灭)→数码管显⽰共阴极连接→共阴极端接GND 并选中→阳极(位选端)传递(阳码)段码(1灭、0亮)→数码管显⽰四位⼀体数码管开发板上即为 四位⼀体的数码管,且有两个,正好组成了 ⼋位数码管;⽽TX-1C 上 包含的是六位数码管,⽽⾮⼋位;1.四位数码管 也有 两种连接⽅式,即 共阴极连接 和 共阳极连接 ;{Processing math: 100%2.四位数码管,(每位的公共端 单独引出来,位选端全部连在⼀起(所有A段连在⼀起、所有B段连在⼀起……),总共有12个引脚;假设数码管连接⽅式为共阴极连接,如何在第三位显⽰数字1 ?1.给第三位的公共端 赋值 0(低电平),给其他位的公共端 赋值 1(⾼电平);这样等同于 其他位的公共端(负极)接到了正极上,⽆论如何都亮不了;只有第三位能亮;2.这样给 LED-B、C 的位选端 赋值 1,其他 位选端 赋值0共阳极连接即为公共端赋值 1(⾼电平)亮,其他以此类推;3.发现这样⼀个现象,数码管⽆法在同⼀时间显⽰多个数字,其在同⼀时刻下只能有⼀个显⽰,只有⼀个数码管能被点亮,即使有多个被选中的数码管,显⽰的数字也是相同的;这种共⽤引脚的现象,是为了减少控制数码管IO⼝;(四位数码管有32个LED,如果都采⽤共阴极连接的⽅式,也要32+1(公共端)=33个引脚;)(采⽤这种链接,就只需要12个引脚即可控制四位数码管;)如何让数码管多位显⽰不同数字(动态数码管显⽰)?1.利⽤ ⼈眼视觉的暂留 和 数码管显⽰的余辉 的原理先让第⼀位数码管显⽰1,然后很快地让第⼆位数码管显⽰2,再很快地让第三位数码管显⽰3,让它不断地扫描,重复显⽰1、2、3的过程,这样三个数字就“同时”显⽰了;原理分析138译码器1.观察到 原理图右图 与数码管有关的,有138译码器(74LS138)和74HC245两枚芯⽚;TX-1C的原理图为左图,也有两个74HC573芯⽚与数码管有关;芯⽚名称与功耗、电压、说明符号有关,具体内容不做分析;2.如图,数码管连接⽅式为 共阴极连接,这样传输数据,就能让第三位显⽰ 数字1 了;3.⽽上⾯的 LED1 ~ 8,其实接在了138译码器的输出端,138译码器正好可以实现让LED1 ~ 8输出 0或1;LED1 ~ 8 对应了 TX-1C 六位数码管的SEG DS 1 ~ 6;4.138译码器可将LED 1 ~ 8的⼋个端⼝ 转化为 由 3个端⼝ (P22、P23、P24)控制,⽽G1、G2A、G2B端⼝ 被 称为 使能端;使能端相当于⼀种开关,如果电平有效,它就可以⼯作;如果电平⽆效,它就不⼯作;观察原理图发现,使能端是已经接好 VCC 和 GND 的,也就是说,其上电其实就会⼯作TX-1C的74HC573也是同理,但其并未压缩控制端⼝的数量;5.138译码器也叫“38线译码器”,是由3个线到8个线,其中C是⾼位、A是低位,CBA组成的数符合8进制,控制着Y0 ~ Y7 这8个端⼝;6.所以,138译码器的作⽤就是⽤来选中某⼀位数码管的74HC2451.74HC245是⼀种 双向数据缓冲器,VDD、GND都可视为电源,OE为使能(其 接地 就⼯作);2.DIR(direction),是⽅向的意思,它接到了VCC(⾼电平)上,将数据从左边输出到右边,从右边将数据读取回左边;DIR若接到低电平上,会将数据从右边输出到左边,从左边将数据读取回右边;3.单⽚机的⾼电平 驱动能⼒有限,其输出的最⼤电流不能太⼤;其低电平 驱动能⼒强;因此,LED模块才采⽤了低电平点亮的模式;4.如果⽤⾼电平 直接点亮 数码管,电流会很⼩,灯会很暗;所以其加⼀个缓冲器,缓冲器可以提⾼ 其驱动能⼒,如果直接将 数据 输出 给 数码管,数据就会被视为 驱动数据;现在增加了缓冲器,数据 就变成了 控制信号,控制信号 只需要很微弱,缓冲器 就可以接收到,缓冲器再通过⾃⼰接到的电源,输出 数据 到引脚上,这样控制的电流只需要⾮常⼩,就能驱动数码管 以⽐较亮的形式显⽰;2电容 是⽤来 稳定电源的,叫电源滤波;6.图右有 ⼀ 排阻,阻值为100R(即为100Ω),作⽤为 限流电阻 ,防⽌数码管的电流过⼤;TX-1C既没有电容,也没有排阻;原理总结1.⽤ 138译码器 使 数码管 的某⼀位 被选中;2.再给P0⼝⼀个 段码数据;TX-1C虽然⽤P0⼝控制段码输⼊,但也⽤P0⼝控制位选;需要先⽤ P2.6⼝和P2.7⼝控制输⼊数据是段码还是位选;P2.6⼝控制段码的输⼊;P2.7⼝控制位选的输⼊;例,给P2.6 数据1 (⾼电压)、给P2.7 数据 0 (低电压),就可以确定现在给数据是段码;1.由TX-1C的原理图可知,数码管内 LED灯 与 P0端⼝ 的顺序关系:(1)LED的名称定义是通⽤⽆疑的;(2)数码管本⾝的引脚名称不重要,重要的是 LED与哪个 P0 的 引脚 相连;2.由TX-1C的原理图可知, P0.0引脚 控制 数码管的最左位,P0.5引脚控制 数码管的最右位,剩余引脚是没有控制 数码管 位选 的作⽤的,哪个P0 的 引脚 控制 六位数码管的 哪位 很重要;代码实现静态数码管显⽰(让数码管第三位显⽰3).c#include<reg51.h>sbit D=P2^6; //段码⼝sbit W=P2^7; //位选⼝void main(){D=0;W=1;P0=0xFB;//1111 1011W=0;D=1;P0=0x4F;//0100 1111while(1);}下⾯写出了⼀个通⽤函数,可以让数码管在 第⼏个位置 显⽰ 哪个数#include<reg51.h>#define uchar unsigned charsbit D=P2^6;sbit W=P2^7;void NixieTube(uchar wei,uchar duan){ //NixieTube是数码管的英⽂uchar WEI,DUAN; //(Nixie是⼥⽔妖的意思)D=0;W=1;switch(wei){ //位选部分case 1:WEI=0xFE; break;case 2:WEI=0xFD; break;case 3:WEI=0xFB; break;case 4:WEI=0xF7; break;case 5:WEI=0xEF; break;case 6:WEI=0xDF; break;}P0=WEI;W=0;D=1;switch(duan){ //段码部分case 0:DUAN=0x3F; break;case 1:DUAN=0x06; break;case 2:DUAN=0x5B; break;case 3:DUAN=0x4F; break;case 4:DUAN=0x66; break;case 5:DUAN=0x6D; break;case 6:DUAN=0x7D; break;case 7:DUAN=0x07; break;case 8:DUAN=0x7F; break;case 9:DUAN=0x6F; break;case 10:DUAN=0x77; break; //Acase 11:DUAN=0x7F; break; //Bcase 12:DUAN=0x39; break; //Ccase 13:DUAN=0x3F; break; //Dcase 14:DUAN=0x79; break; //Ecase 15:DUAN=0x71; break; //Fcase 16:DUAN=0x80; break; //.}P0=DUAN;}void main(){NixieTube(3,3);while(1);}运⾏结果如下:4-2 动态数码管显⽰1.如果只是单纯让其显⽰完⼀个再显⽰⼀个,代码如下:#include<reg51.h>#define uchar unsigned charsbit D=P2^6;sbit W=P2^7;uchar Nixiewei[]={0,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};uchar Nixiecode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F,0x39,0x3F,0x79,0x71,0x80};//将两个switch改进为数组void NixieTube(uchar wei,uchar duan){D=0;W=1;P0=Nixiewei[wei];W=0;D=1;P0=Nixiecode[duan];}void main(){while(1){NixieTube(1,1);NixieTube(2,2);NixieTube(3,3);}}运⾏结果如下:2.这是⼀个数码管的常见问题,称为 数码管的消影 ;位选-->段选-->位选-->段选-->位选-->......在这⼀位的段选(输⼊段码)结束,进⾏下⼀位的位选时,很短的时间内,上⼀位的数据会串到下⼀位数据⾥⾯去;所以我们在段选和位选之间,增加⼀个 P0 清零的操作;动态数码管显⽰(数码管同时显⽰123).c#include<reg51.h>#define uchar unsigned charsbit D=P2^6;sbit W=P2^7;uchar Nixiewei[]={0,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};uchar Nixiecode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7F,0x39,0x3F,0x79,0x71,0x80};void Delayms(unsigned int x){unsigned int j;for(;x>0;x--) for(j=110;j>0;j--);}void NixieTube(uchar wei,uchar duan){D=0;W=1;P0=Nixiewei[wei];W=0;D=1;P0=Nixiecode[duan];Delayms(1); //让数码管稳定显⽰,⽴刻清零会让数码管显⽰较暗P0=0; //清零操作}void main(){while(1){NixieTube(1,1);NixieTube(2,2);NixieTube(3,3);}}运⾏结果如下:相关知识1.在运⾏某些代码时,TX-1C的LED点阵模块会乱闪2.将左下⾓ DOT-OE旁的跳线帽 拔下来即可 断开LED点阵模块,3.拔下来的跳线帽不要乱丢,可以 只插⼀个脚放在原处,也可以妥善保管在其他地⽅上图即为拔下来的跳线帽1.此元件为电容;2.104的数量规则与 第⼆节 所讲的电容是相同的,其单位是pF1000pF=1nF, 1000nF=1uF, 1000uF=1000mF, 1000mF=1FF 是⼀个很⼤的单位,正常电容都是uF、nF级别的;超级电容能达到1 ~ 2 F,其⼀般作为备⽤电池;3.TX-1C的原理图上,电容的量都是直接⽤单位标记好的。

4位数码管引脚图及驱动办法

4位数码管引脚图及驱动办法

4位数码管引脚图及驱动办法4位数码管的引脚图
4位数码管的驱动办法
1、静态驱动也称直流驱动。

静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或许运用如BCD码二-十进制译码器译码进行驱动。

静态驱动的利益是编程简略,显现亮度高,缺陷是占用I/O端口多,如驱动5个数码管静态显现则需求5;x;8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O 端谈锋32个呢:),实习运用时有必要添加译码驱动器进行驱动,添加了硬件电路的杂乱性。

2、数码管动态显现接口是单片机中运用最为广泛的一种显现办法之一,动态驱动是将悉数数码管的8个显现笔划
a,b,c,d,e,f,g,dp的同名端连在一同,别的为每个数码管的公共极COM 添加位选通操控电路,位选通由各自独立的I/O线操控,当单片机输出字形码时,悉数数码管都接纳到相同的字形码,但终究是那个数码管会显现出字形,取决于单片机对位选通COM端电路的操控,所以咱们只需将需求显现的数码管的选通操控翻开,该位就显现出字形,没有选通的数码管就不会亮。

经过火时轮番操控各个数码管的的COM端,就使各个数码管轮番受控显现,这便是动态驱动。


轮番显现进程中,每位数码管的点亮时刻为1~2ms,因为人的视觉暂留景象及发光二极管的余辉效应,虽然实习上各位数码管并非一同点亮,但只需扫描的速度满意快,给人的形象便是一组安稳的显现数据,不会有闪耀感,动态显现的作用和静态显现是相同的,可以节约许多的I/O端口,并且功耗更低。

最全四位七段数码管引脚图、公共脚

最全四位七段数码管引脚图、公共脚

最全四位七段数码管引脚图、公共脚数码管在现在的自动控制中的显示应用极为广泛,由于使用时间的问题会导致缺画的现象发生,为了便于大家更好找到合适的数码管进行更换,特给大家详细介绍《七段数码管实物图》数码管使用条件:a、段及小数点上加限流电阻b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定c、使用电流:静态:总电流80mA(每段10mA);动态:平均电流4-5mA 峰值电流100mA 上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的,4位数码管引脚图请在本站搜索我也提供了数码管使用注意事项说明:(1)数码管表面不要用手触摸,不要用手去弄引角;(2)焊接温度:260度;焊接时间:5S(3)表面有保护膜的产品,可以在使用前撕下来。

一种四位双排引脚共阴(阳)脚位图常见的四位双排引脚共阴(阳)脚位图单排四位双排引脚共阴(阳)脚位图国内外生产LED数码管的公司很多,命名方法也各不相同。

下面主要介绍国产LED数码管和立得公司的LED数码管的命名方法,因为市面上这两中型号的数码管销售的最多。

国产LED数码管型号命名方法为:示例:BS12.7R-1表示字高为12.7mm,红色,共阳极数码管。

字串3立得公司的LED数码管的命名方法为:其中,A:极性;B:字高;C:发光颜色;D:位数;E:高效率,红;F:其它。

字串2极性:字串1LA:共阳(单);LC:共阴(单);LD:共阳(双);LE:共阴(双);LN:共阳(加大);LM:共阴(加大)。

发光颜色:1:红色(红底);2:绿色;3:黄色;4:橙色;5:红色;6:红色(高效率)。

位数:1:(单位);2:(双位);3:(三位)上图是字高为0.8英寸的四位共阳极双排12脚数码管,四个公共脚为,6、8、9、12上图是字高为0.52英寸的四位共阳极双排12脚数码管,四个公共脚为2、3、6、10数码管测试方法与数字显示译码表三、测试:同测试普通半导体二极管一样。

动态显示电路

动态显示电路
动态显示电路 P146T1
设计一个动态显示电路。该电路有四位数码管, 显示学号后四位。
a
数码管结构图
fb g
ec
d
1
第1页/共16页
显示原理
4位数码管共用一个译码器。当CP脉冲 的频率f=1HZ时,在CP脉冲的控制下,4 位数码管将逐个轮流分时显示。但是,当 CP脉冲的频率f=100HZ时,则每个数码管 依次一次显示1/25 S,由于人眼的滞留特 性,实际的视觉效果是4个数码管同时显示 4个数据。
示学号)。然后再使用2kHz时钟信号。
12
第12页/共16页
下载操作注意事项
➢ 下载时95108应加电,但不要连接除电源以外其他导线,包括其他芯 片的电源。否则一旦电路链接有错误,会导致无法下载成功。
➢ 关于电源:因为CPLD芯片所需电流较大。所以:A:直流稳压电源的 限流开关请调整到最大电流。B:加到实验箱的电源电压不能小于12V, 但是不要超过15V。否则会提示下载不成功,芯片电压不满足要求。
➢ 数字电路全部用95108实现 ➢ 建立项目时芯片型号千万不能错:XC9500系列95108PC84。 ➢ 16个数据输入端、1个CP输入端、4个数据输出端、 4个位控制输出端全
部要定义到95108的I/O脚,并注意I/O脚号与接插孔号的一一对应关系。 ➢ 调测时先用1Hz的时钟信号,检查显示的数值是否正确(从左往右依次显
5
第5页/共16页
设计原理
④ 4位数码管的4根数据线, 由4个四选一 多路选择器输出。
当地址=“00”时,DCBA=D0C0B0A0=8; 当地址=“01”时,DCBA=D1C1B1A1=4; 当地址=“10”时,DCBA=D2C2B2A2=2; 当地址=“11”时,DCBA=D3C3B3A3=1;

任务12 设计及制作4位LED数码管显示电路

任务12 设计及制作4位LED数码管显示电路

4位LED 数码管轮 流显示8 的控制程 序
1 12.1.2 跟我想 4位LED数码管有静态显示和动态显示两种结构。为了减少元器件及连线, 可选用动态显示的4位一体的LED数码管。用单片机的某个I/O口送数码管的显示 段码(字符数据),用另一I/O口的其中4位经过三极管驱动后分别作为4个数码 管的显示控制信号,当三极管导通时候对应的数码管显示。 在动手设计电路之前,让我们先学习有关LED数码管的知识。
任务12 设计及制作4位 任务 设计及制作 位LED数码管显示电路 数码管显示电路
2. 软件程序设计 所设计的程序要实现 动态显示的4位数码管同时 显示“8”字符。根据四位 一体数码管的动态显示原 理,首先从P0口送出显示 字符“8”的数据7FH,然 后通过P2口控制的位选信 号让每位数码管轮流显示, 通过延时子程序控制每位 数码管的显示时间。程序 控制流程图如图12-6所示。
通过工作任务实现教学做一体化在动手实践中学习理论知识在学习理论知识中教学做体化在动手实践中学习理论知识在学习理论知识中动手实践使理论教学与动手实践有机结合
学习情境2 LED数码管显示 数码显示在该情景下,首先制作LED数码管显示电路,并通过3个任务的 学习单片机控制LED数码管显示原理及硬件设计和软件编程的方法;学 习单片机定时计数器及中断控制等相关理论知识。通过工作任务实现 教、学、做一体化,在动手实践中学习理论知识,在学习理论知识中 动手实践,使理论教学与动手实践有机结合。 LED数码管显示模块
任务12 设计及制作4位 任务 设计及制作 位LED数码管显示电路 数码管显示电路
12.1.1 明确工作任务 设计单片机控制的4位LED数码管显示电路,并根据电路图在万用板上完成电 路焊接及根据本任务提供的程序调试电路。 4位LED数码管 显示模块

常见的一/二/四位数码管引脚图详解

常见的一/二/四位数码管引脚图详解

常见的一/二/四位数码管引脚图详解
数码管是一种可以显示数字和其他信息的电子设备,是显示屏其中一类,通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字,然后显示出时间、日期、温度等所有可用数字表示的参数。

通常用在空调、热水器、冰箱等电器中。

那么数码管引脚图是怎样的呢?下面我们就来说说常见的一位、两位和四位的数码管引脚图。

一位数码管引脚图
数码管有两种接法,共阴或共阳,不管哪种,3.8都要短接,如果共阴就再接地,共阳就再接高。

两位数码管引脚图
四位数码管引脚图
其中,1、2、3、4分别是自左至右的4位数码管位置;a、b、c、d、r、f、g、h 分别对应数码管的8段,接单片机I/O口由高位至低位。

Arduino 入门到精通 例程16-四位数码管

Arduino 入门到精通 例程16-四位数码管

Arduino 入门到精通例程16这次我们进行的实验是使用arduino驱动一块共阳四位数码管。

驱动数码管限流电阻肯定是必不可少的,限流电阻有两种接法,一种是在d1-d4阳极接,总共接4颗。

这种接法好处是需求电阻比较少,但是会产生每一位上显示不同数字亮度会不一样,1最亮,8最暗。

另外一种接法就是在其他8个引脚上接,这种接法亮度显示均匀,但是用电阻较多。

本次实验使用8颗220Ω电阻(因为没有100Ω电阻,所以使用220Ω的代替,100欧姆亮度会比较高)。

4位数码管总共有12个引脚,小数点朝下正放在面前时,左下角为1,其他管脚顺序为逆时针旋转。

左上角为最大的12号管脚。

下图为数码管的说明手册下面是硬件连接图ARDUINO CODECOPY1.//设置阴极接口2.int a = 1;3.int b = 2;4.int c = 3;5.int d = 4;6.int e = 5;7.int f = 6;8.int g = 7;9.int p = 8;10.//设置阳极接口11.int d4 = 9;12.int d3 = 10;13.int d2 = 11;14.int d1 = 12;15.//设置变量16.long n = 0;17.int x = 100;18.int del = 55; //此处数值对时钟进行微调19.20.void setup()21.{22.pinMode(d1, OUTPUT);23.pinMode(d2, OUTPUT);24.pinMode(d3, OUTPUT);25.pinMode(d4, OUTPUT);26.pinMode(a, OUTPUT);27.pinMode(b, OUTPUT);28.pinMode(c, OUTPUT);29.pinMode(d, OUTPUT);30.pinMode(e, OUTPUT);31.pinMode(f, OUTPUT);32.pinMode(g, OUTPUT);33.pinMode(p, OUTPUT);34.}35.36.void loop()37.{38. clearLEDs();39. pickDigit(1);40. pickNumber((n/x/1000)%10);41.delayMicroseconds(del);42.43. clearLEDs();44. pickDigit(2);45. pickNumber((n/x/100)%10);46.delayMicroseconds(del);47.48. clearLEDs();49. pickDigit(3);50. dispDec(3);51. pickNumber((n/x/10)%10);52.delayMicroseconds(del);53.54. clearLEDs();55. pickDigit(4);56. pickNumber(n/x%10);57.delayMicroseconds(del);58.59. n++;60.61.if(digitalRead(13) == HIGH)62.{63. n = 0;64.}65.}66.67.void pickDigit(int x)//定义pickDigit(x),其作用是开启dx端口68.{69.digitalWrite(d1, LOW);70.digitalWrite(d2, LOW);71.digitalWrite(d3, LOW);72.digitalWrite(d4, LOW);73.74.switch(x)75.{76.case1:77.digitalWrite(d1, HIGH);78.break;79.case2:80.digitalWrite(d2, HIGH);81.break;82.case3:83.digitalWrite(d3, HIGH);84.break;85.default:86.digitalWrite(d4, HIGH);87.break;88.}89.}90.91.void pickNumber(int x)//定义pickNumber(x),其作用是显示数字x92.{93.switch(x)94.{95.default:96. zero();97.break;98.case1:99. one();100.break;101.case2:102. two();103.break;104.case3:105. three();106.break;107.case4:108. four();109.break;110.case5:111. five();112.break;113.case6:114. six();115.break;116.case7:117. seven();118.break;119.case8:120. eight();121.break;122.case9:123. nine();124.break;125.}126.}127.128.void dispDec(int x)//设定开启小数点129.{130.digitalWrite(p, LOW);131.}132.133.void clearLEDs()//清屏134.{135.digitalWrite(a, HIGH);136.digitalWrite(b, HIGH);137.digitalWrite(c, HIGH);138.digitalWrite(d, HIGH);139.digitalWrite(e, HIGH);140.digitalWrite(f, HIGH);141.digitalWrite(g, HIGH);142.digitalWrite(p, HIGH);143.}144.145.void zero()//定义数字0时阴极那些管脚开关146.{147.digitalWrite(a, LOW);148.digitalWrite(b, LOW);149.digitalWrite(c, LOW);150.digitalWrite(d, LOW);151.digitalWrite(e, LOW);152.digitalWrite(f, LOW);153.digitalWrite(g, HIGH);154.}155.156.void one()//定义数字1时阴极那些管脚开关157.{158.digitalWrite(a, HIGH);159.digitalWrite(b, LOW);160.digitalWrite(c, LOW);161.digitalWrite(d, HIGH);162.digitalWrite(e, HIGH);164.digitalWrite(g, HIGH);165.}166.167.void two()//定义数字2时阴极那些管脚开关168.{169.digitalWrite(a, LOW);170.digitalWrite(b, LOW);171.digitalWrite(c, HIGH);172.digitalWrite(d, LOW);173.digitalWrite(e, LOW);174.digitalWrite(f, HIGH);175.digitalWrite(g, LOW);176.}177.178.void three()//定义数字3时阴极那些管脚开关179.{180.digitalWrite(a, LOW);181.digitalWrite(b, LOW);182.digitalWrite(c, LOW);183.digitalWrite(d, LOW);184.digitalWrite(e, HIGH);185.digitalWrite(f, HIGH);186.digitalWrite(g, LOW);187.}188.189.void four()//定义数字4时阴极那些管脚开关190.{191.digitalWrite(a, HIGH);192.digitalWrite(b, LOW);193.digitalWrite(c, LOW);194.digitalWrite(d, HIGH);195.digitalWrite(e, HIGH);196.digitalWrite(f, LOW);197.digitalWrite(g, LOW);198.}199.200.void five()//定义数字5时阴极那些管脚开关201.{202.digitalWrite(a, LOW);204.digitalWrite(c, LOW);205.digitalWrite(d, LOW);206.digitalWrite(e, HIGH);207.digitalWrite(f, LOW);208.digitalWrite(g, LOW);209.}210.211.void six()//定义数字6时阴极那些管脚开关212.{213.digitalWrite(a, LOW);214.digitalWrite(b, HIGH);215.digitalWrite(c, LOW);216.digitalWrite(d, LOW);217.digitalWrite(e, LOW);218.digitalWrite(f, LOW);219.digitalWrite(g, LOW);220.}221.222.void seven()//定义数字7时阴极那些管脚开关223.{224.digitalWrite(a, LOW);225.digitalWrite(b, LOW);226.digitalWrite(c, LOW);227.digitalWrite(d, HIGH);228.digitalWrite(e, HIGH);229.digitalWrite(f, HIGH);230.digitalWrite(g, HIGH);231.}232.233.void eight()//定义数字8时阴极那些管脚开关234.{235.digitalWrite(a, LOW);236.digitalWrite(b, LOW);237.digitalWrite(c, LOW);238.digitalWrite(d, LOW);239.digitalWrite(e, LOW);240.digitalWrite(f, LOW);241.digitalWrite(g, LOW);242.}243.244.void nine()//定义数字9时阴极那些管脚开关245.{246.digitalWrite(a, LOW);247.digitalWrite(b, LOW);248.digitalWrite(c, LOW);249.digitalWrite(d, LOW);250.digitalWrite(e, HIGH);251.digitalWrite(f, LOW);252.digitalWrite(g, LOW);253.}把下面代码复制下载到控制板中,看看效果。

DS18B20--MSP430--4位数码管显示温度

DS18B20--MSP430--4位数码管显示温度

DS18B20 MSP430 4位数码管显示温度//实验材料:MSP430F149开发板,DS18B20一个,杜邦线15条,3元普通4位共阴极数码管一个//由于本人没有排阻,没有采用灌电流方式给4位共阴极数码管供电,MSP430的I/O口直接接4位共阴极数码管的12个脚//接线说明:DS18B20数据口接P17,电源接3.3V直流;P40~P47接数码管a、b、c、d、e、f、g、dp // P50~P53接位1、位2、位3,位4,数码管接线图请百度//Made By Zhong Sir From Wuhan University#include <msp430x14x.h>//延时函数#define CPU_F ((double)8000000) //外部高频晶振8MHZ//#define CPU_F ((double)32768) //外部低频晶振32.768KHZ#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))//自定义数据结构#define uchar unsigned char#define uint unsigned int#define ulong unsigned long//DS18B20控制脚,单脚控制#define DQ_IN P1DIR &= ~BIT7 // DS18B20接单片机P17口#define DQ_OUT P1DIR |= BIT7 //设置输出#define DQ_CLR P1OUT &= ~BIT7 //置低电平#define DQ_SET P1OUT |= BIT7 //置高电平#define DQ_R P1IN & BIT7 //读电平int temp_value;int temp; //定义的变量,显示数据处理int A1,A2,A3;//***********************************************************************// 系统时钟初始化,外部8M晶振//***********************************************************************void Clock_Init(){uchar i;BCSCTL1&=~XT2OFF; //打开XT2振荡器BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZdo{IFG1&=~OFIFG; //清楚振荡器错误标志for(i=0;i<100;i++)_NOP();}while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待IFG1&=~OFIFG;}//***********************************************************************// MSP430内部看门狗初始化void WDT_Init(){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗}//************************************************************************* // 初始化IO口子程序//************************************************************************* void Port_Init(){P5DIR = 0xFF; //设置IO口方向为输出P4DIR = 0xFF; //P2口初始设置为FF}//************************************************************************* // DS18B20初始化//************************************************************************* unsigned char DS18B20_Reset(void) //初始化和复位{unsigned char i;DQ_OUT;DQ_CLR;delay_us(500); //延时500uS(480-960)DQ_SET;delay_us(80); //延时80uSi = DQ_R;delay_us(500); //延时500uS(保持>480uS)if (i){return 0x00;}else{return 0x01;}}//************************************************************************* // DS18B20读一个字节函数//************************************************************************* unsigned char ds1820_read_byte(void){unsigned char i;unsigned char value = 0;for (i = 8; i != 0; i--){DQ_OUT;DQ_CLR;delay_us(4); //*延时4uSDQ_SET;DQ_IN;delay_us(10); //*延时10uSif (DQ_R){value|=0x80;}delay_us(60); //*延时60uS}return(value);}//************************************************************************* // 向18B20写一个字节函数//************************************************************************* /*DS18B20字节写入函数*/void ds1820_write_byte(unsigned char value){unsigned char i;for (i = 8; i != 0; i--){DQ_OUT;DQ_CLR;delay_us(4); //延时4uSif (value & 0x01){DQ_SET;}delay_us(80); //延时80uSDQ_SET; //位结束value >>= 1;}}//************************************************************************* // 发送温度转换命令//************************************************************************* /*启动ds1820转换*/void ds1820_start(void){DS18B20_Reset();ds1820_write_byte(0xCC); //勿略地址ds1820_write_byte(0x44); //启动转换// DS8B20读取温度信息//************************************************************************* unsigned int ds1820_read_temp(void){unsigned int i;unsigned char buf[9];DS18B20_Reset();ds1820_write_byte(0xCC); //勿略地址ds1820_write_byte(0xBE); //读取温度for (i = 0; i < 9; i++){buf[i] = ds1820_read_byte();}i = buf[1];i <<= 8;i |= buf[0];temp_value=i;temp_value=(uint)(temp_value*0.625);//不是乘以0.0625的原因是为了把小数点后一位数据也转化为可以显示的数据return i;// 温度数据处理函数//*************************************************************************void data_do(int temp_d){int A2t;A1=temp_d/100; //分出百,十,和个位A2t=temp_d%100;A2=A2t/10;A3=A2t%10;}//***********************************************************************// 主程序//***********************************************************************void main(void){const unsigned char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; const unsigned char zww[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; uchar j;WDT_Init(); //看门狗初始化Clock_Init(); //时钟初始化Port_Init(); //端口初始化,用于控制IO口输入或输出DS18B20_Reset(); //复位D18B20while(1){ds1820_start(); //启动一次转换ds1820_read_temp(); //读取温度数值data_do(temp_value); //处理数据,得到要显示的值if(A1==zww[0]) A1=seg[0]; // 以下将DS18B20反馈的数值换成数码管的字符编码以显示else if(A1==zww[1]) A1=seg[1];else if(A1==zww[2]) A1=seg[2];else if(A1==zww[3]) A1=seg[3];else if(A1==zww[4]) A1=seg[4];else if(A1==zww[5]) A1=seg[5];else if(A1==zww[6]) A1=seg[6];else if(A1==zww[7]) A1=seg[7];else if(A1==zww[8]) A1=seg[8];else if(A1==zww[9]) A1=seg[9];else A1=A1;if(A2==zww[0]) A2=seg[0];else if(A2==zww[1]) A2=seg[1];else if(A2==zww[2]) A2=seg[2];else if(A2==zww[3]) A2=seg[3];else if(A2==zww[4]) A2=seg[4];else if(A2==zww[5]) A2=seg[5];. else if(A2==zww[6]) A2=seg[6];else if(A2==zww[7]) A2=seg[7];else if(A2==zww[8]) A2=seg[8];else if(A2==zww[9]) A2=seg[9];else A2=A2;if(A3==zww[0]) A3=seg[0];else if(A3==zww[1]) A3=seg[1];else if(A3==zww[2]) A3=seg[2];else if(A3==zww[3]) A3=seg[3];else if(A3==zww[4]) A3=seg[4];else if(A3==zww[5]) A3=seg[5];else if(A3==zww[6]) A3=seg[6];else if(A3==zww[7]) A3=seg[7];else if(A3==zww[8]) A3=seg[8];else if(A3==zww[9]) A3=seg[9];else A3=A3;for(j=0;j<8;j++){P4OUT=A1;P5OUT=0X0E;delay_ms(0.4);P4OUT=A2+BIT7;P5OUT=0x0D;.delay_ms(0.4);P4OUT=A3;P5OUT=0x0B;delay_ms(0.4);P4OUT=0x58;P5OUT=0x07;delay_ms(0.4);P4OUT=0x00; //缺少该句,数码管会有微弱重影,有该句无重影}}}可编辑。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档