找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 691|回复: 3
收起左侧

两个单片机程序分开可以工作,为什么合到一起就不行了?

[复制链接]
ID:1143733 发表于 2025-2-13 17:00 | 显示全部楼层 |阅读模式
大佬们,我这个程序控制电机和控制光照传感器,两个分开可以工作,为什么合到一起...

单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include "LCD1602.h"
#include "delay.h"
#include "I2C.h"
#include "stepmotor.h"
#include "key.h"



#define SPEEDMAX 1//设定步进旋转速度最大值
#define SPEEDMIN 5//设置步进旋转速度最小值


int stepmove=0;//步进电机旋转标志位,0为停止,1为旋转

void main() {
    unsigned int light_value;
    char display_buf[16];
        unsigned char key=0;
        unsigned char dir=0;
        unsigned char step=0;
        unsigned char speed=SPEEDMAX;        
        unsigned char i=2,m;

    LCD_Init();               // 初始化LCD
    LCD_ShowStr(0, 0, "Light: ");  // 显示固定内容

    while(1) {
        
                key=key_scan();        
//***************步进电机转停与转向控制模块               
                        if(key==KEY1_PRESS)//按键一按下令步进电机旋转或停止
                        {
                                i++;
                                m=i%2;
                                stepmove=m;
                        }                                                
                        if(stepmove==1)        //判断是否要让步进电机旋转
                        {
                                step_28byj48_control(step++,dir);
                                if(step==8)        step=0;
                                delay_ms(speed);
                        }
                        
                        
                        if(key==KEY4_PRESS)//按下按键四令步进电机反转        
                        {
                                dir=!dir;                        
                        }        
//*********步进电机速度控制环节               
                        if (key==KEY2_PRESS)//按下按键二令步进电机加速se if (key==KEY3_PRESS)  
                        {
                                if(speed>SPEEDMAX)
                                        speed-=1;
                        }
                        if (key==KEY3_PRESS)
                        {
                                if(speed<SPEEDMIN) //按下按键三令步进电机减速
                                        speed+=1;        
                        }//通过每一步的延时来调节步进电机的速度        


                                light_value = BM1750_ReadData();  // 读取光照值

                                if(light_value != 0xFFFF) {       // 有效数据
                                        sprintf(display_buf, "%5d lux", light_value);  // 格式化为字符串
                                        LCD_ShowString(1,7,display_buf);    // 显示数值
                                        //LCD_ShowStr(0, 1, display_buf);
                                        }
                                else {
                                        LCD_ShowString(1,7,"Error!");
                                        //LCD_ShowStr(0, 1, "Error!");     // 显示错误信息
                                         }
                                delay_ms(1000);  // 每秒更新一次
                        
        }        
}

回复

使用道具 举报

ID:161164 发表于 2025-2-14 09:59 | 显示全部楼层
长时间延时请不要用delay
这个delay_ms(1000);卡死了步进的输出
2025-02-14_093550.png


请改用定时器定时1ms 然后累计1秒标志位
回复

使用道具 举报

ID:161164 发表于 2025-2-14 10:01 | 显示全部楼层
2025-02-14_100035.png
回复

使用道具 举报

ID:876947 发表于 2025-2-16 11:56 | 显示全部楼层
我也遇到的问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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