标题: 为什么用低电平驱动灯泡不亮啊 [打印本页]
作者: 程成成 时间: 2017-7-1 11:32
标题: 为什么用低电平驱动灯泡不亮啊
当温度低于30度时,单片机控制P2.3输出低电平,可是灯泡不亮,是程序问题还是原理图呀
主程序如下:#include<reg52.h>
#include "LCD.h"
#include "DS18B20.h"
#include "DS1302.h"
sbit outv=P2^0; //电机转动时PWM输出口;
sbit ctr =P2^3; //控制加热设备输出
uchar flag2=1;
uchar tflag=1;
uchar timeflag=0;
uchar per=10; //PWM低电平所占时间
void initall();
void chesu();
void initT0();
void DispTemp(uint tem);
void DispTime();
void DispSP();
/*****************主函数**********************/
void main()
{
initall();
while(1)
{
DispTemp(gettemp());
DispTime();
if(timeflag)
DispSP();
}
}
/******************温度显示函数*******************/
void DispTemp(uint tem)
{
if(tflag) //第一次调用温度显示函数
{
tflag=0;
write_string(0,10,"Tem:");
}
if(tem<300) //随着温度的改变,PWM的占空比发生变化,同时加热设备也发生变化
{
per=10;
ctr=0;
}
else
{
ctr=1;
if(tem>=300&&tem<=330)
per=5;
else
per=0;
}
write_com(0x80+14);
write_data(tem/100+48);
write_data(tem%100/10+48);
write_data('.');
write_data(tem%10+48);
write_data(0); //显示摄氏度
}
/***************DS1302时间显示函数*********************/
void DispTime()
{
uchar j;
gettime();
write_com(0x80);
for(j=0;j<8;j++)
write_data(buf[j]);
}
/*******************初始化****************************/
void initall()
{
initLCD();
if((read(0x83)==0x00)&(read(0x81)==0x80)) //判断1302的秒的第8位是否为1,即是否处于低功耗状态(振荡器停止)
{
write(0x8E,0x00);//取消写保护
write(0x80,0x00);
write(0x8E,0x80);//写保护
}
initT0();
outv=0;
write_string(1,0,"Speed: 000r/min");
}
/**********************中断初始化**********************/
void initT0()
{
TMOD=0x51;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0;
TL1=0;
EA=1;
ET0=1;
TR0=1;TR1=1;
}
/*****************中断函数*********************/
void T0_time() interrupt 1
{
uchar times;
times++;
if(times%20>per)
outv=1;
else
outv=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(times==200)
{
times=0;
timeflag=1;
}
}
/*******************电机转速显示函数*********************************/
void DispSP()
{
uint count=0;
timeflag=0;
write_com(0xc0+7);
count=TH1*256+TL1;
write_data(count*6/100+48);
write_data(count*6%100/10+48);
write_data(count*6%10+48);
TH1=0;
TL1=0;
}
-
1.png
(20.37 KB, 下载次数: 102)
作者: 程成成 时间: 2017-7-1 11:37
求大神指点
作者: 小潘哥 时间: 2017-7-1 13:08
先不管其它功能,写个程序验证一下这电路有没有问题,就只让P23为低电平,看看亮不亮先。
另外,我感觉proteus里的三极管也是有点问题
作者: cjjcjj1 时间: 2017-7-1 13:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: aiohu 时间: 2017-7-1 16:47
先看看你的电源是不是够驱动继电器,方法为在PNP的C脚接一个电流表,看一下是否有毫安的电流流过
这样你就可以判断是不是在低电平时电流输出来,
作者: aiohu 时间: 2017-7-1 17:01
加一个12V的VCC1接到PNP的E-------你会加的,给P2.3一个低电平, 在继电器的线圈端加一个小灯泡,仿真在PROTEUS 里做,单独的做一个程序,就上述几句
作者: 程成成 时间: 2017-7-1 17:03
已加qq
作者: 程成成 时间: 2017-7-1 17:03
已经加了qq
作者: 程成成 时间: 2017-7-1 19:57
已经解决谢谢
作者: 程成成 时间: 2017-7-1 19:58
已解决,谢谢
作者: zl2168 时间: 2017-7-1 20:55
加一个12V的VCC1接到PNP的E,结果是无论输出高低电平,小灯泡都会亮!
作者: 3760609865 时间: 2017-7-2 16:26
你把三极管B级电阻改为200R,保证灯的工作电压设置为5v灯就亮了。
作者: mszhappy 时间: 2017-7-3 09:13
一般去推继电器我喜欢用NPN的管子,PNP老是怕不饱合
作者: wangyuan06 时间: 2017-7-3 11:14
用万用表测量一下,看到底是不是低电平。看看灯泡两端有没有电压。
作者: 112384 时间: 2017-7-4 09:47
先不管其它功能,写个程序验证一下这电路有没有问题,就只让P23为低电平,看看先。 另外,我感觉proteus里的三极管也是有点问题
作者: ahshmj 时间: 2017-7-4 21:01
继电器吸合不吸合?
作者: lllllllllxxxxx 时间: 2017-7-5 17:30
来个上拉电阻
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |