ULN2003D驱动能量很强,输入和输出是反相高阻态,想要得到高电平就加上拉电阻,是放大…..驱动电机用的
高阻态不接上啦,就相当于断开
看看软件配置
我的板子这样设置:
P1.5强推挽输出,设能下拉电阻保证低电平 起个别名BEEP
P1.5高电平,ULN2003D就是低电平,P1.5低电平,ULN2003D就是高阻态
我们下拉输出P1.5低电平,ULN2003D就是高阻态,相当于断开,P1.5高电平,ULN2003D就是低电平,电流通过BEEP发声音
我这里为了烧录方便,用了USB-CDC:
保存,单击代码生产:
我们开新目录APP
APP下开Beep
增加路径:
添加个自己写的函数:
#include"beep.h"
void BEEP_Alarm(u16 times,u16 us)
{
while (times--)
BEEP=!BEEP;
delay_us (us); //
}
#ifndef __beep_H
#define __beep_H
#include "config.h"
//#include <AI8051U.H> //解释P15是 sbit P15 = P1^5;
//#define BEEP P15,
//因为我在AiCube 里定义了,这里就不用了
//#define BEEPP15
void BEEP_Alarm(u16 times,u16 us);
#endif
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
//<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
// 在此添加用户主函数初始化代码
u16 i=600;
//<<AICUBE_USER_MAIN_INITIAL_END>>
SYS_Init();
//<<AICUBE_USER_MAIN_CODE_BEGIN>>
// 在此添加主函数中运行一次的用户代码
//<<AICUBE_USER_MAIN_CODE_END>>
while (1)
{
USBLIB_OUT_Done(); //查询方式处理USB接收的数据
//<<AICUBE_USER_MAIN_LOOP_BEGIN>>
// 在此添加主函数中用户主循环代码
while(i>0)
{
BEEP_Alarm(500,1000); //500是次数,1000是us,就是1ms的延时
i--;
}
//<<AICUBE_USER_MAIN_LOOP_END>>
}
}
编译连接下载,不过,我的BEEP好小声音........反正是响啦!
接着学习7.1-数码管显示实验-简介
1.2.1 74HC245芯片简介
芯片驱动能力弱,8*8=64个LED,靠芯片就带不动