单片机C语言控制单按钮启停程序(高手请进) 点击:5039 | 回复:14



不懂工控

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:32帖 | 647回
  • 年度积分:0
  • 历史总积分:583
  • 注册:2004年9月23日
发表于:2008-12-25 02:02:43
楼主
单按钮启停程序用途很广,在家电中都有,按下按钮,电器工作,再按一次,电器停止,请高手谈谈有多少种编程方法?



kevin_gs

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2004年4月29日
发表于:2008-12-25 04:53:37
1楼
无数种.rhf 

沙漠的风雨

  • 精华:0帖
  • 求助:0帖
  • 帖子:24帖 | 461回
  • 年度积分:0
  • 历史总积分:1069
  • 注册:2003年10月23日
发表于:2008-12-25 08:40:18
2楼

这样的 问题都要问,楼主一点脑子都不想动

不懂工控

  • 精华:0帖
  • 求助:0帖
  • 帖子:32帖 | 647回
  • 年度积分:0
  • 历史总积分:583
  • 注册:2004年9月23日
发表于:2008-12-25 12:16:15
3楼
见笑了,不是不想动,是想了几天还没想出来,昨晚又想到2点,现在单片机还未入门,所以向高手请教下

想起时正是忘记

  • 精华:0帖
  • 求助:0帖
  • 帖子:42帖 | 1651回
  • 年度积分:0
  • 历史总积分:1960
  • 注册:2007年1月26日
发表于:2008-12-25 12:40:41
4楼
晕死人不偿命          

老狼

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 821回
  • 年度积分:0
  • 历史总积分:1588
  • 注册:2008年3月01日
发表于:2008-12-25 16:28:10
5楼

void IR_Receive_function()
{
unsigned i=0,k=0;
if (Ir_Over)
{
EX0=0; EX1=0; //关外部中断
if (DAT[0]==DAT[1]&&DAT[2]!=DAT[3])
{
switch (DAT[3])
{
case 0XFF: if(inbuf1[19]==‘1‘)inbuf1[19]=‘0‘;else inbuf1[19]=‘1‘;break;
case 0XFE: if(inbuf1[20]==‘1‘)inbuf1[20]=‘0‘;else inbuf1[20]=‘1‘;break;
case 0XFD: if(inbuf1[21]==‘1‘)inbuf1[21]=‘0‘;else inbuf1[21]=‘1‘;break;
case 0XFC: if(inbuf1[22]==‘1‘)inbuf1[22]=‘0‘;else inbuf1[22]=‘1‘;break;
case 0XFB: if(inbuf1[23]==‘1‘)inbuf1[23]=‘0‘;else inbuf1[23]=‘1‘;break;
case 0XFA: if(inbuf1[24]==‘1‘)inbuf1[24]=‘0‘;else inbuf1[24]=‘1‘;break;
case 0XF9: if(inbuf1[25]==‘1‘)inbuf1[25]=‘0‘;else inbuf1[25]=‘1‘;break;
case 0XF8: if(inbuf1[26]==‘1‘)inbuf1[26]=‘0‘;else inbuf1[26]=‘1‘;break;
default: break;
}
}
Ir_Over=0;
EX0=1;EX1=1; //开外部中断
}
}
一段红外处理程序,在数据缓冲区里如果有按键就取反!

方法N多

不懂工控

  • 精华:0帖
  • 求助:0帖
  • 帖子:32帖 | 647回
  • 年度积分:0
  • 历史总积分:583
  • 注册:2004年9月23日
发表于:2008-12-25 22:57:27
6楼
谢谢老狼先生提供思路

不懂工控

  • 精华:0帖
  • 求助:0帖
  • 帖子:32帖 | 647回
  • 年度积分:0
  • 历史总积分:583
  • 注册:2004年9月23日
发表于:2009-01-04 00:49:51
7楼

本人也编了一个程序,可以实现此功能,但不太理想,主要是我没松下按钮前,单片机就什么都不做,在死循环,怎样可避免呢?还请高手指点下:


不懂工控

  • 精华:0帖
  • 求助:0帖
  • 帖子:32帖 | 647回
  • 年度积分:0
  • 历史总积分:583
  • 注册:2004年9月23日
发表于:2009-01-04 00:50:58
8楼
#include <AT89X51.H>

unsigned int count;
sbit p1_1=P1^1 ;
sbit p3_1=P3^1;
void delay10ms(void)
{
unsigned int i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}

void main(void)
{
while(1)
{
if(P3_2==0)
{
delay10ms();
if(P3_2==0)
{
count++;
if(count==2)
{
count=0;
}
if(count==1)
P1_1=1 ;
else
P1_1=0;
while(P3_2==0);
}
}
}
}

终觉浅

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 65回
  • 年度积分:0
  • 历史总积分:327
  • 注册:2006年10月30日
发表于:2009-01-31 01:15:09
9楼

你想让它做什么,在按的时候你就调用什么程序,比如显示,为了按下去 不熄灭,你就在按下按键的时候调用显示程序。

不懂工控

  • 精华:0帖
  • 求助:0帖
  • 帖子:32帖 | 647回
  • 年度积分:0
  • 历史总积分:583
  • 注册:2004年9月23日
发表于:2009-03-11 20:09:55
10楼
感谢回贴的朋友,更感谢老狼先生他终觉浅先生提供思路,本人初学,令高手见笑了

老狼

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 821回
  • 年度积分:0
  • 历史总积分:1588
  • 注册:2008年3月01日
发表于:2009-03-11 20:15:46
11楼

单片机没有多少东西,现在想换个工作,今天去面试一个电梯控制器研发的公司,那公司面试的那位总工才是人才啊!问的太细微了,有点感觉自己。。。。。。。

东方

  • 精华:1帖
  • 求助:1帖
  • 帖子:43帖 | 1482回
  • 年度积分:3
  • 历史总积分:2336
  • 注册:2008年3月18日
发表于:2009-03-20 10:48:11
12楼
工作换成没有?电梯控制是不是很复杂?

我为机狂

  • 精华:0帖
  • 求助:0帖
  • 帖子:26帖 | 147回
  • 年度积分:0
  • 历史总积分:400
  • 注册:2005年9月07日
发表于:2009-03-30 15:37:49
13楼

学习着先,马上到新公司就要用到C++了...

 

绿阳

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 20回
  • 年度积分:0
  • 历史总积分:46
  • 注册:2006年4月24日
发表于:2009-06-24 13:27:11
14楼

象这种 太简单了 啦,要好好看书学习


热门招聘
相关主题

官方公众号

智造工程师