长汀无线电厂交流论坛

 找回密码
 注册
查看: 2223|回复: 7
打印 上一主题 下一主题

单片机C语言编程问题:怎样实现设置好之后按键无动作10秒退出键盘扫描子函数

[复制链接]
楼主
发表于 2011-6-5 20:01:56 | 只看该作者
图片比较多,发在矿坛了,http://www.crystalradio.cn/bbs/thread-192013-1-1.html
回复 支持 反对

使用道具 举报

沙发
 楼主| 发表于 2011-6-2 10:34:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

2051做个充电器,有两个按键k1,k2。用来设置充电参数。开机先进入键盘扫描子函数,怎样实现设置好之后按键无动作10秒退出键盘扫描子函数,进入输出充电脉冲子函数?
回复

使用道具 举报

板凳
 楼主| 发表于 2011-6-2 13:35:04 | 只看该作者
经熊的提点,用定时器中断搞定了
回复 支持 反对

使用道具 举报

地板
发表于 2011-6-2 14:28:24 | 只看该作者
C 的我不大熟悉,汇编的就没问题
回复 支持 反对

使用道具 举报

5#
发表于 2011-6-2 17:33:41 | 只看该作者
#include<reg52.h>

sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit KEY1=P3^2;
sbit KEY2=P3^3;

void delay(unsigned char time){
while(time>0)
  time--;
}

void fun1(){                      //按键KEY1的程序
while(1){LED2=0;}
}

void fun2(){                     //按键KEY2的程序
while(1){LED3=0;}
}

void main(){
unsigned int i=0,j;
LED1=1;
LED3=1;
LED2=1;
KEY1=1;
KEY2=1;
while(i<50){
  while(j<14000){        //修改14000这个参数可以调整延时时间
   j++;
   if(!KEY1){
    delay(200);
    if(!KEY1)
    fun1();
   }
   if(!KEY2){
    delay(200);
    if(!KEY2)
    fun2();
   }  
  }
  j=0;
  i++;
}
while(1){LED1=0;}
}

LED1亮表示进入子函数。LED2和LED3亮表示进入按键程序。
上电复位后,不按KEY和1KEY2,约10S钟后LED1亮。

菜鸟愚见,欢迎高手拍砖
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2011-6-2 20:59:38 | 只看该作者
谢谢各位,程序已经好了。硬件还有点问题,没调整好。等完成了拿上来给大伙拍拍砖
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2011-6-2 21:09:37 | 只看该作者
稳压充电两用电源.rar (1.46 KB, 下载次数: 14) “while(j<14000){        //修改14000这个参数可以调整延时时间
   j++;”在这里停的时间太长,这期间如果有键按下就检测不到了。还是用定时器中断好,没发生中断时一直再扫描键盘
回复 支持 反对

使用道具 举报

8#
发表于 2011-6-5 11:36:17 | 只看该作者
楼主能否把原理图发上来,学习学习。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|长汀无线电厂交流论坛  

GMT+8, 2024-4-28 13:26 , Processed in 0.712481 second(s), 20 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表