找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4756|回复: 5
收起左侧

利用单片机中断-花样霓虹灯设计

[复制链接]
ID:358665 发表于 2018-8-28 22:04 | 显示全部楼层 |阅读模式
这是我自己设计的一个花样霓虹灯设计,及8个led先一次亮灭,然后奇数和偶数灯闪烁,闪烁三次厚,8个灯又开始一次亮,依次循环。
用用单片机实物和proteus都试过,效果很好。

电路原理图如下:

proteus电路图

proteus电路图


单片机源程序:
  1. //霓虹灯实验: P0口接了8个灯,晶振为11.0592MHZ;
  2. //从D1到D8开始8个灯循环点亮一次,即D1点亮1s熄灭,依次是D8;
  3. //然后是间隔闪烁3次,即D1,3,5,7点亮1S熄灭,紧接着2,4,6,8点亮1s熄灭,
  4. //这为一次,然后循环3次。

  5. /*********主程序*******/
  6. #include <reg52.h>
  7. #define uchar unsigned char
  8. uchar i20,i8,i6;  //定义三个正char:-128~127,unsigned char:0~127)
  9. uchar mod1,mod2        ; //定义两种模式,没中模式是8位,所以前面用char
  10. bit F;                                          //循环标志位,用bit定义是为了节省空间
  11. void main ()
  12. {
  13. i20=20; //20x50ms=1s
  14. i8=8;        //模式1有8次
  15. i6=6;        //模式2有6次
  16. mod1=0x01;        //0000 0001,模式1初始状态D1灭,其他亮
  17. mod2=0xAA;        //1010 1010,模式2初始状态D1,3,5,7亮,其他灭
  18. F=0;//设置循环点亮阶段标志;=0为循环点亮阶段
  19. TMOD=0x10;//定时,T1,方式1

  20. TH1=0x4C;                    //11.0592*1000000/12*50*0.001=46080 ,   
  21.               //(65536-46080)/256=76...0 商是76(ox4C),余数是0(ox00)
  22. TL1=0x00;
  23. IE=0x88; //打开总中断与T1中断
  24. TR1=1;//打开T1控制位开关,在TCON寄存器中
  25. P1=0xF0;  //针对这个实验板子,led灯一端连着锁存器和数码管,
  26.            //为了防止锁存器数码管干扰,首先就要先关闭位选 ,
  27.                    //因为使能在硬件始终是开着的,所以关闭位选
  28. while(1);
  29. }

  30. /*****T1中断程序*********/
  31. void time0() interrupt 3 using 1
  32. {
  33.   
  34.   TH1=0x4C;                   //50ms到,中断跳出,此时继续装初值,直到20次,累计到1s
  35.   TL1=0x00;
  36.   i20--;
  37.   if(i20==0)
  38.    {
  39.           i20=20;
  40.           if(F==0)
  41.              {
  42.               P0=~mod1;
  43.            mod1=mod1<<1;
  44.               i8--        ;
  45.              if(i8==0)
  46.               {
  47.                       i8=8;
  48.                    F=1;
  49.                    mod1=0x01;
  50.               }
  51.             }
  52.   
  53.             else
  54.           {
  55.                   P0=mod2;
  56.                 mod2=~mod2;
  57.                 i6--;
  58.                 if(i6==0)
  59.                  {
  60.                   i6=6;
  61.                   F=0;
  62.                  }
  63.           }  
  64.    }
  65. }
复制代码


评分

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

查看全部评分

回复

使用道具 举报

ID:358665 发表于 2018-8-29 10:00 | 显示全部楼层
谢谢,麻烦群主了。初学单片机,我会上传一些自己的心得,但是觉得太简单了,不知道对大家有没有用,刚接触论坛,有什么不对的地方多多包涵,谢谢。
回复

使用道具 举报

ID:386381 发表于 2018-8-29 18:01 来自手机 | 显示全部楼层
谢谢楼主分享这个资料非常珍贵
回复

使用道具 举报

ID:641671 发表于 2019-11-15 19:24 来自手机 | 显示全部楼层
可以问下原理图就这样吗
回复

使用道具 举报

ID:509877 发表于 2019-12-6 17:38 | 显示全部楼层
这个是延时,按键只有当前的模式跑完了才能进入下一个模式
回复

使用道具 举报

ID:752128 发表于 2020-5-15 12:32 | 显示全部楼层
老哥有没有原理图和ad图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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