实验四 数码管的动态显示实验

  • 格式:doc
  • 大小:364.93 KB
  • 文档页数:8

下载文档原格式

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

实验四数码管的动态显示实验

班级通信1102 姓名谢剑辉学号20110803223 指导老师袁文澹

一、实验目的

熟悉掌握数码管动态显示的基本方法;

根据已知电路和设计要求在实验板上实现数码管动态显示。

根据已知电路和设计要求在PROTEUS平台仿真实现控制系统。

二、实验内容

1、在STC89C52实验平台的4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容。

2、思考:如何实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣。

三、实验原理

实验要求“4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容”。动态扫描可以实现要求。简单地说,动态扫描就是选通一位,送一位数据。原理图中的P10~P13是位选信号,即选择哪个数码管显示数字;P00~P07是段码,即要显示的数字。可以通过依次选通一位7段数码管并通过P0端口送出显示数据。由于人眼的视觉残留原理,如果这种依次唯一选通每一位7段数码管的动作在0.1s内完成,就会造成多位数码管同时点亮显示各自数字的假象。本实验使用中断,实现每2s更新一次数字。

四、实验方法与步骤

设计思路和方法:

1、根据电路图,分析数码管动态显示的设计思路,使用中断实现每2秒更新一次数字的设计思路,以及实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣的设计思路。

(1)数码管动态显示的原理如“实验原理”里所述,不赘述;

(2)使用中断实现每2s更新一次数字的设计思路:本次实验使用Timer0中断,由于其定

时时间最大为65536us,不能实现2s的长延时,那么可以使用多次中断来实现,并且在中断到来时,不断地死循环显示数字,即根据动态显示原理“选通一位,来一位数据”。由于最大的数字为9,则(x%10),(x+1)%10,(x+2)%10,(x+3)%10分别是千位,百位,十位,个位上的数字。在编写代码时,设臵Timer0定时时间为50ms,可以用一个参数i计算中断的次数;当中断的次数达到40次时,说明已经达到了2s,此时更新数字,即将数字x 自增1;同时,判断(x%10),(x+1)%10,(x+2)%10,(x+3)%10里面是否有1,如果有1的话,则将P15臵0,让三极管导通,蜂鸣器蜂鸣。

2、针对电路图及设计要求给出继电器定时控制的程序框图。

1、编写源代码

第一步:打开Keil uVision4,单击主菜单“project”的“new project”选项,选择工程保存路径,输入工程名“SMGPro”;在弹出的对话框里选择Atmel的80C51,单击“确定”;

第二步:单击主菜单的“File”的“New”选项,在编辑窗口里编写源代码。

/********************************************

//实验四:数码管的动态显示

//2014.05.10 谢剑辉

********************************************/

#include

sbit sound=P1^5;

sbit s0=P1^0;

sbit s1=P1^1;

sbit s2=P1^2;

sbit s3=P1^3;

unsigned char i; //记录中断次数

unsigned int x; //x%10为千位的数字

unsigned char Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//数码管显示0~9的段码表

/***********************************************************************

函数功能:快速动态扫描延时程序

***********************************************************************/

void delay(unsigned int timer){

while(timer--)

;}

/***********************************************************************

函数功能:4位数的数码显示器显示

***********************************************************************/

void display(unsigned int k)

{

s0=0;//即P1=1111 1110B,P1.0引脚输出低电平,数码显示器千位接通电源

P0=Tab[k%10];//显示千位

delay(200);

s0=1;

s1=0;//即P1=1111 1101B,P1.1引脚输出低电平,数码显示器百位位接通电源

P0=Tab[(k+1)%10];//显示百位

delay(200);

s1=1;

s2=0;//即P1=1111 1011B,P1.2引脚输出低电平,数码显示器十位接通电源

P0=Tab[(k+2)%10];//显示十位

delay(200);

s2=1;

s3=0;//即P1=1111 0111B ,P1.3引脚输出低电平,数码显示器个位接通电源

P0=Tab[(k+3)%10];//显示个位

delay(200);