找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4258|回复: 3
收起左侧

74HC273拓展单片机IO口40个LED灯显示Proteus仿真程序

[复制链接]
ID:641580 发表于 2019-12-16 12:59 | 显示全部楼层 |阅读模式
利用51单片机设计多于40个LED的流水灯,其中LED静态显示。
本设计是以51系单片机STC89C52作为控制中心的40个LED流水灯显示,硬件方面利用锁存器74HC273、40个LED流水灯等组件,实现带有点阵图片的LED流水灯显示,通过定时器控制LED灯的刷新频率。利用数电知识进行LED显示扩展I/O。软件程序使用Keil进行编程,STC—ISP进行写入。程序中使用定时器0进行中断,并在中断内完成点阵动态刷新,实现40LED的静态显示的目的。此单片机LED流水灯有着价格适中、电路设计简单的特点。
51hei.png
74HC273带锁存功能,这样D输入的信号可以锁住保持在输出端,保持LED的驱动是固定的电平状态。脉冲输出信号也可以驱动LED,只是亮度与脉冲的脉宽有关。一般74HC273 的输入端接在数据总线上,74HC273可以起到隔离的作用。动LED一般需要5-7mA的电流,负载比较大,如果接到其他门电路的输出上,会影响这个输出驱动其他门电路输入的能力。
51hei.png
在主程序中,先使能全局中断,然后使能74HC27来然后使能74HC273来控制LED点阵。配置定时器0工作在模式1并设置定时初值,清零TF位,使能定时器0并启动定时器0。在while(1)循环中更新锁存器数据,进入中断后定时250ms。主程序流程图如图5所示:  

51hei.png

中断子程序中,定时器T 0中断250次,即定时250ms,flagls 赋值为1。定时器中断流程图如图6所示:
51hei.png

单片机源程序如下:
  1. #include<reg52.h>

  2. unsigned char code ledchar[]={                //字模表
  3. 0x00,0x00,0x00,0x00, 0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF, 0x00,0x00,0x00,0x00, 0x00,0x00       


  4. };
  5. unsigned char flagls =0;   //250ms定时标志         
  6. unsigned char j=1;                  //判断i是否变化
  7. unsigned char cnt =0;          //记录T0中断次数
  8. unsigned char i=0;                  //数组刷新索引

  9. void main()
  10. {
  11.    
  12.    EA = 1; //使能总中断
  13.    TMOD = 0X01;        //T0  为模式1
  14.    TH0 = 0XFC;//为T0赋初值0xfc67,定时1 ms
  15.    TL0 = 0X67;
  16.    ET0 = 1;//使能T0中断
  17.    TR0 = 1;        //启动T0

  18.    while(1)
  19.    {
  20.       if(flagls == 1)         //判断250ms定时标志
  21.       {         
  22.               flagls = 0;         //250ms定时标志清零
  23.                   i++;                         //图片索引自加1
  24.           }
  25.           if(i>17) i=0;         //图片索引达到17后归零
  26.          
  27.            if(i !=j)        //判断i是否变化
  28.            {
  29.             j=i;            //更新备份为当前值,以备进行下次比较
  30.             P0 = 0X00;P1 = 0X00;P1 = 0X01;                //消隐处理
  31.                 P0 = ledchar[i];P1 = 0X00;P1 = 0X01;        //计数值显示到LED上
  32.                   P0 = 0X00;P1 = 0X00;P1 = 0X02;
  33.                 P0 = ledchar[i+1];P1 = 0X00;P1 = 0X02;
  34.                  P0 = 0X00;P1 = 0X00;P1 = 0X04;
  35.                 P0 = ledchar[i+2];P1 = 0X00;P1 = 0X04;
  36.                   P0 = 0X00;P1 = 0X00;P1 = 0X08;
  37.                 P0 = ledchar[i+3];P1 = 0X00;P1 = 0X08;
  38.                   P0 = 0X00;P1 = 0X00;P1 = 0X10;
  39.                 P0 = ledchar[i+4];P1 = 0X00;P1 = 0X10;
  40.                   }
  41.    }
  42.    
  43. }

  44. //定时器0的中断服务函数
  45. void interrupttimer0() interrupt 1
  46. {
  47.    TH0 = 0XFC;                   // 重新加载初值
  48.    TL0 = 0X67;
  49.    cnt++;                          // 中断次数计数值加1
  50.    if(cnt>=250)                 //        中断250次即250ms
  51.    {
  52.       cnt = 0;                 //        清零计数值以重新开始下一250ms计时
  53.           flagls = 1;         //        设置250ms定时标志为1
  54.    }
  55.      
  56. }
复制代码
51hei.png
所有资料51hei提供下载:
拓展IO口40个LED显示.zip (1.5 MB, 下载次数: 56)

评分

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

查看全部评分

回复

使用道具 举报

ID:562148 发表于 2020-4-8 14:42 | 显示全部楼层
如何可以控制更多的led的灯呢
回复

使用道具 举报

ID:834782 发表于 2020-10-26 17:14 | 显示全部楼层
麻烦问一下那个74HC273的CLK引脚接C51的哪个引脚?那个还有麻烦问一下你这个上面的代码是全部代码吗?
回复

使用道具 举报

ID:328014 发表于 2020-10-26 17:21 | 显示全部楼层
Mty1111 发表于 2020-10-26 17:14
麻烦问一下那个74HC273的CLK引脚接C51的哪个引脚?那个还有麻烦问一下你这个上面的代码是全部代码吗?

从我从上面下载的原理图来看是接的p1口
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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