呵呵 为你解答
1 你的程序中使用的控制引脚为P1.1与电路图中控制LED的引脚P1.0也没有对应上啊
2 修改如下:
#include "reg51.h"
sbit P1_0=P1^0;
void main()
{
P1_0=0; \\ P1.0为低电平时, LED为灭
}
3 其实电路图 可以更简化和使用些 如下是常用的LED接法
P1.0= 0 LED 亮 P1.0=1 LED 灭
呵呵 别忘给俺加分哦 (没有分 就选满意回答吧)
第一,2楼说的不假,用 简化电路比较实用,而且程序 跟 LZ 的也一样,无需变更。但,LED电路中串联的电阻是 30Ω,普通LED 导通压降为1.8-2V,也有3V左右的。按2V计算,那电流 I=(VCC-Vled)/R1=(5-2)V/30Ω=100mA,单片机IO 口没有如此大的灌电流,这会 烧毁单片机IO。
第二,搞不懂LZ 想问什么,不过,可以简单介绍下这个电路。我们先把 电阻R1 跟 LED D1的交点称为 A 点,而A点 左边 的三角形 是个 反相器,那么:
当P10 为低电平0时,经过反相器后,A点为 高电平,LED导通点亮。
当P10 为高电平1时,经过反相器后,A点为 低电平,LED截止熄灭。
第三,LZ 的程序,主函数中 缺乏 循环语句,是个 单次系统。按理论,这样的系统只会执行一次,其结果无法预测,可能亮一下后系统结束就没了(当然你根本看不到它亮),也可能系统结束后IO电平不变,一直亮。
但事实上,很多编译器会考虑新手的这个情况,于是生成Hex,或是编译成 汇编的时候,已经帮忙把循环语句加上去了,所以,不同的编译器,得到的结果不尽相同。这也是无法预测结果的原因。所以,也奉劝新手,不要遗漏小细节,更不要依赖编译器的“智能”设计。
LED中有电流通过灯亮 没电流通过灯灭
如果如 “给0信号 灯会亮 给1 灯会灭” 那么就是共阳极的 单片机p1灌电流
直接往管脚上写0或1
同意 "烟火夜空"的说法.