电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
楼主: 向Qian看

有没大神帮写个骑自行车的单片机程序

[复制链接]
发表于 2023-6-27 07:09:08 来自手机 | 显示全部楼层
向Qian看 发表于 2023-6-27 00:37
看来你不懂我意思,我意思是这个LED牌程序固定改不了,需要另外用一个单片机运行来代替手按这个LED牌! ...

不好意思啊,没理解主题思想,您的意思是找个代替手按动作的方法?
 楼主| 发表于 2023-6-28 18:26:24 来自手机 | 显示全部楼层
swqa1549 发表于 2023-6-27 07:09
不好意思啊,没理解主题思想,您的意思是找个代替手按动作的方法?

是的。这个LED屏修改不了,原来是手按的,现在想编个程序代替手按,电路也很简单,我会弄。没学过编程,只是知道一点点,会编话其实不难。
发表于 2023-6-28 23:44:07 来自手机 | 显示全部楼层
向Qian看 发表于 2023-6-28 18:26
是的。这个LED屏修改不了,原来是手按的,现在想编个程序代替手按,电路也很简单,我会弄。没学过编程, ...

需要多少秒模拟按一次呢?可以中间继电器来实现,控制信号可以是定时器,或者PLC,单片机
 楼主| 发表于 2023-6-29 17:33:42 | 显示全部楼层
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();
                  }
         }
}
发表于 2023-6-29 17:57:20 来自手机 | 显示全部楼层
向Qian看 发表于 2023-6-29 17:33
我算了下,先尝试看350毫秒按一下。我不懂这个编程。看下下面我大概弄的。延时函数跟,开头令单片机输入 ...

楼主是程序看起来很好,我不是很懂,PLC还能看懂一点,您这个程序需要下载到单片机调试看看
发表于 2023-7-9 00:02:37 | 显示全部楼层
直接把显示牌的按键接在磁控开关上不行吗?有必要再用单片机来模拟按键吗?
发表于 2023-7-9 00:46:25 | 显示全部楼层
其他程序改的,符合你的要求试试吧

可以用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++;
        }
}

模拟按键.rar

385 Bytes, 下载次数: 4, 下载积分: 金币 -1

发表于 2023-7-11 12:31:52 | 显示全部楼层
帮你顶
 楼主| 发表于 2023-8-8 10:53:23 | 显示全部楼层
snchjj 发表于 2023-7-9 00:02
直接把显示牌的按键接在磁控开关上不行吗?有必要再用单片机来模拟按键吗? ...

不行,以内胸牌存在第三种模式,这个模式无法删除,要用单片机自动跳过去这个第三种模式
 楼主| 发表于 2023-8-8 11:00:11 | 显示全部楼层
胡乱编了一个,但是不起作用,测量了下输出一直是低电平,不懂怎样搞
#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-21 20:15 , Processed in 0.057950 second(s), 5 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号

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