数码管动态显示实验详解

一.实验目的、内容、仪器

实验目的:

1.熟悉数码管的功能和使用

2.了解位选和段选,和动态显示的原理

  1. 了解74HC138的引脚功能。

实验内容:接共阴极数码管,要求动态显示(HELLOC51),动态扫描显示即轮流向各位数码管送出字形码和相应的位选。

实验仪器:7SEG-MPX8-CC:八位数码管共阴极,74HC573:锁存器,74HC138:译码器,AT89C51:51单片机,RESPACK-8:排阻

二.硬件原理

三.程序流程图

四.代码实现

 #include <REGX51.H>

//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,
                            0x66,0x6D,0x7D,0x07,
                            0x7F,0x6F,0x77,0x7c,
          0x39,0x5e,0x79,0x71,
              0x76,0x38};

//延时子函数
void Delay(unsigned int xms)
{
 unsigned char i, j;
 while(xms--)
 {
  i = 2;
  j = 239;
  do
  {
   while (--j);
  } while (--i);
 }
}

//数码管显示子函数
void Nixie(unsigned char Location,Number)
{
 switch(Location)  //位码输出
 {
  case 1:P2_4=1;P2_3=1;P2_2=1;break;
  case 2:P2_4=1;P2_3=1;P2_2=0;break;
  case 3:P2_4=1;P2_3=0;P2_2=1;break;
  case 4:P2_4=1;P2_3=0;P2_2=0;break;
  case 5:P2_4=0;P2_3=1;P2_2=1;break;
  case 6:P2_4=0;P2_3=1;P2_2=0;break;
  case 7:P2_4=0;P2_3=0;P2_2=1;break;
  case 8:P2_4=0;P2_3=0;P2_2=0;break;
 }
P0=NixieTable[Number]; //段码输出
 Delay(1);    //显示一段时间
 P0=0x00;    //段码清0,消影
}
void main()
{
 while(1)
 {
  Nixie(1,16);  
  Nixie(2,14);  
  Nixie(3,17); 
  Nixie(4,17);  
  Nixie(5,0); 
  Nixie(6,12);   
  Nixie(7,5);  
  Nixie(8,1);
 }
}

五.实验步骤

(1)了解译码器的功能,以及动态显示原理

(2)搭建仿真电路,勾选debug,建立keil工程,选择单片机型号

(3)给工程创建源码文件,并以.c结尾,添加文件到源组里

(4)生成hex文件,点击魔术棒,在output中勾选Create HRX_File

(5)对代码进行编译,调试debug,点击USE,在下拉菜单里选中“Proteus VSM Monitor 一51 ”进行设置

(6)将程序导入到单片机中运行,双击单片机,选择生成的hex文件

(7)在keil中启动调试,开始运行,观察proteus中的电路

六.结果及讨论

动态显示原理:1.利用发光管的余辉2.人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,而实际上多位数码管是一位一位轮流显示的,只是轮流速度非常快,人眼已经无法分辨出来。

物联沃分享整理
物联沃-IOTWORD物联网 » 数码管动态显示实验详解

发表评论