如图 利用51单片机引脚P1.0引接一只LED,送“0”信号时点亮灯,送“1”信号时灯灭。

作者&投稿:暨秆 (若有异议请与网页底部的电邮联系)
51单片机P1.1口接一个LED灯 外接按键,要求:按键按下LED灯亮,,按键再按下灯灭,用C语言~

#include sbit P32 = P3^2;sbit LED = P1^1;void main(){ IE = 129; while(1);}void X0_Int() interrupt 0{ while(!P32) LED = 0; LED = 1;}

#include
typedef unsigned int uint ;
typedef unsigned char uchar;


sbit key=P3^3;
sbit led=P3^5;
void delay(uint n);
void init_int1(void); //外部中断1初始化
void isr_int1(void); //外部中断1中断服务1初始化
bit flag_int1;//中断发生的标志位 --全局变量


/* //方式一主函数
void main()
{ init_int1();
while(1)
{

}

} */
//方式二
void main()
{
init_int1();
while(1)
{
if(flag_int1==1)
{
//按键三步曲
if(key==0) //按键闭合
delay(16); //延时去抖
if(!key)//说明按键按下
{
while(!key);//等待按键松开
led=~led;
}
}
flag_int1=0; //标志位清零
}EX1=1;//重新开始中断


}






//外部中断初始化
void init_int1(void)
{
IT1=1;//边沿触发
EX0=1; //开总中断
EX1=1; //开外中断
}
//中断服务程序 方法一
/*void isr_int1(void)interrupt 2
{
//按键三步曲
if(key==0) //按键闭合
delay(16); //延时去抖
if(!key)//说明按键按下
{
while(!key);//等待按键松开
led=~led;
}

}*/
//中断服务程序方法二
void isr_int1(void)interrupt 2
{
flag_int1=1;//中断发生了
EX1=0;//暂时关闭外部中断


}



void delay(uint n)
{
uint i;
for(;n>0;n--)
for(i=110;i>0;i--);
}

呵呵   为你解答   

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

同意 "烟火夜空"的说法.


白银区18816176733: 单片机:设计一个能检测开关状态的电路,要求开关闭合时输出0电平,开关断开时输出1电平,在线等,挺急 -
翁泊降脂: 用 51 单片机的引脚 P1.0,接到开关,开关另一端接地.单片机的输出端设为 P1.7.程序如下: ORG 0000HMOV C, P1.0MOV P1.7, CSJMP 0000H END

白银区18816176733: 51单片机利用定时/计数器T2,在P1.0引脚上不断重复输出频率为450HZ,持续和停止时间为4S的方波信号 -
翁泊降脂: 利用定时/计数器T2定时,让P1.0口输出高低电平,频率为450HZ.

白银区18816176733: 如何用51单片机写红外传感器的 -
翁泊降脂: 红外发射模块用51单片机编程使用:用定时器中断来做,红外发送引脚连接到P1.0口, 计数一下定时初值(让P1.0的翻转频率为38KHZ),进定时器中断就对P1.0取反

白银区18816176733: 单片机C语言 P1^0 = 1 和P0 = 0xFF -
翁泊降脂: 单片机P1端口共8个引脚 ,分别为P1^0-P 1^7 汇编语言一般写成P1.0 P1^0=1,就是让这个端口的第一个引脚输出高电平 P0端口也有8个引脚 P0 = 0xFF就是让该端口8个引脚均输出高电平

白银区18816176733: 51单片机 点亮led灯 -
翁泊降脂: 十六进制0xFE,对应二进制 1111_1110 这个二进制,对应引脚为 p1.7 p1.6 p1.5 p1.4 p1.3 p1.2 p1.1 p1.0 P1 = 0xfe,则对应p1.0为0,其他引脚输出1.你的LED,必然是共阳极.所以P1.0对应的灯亮.(如果是共阴极,那么P1.7~P1.1共7个LED亮,P1.0上的LED不亮)

白银区18816176733: 用51单片机P1.0口如何搭电路才能使用srd - 05vdc - sl - c继电器,做的是一个温度控制继电器开关的装置 -
翁泊降脂: P1.0接一个2-5K电阻,电阻另一端接三极管b,e接地,C接继电器线圈然后接5V.继电器线圈反向并联一个1N4001.三极管可用任意NPN型.这个是太多人使用的方式,有个缺点在于单片机复位期间P1口可能是高电平,导致继电器误动作. 可选用PNP型三极管,B一样接法.E接5V,c接线圈然后接地.反向并联二极管. 三极管的最大电流要高于继电器的电流.常用的9013 9014就可以. LED灯可并联到继电器线圈上,加一个限流电阻即可. 假如P1口不带上拉电阻的OC输出型,最好采用PNP电路.

白银区18816176733: 从P1.0引脚输出方波型号,周期50ms.设51单片机的f - =6MHz,试用C语言编程.睡会做,求解在线等! -
翁泊降脂: #include"reg52.h" sbit out = P1^0; unsigned char num=0; void main(void) { TMOD = 0X01;TH0 = (65536-500)/256;//6m外部晶振,运行晶振0.5M,一步2us,延时1ms TL0 = (65536-500)%256; EA = 1; ET0 = 1; TR0 = 1; while(1);}void T...

白银区18816176733: 楼道照明灯的声控用51单片机怎么实现? -
翁泊降脂: 听我说了你就不需要电路了. 这个东西主要是程序问题. 如果 51单片机的 P1.0接的是声音芯片,P3.0接的是灯光 声控芯片 是把声音信号转换为电信号,这个是厂商已经做好的了 当有声音的时候,他就把声音转换为 电信号 P1.0=1;去控制51...

白银区18816176733: 如何用51单片机实现对三级管各级的识别 -
翁泊降脂: 如果知道是NPN或者PNP的管子,识别方法更简单,如下: 设对应三极管的3个引脚的测试孔分别为Pin1,Pin2,Pin3,与单片机的P1.0,P1.1,P1.2互联. 将器件放入测试孔,开始检测时,首先将Pin1脚置低,另外2个引脚为高,同时采集对于引脚电平,如果没有被拉低,则换Pin2置低,继续按上面的电平给定.如果其中有引脚被拉低了,则是B级,你置低的那个脚是E级,另外的那个是C级.

白银区18816176733: 求高手 用51单片机输出产生方波的程序 -
翁泊降脂: #include"reg52.h" sbit PWM=P1^0;//定义输出脚 void main() { TMOD=0x01; //定时器0工作方式1 TH0=(65536-10000)/256; //12M晶振10MS计时常数 TL0=(65536-10000)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网