点路上这个是啥,避孕套为啥没有黑色的一块黑色的,什么作用 我在一个控制灯亮的电路

关于一个按键控制LED灯亮暗的问题.谢谢! - PIC单片机论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
Hot [学院]
关于一个按键控制LED灯亮暗的问题.谢谢!
17:45:32  
我想实现一个按键按下后LED灯亮起,再按一下LED灯熄灭,可是程序烧写后,按一下按键亮了一会儿马上又熄灭了,每次按下只亮一会儿,可以帮我看下程序吗?同样的程序在51中是可以实现的,到PIC16F1933里面就不行了(电灯程序部分)
#include &pic.h&
#include &pic16f1933.h&
#define uint unsigned int
#define uchar unsigned char
/***********************************延时函数*********************/
void delay(uint z)
for(x =x&0;x--)
for(y = 100;y&0;y--) ;
/***********************************延时函数*********************/
void main()
OSCCON = 0XFB;
TRISA = 0X00;
TRISC = 0XFF;
PORTA = 0XFF;
if(RC7 == 0)
delay(21);
while(!RC7);
delay(21);
PORTA = SS;
11:15:22  
我用过PIC16F1936的芯片,跟你用的PIC16F1933差不多,只不过就是内部RAM大小不一样,我有点搞不明白,你为啥要定义uchar SS,
常量用#define SS 0XFF就好了啊(其实没有必要),PORTA端口作为输出端口对吧,要么为0XFF,要么为0X00,你要设置PORTA为数字量,上电默认为模拟量,
应该是这样子
TRISA = 0X00;
ANSELA = 0XFF;&&//将PORTA 设为数字量
LATA = 0;& && && && &//将PORTA 清0
& & if(RC7 == 0)
& && & delay(10);
& && & if(RC7 == 0)
& && && & while(!RC7);& && &//按键松开执行LED反转
& && && &&&LATA = ~LATA;
11:16:34  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
这样你再试试看 看看有没有效果。
16:52:26  
这样你再试试看 看看有没有效果。
#include &pic.h&
#include &pic16f1933.h&
#define uint unsigned int
#define uchar unsigned char
#define LED PORTAbits.RA4
#define KEY PORTCbits.RC7
__CONFIG(0x0FA4);
//&&__CONFIG(0x3AFF);
/***********************************延时函数*********************/
void delay(uint z)
for(x =x&0;x--)
& & & & for(y = 100;y&0;y--) ;
/***********************************延时函数*********************/
void main()
OSCCON = 0XFB;
TRISA = 0X00;
TRISC = 0xFF;
//ANSELA = 0X00;&&//将PORTA 设为数字量
PORTA = 0XFF;& && && && &//将PORTA 清0
& & if(KEY == 0)
& && & delay(21);
& && & if(KEY == 0)
& & & & & & & & KEY == 1;
& && && & while(!KEY);& && &//按键松开执行LED反转
& && && &&&& & & & SS++;
& & & & & & & & & & & & & & & & if(SS == 4)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & SS = 0;
& & & & & & & & & & & && && & & & & & & & & & & & }
switch (SS)
& & & & case 1:PORTA=0XFE;
& & & & case 2:PORTA=0XDF;
& & & & case 3:PORTA=0XEF;
& & & & case 0:PORTA=0XFF;
16:53:40  
我用过PIC16F1936的芯片,跟你用的PIC16F1933差不多,只不过就是内部RAM大小不一样,我有点搞不明白,你为啥要定义uchar SS,
常量用#define SS 0XFF就好了啊(其实没有必要),PORTA端口作为输出端口对吧,要么为0XFF,要么为0X00,你要设置PORTA为数字量,上电默认为模拟量,
这个问题是由于没有配置字引起的,不过非常感谢您的回答!学到挺多东西。
12:47:20  
路过,学习了。
工程师职场
Powered by用时间继电器控制两个灯泡点亮于熄灭的电路图?我想知道用时间继电器控制两个灯泡,其中一个亮2秒后另一个亮2秒.如此循环动作的电路图怎么画?
我的图书馆
用时间继电器控制两个灯泡点亮于熄灭的电路图?我想知道用时间继电器控制两个灯泡,其中一个亮2秒后另一个亮2秒.如此循环动作的电路图怎么画?
用时间继电器控制两个灯泡点亮于熄灭的电路图?我想知道用时间继电器控制两个灯泡,其中一个亮2秒后另一个亮2秒.如此循环动作的电路图怎么画?
用时间继电器控制两个灯泡点亮于熄灭的电路图?我想知道用时间继电器控制两个灯泡,其中一个亮2秒后另一个亮2秒.如此循环动作的电路图怎么画?
小小虐08爃
&&&&你看看我的图是否适合你.&&&&图中有说明.
馆藏&21883
TA的推荐TA的最新馆藏[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢51单片机按键控制LED灯亮灭【程序+图文】-51单片机-单片机入门教程日记
51单片机按键控制LED灯亮灭【程序+图文】
51单片机按键控制LED灯亮灭【程序+图文】
阅读:(26661)
& & & &还是先看下面的一个电路图,还是仔细看P2接口,这里我们接了一个发光二极管D1,又接了一个按键S2,我们想实现的功能是:按下按键S2,发光二极管D1改变发光状态。实际上就是模拟家庭的电灯开关。& & & &当然了,要实现这样一个功能大可不必如此兴师动众,又是单片机又是最小系统的,实际用一个简单的闭合开关、一个限流电阻、一节电池、一个灯泡就足矣啦。但是在这可不单单是为了点亮一个灯而已,通过这个小案例,我们会引出单片机开发板系统里面两个非常重要的概念,“按键去抖”和“中断”!下面的内容涉及到好多编程理念,请认真阅读。& & & &说到按键作者不禁要吐一下槽。作者曾经问(其实也被问过)这样一个问题:假设说单片机的P2.0管脚接按键,P2.4接发光二极管,怎样用按键控制灯的亮灭?& & & &有人脱口而出:按键中断!(这是后文书,现在说出来太早了,掌嘴!)& & & &还有人说:在单片机内部从P2.0直接接一条电线到P2.4……& & & &我说:……& & & &好吧,作者承认第一天学单片机的时候我也是这么认为的!& & & &为什么要说这个呢,因为正如第一节我说的,很多人初学单片机的时候会错误地认为单片机是靠纯电路实现的控制,但是事实上它是依靠单片机识别和控制管脚电平来实现各种功能的。单片机就是一个非常听你话的大脑,你让它做啥,它就做啥了。比如想要实现如图按键控制二极管的功能,就让单片机一直监测P2.0的电平状态,S2在没有按下的时候,P2.0通过R4直接连接到VCC,电平状态肯定是高电平,若S2按下,P2.0此时会接地,电平变成低电平,所以当单片机发现P2.0管脚的电平状态变成低电平的时候就知道此时有按键按下了,然后单片机再通知P2.4管脚,让D1转变发光状态,整个过程就是这样的,然后我们将它转换成一个比较专业的程序流程图,就如下图所示。然后再根据上面的流程图编写程序,代码如下所示:#include&reg52.h& &sbit S2=P2^0; &sbit D1=P2^4; &/********************************************************&**函数名:main(void)&**返回:无&**函数功能描述:按键控制灯的亮灭&**********************************************************/ &voidmain(void) & & //程序开始运行 &{ && & D1=1; & & & & &//程序初始化,令二极管不发光 && & while(1) & & & &//循环检测 && & { && & & & if(S2==0) & //如果检测到P2.0管脚为低电平,即按键按下 && & & & { && & & & & & D1=~D1; //二极管转换发光状态,返回继续循环检测 && & & & } & && & } &} && & 应该可以看出,根据流程图来编程会让思路更加清晰,以后等大家编程编的多了的时候就更能体会程序流程图的重要性。& & 好了,一个按键控制电灯的程序就编好了。& & 那么,真的编好了吗?& & 试着把程序下载到单片机里,运行一下,看看是不是您想要的效果呢?& & 好吧,告诉你,这样还不行。你可以试着按下按键,会发现电灯并不是像您想的那样那么听话,有时候确实改变了发光状态,有时候就不变,有时候还会变好几次,这是要闹哪样?& & 我们来看一下按键按下去后P2.0管脚电平的变化情况,下图是一个理想情况的示意图。& & T0时刻:按下按键,P2.0电平由高电平转换为低电平。& & T1时刻:抬起按键,P2.0电平由低电平转换为高电平。& & 当单片机P2.0管脚检测到低电平的时候,D1发生转变。你要知道,这个过程在单片机里发生的极快,大概是微秒级的数量级,而按键按下去再抬起来,这个时间段对应的是毫秒级的数量级,所以在T0到T1这个时间段里,其实D1已经发生了若干次的转换,这个不是我们想要的效果,我们想着按键按一次,D1就转换一次,那这该如何实现呢!& & 思路是这样的,当按键按下去的时候,单片机开始等待,一直等到按键抬起来的时候让D1再转变状态。代码改成下面的样子。#include&reg52.h& &sbit S2=P2^0; &sbit D1=P2^4; &/********************************************************&**函数名:main(void)&**返回:无&**函数功能描述:按键控制灯的亮灭&**********************************************************/ &voidmain(void) & & //程序开始运行 &{ && & D1=1; & & & & &//程序初始化,令二极管不发光 && & while(1) & & & &//循环检测 && & { && & & & if(S2==0) & //如果检测到P2.0管脚为低电平,即按键按下 && & & & { & && & & & & & while(S2==0); //当P2.0为低电平的时候,单片机在此等待 && & & & & & D1=~D1; //二极管转换发光状态,返回继续循环检测 && & & & } & && & } &} && & 上面加了一句“while(S2==0);”这句代码等效于“while(!S2);”,意思是当括号内的语句为真时(P2.0为低电平),单片机程序在此等待,直到括号内语句为假时(P2.0变回高电平),程序往下继续运行。好了,这下运行一下程序,看看是不是能达到您想要的效果来了。& & 。。。& & 那么,效果真的好了吗?& & 。。。& & 好吧,好像还是不行,上面的程序如果加载到类似于Proteus的仿真软件里(请参阅第五章Proteus仿真软件教程),程序运行起来一点问题也没有。但是下载到真正的单片机里运行起来虽然比不加“while(S2==0);”这句代码的时候要强一些,但时不时的还是不太听话。原因何在?& & 原因就在于一句非常有名的名言啊“现实往往比理想差好远!”,按键按下的电平变化会由于电路的稳定性和手的抖动产生一个非常不规则的波形,如下图所示,在按下和抬起的一刹那都会产生一个抖动区,不要小看这个抖动区,它足以让单片机产生误会,导致D1发生偏转。& & 所以在编写按键程序的时候往往都要加一个“去抖”过程,也就是当单片机P2.0口检测到低电平时,单片机不做任何处理,空等一段时间(10ms左右),再次检测P2.0端口,如果此时P2.0端口仍然是低电平,那就认为此次果然按下了按键,D1开始转换状态。重新编写程序,如下所示:#include&reg52.h& &#define uintunsigned int &sbit S2=P2^0; &sbit D1=P2^4; &/********************************************************&**函数名: delay(uint x)&**返回:无&**函数功能描述:延时函数,延时大概x毫秒&**********************************************************/ &voiddelay(uint x) & & & & & &//延时函数,让单片机空跑一段时间。 &{ & && & uint i,j; && & for(i=0;i&=x;i++) && & & for(j=0;j&=100;j++); &} &/********************************************************&**函数名:main(void)&**返回:无&**函数功能描述:按键控制灯的亮灭&**********************************************************/ &voidmain(void) & & //程序开始运行 &{ && & D1=1; & & & & &//程序初始化,令二极管不发光 && & while(1) & & & &//循环检测 && & { && & & & if(S2==0) & //如果检测到P2.0管脚为低电平,即按键按下 && & & & { & && & & & & &delay(10); & //延时一下 && & & & & & & & if(S2==0) && & & & & & & & { && & & & & & & & &while(S2==0); && & & & & & & & &D1=~D1; //二极管转换发光状态,返回继续循环检测 & & & & & & & &&& & & & & & & & } && & & & & & & & & & && & & & } & && & } &} && & 这下再试试,看看效果如何?& & 。。。& & 好吧& & 。。。& & 效果应该是不错了,假如还有问题的话就改改delay函数里面的参数值,多试几次肯定能调整出最好的效果。(这里如果告诉你,其实程序还是有问题的话,你会不会疯掉呢?-_-||)& & 再补充一句,有些时候我们闲编写去抖程序比较麻烦,可以在按键那里加一个滤波电容,如下图所示。按键按下后,若有抖动,电容C会起到一定的滤波作用,效果就会强很多,大家可以做实验试试看。& & 还有一个思路呢!上文咱们用到的按键都是自动弹起的,还有一种按下去就不弹起的开关呢,那种开关就简单多了,按下去就一直导通,再按一下才抬起,我用这么文艺的方式给您解释相信您一定能想的出那种开关长得什么样子吧。
还没有留言,还不快点抢沙发?我的电路短路了的喜欢 | LOFTER(乐乎) - 让兴趣,更有趣
LOFTER for ipad —— 让兴趣,更有趣
我的电路短路了 的喜欢
&nbsp&nbsp被喜欢
&nbsp&nbsp被喜欢
{list posts as post}
{if post.type==1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type==2}
{if post.type == 3}
{if !!post.image}
{if post.type == 4}
{if !!post.image}
{if !!photo.labels && photo.labels.length>0}
{var wrapwidth = photo.ow < 500?photo.ow:500}
{list photo.labels as labs}
{var lbtxtwidth = Math.floor(wrapwidth*(labs.ort==1?labs.x:(100-labs.x))/100)-62}
{if lbtxtwidth>12}
{if !!labs.icon}
{list photos as photo}
{if photo_index==0}{break}{/if}
品牌${make||'-'}
型号${model||'-'}
焦距${focalLength||'-'}
光圈${apertureValue||'-'}
快门速度${exposureTime||'-'}
ISO${isoSpeedRatings||'-'}
曝光补偿${exposureBiasValue||'-'}
镜头${lens||'-'}
{if data.msgRank == 1}{/if}
{if data.askSetting == 1}{/if}
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post_index < 3}
{if post.type == 1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
{if drlist.length>0}
更多相似达人:
{list drlist as dr}{if drlist.length === 3 && dr_index === 0}、{/if}{if drlist.length === 3 && dr_index === 1}、{/if}{if drlist.length === 2 && dr_index === 0}、{/if}{/list}
暂无相似达人,
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
this.p={ dwrMethod:'queryLikePosts',fpost:'3c',userId:,blogListLength:30};非门电路;(2)如果路灯开关自动接通时天色还比较亮,为了让路灯在天色更暗时才自动接通开关,应使电阻R增大(选填:“增加”或“减小”).
科目:高中物理
某同学设计了一个路灯自动控制门电路,如图所示.天黑了,让路灯自动接通,天亮了,让路灯自动熄灭.图中RG是一个光敏电阻,当有光照射时,光敏电阻的阻值会显著地减小.R是可调电阻,起分压作用.L为路灯.请问此门电路为(  )A.与门B.非门C.或门D.与非门
科目:高中物理
某同学设计了一个路灯自动控制的门电路,如图所示:天黑了,让路灯自动接通,天亮了,让路灯自动熄灭.图中RG是光敏电阻,有光线照射时,光敏电阻的阻值会显著减小.R是可调电阻,起分压作用.J为路灯开关控制继电器(图中未画路灯电路).对于该电路,下列说法正确的是(  )A、虚线框内的门电路是非门B、白天,门电路输入端a为低电势,继电器不接通,灯不亮C、天黑时,门电路输入端a为低电势,端b为高电势,继电器接通,灯亮D、要使天稍暗时灯就亮,应把R的阻值调小一些
科目:高中物理
某同学设计了一个路灯自动控制门电路,如图所示,天黑了,让路灯自动接通,天亮了,让路灯自动熄灭.图中RG是一个光敏电阻,当有光照射时,光敏电阻的阻值会显著地减小.R是可调电阻,起分压作用.J为路灯总开关--控制继电器(图中未画路灯电路).关于此电路,正确的是(  )
A、天黑时,RG增大,A为高电位,Z为低电位,J使路灯亮B、天黑时,RG增大,A为低电位,Z为高电位,J使路灯亮C、R调大时,傍晚路灯亮得早一些D、R调大时,傍晚路灯亮得晚一些
科目:高中物理
来源:2014届河南省高二上学期期中考试物理试卷(解析版)
题型:选择题
某同学设计了一个路灯自动控制门电路:天黑了让路灯自动接通,天亮了让路灯自动熄灭。RG为光敏电阻,有光线照射时,其阻值显著减小,R为可调电阻,起分压作用。J为路灯开关控制继电器(图中未画出路灯电路)。A.该逻辑电路为与门电路&&& B.该逻辑电路为非门电路C. 为了提高电路的灵敏度,应该适量增大可变电阻RD. 为了提高电路的灵敏度,应该适量减小可变电阻R&
精英家教网新版app上线啦!用app只需扫描书本条形码就能找到作业,家长给孩子检查作业更省心,同学们作业对答案更方便,扫描上方二维码立刻安装!
请输入姓名
请输入手机号

我要回帖

更多关于 文件夹变成黑色方块 的文章

 

随机推荐