标题: 这个单片机延时时间怎么算的?能在keil中看出来吗? [打印本页]

作者: zhang1314hong    时间: 2018-11-1 14:44
标题: 这个单片机延时时间怎么算的?能在keil中看出来吗?
这个程序我的理解看对不对,KEY首先置1,当有按键按下,KEY为0,!KEY为1,LED的状态取反,LED由不亮到亮即LED=1变为LED=0,灯亮
当再按一次,KEY为0,!KEY为1,LED的状态取反,LED亮到不亮即LED=0变为LED=1,灯灭。

单片机源程序如下:
  1. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

  2. sbit KEY=P3^2;  //定义按键输入端口
  3. sbit LED=P0^0;  //定义led输出端口


  4. void DelayUs2x(unsigned char t);//函数声明
  5. void DelayMs(unsigned char t);
  6. /*------------------------------------------------
  7.                     主函数
  8. ------------------------------------------------*/
  9. void main (void)
  10. {

  11. KEY=1; //按键输入端口电平置高
  12. while (1)         //主循环
  13.   {

  14.   if(!KEY)  //如果检测到低电平,说明按键按下
  15.     {
  16.          DelayMs(10); //延时去抖,一般10-20ms
  17.      if(!KEY)     //再次确认按键是否按下,没有按下则退出
  18.            {
  19.         while(!KEY);//如果确认按下按键等待按键释放,没有释放则一直等待
  20.                {
  21.                LED=!LED;//释放则执行需要的程序
  22.                          }
  23.            }
  24.         }

  25.      //主循环中添加其他需要一直工作的程序
  26.       
  27.   }
  28. }
  29. /*------------------------------------------------
  30. uS延时函数,含有输入参数 unsigned char t,无返回值
  31. unsigned char 是定义无符号字符变量,其值的范围是
  32. 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
  33. 长度如下 T=tx2+5 uS
  34. ------------------------------------------------*/
  35. void DelayUs2x(unsigned char t)
  36. {   
  37. while(--t);
  38. }
  39. /*------------------------------------------------
  40. mS延时函数,含有输入参数 unsigned char t,无返回值
  41. unsigned char 是定义无符号字符变量,其值的范围是
  42. 0~255 这里使用晶振12M,精确延时请使用汇编
  43. ------------------------------------------------*/
  44. void DelayMs(unsigned char t)
  45. {

  46. while(t--)
  47. {
  48.      //大致延时1mS
  49.      DelayUs2x(245);
  50.          DelayUs2x(245);
  51. }
  52. }
复制代码



作者: zhang1314hong    时间: 2018-11-1 15:26
https://zhidao.baidu.com/question/1637642887296153300.html
作者: xiaoyaop2018    时间: 2018-11-1 16:00
KEIL里设置好晶振频率,单步运行就能查看延时时间
作者: cuihaodianzi    时间: 2018-11-1 16:49
Keil 环境下,按一个红色的 d (Ctrl + F5) ,再按上面的带“{ }”带箭头的 (F10  F11) ,让他跳到延时函数那里, 记录当前时间,左边有显示的,再让他继续运行完这个延时函数,再看这时候的时间,就知道延时时间了
作者: xuyaqi    时间: 2018-11-1 17:05
用程序算延时既不准也困难,还不如延时驱动IO用示波器测,既准又简单。
作者: Colin_zhai    时间: 2018-11-1 17:07
从程序上看你的理解是对的,每次当按键按下释放后LED IO状态取反




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1