• 51单片机应用从零开始(三)


    51单片机应用从零开始(一)-CSDN博客

    51单片机应用从零开始(二)-CSDN博客

    详解 KEIL C51 软件的使用·建立工程-CSDN博客

    详解 KEIL C51 软件的使用·设置工程·编绎与连接程序-CSDN博客

    目录

    1.  用单片机控制第一个灯亮

    2.  认识单片机的工作频率

    3.  认识 I/O 口的引脚功能

    4.  进阶使用 P3 口流水点亮 8 位 LED   


            C51是一种基于C语言和汇编语言的嵌入式微控制器开发工具,常用于单片机开发。以下是C51程序的使用步骤:

    1. 安装Keil C51软件(或其他C51开发工具)。

    2. 打开Keil C51软件,创建一个新的工程。

    3. 添加需要的C语言和汇编代码文件,并编写程序代码。

    4. 选择合适的编译选项,如目标单片机型号、编译器优化等。

    5. 进行编译和链接,生成可执行文件。

    6. 使用下载器将程序下载到目标芯片中。

    7. 调试和测试程序是否正常运行。

            C51程序的使用需要一定的编程知识和经验,需要熟练掌握C语言和汇编语言,并了解具体的单片机实现方案。同时还需要一定的硬件设备和调试工具,如调试器、仿真器等。

            前面我们已经介绍了,51单片机以及软件的使用,那么现在,我们就开始上手试验一下

    1.  用单片机控制第一个灯亮

            首先,我们先使用单片机控制第一个灯亮。

    代码示例:

    1. #include //使用51单片机需要包含头文件reg51.h
    2. void main()
    3. {
    4. P0 = 0xfe; //将P0.0引脚置为0,其他引脚置为1,使第一个灯亮
    5. while(1); //循环等待
    6. }

            这个程序中,我们使用了51单片机的P0口控制LED灯。P0口的8个引脚可以控制8个LED灯,每个引脚输出低电平使LED灯亮,输出高电平使LED灯灭。

            P0的默认值是0xff(二进制11111111),这表示8个引脚都输出高电平,LED灯熄灭。为了使第一个灯亮,我们将P0.0置为0,其他引脚保持高电平,这样第一个LED灯就会亮起来。

            在程序的最后,我们使用了一个死循环,使程序一直运行,以保持第一个灯的状态。

    2.  认识单片机的工作频率

            单片机的工作频率指的是单片机内部主时钟的频率,也称为晶振频率或时钟频率。单片机的工作频率越高,其运算速度和响应速度就越快。

            对于51单片机而言,其最高工作频率为12MHz。在使用时,需要通过外部晶振或内部时钟源来提供时钟信号,以驱动单片机的运行。通常情况下,外部提供12MHz的晶振或时钟源是比较常见的。

    控制一个灯闪烁可以通过如下步骤完成:

    (1)初始化单片机,包括设置IO引脚等参数;

    (2)设定闪烁的频率,可以利用定时器来实现,或者通过延时等方式;

    (3)在主循环中,控制灯的状态(开/关);

    (4)根据闪烁的频率进行延时操作,等待下一次闪烁。

    代码示例:

    1. #include<reg51.h> //包含单片机寄存器的头文件
    2. /****************************************
    3. 函数功能:延时一段时间
    4. *****************************************/
    5. void delay(void) //两个 void 意思分别为无需返回值,没有参数传递
    6. {
    7. unsigned int i; //定义无符号整数,最大取值范围 65535
    8. for(i=0;i<20000;i++) //20000 次空循环
    9. ; //什么也不做,等待一个机器周期
    10. }
    11. /*******************************************************
    12. 函数功能:主函数 (C 语言规定必须有也只能有 1 个主函数)
    13. ********************************************************/
    14. void main(void)
    15. {
    16. while(1) //无限循环
    17. {
    18. P1=0xfe; //P1=1111 1110B, P1.0 输出低电平
    19. delay(); //延时一段时间
    20. P1=0xff; //P1=1111 1111B, P1.0 输出高电平
    21. delay(); //延时一段时间
    22. }
    23. }

    3.  认识 I/O 口的引脚功能

            I/O 口(输入/输出口)是可编程芯片中的一种通用接口,用于连接外部设备和处理器。 I/O 口的每个引脚都具有不同的功能。

            在单片机中,P0、P1、P2 和 P3 是四个常见的 I/O 口,其中每个口具有不同数量的引脚和功能。

    以 P1 口为例,它有 8 个引脚(P1.0 - P1.7)和多种功能,如下所示:

    1. P1.0 - 用于外部中断 0(External Interrupt 0)

    2. P1.1 - 用于外部中断 1(External Interrupt 1)

    3. P1.2 - 用于定时器 T0 外部计数器输入(Timer 0 External Counter Input)

    4. P1.3 - 用于定时器 T1 外部计数器输入(Timer 1 External Counter Input)

    5. P1.4 - 用于串行数据输出(Serial Data Output)

    6. P1.5 - 用于串行数据输入(Serial Data Input)

    7. P1.6 - 用于串行时钟输出(Serial Clock Output)

    8. P1.7 - 用于片选输出(Chip Select Output)

            如果我们想将 P1 口的状态分别发送到 P0、P2 和 P3 口,可以使用单片机的程序控制来实现。 具体方法如下:

    (1)将 P1 口设置为输入状态。

    (2)读取 P1 口的状态值。

    (3)将读取的状态值分别发送到 P0、P2 和 P3 口。

    (4)循环执行上述步骤,以实时更新 P1 口的状态值。

    代码示例:

    1. #include<reg51.h> //包含单片机寄存器的头文件
    2. /*******************************************************
    3. 函数功能:主函数 (C 语言规定必须有也只能有 1 个主函数)
    4. ********************************************************/
    5. void main(void)
    6. {
    7. while(1) //无限循环
    8. {
    9. P1=0xff; // P1=1111 1111B,熄灭 LED
    10. P0=P1; // 将 P1 口状态送入 P0
    11. P2=P1; // 将 P1 口状态送入 P2
    12. P3=P1; // 将 P1 口状态送入 P3
    13. 5
    14. }
    15. }

    4.  进阶使用 P3 口流水点亮 8 位 LED   

    要使用 P3 口流水点亮 8 位 LED,你需要按照以下步骤进行:

    1. 连接电路:将 8 个 LED 灯依次连接到 P3.0 - P3.7 的引脚上。将 LED 地线连接到 GND 引脚上。

    2. 编写程序:使用 Keil 或其他编译器编写程序。下面是一个示例代码:

    1. #include<reg51.h> //包含单片机寄存器的头文件
    2. /****************************************
    3. 函数功能:延时一段时间
    4. *****************************************/
    5. void delay(void)
    6. {
    7. unsigned char i,j;
    8. for(i=0;i<250;i++)
    9. for(j=0;j<250;j++)
    10. ;
    11. }
    12. /*******************************************************
    13. 函数功能:主函数
    14. ********************************************************/
    15. void main(void)
    16. {
    17. while(1)
    18. {
    19. P3=0xfe; //第一个灯亮
    20. delay(); //调用延时函数
    21. P3=0xfd; //第二个灯亮
    22. delay(); //调用延时函数
    23. P3=0xfb; //第三个灯亮
    24. delay(); //调用延时函数
    25. P3=0xf7; //第四个灯亮
    26. delay(); //调用延时函数
    27. P3=0xef; //第五个灯亮
    28. delay(); //调用延时函数
    29. P3=0xdf; //第六个灯亮
    30. delay(); //调用延时函数
    31. P3=0xbf; //第七个灯亮
    32. delay(); //调用延时函数
    33. P3=0x7f; //第八个灯亮
    34. delay(); //调用延时函数
    35. }
    36. }

    更多推荐:

    时光の尘_千题千解·Java面试宝典,Linux学习,C++学习-CSDN博客

  • 相关阅读:
    Java web第一次作业
    Kernel Memory 入门系列:生成并获取文档摘要
    010 gtsam/examples/ImuFactorsExample2.cpp
    redis 高可用
    基于centos7构建nginx的keepalived高可用集群
    buuctf-[网鼎杯 2020 朱雀组]phpweb
    第三章:Qt Creator 之 3.3 新建项目
    移动端适配-(postcss-pxtorem)
    基于PHP+MySQL的电子邮件管理系统
    艾美捷Mabtech抗人IFN-αmAb(MT1)未偶联方案
  • 原文地址:https://blog.csdn.net/MANONGDKY/article/details/134415805