找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1139|回复: 2
打印 上一主题 下一主题
收起左侧

为啥我的单片机uln2003输入和输出一样

[复制链接]
跳转到指定楼层
楼主


普中 a2这是我的代码(电机是一端连uln2003 5v电源 一端连的是OUT1)

/*直流电机控制*/

#include<reg52.h>

typedef char u8;
typedef int u16;

sbit up = P3^1;           //加速按键
sbit down = P3^0;  //减速按键
sbit start = P3^2; //开始按键

sbit in = P1^0;

u8 times = 0; //定时器T0计数
u8 pwm = 0;          //初始pwm占空比为0

//延时函数
void delay(u16 num)
{
        u16 x,y;
        for(x = num;x > 0;x--)
        for(y = 110;y > 0;y--);
}

//定时器T0初始化
void timer_T0()
{
        TMOD = 0x01;                         //定时器T0模式1
        TH0 = (65535 - 1000) / 256;
        TL0 = (65535 - 1000) % 256;
        EA = 1;
        ET0 = 1;
        TR0        = 1;
}

//加速
void key_up()
{
        if(up == 0)
        {
                delay(2);
                if(up == 0 && pwm <= 100)
                {
                        pwm += 10;
                        if(pwm >= 100)
                        {
                                pwm = 100;
                        }
                }while(!up);
        }
}

//减速
void key_down()
{
        if(down == 0)
        {
                delay(2);
                if(down == 0 && pwm >=0)
                {
                        pwm = pwm - 10;
                        if(pwm <= 0)
                        {
                                pwm = 0;
                        }
                }while(!down);
        }        
}

/******主函数:初始pwm占空比为0电机不转动*/
/******按下up键加速按下down键减速*********/         
void main()
{
        in = 0;
        if(start == 0)
        {
                delay(2);
                if(start == 0)
                {
                        timer_T0();  
                        while(1)
                        {
                                key_up();
                                key_down();
                                if(times <= pwm)
                                {
                                        in = 1;
                                }
                                if(times >= pwm)
                                {
                                        in = 0;
                                }
                        }
                }while(!start);
        }

}

//定时器T0产生pwm波 pwm波周期为100*1ms
void timer_pwm() interrupt 1
{
        TH0 = (65535 - 1000) / 256;
        TL0 = (65535 - 1000) % 256;
        times++;
        if(times == 100)
        {
                times = 0;
        }
}


输入为高输出也为高
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2020-5-29 17:19 | 只看该作者
这是仿真波形,黄为输入,蓝为输出,是反相的。
回复

使用道具 举报

板凳
ID:761375 发表于 2020-5-30 11:02 | 只看该作者
xuyaqi 发表于 2020-5-29 17:19
这是仿真波形,黄为输入,蓝为输出,是反相的。

那我的pwm占空比是不是反了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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