找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2718|回复: 5
打印 上一主题 下一主题
收起左侧

这个单片机延时时间怎么算的?能在keil中看出来吗?

[复制链接]
跳转到指定楼层
楼主
ID:388477 发表于 2018-11-1 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个程序我的理解看对不对,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. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:388477 发表于 2018-11-1 15:26 | 只看该作者
回复

使用道具 举报

板凳
ID:417020 发表于 2018-11-1 16:00 来自手机 | 只看该作者
KEIL里设置好晶振频率,单步运行就能查看延时时间
回复

使用道具 举报

地板
ID:149144 发表于 2018-11-1 16:49 | 只看该作者
Keil 环境下,按一个红色的 d (Ctrl + F5) ,再按上面的带“{ }”带箭头的 (F10  F11) ,让他跳到延时函数那里, 记录当前时间,左边有显示的,再让他继续运行完这个延时函数,再看这时候的时间,就知道延时时间了
回复

使用道具 举报

5#
ID:94031 发表于 2018-11-1 17:05 | 只看该作者
用程序算延时既不准也困难,还不如延时驱动IO用示波器测,既准又简单。
回复

使用道具 举报

6#
ID:413475 发表于 2018-11-1 17:07 | 只看该作者
从程序上看你的理解是对的,每次当按键按下释放后LED IO状态取反
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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