找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机节日彩灯控制器的设计Proteus仿真+代码

  [复制链接]
跳转到指定楼层
楼主

节日彩灯控制器的设计
一、设计要求
以单片机为核心,设计一个节日彩灯控制器:
  • K1开始,按此键则灯开始流动(由上而下)。
  • K2停止,按此键则停止流动,所有灯为暗。
  • K3下,按此键则灯由下向上流动。
  • K4交替闪烁,按此键则奇数序号灯与偶数序号灯交替闪烁。
二、方案论证:
通过查阅大量相关技术资料,并结合自己的实际知识,我提出课两种技术方案来实现该公能。下面我将首先对这两种方案的组成框图和实现原理分别进行说明,并分析比较它们的特点,然后阐述我最终选择方案的原因。
1 方案比较
彩灯控制器课分为两种方案实现。一种是利用数字逻辑电路装置控制,另一种是采用单片机控制。
1.1 方案一
  根据任务要求介绍的彩灯控制电路的基本组成,可以确定彩灯控制器应由振荡器、计数/时序分配电路、移位寄存器和彩灯显示五部分组成。其框图如图所示。
1.2 方案二
本方案主要是通过对基于单片机的多控制、多闪烁方式的LED彩灯循环系统的设计,来达到本设计的要求、其硬件构成框图如图所示,以单片机为核心控制,由单片机最小系统(时钟电路、复位电路、电源)、按键控制电路、LED发光二极管和5V直流电源组成。
2 方案论证
如果采用方案一,利用数字逻辑电路装置控制,其电路不是很复杂,制作相对较容易,成本也相对较低,但可调性差,亮灯模式少而且样式单调,达不到设计任务要求或实现困难。而采用方案二,以单片机控制其优点是电路集成度高,工作原理简单,清晰明了,自定义编程,控制的图案花样多,移植性好等。
3 方案选择
综上,显然方案二各方面优于方案一,以及为了体现专业优势,本次设计采用方案二。
三、理论设计:
1、主程序设计
程序启动时跳转到键盘判断模块程序中,此程序里面包含K1—K4的按键情况判断,循环检测直到有按键按下的时候,程序转去相对应的按键的彩灯显示的模块。
2、键盘扫描程序
四、电路仿真和仿真结果分析
1 仿真电路
1.1 时钟电路和复位电路
1.2 按键控制电路
1.3 LED显示电路
2 仿真结果分析:
此次系统设计结果较好,经Proteus软件仿真系统的调试,可检测出仿真电路正常;对应按键按下,彩灯出现不同花型,实现了多控制、多闪烁的LED彩灯循环;经以上仿真测试证实,本设计能实现设计系统要求的预期功能。
五、心得体会
本次作业设计以C51单片机为核心,控制电路、LED显示电路、以及单片机最小系统等模块组成的核心主控制电路,实现了由单片机对LED灯的控制。
通过对软件的仿真调试,对彩灯控制器的运行成果满意,实现了题目的要求,同时此设计具有电路简单、易操作、成本小、体积小、耗能低等优点。
但是在设计中也出现了一些问题,在程序编写过程中发现自己有的知识模块模糊,导致实验速度减缓,通过c程序的编写实验就发现自己很多地方的不足,在查阅资料和同学的帮助下才解决了困难,这都是以后要多学习的地方。

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

  2. #define uchar unsigned char          //宏定义
  3. #define uint unsigned int

  4. sbit k1=P1^2;                  //位定义
  5. sbit k2=P1^3;
  6. sbit k3=P1^4;
  7. sbit k4=P1^5;

  8. uchar a=0;                //定义所需变量
  9. uchar b;

  10. uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};          //从上到下流水数组
  11. uchar code table2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};          //从下到上流水数组

  12. void delay_ms(uint xms)                                //延时函数
  13. {
  14.         uint i,j;
  15.         for(i=xms;i>0;i--)
  16.                 for(j=110;j>0;j--);
  17. }

  18. void key_scan(uchar b)                                 //按键扫描
  19. {
  20.                 if(b==1)                                                        //若K1按下
  21.                 {
  22.                         while(k2==1&&k3==1&&k4==1)
  23.                         {
  24.                                 for(a=0;a<8;a++)                   //执行从上到下流水操作
  25.                                 {
  26.                                         P0=table1[a];
  27.                                         delay_ms(100);
  28.                                 }
  29.                                 a=0;
  30.                     }               
  31.                 }

  32.                 if(b==2)                                                        //若K2按下
  33.                 {
  34.                         while(k1==1&&k3==1&&k4==1)
  35.                         {                                                                //P0全部输出高电平,关闭LED
  36.                                 P0=0xff;
  37.                         }
  38.                 }

  39.                 if(b==3)                                                        //若K3按下
  40.                 {
  41.                         while(k1==1&&k2==1&&k4==1)
  42.                         {
  43.                                 for(a=0;a<8;a++)                        //执行从下到上流水操作
  44.                                 {
  45.                                         P0=table2[a];
  46.                                         delay_ms(100);
  47.                                 }
  48.                                 a=0;
  49.                         }
  50.                 }

  51.                 if(b==4)                                                        //若K4按下
  52.                 {
  53.                         while(k1==1&&k2==1&&k3==1)
  54.                         {
  55.                                 P0=0xaa;                                        //奇偶位分别点亮
  56.                                 delay_ms(100);
  57.                                 P0=0x55;
  58.                                 delay_ms(100);
  59.                         }
  60.                 }       
  61. }

  62. void main(void)                                                                //主函数
  63. {

  64.         TMOD=0X01;                                                                //定时器中断初始化
  65.         TH0=(65536-1000)/256;
  66.         TL0=(65536-1000)%256;
  67.         EA=1;
  68.         ET0=1;
  69.         TR0=1;

  70.         while(1);
  71.        
  72. }

  73. void T0_time() interrupt 1                                        //中断服务函数
  74. {
  75.         TH0=(65536-1000)/256;
  76.         TL0=(65536-1000)%256;
  77.         if(k1==0)b=1;
  78.         if(k2==0)b=2;
  79.         if(k3==0)b=3;
  80.         if(k4==0)b=4;
  81.         key_scan(b);
  82. }
复制代码

所有资料51hei提供下载:
2016111301节日彩灯控制器的设计.zip (138.16 KB, 下载次数: 392)



评分

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

查看全部评分

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

使用道具 举报

沙发
ID:450877 发表于 2018-12-20 17:05 | 只看该作者
好的东西,谢谢分享
回复

使用道具 举报

板凳
ID:430813 发表于 2018-12-20 18:43 | 只看该作者
是好东西,值得收获。谢谢大佬
回复

使用道具 举报

地板
ID:457719 发表于 2018-12-28 22:59 | 只看该作者
感谢大佬!!!!!!
回复

使用道具 举报

5#
ID:496454 发表于 2019-3-22 22:46 | 只看该作者
好的东西,谢谢分享
回复

使用道具 举报

6#
ID:575614 发表于 2019-7-1 14:08 | 只看该作者
程序出错
回复

使用道具 举报

7#
ID:617887 发表于 2019-9-29 10:36 | 只看该作者
好的东西,谢谢分享
回复

使用道具 举报

8#
ID:620886 发表于 2019-10-9 09:15 | 只看该作者
好东西,谢谢分享
回复

使用道具 举报

9#
ID:3742 发表于 2019-10-12 10:34 来自手机 | 只看该作者
程序出错了兄弟
回复

使用道具 举报

10#
ID:643271 发表于 2019-11-16 18:08 | 只看该作者
好东西,谢谢分享
回复

使用道具 举报

11#
ID:714223 发表于 2020-3-23 21:29 | 只看该作者
请问楼主,为什么要用到定时器的中断呢?我是个新手,只做过简单的流水灯,能不能给我简单讲一讲原理啊??十分感谢
回复

使用道具 举报

12#
ID:737634 发表于 2020-4-25 12:51 | 只看该作者
有开关控制的吗
回复

使用道具 举报

13#
ID:766523 发表于 2020-6-1 14:39 | 只看该作者
楼主,请问为什么我复制你的keil程序后,在proteus里仿真,点开关是完全没有反应的
回复

使用道具 举报

14#
ID:774379 发表于 2020-6-9 20:36 | 只看该作者
新爷v 发表于 2020-6-1 14:39
楼主,请问为什么我复制你的keil程序后,在proteus里仿真,点开关是完全没有反应的

代码打错了应该是
回复

使用道具 举报

15#
ID:782819 发表于 2020-6-18 09:50 | 只看该作者
复制的代码 但是proteus上按开关led没有反应 555-
回复

使用道具 举报

16#
ID:782819 发表于 2020-6-18 09:58 | 只看该作者
感谢大佬!  刚才图画错了!
回复

使用道具 举报

17#
ID:785615 发表于 2020-6-21 13:59 | 只看该作者
这学期的单片机就做过这个,但是感觉这个更好一点
回复

使用道具 举报

18#
ID:823470 发表于 2020-9-27 12:41 来自手机 | 只看该作者
现在改好了吗
回复

使用道具 举报

19#
ID:448260 发表于 2020-10-25 09:57 | 只看该作者
感谢,帮助很大
回复

使用道具 举报

20#
ID:857044 发表于 2020-12-8 20:14 | 只看该作者
他这个为什么是reg52.h
回复

使用道具 举报

21#
ID:939883 发表于 2021-6-18 11:58 | 只看该作者
真的是好,感谢
回复

使用道具 举报

22#
ID:941161 发表于 2021-6-21 22:59 | 只看该作者
很详细,感谢大佬的资料分享,
回复

使用道具 举报

23#
ID:1086224 发表于 2023-6-27 19:02 | 只看该作者
是好东西,值得收获。谢谢大佬
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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