单片机独立按键程序按键延迟

单片机菜鸟求教,关于延迟和按键去抖的问题_百度知道
单片机菜鸟求教,关于延迟和按键去抖的问题
计时没有问题. if(num&gt,ge1;P0=Tab[shi2].jpg" esrc="ge=num%10,ge4;}if(P1_2; }&nbsp. &nbsp!=1){delay(1000);&fen2=fen2-1.h&gt,0x66;delay(20);P2=0x04;sbit P1_4=P1^4;sec=59;sbit P1_2=P1^2;&P2=0x0b;&delay(20),就是每次按键加分计分的时候!=1){delay(1000);P2=0x06. &nbsp://d; &EA=1;charuchar code Tab[]={0x3F;b--)&nbsp单片机新手;TL0=()%256;delay(20) ,每按一次加分的键,shi2,0x07. &}&nbsp,&sbit P1_0=P1^0;sbit P1_3=P1^3。附上原理图和源程序#include&0; }&nbsp。因为自己对延迟不是很懂;sec--://d;c& &delay(20);=59)&nbsp!=1){delay(1000); }void main(){fen1=0;sbit P1_6=/zhidao/wh%3D600%2C800/sign=ca7bcb7d2ecf298e326cffc1e17fdf0;for(b=5;reg51; &nbsp,0x7F;}}void pause(){if(count++!=1){delay(1000);ge2=min%10; delay(5);sbit res=P3^1;void key(){if(P1_0;count=0;& &/zhidao/pic/item/b21bb051fba525d4bed2e738ad4e66e;while(1){ key();delay(20); &nbsp,0x06,b;/zhidao/pic/item/42a98226cffc1e17fdf0;}<img class="ikqb_img" src="&ge3=fen1%10;min=10://h://h,shi3;}void res_1(){&delay(20); if(P0=Tab[bai3];void delay(uint);TMOD=0x01;fen2=fen2+1;/zhidao/wh%3D600%2C800/sign=c510fae91ea1cbb051fba525d4bed2e738ad4e66e,所有的数码管都会闪一下.hiphotos,0x6F!=1){delay(1000);&ET0=1,然后我就加了延迟.com/zhidao/wh%3D450%2C600/sign=54eae8bf5c09af360b1fba525d4bed2e738ad4e66e;min--.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="P0=Tab[ge3];{&P2=0x03; &&nbsp,在此谢过; num=24;}if(P1_7,0x39;uchar fen1,0x7D,ge2,0x7C,0x77,求大神帮忙QAQ
提问者采纳
第一种!P1_0);改成while(;}但是这样如果按键按得时间比较长的话也会出现闪的问题,解决方法可以把数码管显示独立出来写个显示函数(比如display()数码管动态显示频率需要大于50Hz人眼才能看不到数码管闪:如果你的定时器充足!P1_0),有两种解决方法;while(,像你在按键中延时1s肯定会造成数码管闪,其实只需加上判断按键释放即可。其实按键消抖动只需要延时10ms即可;fen1=fen1+1:在延时中加入数码管的动态扫描函数,可以把数码管动态扫描放到定时器里(20ms显示一次),你延时1s应该是因为按一次会重复进入按键扫描,把while(:if(P1_0,这样无论主程序中怎样延时都不会造成数码管的显示问题;),所以增加了延时!=1){delay(10),比如!P1_0)display(),这样延时的过程中不会造成数码管闪的问题;第二种
问题解决了,非常感谢你。能问问你为什么加了while(!P1_0)display();数码管就不会闪烁了?有点想不明白。
因为当你按住按键不松的时候while(!P1_0)一直为真,也就一直执行display();
而display();是我常用的数码管显示函数像你程序display()就是void display(void){shi=num&#47;10;ge=num%10;shi1=sec&#47;10;ge1=sec%10;shi2=min&#47;10;ge2=min%10;bai3=fen1&#47;100;shi3=fen1&#47;10%10;ge3=fen1%10;bai4=fen2&#47;100;shi4=fen2&#47;10%10;ge4=fen2%10;P2=0x00;P0=Tab[shi];delay(20);P2=0x01;P0=Tab[ge];delay(20);P2=0x02;P0=Tab[shi1];delay(20);P2=0x03;P0=Tab[ge1];delay(20);P2=0x04;P0=Tab[shi2];delay(20);P2=0x05;P0=Tab[ge2];delay(20) ;
P2=0x06;P0=Tab[bai3];delay(20);P2=0x07;P0=Tab[shi3];delay(20);P2=0x08;P0=Tab[ge3];delay(20);P2=0x09;P0=Tab[bai4];delay(20);P2=0x0a;P0=Tab[shi4];delay(20);P2=0x0b;P0=Tab[ge4];delay(20);}
提问者评价
非常感谢!
其他类似问题
为您推荐:
其他2条回答
看到开头几行就知道你的情况了,这个是初学者常见的情况哈。
看到楼上已经解释得不错,我也说几句吧。
为什么数码管可以同时显示那么多个数字,你当然知道,用动态扫描。
动态扫描的意思就是,在很短的时间内,轮流让每个管显示一次。
只要频率够快,那么人眼的视觉暂留就会起作用,你就看不见数字在跳动。
闪烁的原因也很简单,比如你要显示1234
1出现,1消失,2出现,2消失,3出现,3消失,4出现,4消失。。。
每个数字出现和消失的时间都很短,循环起来,周而复始,视觉上就是1234了
结果你按键程序里来个,延时1s。
这个1s远远超过了数字出现的时间,结果变成了:
1出现,1消失,2出现,2消失,3出现,3消失,4出现,4消失,1s。。。
同样周而复始。结果那1s时间内,什么都不...
同样非常很感谢你,解释地非常详细周到。
不客气,偶就是教这个的,所以话比较多哈。其实你现在的主要问题是,对程序和物理现象的关系,理解得还不够比如楼上的if(P1_0!=1){
delay(10);
fen1=fen1+1;
while(!P1_0);}while(!P1_0);理解起来也没什么啊, 先看while(P1_0);没有循环体的哦,所以是空循环意思是,如果P1.0为“真”,就空循环什么是为真,不等于0就是为真嘛所以翻译起来就是,如果(P1.0==1),就空循环 那while(!P1_0);翻译成中文就是,如果(P1.0==0)就空循环再翻译一下,就是,如果(开关一直按着不放),就空循环 这是什么意思,就是如果开关如果没有松开,就卡在这个小小的空循环里等开关松开那么,如果你一小时都不松开开关呢?那CPU就什么都不做,在这里等着OK,那你的数码管当然不显示了 加上一句循环内容不一样了if(P1_0!=1){
delay(10);
fen1=fen1+1;
while(!P1_0)
display();
}这时候就不是空循环了,循环有了内容什么内容呢?每次循环,就调用一次显示函数好理解吧这样的话,如果按着开关不放,程序还是会卡在这个循环里可是不同之处在于,这个循环会调用显示函数所以照样会显示数码管的内容。 其实这个很简单的这样的理解过程是必须的,想多了,就容易了学习单片机,学习别人的程序一定要多思考你做得项目越大,就会有越复杂越隐蔽的问题需要你去考虑周全。还有一点要提的是你的程序,太乱了可读性和可移植性都很差程序的基本思路是,尽可能的条理清楚 不要把什么都写在main函数的主循环里这样会很乱要把各种功能都封装到函数里面每个函数都有自己特定的功能而主函数呢,在特定的时间,调用特定的函数完成任务 看起来就会清晰很多程序流程一目了然,这就叫可读性强 而且下次你做别的任务时以前的函数还是可以拿过来用,这就叫可移植性
都看完了,好多字啊,真的非常感谢您的指导和建议。
没事儿,现在不是放假么,我比较闲。
你要做的是在延时程序中调用显示程序,另外要在检测到按键弹起后才能计数和退出键盘扫描程序,否则容易出现按下一次后加几次的现象
单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
STC15F104E单片机之按键触发延时1分钟程序
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口51单片机教程(四):独立-矩阵键盘应用与设计
欲打印此文章,从您的浏览器菜单中选择“文件”后再选“打印”
51单片机教程(四):独立-矩阵键盘应用与设计
  上讲介绍并应用了单片机的串口通信,并给出了实例。从这一讲开始将介绍单片机的外围电路。这讲向大家介绍单片机外接键盘电路,通过该讲,读者可以掌握单片机外接键盘的工作原理从而实现电路与程序设计。&  一、原理简介&  键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。我们可以通过键盘输入数据或命令来实现简单的人机通信。在设计键盘电路与程序前,我们需要了解键盘和组成键盘的按键的一些知识。  1. 按键的分类  一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。  按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别。  全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。  2. 按键的输入原理  在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。因此,键信息输入是与软件结构密切相关的过程。 对于一组键或一个键盘,通过接口电路与单片机相连。单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。  3. 按键的特点与去抖  机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图1(a) 所示,抖动时间的长短与开关的机械特性有关,一般为5 ~ 10 ms。从图中可以看出,在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。( 本学习板采用软件去抖方式)。软件去抖的流程图如图1(b) 所示。&    图1&  从按键的去抖流程图我们可以知道,检测到有键按下时,应延时等待一段时间(可调用一个5ms~10ms的延迟子程序),然后再次判断按键是否被按下,若此时判断按键仍被按下,则认为按键有效,若此时判断按键没有被按下,说明为按键抖动或干扰,应返回重新判断。键盘真正被按下才可进行相应的处理程序,此时基本就算实现了按键输入,进一步的话可以判断按键是否释放。&  二、电路详解&  电路图如图2 所示。&    图2&  从图2 中可知独立式按键采用每个按键单独占用一根I/O 口线结构。当按下和释放按键时,输入到单片机I/O 端口的电平是不一样的,因此可以根据不同端口电平的变化判断是否有按键按下以及是哪一个按键按下。从图2(a) 中可以看出,按键和单片机引脚连接并加了上拉电阻,这样当没有按键按下的时候,I/O 输入的电平是高电平,当有按键按下的时候,I/O 输入的电平是低电平。  虽然独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O 口线,因此,在按键较多时,I/O 口线浪费较大。对于比较复杂的系统或按键比较多的场合,可以用到矩阵键盘,图2(b) 中所示的为4&4的矩阵式键盘,其他矩阵式键盘的设计方法类似。  4&4 的矩阵式键盘由4 根行线和4 根列线交叉构成,按键位于行列的交叉点上,这样就构成了16 个按键。其中交叉点的行列线是不连接的,当按键按下的时候,此交叉点处的行线和列线导通。图2(b) 行线通过上拉电阻接到VCC 上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线在交点导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的每条行线与4 条列线相交,交点的按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,键分析时必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。  值得注意的是本文介绍的矩阵键盘,在传统的矩阵键盘的输出端加了一个四输入与门芯片74HC21。当四路输入有一个为低电平的时候,输出为低电平。将74HC21 的输出端接到单片机的外部中断0(P32 管脚)上,这样在实时性要求较高的情况下,设P00~P03 为全低等待按键触发,当任何一个按键按下的情况下,系统都会进入中断服务程序,提高了键盘响应时间,在系统实时性要求较高的情况下非常实用。&&  三、程序设计&  本文设计实例关键程序如下。  独立按键程序  &&  #define keyio P0 ( 1)  #define key1 P0_3 ( 2)  &&  keyio|=0X0F; ( 3)  if(key1==0) ( 4)  {  delay_nms(20); ( 5)  if(key1==0) ( 6)  {  while(key1==0); ( 7)  return 1; ( 8)  }  }  程序说明:  (1)定义按键管脚。  (2)定义按键连接管脚。  (3)将按键连接管脚输出高电平,从而接收输入。  (4)如果此时管脚所连接按键被按下。  (5)延时一段时间,去抖作业。  (6)如果此时按键仍然被按下,此时按键有效。  (7)等待按键抬起,死循环,如果按键一直按下则一直等待。  (8)返回键值。矩阵键盘程序  &&  #define KEYIO P0 ( 1)  &&  code ksp[4]={0x7F,0xBF,0xDF,0xEF}; ( 2)  unsigned char keypad_scan() ( 3)  {  char key,i; ( 4)  KEYIO=0xF0; ( 5)  if (KEYIO!=0xF0) ( 6)  {  for(i=0;i《=3;i++) ( 7)  {  delaykey(10); ( 8)  KEYIO=ksp[i]; ( 9)  delaykey(10); ( 10)  if(KEYIO!=ksp[i]) ( 11)  {  delaykey(10); ( 12)  key=KEYIO; ( 13)  while(KEYIO==key); ( 14)  return(key); ( 15)  }  }  }  }  程序说明:  (1)定义矩阵键盘管脚。  (2)将扫描时用到的管脚四种输出电平状态定义成一个数组。  (3)按键扫描程序。  (4)定义两个临时变量key,i。  (5)让键盘管脚的高四位输出高电平,第四位为低电平,为扫描按键准备。  (6)如果此时管脚状态电平发生变化。  (7)将之前定义的数组中的值赋予管脚,开始逐次扫描。  (8)延时一段时间,去抖。  (9)输出扫描按键的电平。  (10)再延时一段时间。  (11)如果此时按键管脚电平依旧不是输出的默认电平,表示有键按下。  (12)延时一段时间,让电平稳定。  (13)读取当前按键管脚电平,即键值。  (14)等待按键抬起,死循环,如果按键一直按下则一直等待。  (15)返回键值。&  四、调试要点与实验现象&  接好硬件,通过冷启动方式将程序所生成的。hex文件下载到单片机运行后,打开串口调试助手软件,设置好波特率9600,复位单片机,然后按下板上的4&4按键中的任意一个,并注意观串口调试助手上的显示。(见图3),可以观察到在接收窗口有按键的数据显示。&    图3 按键通过串口调试助手显示界面&  此外,在本文所附的实验程序中,其中与串口通信中调用了发送字符函数与发送字符串函数。在没有仿真器和遇到需要显示一些提示信息的时候,可以采用串口打印的方式,这样不仅直观方便而且不增加其他成本。&  五、总结&  本文介绍了单片机外接键盘的工作原理并给出了实例,通过该文,我们可以知道一个完善的键盘控制程序应具备以下功能:  (1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。  (2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。  (3) 准确输出按键值(或键号),以满足按键功能要求。对于矩阵键盘而言,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。  此外,按键的扫描方式有多种,本文中所述的是程序扫描方式,另外常见的还有定时扫描方式和中断扫描方式,这些方式均可以在本学习板上实现,因此希望读者结合前几讲的知识,自行进行程序的编写与调试。下讲将讲述单片机动态驱动数码管原理与实例,敬请期待。本文打印自OFweek中国高科技行业门户,网址为:
Copyright&2014, All Rights Reserved.
中文版权所有-OFweek中国高科技行业门户.网站所有图片、文字未经许可不得拷贝、复制。查看: 394|回复: 10
关于按键矩阵按键,是用扫描去抖好,还是延时去抖好?
矩阵按键,是用扫描去抖好,还是延时去抖好?
个人觉的还是延时去都比较好。
回帖助人的奖励!
因为在用延时去抖一般都只用延时10MS根据一般人的反应是不会察觉到的。但较为稳定,虽然占用了单片机运行时间。对于扫描去抖我觉得容易出错因为整个程序运行时间跟你写的代码量有关这直接关系到了扫描频率容易出错。望采纳。
回帖助人的奖励!
我觉得延时不错。
回帖助人的奖励!
我做了电子密码锁,但矩阵按键按了没反应,程序是别人做成功过的,电路也查了很多遍,是照着焊的,没有短路,可是按键按了没反应,有哪位大神能指点下,小妹感激不尽啊
回帖助人的奖励!
是延时去抖好
回帖助人的奖励!
无效楼层,该帖已经被删除
延时挺好的
回帖助人的奖励!
延时吧, 比较好写,不会出错。
回帖助人的奖励!
一直用扫描去抖,因为这样不会有执行时间的浪费。单片机的资源是很宝贵的,一个周期也就执行K级的代码,delay之类的函数能不用就不用。
回帖助人的奖励!
延时去抖,多次判断~~
回帖助人的奖励!
Powered by帮坛友求个stc15f104e程序 遥控/按键控制5个继电器延时顺序断开 (100币酬谢)|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
想做个一键关机的电路,目前只会搭电路,程序还不会。、看到论坛里有人做自学习红外遥控,哪位高手能不能帮忙写个自学习遥控,再加上个,接受红外信号后,IO1口关闭,延时一下IO2口关闭,大概要用到5个IO口右右,然后下次再接收到红外信号对应的IO口再开启。。。循环以上步骤。。。【只是帮忙,给的币不多,我也好奇,只有6口能实现描述功能吗?】求助帖子链接:
赞助商链接
IO口开关好办,不知道遥控学习程序该怎么写。
赞助商链接
引用第1楼benli于 10:54发表的&&:IO口开关好办,不知道遥控学习程序该怎么写。 官方有遥控程序。
不同方案遥控器的编码格式是不同的,还要加一个学习键才行。
多谢社建老兄帮我转贴!!!不学习也行,就是在程序里写上固定且可更改的红外线码值(我读取红外线编码),我想要功能主要是:"接受到红外线后,1~3号继电器闭合,4~5号继电器闭合2秒钟然后断开,保持状态;再接受到红外线信号,1~3号断开,4~5闭合2秒钟然后断开,保持状态。。。希望高手帮个忙。。。。。
怎么没人愿意啊?还是有难度呢?
链接地址发错了吧。
地址没错。。。这个贴子就是我发的,是社建老兄帮我转贴到"数码。。"的。。
帮你写一个了#include &STC\STC15F104E.H&#define CPU_Fosc 12//12M晶振#define M&& 1//定时器1T时钟#define Tc 250 //250us采样 #define Th (65536-CPU_Fosc*Tc/M)/256#define Tl (65536-CPU_Fosc*Tc/M)%256#define uchar unsigned char#define uint&&unsigned int#define ulong&&unsigned long/*#define ma1 0xbf01 //用户码/按键码*/sbit K0=P3^0;sbit K1=P3^1;sbit K2=P3^2;sbit K3=P3^3;sbit K4=P3^4;sbit IR=P3^5; //定义红外接收输入端口bit&&IR_ok,uint OKCuint Tick,uchar&&Cbit&& IRbit&& IRb,IRa,IR_void Delay(uint t);uchar reverse8( uchar c );void InitTimer();void main(){&&&&P3=0&&&&InitTimer();&&&&while(1)&&&&{&&&&&&&&if(IR_ok)&&&&&&&&{&&&&&&&&&&&&if(OKCode==0xbf01) //用户码/按键码&&&&&&&&&&&&{&&&&&&&&&&&&&&&&state=!&&&&&&&&&&&&&&&&K0=K1=0;&&&&&&&&&&&&&&&&Delay(30000);&&&&&&&&&&&&&&&&K0=K1=1;&&&&&&&&&&&&&&&&if(state)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&K3=K4=K2=0;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&K3=K4=K2=1;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&IR_ok=0;&&&&&&&&}&&&&}}void InitTimer(){&&&&AUXR=0xc0;&&&&TMOD = 0x00;&&&&TH0=Th;&&&&TL0=Tl;&&&&EA=ET0=TR0=1;}void timer0() interrupt 1{&&&&if(IR_ok)&&&&{&&&&&&&&&&&&}&&&&IRb = IRa;&&&& //上次电位状态&&&&IRa = IR;&&&& //当前电位状态&&&&++&&&&if(IRb && !IRa)&&&&&&&& //是否下降沿(上次高,当前低)&&&&{&&&&&&&&Tick =&&&&&&&&step=0;&&&&&&&&if(Tick&(14000/Tc))&&&&&&&&{&&&&&&&&&&&&IRsync=0;&&&&&&&&}&&&&&&&&else if(IRsync)&&&&&&&&{&&&&&&&&&&&&if(Tick&(3000/Tc))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&IRsync=0;&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&longcode&&=1;&&&&&&&&&&&&&&&&if(Tick&(1500/Tc))&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&longcode|=1;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&if (--Count==0)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&uchar x,y;&&&&&&&&&&&&&&&&&&&&x=&&&&&&&&&&&&&&&&&&&&y= longcode&&8;&&&&&&&&&&&&&&&&&&&&if(x=~y)&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&OKCode =longcode&&8;&&&&&&&&&&&&&&&&&&&&&&&&OKCode=reverse8(OKCode/256)*256|reverse8(OKCode);&&&&&&&&&&&&&&&&&&&&&&&&IRsync=0;&&&&&&&&&&&&&&&&&&&&&&&&IR_ok=1;&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&else if(Tick&(13500/Tc-2)&&Tick&(13500/Tc+2))&&&&&&&&{&&&&&&&&&&&&IRsync=1;&&&&&&&&&&&&Count=32;&&&&&&&&}&&&&}}uchar reverse8( uchar c ){&&&&c = ( c & 0x55 ) && 1 | ( c & 0xAA )&& 1;&&&&c = ( c & 0x33 ) && 2 | ( c & 0xCC )&& 2;&&&&c = ( c & 0x0F ) && 4 | ( c & 0xF0 )&& 4;&&&&}void Delay(uint t){&&&&uchar a,b;&&&&for(; t&0; t--)&&&&&&&&for(b=222; b&0; b--)&&&&&&&&&&&&for(a=12; a&0; a--)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&;&&&&&&&&&&&&}}
多谢社建老兄。。。。。
uchar reverse8( uchar c ){&&&&c = ( c & 0x55 ) && 1 | ( c & 0xAA )&& 1;&&&&c = ( c & 0x33 ) && 2 | ( c & 0xCC )&& 2;&&&&c = ( c & 0x0F ) && 4 | ( c & 0xF0 )&& 4;&&&&}这个函数是干什么用的?能解释下么?谢谢!
fang3高手,原来学汇编程序,后来转学c程序,坛子里少有的热心人。明天搭个电路试验下。
【试验报告】P3.0=灯1 P3.1=灯2 P3.2=灯3 P3.3=灯4 P3.4=灯5(暂时用灯代替继电器)按一下遥控按键,灯1、灯2亮,亮的时候再按遥控器按键无效,延时30秒灯1、灯2灭,灯3~5亮起来,如果此时无遥控输入,也就是不再按遥控键,灯3~5会一直亮着。再按一下遥控器按键,灯3~5亮的状态不变,灯1、灯2又亮了,延时30秒后,1、2、3、4、5全部灭。
1转帐社建电子使用转帐功能,转帐给fang3金额:100M币,转帐附言:谢谢。&& /read.php?tid=625059& displayMode=1&page=e 23:12123.150.182.1092存款社建电子使用活期存款功能,存入金额:105M币 23:10 123.150.182.109
内容有点失误,Delay(30000);这里多个0&& 变成30秒了
位倒转,如转成
引用第9楼于 23:03发表的 回 8楼(fang3) 的帖子 :多谢社建老兄。。。。。 你最好试试,能不能满足你的要求,有问题的话,说出来,让他帮你改程序。
功能符合我的要求了,多谢社建老兄帮我试验,我这阶段都在工地安装没空玩。。。&&另要谢谢帮我付了m币。。。。。。
要等我回来才有空搞搞
感谢社建老兄为我破费了。。。。
这个延时我会改的。。。。。
你好,晚上试了这个程序,我读出的按键码是:CC 1D 00 FF,我试了好几种组合把这个码值写到程序中,都不能用,为何呢~~~~
:你好,晚上试了这个程序,我读出的按键码是:CC 1D 00 FF,我试了好几种组合把这个码值写到程序中,都不能用,为何呢~~~~&#160;( 21:17)&#160;换其他按键试试。这个码很奇怪。
:你好,晚上试了这个程序,我读出的按键码是:CC 1D 00 FF,我试了好几种组合把这个码值写到程序中,都不能用,为何呢~~~~&( 21:17)&你这个按键码是怎么读出来的?好像并不是NEC码,要不误读了
查看完整版本: [--
Powered by
Time 0.076418 second(s),query:5 Gzip enabled}

我要回帖

更多关于 单片机按键 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信