加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 教程文章 > 嵌入式开发

Proteus仿真51单片机数码管动态显示

时间:2014-04-15 15:03:20  来源:  作者:
proteus仿真文件及keil C51编译的C51程序.rar
文件类型: .rar 68386b38b6bbf9dc79b560bff8283258.rar (64.32 KB)
单片机学习关键在于多动手进行实验,光看书是不行的。但是没有开发板的时候怎么办?可以使用Proteus进行仿真,即省钱有高校。但是也要注意Proteus不能完全代替实物,条件允许时还是要购买实物做实验的。

数码管动态显示实验一

该实验采用proteus 7.5 sp3进行的仿真,仿真原理图如下图所示,其中采用的元器件有AT89C51单片机,74HC573锁存器,共阳极数码管。单片机的P0口用与输出数码管要显示的段码,P2口用于选通要点亮的数码管。数码管通过动态扫描显示HELLOHELLO循环左移,左移一位LED灯亮下。

 

实验程序如下:

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

程序名;  数码管动态显示实验

  能: 数码管通过动态扫描显示HELLOHELLO循环左移,左移一位LED

*          亮下。

编程者: ZPZ

编程时间:2009/8/4  

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

#include<reg52.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char          

 

sbit 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--);

}

 

数码管动态显示实验二

该实验如同实验一,不同之处在于,该实验是将预先设定的一个百位数,通过动态扫描使其在数码管的后三位显示。仿真原理图如下图所示:

 

 

实验程序如下:

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

程序名;  数码管动态显示实验二

  能: 数码管通过动态扫描显示设定的百位数.

编程者: ZPZ

编程时间:2009/8/4

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

#include<reg52.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char          

 

uint  temp;

uchar bai,shi,ge;

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

 

void  display(uint bai,uint shi,uint ge);

void  delay(uint z);

void main()

{

     temp=355;

     bai=temp/100;

    shi=temp%100/10;

    ge=temp%10;

 

    while(1)

    {

         display(bai,shi,ge);

    }  

} 

 

void  display(uint bai,uint shi,uint ge)

{

 

         P2=0x20;

         P0=table[bai];

        delay(2);

 

         P2=0x10;

         P0=table[shi];

         delay(2);   

 

         P2=0x08;

         P0=table[ge];

        delay(2);

}

void delay(uint z)

{

  uint i,j;

  for(i=z;i>0;i--)

         for(j=110;j>0;j--);

}

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
在CentOS下搭建Android 开发环境
在CentOS下搭建Androi
轻松搭建属于自己的Ubuntu发行版
轻松搭建属于自己的Ub
利用SUSE Studio 打造自己的个性化Linux发行版
利用SUSE Studio 打造
那些采用PHP技术的IT大企业
那些采用PHP技术的IT大
相关文章
    无相关信息
栏目更新
栏目热门