找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3524|回复: 0
打印 上一主题 下一主题
收起左侧

C51单片机控制数码显示管仿真与程序源码

[复制链接]
跳转到指定楼层
楼主
一、       实验原理及实验线路

74LS47是七段译码器。它是将BCD码翻译成七段驱动码,驱动数码管显示数据,数码管为共阴普亮数码管,型号为LTS547RBCD码由P0口的低四位输出,P2口作为位选口,P2.0对应左(右)边哪块是显示块,P2.3对应右(左)边的哪块是末显示块。工作时,先送BCD码,再选位,使选中的数码管点亮,往复循环。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


二、       实验内容

1.       开机上电后,左循环显示“1”,“2”,“3”,“4”。

2.       按K1键,右循环显示“1”,“2”,“3”,“4”。

3.       按K2键,要求无闪烁显示,先四个显示块显示12341秒后四个显示块同时显示5678

仿真图、C语言源程序见图片和附件

单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char//宏 定义
  3. #define uint unsigned int
  4. sbit K1=P3^2;
  5. sbit K2=P3^3;
  6. uchar flag=1;
  7. uchar bint=0;

  8. void delay1(uint z)//延时约 1ms
  9. {
  10. while(z--);
  11. }

  12. void delay()//延时约 1ms
  13. {
  14.   uint m;
  15.   for(m=0;m<0xFFFF;m++);
  16. }
  17. uchar table[]={0x01,0x02,0x03,0x04};
  18. uchar table1[]={0x05,0x06,0x07,0x08};
  19. uchar table2[]={0x01,0x02,0x04,0x08};
  20. uchar table3[]={0x08,0x04,0x02,0x01};


  21. void disp1()
  22. {
  23.     uchar i;
  24.    for(i=0;i<4;i++)
  25.     {
  26.     P0=table[i];
  27.     P2=table2[i];
  28.     if(bint==1)
  29.            break;
  30.          delay();
  31.         }
  32.         bint=0;
  33. }

  34. void disp2()
  35. {
  36.     uchar j;
  37.      for(j=0;j<4;j++)
  38.     {
  39.                 P0=table[j];
  40.         P2=table3[j];
  41.         delay();
  42.      }
  43.     flag=1;
  44. }

  45. void disp3()
  46. {
  47.       uchar k,m;
  48.           m=0x0035;
  49.           while(m)
  50.           {
  51.               for(k=0;k<4;k++)
  52.           {
  53.             P0=table[k];
  54.             P2=table2[k];
  55.             delay1(1000);
  56.                     P2=0X00;
  57.           }
  58.                   m--;
  59.           }                                
  60.           m=0x0080;
  61.       while(m)
  62.           {
  63.              for(k=0;k<4;k++)
  64.          {
  65.            P0=table1[k];
  66.            P2=table2[k];
  67.                    delay1(1000);
  68.                    P2=0X00;
  69.          }
  70.                  m--;
  71.           }         
  72.       flag=1;
  73. }



  74. void Mainloop()
  75. {
  76.     switch(flag)
  77.         {
  78.             case 1:disp1();
  79.                        break;
  80.                 case 2:disp2();
  81.                        break;
  82.                 case 3:disp3();
  83.                        break;           
  84.         }
  85. }
  86. void int0() interrupt 0
  87. {
  88.      flag=2;
  89.          bint=1;
  90. }
  91. void int1() interrupt 2
  92. {
  93.          flag=3;
  94.          bint=1;
  95. }

  96. void main()
  97. {
  98. EX0=1;
  99. IT0=1;
  100. EX1=1;
  101. IT1=1;
  102. EA=1;
  103.    while(1)
  104.    {
  105.              Mainloop();
  106.    }
  107. }

复制代码


所有资料51hei提供下载:
Desktop.rar (16.3 KB, 下载次数: 9)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表