您现在所在的是:

单片机论坛

回帖:13个,阅读:4624 [上一页] [1] [2] [下一页]
715
机电一小厮
文章数:7
年度积分:50
历史总积分:715
注册时间:2011/1/25
发站内信
发表于:2011/2/7 19:51:18
#0楼
谁能告诉用一个按键控制一个LED闪烁的C程序怎么写,按键S1=P3^2 ;LED=P0^0;写出主程序即可,就是按键按一下led亮,再按下led灭,谢谢
849
无心赏月
文章数:81
年度积分:50
历史总积分:849
注册时间:2010/11/20
发站内信
发表于:2011/2/8 12:32:38
#1楼
sbit p0 = P0^0;
 int a=1;//根据发光二极管极极性取值
void delay(unsigned int i)
{
   char j;
   for(i; i > 0; i--)
       for(j = 200; j > 0; j--);
}
void main(void)
{
  int i;
  IT0=0;      
  EX0=1;
  EA=1;
  while(1)
  {    
    p0 = a;
delay(150);
}
}
void  counter0(void) interrupt 0
{
 
  EX0=0;
  a=!p0;
  EX0=1;
delay(150);
}
715
机电一小厮
文章数:7
年度积分:50
历史总积分:715
注册时间:2011/1/25
发站内信
发表于:2011/2/8 15:37:22
#2楼
谢谢楼上前辈,我试试看
849
无心赏月
文章数:81
年度积分:50
历史总积分:849
注册时间:2010/11/20
发站内信
发表于:2011/2/8 19:07:17
#3楼
不客气
前辈可不敢当,我也是刚学,我们共同学习
17124
gf2003129
文章数:10760
年度积分:50
历史总积分:17124
注册时间:2007/9/2
发站内信
发表于:2011/2/10 15:50:13
#4楼
这个是C语言吧,还有点没反应过来!
做什么事贵在坚持!
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/2/16 12:34:37
#5楼
//按下LED亮,再按下灭;
#include <reg52.h>  
sbit S1=P3^2 ;
sbit LED=P0^0;
unsigned int XD1;
bit M1;
bit X1;
/*******主程序**************************/
void main(void)
{
  S1=1; //按键复位
LED=1; //LED复位
XD1=0; //消抖值复位
X1=1; //软按键复位
M1=1; //辅助标志复位
while(1)
{
//按键按下开始消抖
if(S1==0)
{
if(XD1>=500)X1=0; //消抖后开始确定按键按下
else  XD1++; //消抖开始开始
}
else {XD1=0;X1=1;}          //按键松开复位
//按键按下LED取反
if(X1==0 && M1==1){LED=~LED;M1=0;}//加M1是防止重复输出
if(X1==1 && M1==0)M1=1;
}
}







[此贴子已经被作者于2011/2/16 12:45:05编辑过]
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
3641
yueliang150
文章数:389
年度积分:50
历史总积分:3641
注册时间:2003/4/24
发站内信
发表于:2011/2/16 12:43:29
#6楼
//按下LED闪动,再按下灭;
#include <reg52.h>  
sbit S1=P3^2 ;
sbit LED=P0^0;
unsigned int XD1;
bit M0;
bit M1;
bit X1;

void Delay_Task(unsigned int d)
{
unsigned int i,j;
for(i=0;i<d;i++)
  for(j=0;j<1500;j++);

}
/*******主程序**************************/
void main(void)
{
  S1=1; //按键复位
LED=1; //LED复位
XD1=0; //消抖值复位
X1=1; //软按键复位
M1=1; //辅助标志复位
while(1)
{
//按键按下开始消抖
if(S1==0)
{
if(XD1>=100)X1=0; //消抖后开始确定按键按下
else  XD1++; //消抖开始开始
}
else {XD1=0;X1=1;}          //按键松开复位
//按键按下标志位取反
if(X1==0 && M1==1){M0=~M0;M1=0;}//加M1是防止重复输出
if(X1==1 && M1==0)M1=1;

//闪动程序
if(M0==0)
{
LED=~LED;
Delay_Task(10); //修改括号值可以改变闪动频率
}else LED=1;
}
}
单片机、ARM产品开发设计;
小设备、夹具、治具控制器设计开发;数码管、点阵LED电子看板开发;
1518
zhoubinazz
文章数:330
年度积分:50
历史总积分:1518
注册时间:2005/2/7
发站内信
发表于:2011/2/16 19:10:47
#7楼
单按钮控制继电器就可以实现,何必这么花费呢。
921
lqgafm
文章数:6
年度积分:50
历史总积分:921
注册时间:2007/8/31
发站内信
发表于:2011/3/8 17:40:17
#8楼
org 0000h
ljmp main
org 0100h
main:jb p1.0,$
      nop
nop
jb p1.0,main
nop
nop
jnb p1.0,$
cpl p1.1
ljmp main
end
这是汇编的
758
hDragon
文章数:19
年度积分:50
历史总积分:758
注册时间:2011/3/30
发站内信
发表于:2011/3/31 13:28:08
#9楼
你要的程序
#include "reg52.h"

sbit S1 =P3^2;
sbit Led =P0^0;

void main(void)
{
Led=1; //假设1是使灯灭
while(1){
  if(S1==0)
   {
     while(S1==0); //等待按键释放
   Led^=1; //灯的状态取反
  }
}
}

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

93.6006