注意:调试延时时要将晶振调整为11.0592MHZ(看开发板和单片机),头文件选52。
    延时小灯:直接减延时

    1. #include "reg51.h"
    2. typedef unsigned char u8;
    3. typedef unsigned int u16; //重定义保留字,使之简写
    4. sbit led=P2^0; //D1特殊位定义
    5. void delay(u16 i)
    6. //延时函数,方便调用
    7. {
    8. while(i--); //i随后赋值,表示延时时长
    9. }
    10. void main()
    11. {
    12. while(1) //无限循环
    13. {
    14. led=0; //将对应串口赋值为低电平,产生电位差以点亮led
    15. delay(50000); //不超过65535,点亮时间 450ms
    16. led=1;
    17. delay(50000); //熄灭时间,大约492ms
    18. }
    19. }

    亮->延时->灭->延时……

    for循环延时

    1. #include "reg52.h"
    2. typedef unsigned char u16 ;
    3. typedef unsigned int u8 ;
    4. sbit D1=P2^0;
    5. void delay()
    6. {
    7. u8 x,y;
    8. for(x=200; x>0; x--)
    9. {
    10. for(y=300; y>0; y--);//用keil软件调试出500ms
    11. }
    12. }
    13. void main()
    14. {
    15. while(1)
    16. {
    17. D1=0;
    18. delay();
    19. D1=1;
    20. delay();
    21. }
    22. }

    带参数的子程序

    1. #include "reg52.h"
    2. typedef unsigned char u16 ;
    3. typedef unsigned int u8 ;
    4. sbit D1=P2^0;
    5. void delay(u8 z)
    6. {
    7. u8 x,y;
    8. for(x=z; x>0; x--)
    9. {
    10. for(y=70; y>0; y--);//用keil软件调试出500ms
    11. }
    12. }
    13. void main()
    14. {
    15. while(1)
    16. {
    17. D1=0;
    18. delay(800);
    19. D1=1;
    20. delay(800);
    21. }
    22. }

    基本时序
    image.png