电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
搜索附件  

热门下载

© 电子技术论坛 文件下载中心

模拟按键.rar

 

有没大神帮写个骑自行车的单片机程序
想自行车后面装一个LED胸牌做的显示屏,这样夜晚骑车安全点。自己不会写。因为胸牌内置程序不能改,只能用单片机控制自动切换字体了。
这程序要求如下:

  开关打开,LED屏和单片机同时上电,LED屏初始化后,自动显示“小心尾随”。

下面为单片机需要的程序:

单片机上电后,输入高电平,输出低电平。//LED屏显示“小心尾随”字不变。

(1)当刹车时:输入低电平,单片机输出高电平350毫秒。//(此时等于手动按了下胸牌的切换键,LED屏显示“刹车.....)

(2)当一直刹车时:输入一直是低电平,单片机输出保持低电平。//(此时LED屏会一直显示“刹车....”)

(3)当松开刹车时:输入高电平,单片机输出高电平350毫秒后恢复输出低电平,然后再次输出高电平350毫秒。//(此时LED屏跳过内置的滚动播放内容后显示“小心尾随”)

(4)再次刹车时和松开刹车时,程序又从以上(1)至(3)循环。


swqa1549 发表于 2023-6-28 23:44
需要多少秒模拟按一次呢?可以中间继电器来实现,控制信号可以是定时器,或者PLC,单片机 ...

我算了下,先尝试看350毫秒按一下。我不懂这个编程。看下下面我大概弄的。延时函数跟,开头令单片机输入端口高电平和输出是高电平也不会写。帮我修改补充下
#include <reg52.h>
#define uint  unsigned int
sbit red  = P3^2;
sbit key  = P3^4;
sbit led  = P3^5;

初始输入端口为高电平和输出端口为高电平电平,这里不会
/******************主程序**********************/
void main()
{
        while(1)
         {
                 if(key=0)                      //刹车
                 {
                    led=0;                       //输出低电平,PNP三极管开启,LED显示“刹车”
                    delay 350ms();
                  }
                    if(key=1);                     //松开手挚
                 {
                    led=0;                        //输出低电平,PNP三极管开启,LED显示“勿靠近”
                    delay 350ms();               //这些延时的也不会
                  }
   
                 if(key=0)                       //再次刹车
                 {
                    led=0;                     
                    delay 350ms();
                    led=0;                      //连续两次输出低电平,连续两次开关PNP三极管,LED跳过闪烁程序后再次显示“刹车”
                    delay 350ms();
                  }
         }
}
其他程序改的,符合你的要求试试吧

可以用STC15F104W单片机

#include<STC15xx.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int

sbit key=P3^4;
sbit led=P3^5;

bit bz;
uint mun;
void yux();
void Delay100ms();

/***********************定时初始化*************************************/
void Timer0_Init(void)                //1000微秒@11.0592MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0xCD;                        //设置定时初始值
        TH0 = 0xD4;                        //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 0;                                //定时器0开始计时
        ET0 = 1;              //使能定时器0中断
        EA = 1;         //开总中断
}
/*********************初始化函数**********************************/
void init()
{
        P2M1 = 0x00;
        P2M0 = 0x80;

        key=1;
        led=0;
  mun=0;
        bz=0;
}
/**************************主函数************************************/
void main()
{
        Timer0_Init();
        init();
  Delay100ms();
        while(1)
        {
                yux();
        }
}
/*************************控制函数*********************************/
void yux()
{
        if(key==0)
        {
                led=1;
                TR0=1;

                if(mun>=350)
                {
                        TR0=0;
                        mun=0;
                        led=0;
                        bz=1;
                        while(!key);
                }
               
        }
       
        if(key==1&&bz==1)
        {
                led=1;
                TR0=1;
                if(mun>=350)
                {
                        TR0=0;
                        mun=0;
                        led=0;
                        bz=0;
                }
        }
}

/********************延时函数**************************************/
void Delay100ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 180;
        j = 73;
        do
        {
                while (--j);
        } while (--i);
}
/***********************中断函数*************************************/
void Timer0_Isr(void) interrupt 1
{
        TL0 = 0xCD;                                //设置定时初始值
        TH0 = 0xD4;                //设置定时初始值
        if(mun<0xffff)
        {
        mun++;
        }
}
胡乱编了一个,但是不起作用,测量了下输出一直是低电平,不懂怎样搞
#include"intrins.h"
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sfr P5 =0xC8;//P5地址
sbit key  = P5^4;
sbit led  = P5^5;

/***********************200ms延时函数*****************************/
void Delay200ms()                //@12.000MHz
{
        unsigned char data i, j, k;

        _nop_();
        _nop_();
        i = 10;
        j = 31;
        k = 147;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

/***********************10ms延时函数*****************************/
void Delay10ms()                //@12.000MHz
{
        unsigned char data i, j;

        i = 20;
        j = 113;
        do
        {
                while (--j);
        } while (--i);
}

/***********************等待刹车松开函数*****************************/
void keyscan()
{
   while(key == 1)
   if(key == 0)                  //刹车
         {                           
            Delay10ms();              //阻塞式延时消抖,10ms
            if(key == 0)              //如果真刹车,不是误动作
            {        
              led=0;                  //输出低电平
              Delay200ms();           //输出延时
              while(key == 0);        //等待按键松开
             }
          }
         if(key == 1)                //按键松开
         {
            Delay10ms();             //等延时消抖,10ms
            if(key == 1)             //按键真松开
            {
              led=0;                 //输出低电平
              Delay200ms();          //输出延时
              led=0;                 //再次输出低电平
              Delay200ms();          //输出延时
            }
          }
}
/******************主程序**********************/
void main()
{
        while(1)
        {
          keyscan();                //按键扫描
         }
}

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-11-22 01:00 , Processed in 0.052910 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

返回顶部