【C51自学笔记】数码管(静态与动态显示)+74HC138+点阵的动态显示

发布者:CrystalRose最新更新时间:2022-04-22 来源: eefocus关键字:C51  数码管  静态  动态显示  74HC138 手机看文章 扫描二维码
随时随地手机看文章

数码管:

数码管由7个发光二极管组成一个日字形,如果需要显示小数点,那么就再加一个点,就是8段数码管。      

数码管显示亮度高,响应速度快,分共阴和共阳两种形式,常用的有单个的和4联的,还有两联的和专门用来显示时间的。


分类:共阴;共阳

编码问题:

必须对数字或字符进行编码。因此为LED显示器提供的编码正好是一个字节。也有采用BCD-7段译码芯片的。

显示问题:

静态显示方式


静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。


动态显示


动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

数码管下方有一个反相器。默认P3输出1,即默认数码管共阴。

现在需要操作P1,扫描所有数码管

如何扫描:


P3:10000 P1送入数字编码

P3:01000 P1送入数字编码

P3:00100 P1送入数字编码

P3:00010 P1送入数字编码

P3:00001 P1送入数字编码

送入数字编码:按照16进制编码表即可


其他类型的数码管:

四个管子同时接出a---dp


74HC138译码器

A1,A2,A3三个加权(A0A1A2的输入相当于一个八进制数)输入可以产生八个互斥输出Y0-Y7

输入输出特性:

使能条件:E1E2 :低电平 E3:高电平


芯片使用:

G2A G2B G1:代表E1E2E3


ABC:A0A1A2

 

点亮数码管:


 //静态显示

 #include

 

unsigned char a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c};

 

int main()

{

P1=a[1];

//接地端默认使数码管共阴

while(1);

return 0;

}

 //数码管的动态显示

 /*

 思路:

 1.向138芯片的A123输出选中数码管,选中谁 谁是低电平

 

 2.同时P10输出十六进制

 */

 

 #include

 

sbit smgen=P2^3;//573芯片 高电平 

sbit rs=P3^6;//其他芯片会影响 所以用这个脚关闭那个芯片。

 

unsigned char table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c};//对应着数字

unsigned char table2[]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70};

//总线驱动:A1A2A3

 

void delay(unsigned int a)

 

{

while(a--);

}

 

unsigned int t;

 

void main()

{

unsigned char i;

rs=0;//OE接地

t = 50;

while(1)

{

for(i=0;i<8;i++)

{

P2=table2[i];

smgen=1;

P1=table1[i];

delay(t);

}

}

}


点阵:

如何显示:


上图原理图中:横向是P0 纵向是P1 此板使用左边原理图。延序号有P0-P7

如果想让点阵点亮,则保证P0i = 0;P1j = 1


举例:动态显示数字0:

P0选中第一列 P0 = 1111 1110  ;P1 = 0000 0000 

P0选中第二列 P0 = 1111 1101  ;P1 = 0000 0000 

P0选中第三列 P0 = 1111 1011  ;P1 = 0011 1110 

P0选中第四列 P0 = 1111 0111  ;P1 = 0100 0001 

P0选中第五列 P0 = 1110 1111  ;P1 = 0100 0001 

P0选中第六列 P0 = 1101 1111  ;P1 = 0100 0001 

P0选中第七列 P0 = 1011 1111  ;P1 = 0011 1110 

P0选中第八列 P0 = 0111 1111  ;P1 = 0000 0000 

 #include

#define uchar unsigned char 

#define uint unsigned int

 

sbit en1=P2^0;//573高电平

sbit en2=P2^3;//573高电平

sbit rs=P3^6;//某个芯片需要关闭

 

uchar table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar table2[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};

 

void init(void)

{

en1=1;

en2=1;

rs=0;

}

 

void delay(uint a)

{

while(a--);

}

 

void main()

{

uchar i;

init();//初始化

while(1)

{

for(i=0;i<8;i++)

{

P0=table1[i];

P1=table2[i];

delay(40);

}

}

 

}

————————————————

版权声明:本文为CSDN博主「mmciel」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/F_zmmfs/article/details/81152044


关键字:C51  数码管  静态  动态显示  74HC138 引用地址:【C51自学笔记】数码管(静态与动态显示)+74HC138+点阵的动态显示

上一篇:【C51自学笔记】中断系统
下一篇:【C51自学笔记】ULN2003+蜂鸣器+继电器+步进电机

推荐阅读最新更新时间:2024-11-11 07:46

C51 定时器 TL0=(65536-50000)%256是怎么推导出来的?
文章1:如果你选的单片机的晶振一定,比如12MHZ来说吧,机器周期是1us,就是说每1us产生一次计数,就拿50ms来说,这是你想要的计时,意思是,对机器周期进行50000计数就可以得到我想要的,可T0是一个可以对机器周期能进行65536次计数,也就是说我想要的50MS不能让T0溢出,怎么办,那么先给这个定时器里面放些数,放多少,就是我们想要的50MS在加上一个多少就能等于65536,也就是65536和50000的差值,这个值就是我们说的初值。 为什么除以256,因为我们的计时器是两个8位组成的,那么要把那些差值装进这两个8位,那么低8位最多能装256个机器周期,那么256计满了就用高8位的,就是说低8位满一次高8位加1,那么
[单片机]
数码管静态显示与动态显示介绍
数码管是单片机系统中经常用到的显示器件, 从内部结构上可以分为共阴极和共阳极数码管。对不同的数码管,电路的接法也不一样。图1A为数码管的结构图。以共阳极数码管为例, 要想点亮某段, 只需要在相应的段上给低电平即可。图1B为共阳极数码管段码分布, 以及一个显示的实例。 图1 数码管段码分布及显示示例 按照工作方式, 数码管驱动可以分为静态显示和动态扫描。所谓静态显示, 就是每一个数码管的段码都要独占具有锁存功能的输出口, CPU把要显示的字码送到输出口上,就可以使数码管显示对应的字符, 直到下一次送出另外一个字码之前, 显示的内容一直不会消失;动态扫描是把所有显示器的8个段码中的A-dp的各个相同段连接在一起, 接到一个公共的
[单片机]
<font color='red'>数码管</font>的<font color='red'>静态</font>显示与<font color='red'>动态显示</font>介绍
51单片机学习笔记2.动态数码管的使用
原理图 内容 74HC138译码器 数码管 公共端 - 位选线 连在一起的段线 - 段选线 通过控制在不同位选线 不同的段选线通电(段选数据不同)以达到在不同位置显示不同数字的目的 具体看单片机原理图即可 动态显示其实一个时刻只点亮一个数字,在24ms内点亮下一个就会看成是同时亮的 代码 首先是一段转码用的 u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//最高位为小数点,如果需要点亮小数点只需 | (0x80)或是 | 128 然后是显示用的函数
[单片机]
51单片机学习笔记2.动态<font color='red'>数码管</font>的使用
C51的PID程序
//主程序====================================================== #include Main.h #include PID_f1.h /* ............................................................... */ /* ............................................................... */ void main(void) { float x,y,z; while(1) { x = PID_Control(y,z); } }
[单片机]
C51学习心得体会,指针和数组在程序设计中的关系
C语言中的指针和数组几乎可以互换,数组名可认为是一个常量指针,指针可用来完成涉及数组下标的操作。 e.g.int * nPtr; int Array ; (1)数组与指针等价 nPtr = Array;或者nPtr = &Array ; (2)引用数组元素Array nPtr 或者*(nPtr+3)或者*(Array+3) 其中,nPtr 为指针下标表示法。 (3)e.g.数组拷贝 //用数组表示法把s2拷贝到s1中 void copy1(char *s1,constchar *s2) { int i for(i=0;s1 =s2 ;i++); } //用指针表示法把s2拷贝到s1中 void copy1(char *s1,co
[单片机]
数码管计时器程序
这是一个51hei网友测试通过的计时器程序、电路很简单就不画了数码管的段选是P0口位选是P1口 #include reg52.h typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uint32; code uint8 number ={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xa7,0xa1,0x86,0x8e}; //数字0到F uint16 counter = 0; /
[单片机]
51单片机计数器计数数码管显示
#include reg52.h #define uint unsigned int #define uchar unsigned char uchar code smg_tab ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//{0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0Xb1}; uchar code bit_tab ={0x7f,0xbf}; uchar Counts=0; uchar Display_Buffer ={0,0}; void _del
[单片机]
单片机C51编程入门最好的例子(跑马灯)
#include reg52.h #define uchar unsigned char #define uint unsigned int //延时子程序 void mDelay(uchar Delay) { uchar i; for(;Delay 0;Delay--) { for(i=0;i 123;i++); } } void main() { uchar i,d; P0 = 0; //所以LED点亮。 mDelay(250);//延时250mS(12M晶振) mDelay(250);//延时250mS(12M晶振) while(1) { d = 0x01;
[单片机]

推荐帖子

OLED显示屏的所有图像整体翻转90°。在线求救!!
在VXWORKS下的一台设备,原先手持终端是LED屏的,所有图像都是是横屏显示。但是自从换了OLED屏后就变为竖屏显示了。该怎么样调节过来??请教各位高手。图像是使用windml编的。OLED显示屏的所有图像整体翻转90°。在线求救!!一个横的,一个竖的,总不能简单的翻个90度来用吧,人只能歪着头看啊分辨率变了,显示模式和屏幕定位都要变了,应该说界面需要重构。如果就是简单翻,那只要在底层函数里面把X和Y的坐标进行变换整个界面都要重构
zhangjuny30 嵌入式系统
单片机键盘扫描之状态机实现
一、概述在编写单片机程序的过程中,键盘作为一种人机接口的实现方式,是很常用的。而一般的实现方法大概有:1、外接键盘扫描芯片(例如8279,7279等等),然后由该芯片来完成去抖、键值读取、中断请求等功能。然后单片机响应中断并读取键值,有的时候也可以采用轮训的方式。2、如果按键数比较少,那么可以直接将按键接到单片机的IO口,然后各按键取逻辑或再送到单片机的中断管脚(对于51体系),单片机响应中断后再去读取IO口的数据。如果单片机的中断向量比较多(例如AVR系列的单片机,每个IO都可以作为中
求知者 单片机
DSP中的CMD文件经典解读
DSP中的CMD文件经典解读,欢迎来吐槽也可以从这里下载http://pan.baidu.com/s/1bnEl4dTDSP中的CMD文件经典解读
Aguilera DSP 与 ARM 处理器
【TI学习】M3在TFT屏幕上显示汉字
分享一个M3在TFT屏幕上显示汉字的代码和文档,我都找了很久才找到的,非常实用【TI学习】M3在TFT屏幕上显示汉字:carnation:谢谢,楼主,下来看下楼主这个同TI图形库有区别么很高档的资料应该是在TIGrlib的基础上扩展的,很好的资料,顶。回复板凳ddllxxrr的帖子支持没有区别,就是基于TIGRLIB的回复板凳ddllxxrr的帖子早上根据PDF实验了下,失败了!还没发现是那里的问题!谁移值成功的进来指导指导!确实不错啊国人做
fengzhang2002 微控制器 MCU
07月21日 DIY示波器调试用器件及液晶到位
DIY数字示波器,核心小组调试用的器件和液晶已经到位感谢西门辛苦为大家筹备器件也感谢周生及时高质量的送来液晶石头的PCB也在制作中,要迟些到位。全部聚齐后,核心小组人员会将自己的进度和问题随时发表出来,供大家参考。先秀下照片喽器件清单及价格,会请莫恩整理出比较详细的晒出来。07月21日DIY示波器调试用器件及液晶到位哟西,不错,给我来一套。。。照片好漂亮,没想到堆成一堆的器件能照成这样DIY活动可以更进一步了,大家加油啊!呵呵,不错啊,不过这材料太贵了点吧,支持。。。
soso DIY/开源硬件专区
“T”型连接结构的UPS并联运行方案
摘要:提出一种“T”型连接结构的UPS并联运行方案,该方案中并联运行的UPS省去信号联络线,属于主从式UPS并联。从“T”型结构UPS将前级UPS的输出电流引入并以此电流作并联控制信号,采用电流追踪型PWM控制信号发生方案,可使其输出电流与前级输入电流保持同相,并可达到均流的目的。文中给出了仿真结果,表明该方案是可行的。关键词:UPS并联运行拓扑“T”型连接结构的UPS并联运行方案 作为DIY电子爱好者,丰富的资料及实践经验教程是快速步入高手殿堂的好帮手,感谢你。
zbz0529 模拟电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved