标题: 利用单片机中断-花样霓虹灯设计 [打印本页]

作者: 13170256672    时间: 2018-8-28 22:04
标题: 利用单片机中断-花样霓虹灯设计
这是我自己设计的一个花样霓虹灯设计,及8个led先一次亮灭,然后奇数和偶数灯闪烁,闪烁三次厚,8个灯又开始一次亮,依次循环。
用用单片机实物和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. }
复制代码



作者: 13170256672    时间: 2018-8-29 10:00
谢谢,麻烦群主了。初学单片机,我会上传一些自己的心得,但是觉得太简单了,不知道对大家有没有用,刚接触论坛,有什么不对的地方多多包涵,谢谢。
作者: 文凤轩    时间: 2018-8-29 18:01
谢谢楼主分享这个资料非常珍贵
作者: disalike    时间: 2019-11-15 19:24
可以问下原理图就这样吗
作者: mengxin@    时间: 2019-12-6 17:38
这个是延时,按键只有当前的模式跑完了才能进入下一个模式
作者: 姜思湃    时间: 2020-5-15 12:32
老哥有没有原理图和ad图




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1