当前位置:文档之家› LED数码管显示

LED数码管显示


结构特点:
4个LED显示器各自的段选线连在一起,与一个8
位的I/O口相连; 各自的COM端则由另一个I/O口进行位选。 工作特点: 优点是占用I/O资源少;
缺点是需用软件程序不断地循环扫描定时刷新,因而占 用了CPU的大多数机时。
适用:小型测控系统
3
LED显示器接口电路
整个显示部分正常工作必须有: 显示部分、驱动电路。 必要的时候可以加上:锁存器、译码器。
• • • • •
#include <reg51.h> #define uchar unsigned char void delay(uchar); sbit p14=P1^4; uchar code distable[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d, • 0x07,0x7f,0x6f,0x77,0x7c,0x39,0 x5e,0x79,0x71}; • main() • {uchar i=0; • P0=0X00; • while(1) • { while(p14); • delay(2); • if((p14==0) &&( i<0x0f)) • i++; else if((p14==0) &&( i==0x0f)) • i=0; • P0=distable[i]; • while(!p14); • }}

1.静态显示接口电路 2.动态显示接口电路
1).静态显示接口电动态扫描流程图
• • • • •
#include <reg51.h> #define uchar unsigned char void delay(uchar); uchar code distable[ ]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x 79,0x71}; uchar disnum[]={1,2,3,4}; uchar i,k; main() { while(1) { k=0x01; for(i=0;i<4;i++) { P2=0x0f; //关闭显示 P0=distable[disnum[i]]; P2=~k; k=k<<1; delay(1) ; } P2=0x0f; }}
b
1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0
a
1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1
十六进制
0X3F 0X06 0X5b 0X4F 0X66 0X6d 0X7d 0X07 0X7f 0X6f 0X77 0X7c 0X39 0X5e 0X79 0X71
如果按键次数变量值 等于F,则变量值清零, 否则变量值加1,然后 查表输出显示
源程序
• • • • • • • • • • • • • • • •
void delay(uchar k ) { uchar x,y,z; for(x=k;x>0;x--) for(y=20;y>0;y--) for(z=250;z>0;z--); }
共阴数码管
段选,D0—D7分别对应a—h, D0—D7高电平有效
1、静态显示方式 2、动态显示方式
1.静态显示方式
结构特点:
4个COM端连接在一起并接有效电平——无位选; 每个LED的段选各自与一个8位并行I/O口相连——段选独立。
工作特点:
缺点是电路中占用I/O口资源多;
优点是占用CPU机时少,显示稳定可靠 适用:规模较大的实时控制系统。
2.动态显示方式
位选,SEG0—SEG7分别从左 向右对应8个LED数码管, SEG0—SEG7高电平有效
数码管驱动电路原理图
思考题:
1.根据电路板的原理图,将1-8个数字从左到右显示 在8个数码管上。注意:根据电路驱动的需要
设置I/O端口模式。
任务3 四位计数器的设计 1.提出任务
• 将按键次数以十进制显示在4位数码管上 2.任务分析 • (1)硬件电路设计 以8051单片机作为控制电路,8051的I/O 口p1.4接按键, P0口接断选,P2口低四位接位选。
源程序
void delay(uchar k ) { uchar x,y,z; for(x=k;x>0;x--) for(y=20;y>0;y--) for(z=250;z>0;z--); }
思考题: • 任务1采用共阳数码管完成; • 用8051单片机及LED数码管实现对键盘键值的实现。当 按下键盘中不同按键时,LED数码管上显示不同的键值。 • (lesson3-lessonkey2seg)
按键扫描函数
void scan( ) { while(!p14); delay(4); if(p14==0) { j++; disnum[3]=j%10; //十进制转换 temp1=j/10; disnum[2]=temp1%10; temp2=temp1/10; disnum[1]=temp2%10; temp3=temp2/10; disnum[0]=temp3%10; while(!p14); //等待按键释放 } }
项目4 LED数码管显示
★ 知识目标: 1. 了解7段LED数码管的结构及其工作原理;
2. 掌握单片机对数码管的静态、动态显示控制方式;
3.应用单片机进行计数显示控制的原理。 ★ 能力目标:
1. 能根据设计任务要求编制静、动态显示及计数的程序流程图;
2. 会设计多位数码管动态显示的驱动电路; 3. 会用keilc51软件对源程序进行编译调试及与Protues软件联调,实
思考题:
1.在实验开发板上完成任务3. 2.为什么任务3中当按键不释放时,数码管不显示? 3.为什么有时候按键按下而不能被识别?如何解决?
现电路仿真;
任务1 单键控制数码管显示的设计
1.提出任务
• 用一个数码管显示按键按动的次数,计数值从0-F循环计 数。 2.任务分析 • (1)硬件电路设计 • 以8051单片机作为控制电路,按键连接至单片机的P1.4 引脚,另一端接地,P0口外接1个采用共阴极连接方式 的数码管和 上拉电阻,硬件电路原理图所示。
任务2 多位数码管显示器的设计 1.提出任务
• 将数字1,2,3,4从左到右 分别显示在4位数码管上 2.任务分析 • (1)硬件电路设计 以8051单片机作为控制电路,8051的I/O 口控制每个数码 管每一段的亮灭,如何连接?
◇ 知识链接 在计算机控制系统中,常利用 n 个 LED 显示器构成 n 位显示。 通常把点亮LED某一段的控制称为段选,而把点亮LED某一位的 控制称为位选或片选。根据 LED 显示器的段选线、位选线与控 制端口的连接方式不同, LED 显示器有静态显示与动态显示两 种方式,下面以4个共阴极LED的组合为例进行说明。
任务1
单按键控制数码管显示的设计
任务1
单按键控制数码管显示的设计
3 .数码管原理及封装图
共阴数码管显示真值表
P0.7 数码 0 1 2 3 4 5 6 7 8 9 A B C D E F P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 P0口
h
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g
0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1
f
1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1
e
1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1
d
1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0
c
1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0
按键扫描函数
void display( ) {uchar k,i; k=0x01; for(i=0;i<4;i++) { P2=0x0f; P0=distable[disnum[i]]; P2=~k; k=k<<1; delay(1) ; } P2=0x0f; }
延时函数
void delay(uchar k ) { uchar x,y,z; for(x=k;x>0;x--) for(y=10;y>0;y--) for(z=250;z>0;z--); }
主程序
#include <reg51.h> #define uchar unsigned char sbit p14=P1^4; void delay(uchar); uchar code distable[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar disnum[]={0,0,0,0}; uchar k; unsigned int j,temp1,temp2,temp3; void scan( ); void display( ); void main( ) { while(1) { scan( ); //按键扫描 display( ); //动态显示 } }
相关主题