找回密码
 注册
关于网站域名变更的通知
查看: 772|回复: 2
打印 上一主题 下一主题

单片机汽车车灯控制器程序求指导

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-5-11 10:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己去实现,谢谢大家: W* S! W5 b& {% c5 d- I
4 Q, w! q  _* e$ M( K8 Z& n
这个是程序
$ M: x9 P7 q9 h' ~& f, @# m) z/ X这是电路图% b$ p9 C- R1 k3 v7 k
要求能够实现:0 W) `" D+ K5 {; ~" c3 C
按下刹车键K1,6个灯管同时点亮。5 d5 l' C2 {6 [6 z7 @& w' u
按下左转键K2,D3向D1灯管延时一秒依次点亮。
9 B0 n5 l9 R, f9 v% `4 k: P0 S按下右转键K3,D4向D6灯管延时一秒依次点亮。- x" Q' k# g  V( B4 G
按下停车键K4,6个灯管同时闪烁点亮。
. L* r; |' K) J% n. c4 G  t 6 ?* v' O2 S4 }) o, @" V2 V
" C5 r2 s+ w4 ^
# m! r2 q7 ^+ }/ X  G( y% R: y
单片机源程序如下:
2 v, e7 b) B$ A6 I7 q$ O#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
///////按键接口////////////////
sbit k1=P1^0;                //刹车信号
sbit kz=P1^1;                 //左转信号
sbit ky=P1^2;                 //右转信号
sbit k2=P1^3;                 //停车信号
///////左边led接口///////////////////////
sbit z3=P2^5;                   //左1
sbit z2=P2^4;                   //左2
sbit z1=P2^3;                    //左3
///////右边led接口///////////////////////
sbit y1=P2^2;                    //右1
sbit y2=P2^1;                    //有2
sbit y3=P2^0;                    //右3
bit flag=0;                      //开始循环标志位
uchar num,miao;
void delay(uint ms)              //ms级延时函数
{
        uchar j;
        for(ms;ms>0;ms--)
                for(j=110;j>0;j--);
}
void kong_zhi()             //信号控制函数
{
        if(k1==0)             //刹车信号
        {
                delay(10);         //消抖
                if(k1==0)
                {
                        z1=z2=z3=y1=y2=y3=0;       //刹车所有6只尾灯同时亮
                }
                while(!k1);                      //刹车松开检测
                z1=z2=z3=y1=y2=y3=1;          //刹车松开所有6只尾灯同时灭
        }
        if(k2==0)                         //停止信号
        {
                delay(10);                    //消抖
                TR0=1;                      //开启定时器
                num=0;
                while(!k2)                   //停止松开检测
                {
                                              //500ms的亮灭信号既是1HZ
                        if(num<10)z1=z2=z3=y1=y2=y3=0; //停止所有6只尾灯同时亮
                        if(num>10)z1=z2=z3=y1=y2=y3=1; //停止所有6只尾灯同时灭
                }
                z1=z2=z3=y1=y2=y3=1;           //停止松开所有6只尾灯同时灭
                TR0=0;             //关闭定时器
        }
        if(kz==0)            //左转
        {
                delay(10);
                TR0=1;         //开启定时器
                num=0;
                miao=0;
                while(!kz)
                {
                        if(ky==0)
                        {
                                z1=z2=z3=1;
                                while(!ky)
                                {
                                        if(miao==0)y1=z1=0;                 //1s
                                        if(miao==1)y1=z1=y2=z2=0;         //1s
                                        if(miao==2)y1=z1=y2=z2=y3=z3=0;  //1s
                                        if(miao==3)y1=z1=y2=z2=y3=z3=1;   //1s
                                }        
                        }
                        if(miao==0)z1=0;           //1s
                        if(miao==1)z1=z2=0;       //1s
                        if(miao==2)z1=z2=z3=0;   //1s
                        if(miao==3)z1=z2=z3=1;   //1s
                }
                z1=z2=z3=1;              //停止松开所有尾灯同时灭
                TR0=0;                 //关闭定时器
        }
        if(ky==0)                 //右转
        {
                delay(10);
                TR0=1;             //开启定时器
                num=0;
                miao=0;
                while(!ky)
                {
                        if(kz==0)
                        {
                                y1=y2=y3=1;
                                while(!ky)
                                {
                                        if(miao==0)y1=z1=0;//1s
                                        if(miao==1)y1=z1=y2=z2=0;//1s
                                        if(miao==2)y1=z1=y2=z2=y3=z3=0;//1s
                                        if(miao==3)y1=z1=y2=z2=y3=z3=1;//1s
                                }        
                        }
                        if(miao==0)y1=0;//1s
                        if(miao==1)y1=y2=0;//1s
                        if(miao==2)y1=y2=y3=0;//1s
                        if(miao==3)y1=y2=y3=1;//1s
                }
                y1=y2=y3=1;                //停止松开所有尾灯同时灭
                TR0=0;                   //关闭定时器
        }
}
void main()                 //主函数
{
        TH0=(65536-50000)/256;   //设置初值
        TL0=(65536-50000)%256;
        TMOD=0x01;           //设置定时器模式
        EA=1;                //开启总中断
        ET0=1;            //开启定时器中断
        TR0=0;           //关闭定时器
        while(1)
        {
                kong_zhi();   //信号控制函数
        }
}
void T0_init() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num++;
        if(num==20)
        {
                num=0;
                miao++;
                if(miao==4)
                miao=0;
        }
}
; U/ r* @. k7 d8 a, e- m5 c

3 @! m8 n1 I* ?/ [3 b5 u; l. q

该用户从未签到

2#
发表于 2021-5-11 10:55 | 只看该作者
复位电路错误,LED 限流电阻阻值选取得怡当
  • TA的每日心情
    奋斗
    2025-1-1 15:26
  • 签到天数: 584 天

    [LV.9]以坛为家II

    3#
    发表于 2021-5-15 13:26 | 只看该作者
    F:\常用电子元器件
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-21 01:18 , Processed in 0.140625 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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