找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15W104单片机领航灯制作 附程序

[复制链接]
跳转到指定楼层
楼主
(原创设计)使用STC15W104单片机实现领航灯效果,已修改到v1.5版本。
1、效果;行车时正常运行,LED隔一秒闪2次,当踩下刹车时LED一秒闪5次(闪烁频率逐渐加快)。
2、适用领域;汽车、电动车、摩托车等!3、注意!注意!注意!本电路设计仅限于电子DIY研究讨论。

电路原理图如下:



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

  3. sbit LED = P3^5; // LED连接在P3.5
  4. sbit KEY1 = P3^3; // 外部中断0按键连接在P3.3
  5. sbit KEY2 = P3^3; // 外部中断1按键连接在P3.5

  6. //*********延时函数***********//
  7. void delay(unsigned int a )
  8. {
  9.     unsigned int i;
  10.     while (--a !=0)
  11.     {
  12.      for (i=0; i<=600; i++);
  13.     }
  14. }
  15. //*********主程序***********//
  16. void main()
  17. {
  18.     IT0 = 0; // 设置外部中断0触发方式为下降沿触发
  19.     EX0 = 1; // 使能外部中断0
  20.     IT1 = 0; // 设置外部中断1触发方式为下降沿触发
  21.     EX1 = 1; // 使能外部中断1

  22.     EA = 1; // 使能总中断

  23.     while(1)
  24.     {
  25.         if(KEY1 == 0) // 当按键1按下时
  26.         {
  27.             delay(10); // 去抖
  28.             if(KEY1 == 0)
  29.             {
  30.                         LED = 1; // LED亮
  31.                         delay(60);
  32.                         LED = 0; // LED灭
  33.                         delay(60);
  34.                         LED = 1; // LED亮
  35.                         delay(40);
  36.                         LED = 0; // LED灭
  37.                         delay(40);
  38.                         LED = 1; // LED亮
  39.                         delay(30);
  40.                         LED = 0; // LED灭
  41.                         delay(30);
  42.                         LED = 1; // LED亮
  43.                         delay(20);
  44.                         LED = 0; // LED灭
  45.                         delay(520);        //延时
  46.             }
  47.                         else
  48.                         {
  49.                          delay(10);        //延时
  50.                          return; //返回主程序
  51.                         }
  52.         }

  53.         if(KEY2 == 1) // 当按键2按下时
  54.         {
  55.             delay(10); // 去抖
  56.             if(KEY2 == 1)
  57.             {
  58.                         LED = 1; // LED亮
  59.                         delay(80);
  60.                         LED = 0; // LED灭
  61.                         delay(160);
  62.                         LED = 1; // LED亮
  63.                         delay(80);
  64.                         LED = 0; // LED灭
  65.                         delay(1600); //延时
  66.             }
  67.                         else
  68.                         {
  69.                         delay(10); //延时
  70.                         return; //返回主程序
  71.                         }
  72.         }
  73.     }
  74. }

  75. // 外部中断0服务程序
  76. void exint0_isr() interrupt 0
  77. {
  78.     //LED = 0; // LED熄灭
  79. }

  80. // 外部中断1服务程序
  81. void exint1_isr() interrupt 2
  82. {
  83.     //LED = 1; // LED常亮
  84.         while(1)
  85.     {
  86.         if(KEY1 == 0)
  87.                 {
  88.                 LED = 1; // LED亮
  89.                 delay(60);
  90.                 LED = 0; // LED灭
  91.                 delay(60);
  92.                 LED = 1; // LED亮
  93.                 delay(40);
  94.                 LED = 0; // LED灭
  95.                 delay(40);
  96.                 LED = 1; // LED亮
  97.                 delay(30);
  98.                 LED = 0; // LED灭
  99.                 delay(30);
  100.                 LED = 1; // LED亮
  101.                 delay(20);
  102.                 LED = 0; // LED灭
  103.                 delay(520);        //延时
  104.         }
  105.                 else
  106.                 {
  107.                 delay(10); //延时
  108.                 return; //返回主程序
  109.                 }      
  110.         }
  111. }
复制代码

视频演示;https://www.bilibili.com/video/BV1Ma4y1w7YG/?spm_id_from=333.999.0.0&vd_source=7c41c74f2ce7d06eff98e5d460711c5e

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:161164 发表于 2023-8-3 12:00 | 只看该作者
???
在中断里用while(1)而且重复了主函数的代码?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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