找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 496|回复: 0
收起左侧

51单片机用3个开关模拟汽车车灯源程序 左右转向灯 刹车灯

[复制链接]
ID:1162951 发表于 2025-11-12 23:06 | 显示全部楼层 |阅读模式
用3个开关模拟汽车的左转向灯、右转向灯、刹车灯。
左转:实现P3.0口作输入,控制P2.0口的一个LED灯同时输出内容随开关SW2接通P3.0口,则LED灯亮灭闪烁,不接通则LED灯灭。
右转:实现P3.1口作输入,控制P2.1口的一个LED灯同时输出内容随开关SW2接通P3.1口,则LED灯亮灭闪烁,不接通则LED灯灭。
刹车:实现P3.2口作输入,控制P2.0、P2.1口的2个LED灯同时输出内容随刹车开关接通P3.2口,则2个LED灯同时亮灭闪烁,不接通则LED灯灭。

单片机源程序如下:
  1. #include <REG52.H>

  2. typedef unsigned char uchar;

  3. sbit keyL=P3^0;
  4. sbit keyR=P3^1;
  5. sbit keyS=P3^2;

  6. sbit keyled=P3^3;

  7. sbit ledL=P2^0;
  8. sbit ledR=P2^1;

  9. sbit led1=P2^2;
  10. sbit led2=P2^3;
  11. sbit led3=P2^4;

  12. void delayms(unsigned int del)
  13. {
  14.         unsigned int i,j;//0--65535
  15.         for(j=0;j<del;j++)//
  16.         {
  17.           for(i=0;i<124;i++);//1ms        
  18.         }
  19. }
  20. void main(void)
  21. {
  22. uchar flag=0;
  23. while(1)
  24. {         
  25.          if( keyL==0 && keyS==1)
  26.          {
  27.                  ledL=~ledL;
  28.                  delayms(200);
  29.          }
  30.          else if( keyL==1 && keyS==1)
  31.          {
  32.                 ledL=1;
  33.          }
  34.          
  35.          if( keyR==0 && keyS==1)
  36.          {
  37.                  ledR=~ledR;
  38.                  delayms(200);
  39.          }
  40.          else if( keyR==1 && keyS==1)
  41.          {
  42.                 ledR=1;
  43.          }
  44.          
  45.          if( keyS==0 && keyL==1 && keyR==1 )
  46.          {
  47.                  ledR=~ledR;
  48.                  ledL=~ledL;
  49.                  delayms(200);
  50.          }
  51.          else if( keyS==1 && keyL==1 && keyR==1 )
  52.          {
  53.                 ledR=1;
  54.                 ledL=1;
  55.          }
  56.          
  57. ////////////////////////////////////////////////
  58.          
  59.                 if(keyled==0)
  60.                 {
  61.                         delayms(50);
  62.                         if(keyled==0)
  63.                         {
  64.                                 flag=flag+1;
  65.                                 if(flag>=4)flag=0;
  66.                         }
  67.                         while(keyled==0);
  68.                 }
  69.                  switch (flag)
  70.                         {
  71.                                 case 0:
  72.                                         led1=1;led2=1;led3=1;
  73.                                         break;
  74.                                 case 1:
  75.                                         led1=0;led2=1;led3=1;
  76.                                         break;
  77.                                 case 2:
  78.                                         led1=0;led2=0;led3=1;
  79.                                         break;
  80.                                 case 3:
  81.                                         led1=0;led2=0;led3=0;
  82.                                         break;
  83.                                 default:
  84.                                         break;
  85.                         }
  86.                   
  87. }
  88. }
复制代码

可以考虑多种情况的组合:
如有左转+刹车的操作组合,LED灯如何亮,可左灯闪烁,右灯常亮。
如有右转+刹车的操作组合,LED灯如何亮。可右灯闪烁,左灯常亮。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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