protues课件-第6讲数码管动态电路仿真实验
- 格式:ppt
- 大小:270.00 KB
- 文档页数:32
实验六数码管的动态显示
一、实验目的:
1.学习多位数码动态显示的原理。
2.培养综合运用多种中规模集成器件组合逻辑功能部件的能力及实验技能。
二、实验器材:
74LS139 74LS153 74LS00 74LS74 数字电子线路实验箱
三、实验原理:
数字电路中数据的显示方式有两种,一种为静态显示,一种为动态显示。
前面的实验中数码管的显示方式均为静态显示,数码管动态显示原理与静态显示不同,如果数码管采用共阳极接法一般在阴极接入数据信号,同时在阳极信号接入高电平则该数码管显示数据。
静态显示原理框图:
4路数据输入
数据
选择
2-4译
码器振荡器
秒脉冲
计数
器
七段
译码
4位
数码
管显
示
电路设计图:
测试:。
数码管动态显示实验一该实验采用proteus 7.5 sp3进行的仿真,仿真原理图如下图所示,其中采用的元器件有AT89C51单片机,74HC573锁存器,共阳极数码管。
单片机的P0口用与输出数码管要显示的段码,P2口用于选通要点亮的数码管。
数码管通过动态扫描显示HELLO,HELLO循环左移,左移一位LED灯亮下。
实验程序如下:/*********************************************************************** 程序名; 数码管动态显示实验* 功能:数码管通过动态扫描显示HELLO,HELLO循环左移,左移一位LED灯* 亮下。
* 编程者:ZPZ* 编程时间:2009/8/4**********************************************************************/#include<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit P1_7=P1^7;uchar num;uchar code table2[]={0x89,0x86,0xc7,0xc7,0xc0,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0x89,0x86,0xc7,0xc7,0xc0,0xbf};void delay(uint);void main(){unsigned long b=0;uint a;uint l=0,k=6;P1_7=0;while(1){b++;a=0x01;if(b<80){for(num=l;num<k;num++){P2=a;a=a<<1;if(a==0x40)a=0x01;P0=table2[num];delay(2);}}else{ b=0;l++;k++;P1_7=!P1_7;if(l==12){l=0;k=6;}}}}void delay(uint z){uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}数码管动态显示实验二该实验如同实验一,不同之处在于,该实验是将预先设定的一个百位数,通过动态扫描使其在数码管的后三位显示。
利用proteus做51单片机的数码管动态显示
单片机爱好者
最近我用proteus做了一下数码管的动态显示仿真,参考了郭天祥老师的《新概念51单片机C语言教程》上第4章独立按键检测的程序,仿真原理图如下:
按郭老师的程序编好烧写进去并运行,发现数码管显示不正常,我在网上发现也有许多类似的问题,分析后发现存在以下几个问题:
1 位选信号和段选信号共用P0口;
2 先送段选信号后送位选信号;
3 设置了消影,我觉得作用不明显
改进:
首先,我把段选信号和位选信号分开,分别由P0和P1发送,第二,我对显示子函数(即void display(uchar numdis))做了一些修改,将位选信号的发送放到段选之前,另外删除了消影,下面是修改后的display()子函数:void display(uchar numdis)
{
uchar i,j;
i=numdis/10;
j=numdis%10;
wela=1;
P1=0xfd;
wela=0;
dula=1;
P0=table[j];
dula=0;
delayms(5);
wela=1;
P1=0xfe;
wela=0;
dula=1;
P0=table[i];
dula=0;
delayms(5);
}
做了上面的修改后,数码管显示正常,可以实现书上的加、减、清0和开启定时自动加1的功能,如下。
上传上来,大家可以分析一下,对我的方法提出质疑,或者给出更好的解决办法。