1、 知识目标:1. 了解7段LED数码管的结构及其工作原理;2. 掌握单片机对数码管的静态、动态显示控制方式; 3.应用单片机进行计数显示控制的原理。 能力目标:1. 能根据设计任务要求编制静、动态显示及计数的程序流程图; 2. 会设计多位数码管动态显示的驱动电路; 3. 会用keilc51软件对源程序进行编译调试及与Protues软件联调,实 现电路仿真;,项目4 LED数码管显示,任务1 单键控制数码管显示的设计,用一个数码管显示按键按动的次数,计数值从0-F循环计数。,1提出任务,2任务分析,(1)硬件电路设计以8051单片机作为控制电路,按键连接至单片机的P1.4引脚,另一端接地,P0口
2、外接1个采用共阴极连接方式的数码管和 上拉电阻,硬件电路原理图所示。,任务1 单按键控制数码管显示的设计,任务1 单按键控制数码管显示的设计,3 .数码管原理及封装图,共阴数码管显示真值表,如果按键次数变量值等于F,则变量值清零,否则变量值加1,然后查表输出显示,源程序,#include #define uchar unsigned char void delay(uchar);sbit p14=P14;uchar code distable=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0
3、x71;main()uchar i=0;P0=0X00;while(1) while(p14); delay(2); if(p14=0) ,void delay(uchar k )uchar x,y,z;for(x=k;x0;x-)for(y=20;y0;y-)for(z=250;z0;z-);,任务1采用共阳数码管完成;用8051单片机及LED数码管实现对键盘键值的实现。当按下键盘中不同按键时,LED数码管上显示不同的键值。(lesson3-lessonkey2seg),思考题:,任务2 多位数码管显示器的设计,将数字1,2,3,4从左到右 分别显示在4位数码管上,1提出任务,2任务分析,(
4、1)硬件电路设计 以8051单片机作为控制电路,8051的I/O 口控制每个数码管每一段的亮灭,如何连接?,在计算机控制系统中,常利用n个LED显示器构成n位显示。通常把点亮LED某一段的控制称为段选,而把点亮LED某一位的控制称为位选或片选。根据LED显示器的段选线、位选线与控制端口的连接方式不同,LED显示器有静态显示与动态显示两种方式,下面以4个共阴极LED的组合为例进行说明。,1、静态显示方式2、动态显示方式, 知识链接,1静态显示方式,结构特点:4个COM端连接在一起并接有效电平无位选;每个LED的段选各自与一个8位并行I/O口相连段选独立。,工作特点:缺点是电路中占用I/O口资源多
5、;优点是占用CPU机时少,显示稳定可靠,适用:规模较大的实时控制系统。,2动态显示方式,结构特点:4个LED显示器各自的段选线连在一起,与一个8位的I/O口相连;各自的COM端则由另一个I/O口进行位选。,工作特点:优点是占用I/O资源少;缺点是需用软件程序不断地循环扫描定时刷新,因而占用了CPU的大多数机时。,适用:小型测控系统,3 LED显示器接口电路,1静态显示接口电路 2动态显示接口电路,整个显示部分正常工作必须有: 显示部分、驱动电路。必要的时候可以加上:锁存器、译码器。,1)静态显示接口电路,2).动态显示接口电路,LED动态扫描流程图,#include #define uchar
6、 unsigned char void delay(uchar);uchar code distable =0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar disnum=1,2,3,4;uchar i,k;main()while(1) k=0x01; for(i=0;i4;i+) P2=0x0f; /关闭显示 P0=distabledisnumi; P2=k; k=k0;x-)for(y=20;y0;y-)for(z=250;z0;z-);,段选,D0D7分别对应ah,
7、D0D7高电平有效,位选,SEG0SEG7分别从左向右对应8个LED数码管, SEG0SEG7高电平有效,共阴数码管,数码管驱动电路原理图,思考题:1.根据电路板的原理图,将1-8个数字从左到右显示在8个数码管上。注意:根据电路驱动的需要设置I/O端口模式。,任务3 四位计数器的设计,将按键次数以十进制显示在4位数码管上,1提出任务,2任务分析,(1)硬件电路设计 以8051单片机作为控制电路,8051的I/O 口p1.4接按键,P0口接断选,P2口低四位接位选。,#include #define uchar unsigned char sbit p14=P14;void delay(ucha
8、r);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( ); /动态显示 ,void scan( )while(!p14); delay(4); if(p14=0) j+; d
9、isnum3=j%10; /十进制转换 temp1=j/10; disnum2=temp1%10; temp2=temp1/10; disnum1=temp2%10;temp3=temp2/10; disnum0=temp3%10; while(!p14); /等待按键释放 ,主程序,按键扫描函数,void display( )uchar k,i; k=0x01; for(i=0;i4;i+) P2=0x0f;P0=distabledisnumi; P2=k; k=k0;x-)for(y=10;y0;y-)for(z=250;z0;z-);,按键扫描函数,延时函数,思考题:1.在实验开发板上完成任务3.2.为什么任务3中当按键不释放时,数码管不显示?3.为什么有时候按键按下而不能被识别?如何解决?,