单片机数码管动态扫描实验

2025-10-20 07:03:34

数码管动态扫描实验

一、实验目的与要求

1、掌握keilC51软件与protues软件联合仿真调试的方法;

2、掌握单片机对数码管的动态显示控制方式;

3、掌握定时器的基本应用及编程方法。

二、实验仪器

1、KeilC51单片机开发系统

2、仿真软件(Protues)

3、PC 机                     1台

三、实验内容

1、用Protues设计一8位数码管动态扫描显示电路。利用P0口做数码管的段选线,P1.0~P.2与74LS138译码器的3个输入端相连,其译码输出Y0~Y7作为数码管的位选线。

2、编写程序,将数字1~8分别显示在8个数码管上,要求显示无闪烁。

3、编写程序,利用Protues中的“激励源 /DCLOCK/数字类型/时钟”产生

频率为1Hz的方波输出,并利用定时/计数器T1统计脉冲的个数,将统计结果动态实时的显示在数码管上。该脉冲计数电路在以上电路的基础上自行修改。

四、实验步骤:

1、用Protues设计数码管动态扫描显示电路;

2、在KeilC51中编写识别程序,通过后与Protues联合调试;

3、启动仿真,观察数码管显示是否正确;

4、用Protues设计脉冲计数电路,仿真调试、运行程序并查看效果。

五、电路设计及调试:1、实验电路:

单片机数码管动态扫描实验

2、程序设计与调试:①实验程序:

【12345678】

#include<reg52.h>

#define uintunsigned int

#define ucharunsigned char

uchar codeDisplsy[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};

uchar codeTemble[]={0,1,2,3,4,5,6,7};

void  delay(uint z)

{

  uchar t;

  while(z--) for(t=120;t>0;t--);

}

void  main()

{

    uchar i;

  P0=0xff;

  P1=0;

  while(1)

  {

       if(i==8)

       i=0;

       P1=Temble[i];

       P0=~Displsy[i+1];

        i++;

       delay(2);

  }

}

【脉冲计时】

#include<reg52.h>

#define uintunsigned int

#define ucharunsigned char

uchar codeDisplay[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar codeTemble[]={0,1,2,3,4,5,6,7};

uchar Flag;

uint Num;

void  delay(uint z)

{

  uchar t;

  while(z--) for(t=120;t>0;t--);

}

voidTest2(void)

{

  TR1 = 1;

  while(1)

  {

        Num = TH1;

        Num = Num << 8;

        Num |= TL1;

        P1 = 7;

        P0 = ~Display[Num%10];

        delay(3);

        P1 = 6;

        P0 = ~Display[Num%100/10];

        delay(3);

        P1 = 5;

        P0 = ~Display[Num%1000/100];

        delay(3);

        P1 = 4;

        P0 = ~Display[Num%10000/1000];

        delay(3);

        P1 = 3;

        P0 = ~Display[Num%100000/10000];

        delay(3);

        P1 = 2;

        P0 = ~Display[Num%1000000/100000];

        delay(3);

        P1 = 1;

        P0 = ~Display[Num%10000000/1000000];

        delay(3);

        P1 = 0;

        P0 = ~Display[Num%100000000/1000000];

        delay(3);

  }

}

void main()

{

    TMOD = 0x50;

  TH1 = 0x00;

  TL1 = 0x00;

  EA = 1;

  ET1 = 1;

  TR1 = 0;

   while(1)

   {

      Test2();

   }

}

②调试:

③实验结果:

1、数字1~8分别显示在8个数码管上,显示无闪烁。

2、定时/计数器T1统计脉冲的个数,统计结果动态实时的显示在数码管上。

七、实验后的经验

1、掌握了keilC51软件与protues软件联合仿真调试的方法;

2、掌握了单片机对数码管的动态显示控制方式;

3、掌握了定时器的基本应用及编程方法。

八、实验总结

专业知识有一定的提高且提高我的综合能力以便在今后社会生活中不但要学会运用所学的知识来解决实际问题而且要不断的通过这次课程设计让我了解了89C51在实际生活中的一些应用单片机步进电机电路的设计及工作原理。让我在学习单片机理论知识同时让我明白了要在实际生活中学会应用提高了我的动手能力要手脑并用。本次设计是通过使用PROTEL软件来进行设计让我熟悉的掌握了此软件的基本操作。本来有些遗忘的知识点通过查参考资料让我对旧的知识有所巩固同时也明白了原来疑惑的地方。让我的专业知识有一定的提高且提高我的综合能力以便在今后社会生活中不但要学会运用所学的知识来解决实际问题而且要不断的

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢