Ⅰ 关于stc90c52单片机驱动数码管电路的问题
数码管下面的三极管是驱动用的,com接口是选通用的,你的数码管应该是采用扫描驱动的。扫描原理就是任意一个时刻,只有一个COM是通的,通的时候,单片机输出对应于该位的数值,其它关断。快速轮回显示,这样,由于人眼的视觉停留,看到的是所有数码管同时显示。这方面,你需要看一下扫描显示原理。
R1~R8是对数码管的8个字段(7段码加小数点)进行限流。比如说,你希望数码管的电流限制为10mA,那么(5V-1.6V)/10mA=340Ω。问题是,由于你采用扫描显示,如果是4个数码管扫描,那么,其平均电流只有10mA的1/4,也就是2.5mA,为此,需要将限流电阻减小。限流电阻为100Ω时,实际导通电流约34mA,平均电流约8.5mA。
Ⅱ 如何用52rc单片机驱动微孔雾化片
应该是单片机管脚的驱动能力太弱,没能驱动雾化片。用万用表或者示波器看下管脚电压。
STC的话可以设置成推挽输出,驱动能力大大增强
Ⅲ 单片机AT80S52怎么驱动蜂鸣器
AT80S52单片机io口的驱动能力很弱,如果把蜂鸣器的+接正电源蜂鸣器的-接单片机的io口,并在程序中把这个io口置“0”,也许会听到很轻微的响声,但是,如果把蜂鸣器的-接电源地,蜂鸣器的+接单片机的io口,并在程序中把这个io口置“1”,由于单片机的驱动能力严重不足,是听不到响声的。需要加驱动才可以。
Ⅳ 52单片机如何增加输出PWM波形的驱动能力
直流输出
Ⅳ 谁能帮忙写个52单片机驱动74hc595控制LCD1602的程序
你敢不敢给点分
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LcdBus P0
sbit LED1602_RS=P2^6; //LCD端口定义
sbit LED1602_RW=P2^5 ;
sbit LED1602_EN=P2^4 ;
void LcdIni(void);
void WrOp(uchar dat);
void WrDat(uchar dat);
void ChkBusy(void);
void print_LCD(uchar disp[],uchar num);
//延时n ms子程序
void delayms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<120;j++);
}
main()
{
uchar disp1[16]={'S','u','n','J','i','e',' ','m','a','d','e',' ','a','t',' ',' '};
uchar disp2[16]={'2','0','0','8',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
while(1)
{
LcdIni();
WrOp(0x80); //数据指针地址第一行
print_LCD(disp1,16);
WrOp(0xc0); //第二行
print_LCD(disp2,4);
delayms(3000);
WrOp(0x01);
}
}
/******************************************************************************************
名称:led1602显示 程序模块
功能:驱动1602 包括数据口 P1 三个控制口
编译:keil
作者:孙杰
时间:2008-8-9
*******************************************************************************************/
void print_LCD(uchar disp[],uchar num) //显示数组disp 显示长度为num
{
uchar i;
for(i=0;i<num;i++)
{
WrDat(disp[i]);
delayms(300);
}
}
void LcdIni()
{
WrOp(0x38);
WrOp(0x06); //光标加1
WrOp(0x0f); //开显示 光标闪烁
// WrOp(0x0c); //开显示 光标不闪烁
}
void WrOp(uchar dat)
{
//uchar i;
ChkBusy();
LED1602_RS=0; //RS=0
LED1602_RW=0; //RW=0
LED1602_EN=0; //EN=0
LcdBus=dat; //送数据
LED1602_EN=1; //EN=1
delayms(10); //延时
LED1602_EN=0; //EN=0
}
void WrDat(uchar dat)
{
//uchar i;
ChkBusy();
LED1602_RS=1; //rs=1
LED1602_RW=0; //rw=0
LED1602_EN=0; //en=0
LcdBus=dat; //送数据
LED1602_EN=1; //en=1
delayms(10);; //延时
LED1602_EN=0; //en=0
}
void ChkBusy()
{
LED1602_RS=0; //RS=0
LED1602_RW=1; //RW=1
LED1602_EN=1; //EN=1
while(LcdBus&0x80); //送数据
LED1602_EN=0; //en=0
}
Ⅵ 二项四线步进电机用52单片机的话,选用什么驱动芯片
建议用L297+L298做驱动器:它能自己生成步进电机工作所需相序,在很大程度上能够减轻软件设计的负担,控制比较简单,只需要发送脉冲即可;ULN2003其实也可以(如果做比较小的东西的话),ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,能够直接驱动直流电机或步进电机,但是,ULN2003不能产生步进电机工作相序,需要在程序部分设计好电机如何工作!
Ⅶ 52单片机驱动蜂鸣器,我这样写为什么不对,求大神
#include<reg52.h>
void yanshi();
sbit beep=P3^6;
void main()
{
while(1){
beep=0;
yanshi();
beep=1;
yanshi();
}
}
void yanshi()
{
int i;
for(i=100;i>=0;i--);
}
程序这样就行了,如果你的是有源可以,无源也可以。需要高电平打开三极管开关。