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.  用单片机控制第一个灯亮

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

代码示例:

#include <reg51.h> //使用51单片机需要包含头文件reg51.h

void main()
{
    P0 = 0xfe; //将P0.0引脚置为0,其他引脚置为1,使第一个灯亮
    while(1); //循环等待
}
 

        这个程序中,我们使用了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)根据闪烁的频率进行延时操作,等待下一次闪烁。

代码示例:

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

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 口的状态值。

代码示例:

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

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

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

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

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

#include<reg51.h> //包含单片机寄存器的头文件
/**************************************** 
函数功能:延时一段时间
*****************************************/ 
void delay(void) 
 { 
 unsigned char i,j; 
 for(i=0;i<250;i++) 
 for(j=0;j<250;j++) 
 ; 
 } 
/******************************************************* 
函数功能:主函数 
********************************************************/ 
void main(void) 
{ 
 while(1) 
 { 
 P3=0xfe; //第一个灯亮
 delay(); //调用延时函数
 P3=0xfd; //第二个灯亮
 delay(); //调用延时函数
 P3=0xfb; //第三个灯亮
 delay(); //调用延时函数
 P3=0xf7; //第四个灯亮
 delay(); //调用延时函数
 P3=0xef; //第五个灯亮
 delay(); //调用延时函数
 P3=0xdf; //第六个灯亮
 delay(); //调用延时函数
 P3=0xbf; //第七个灯亮
 delay(); //调用延时函数
 P3=0x7f; //第八个灯亮
 delay(); //调用延时函数 
 } 
 }

更多推荐:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/150804.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mendix 创客访谈录|低代码赋能IoT应用开发

本期创客 郑锴 舜宇光学科技&#xff08;集团&#xff09;有限公司信息技术部 毕业于浙江大学&#xff0c;三年软件设计开发经验。目前任职于舜宇光学科技&#xff08;集团&#xff09;有限公司信息技术部&#xff0c;担任软件开发工程师&#xff0c;主要负责工业互联网相关软件…

报错资源不足,k8s使用containerd运行容器修改挂载点根目录换成/home

运行k8s一段时间发现存储不足报错 发现这里用的是根路径的挂载&#xff0c;修改一下

深入Android S(12.0) 探索 Android Framework 之 SystemServer 进程启动详解

深入学习 Android Framework 第三&#xff1a;深入Android S(12.0) 探索 Android Framework 之 SystemServer 进程启动详解 文章目录 深入学习 Android Framework前言一、Android 系统的启动流程1. 流程图2. 启动流程概述 二、源码详解1. 时序图2. 源代码1、ZygoteInit # main…

opencv(1):创建和显示窗口, 读取保存图片

下载源码&#xff0c;方便查看 API 信息。 快速在源码文件夹中搜索相关 api. grep“namedWindow(*-Rn// 限定 .h 文件 grep“namedWindow(*-Rn|grep "\.h" vscode 语法检测有问题 一直有波浪线 打开 vscode, setting 界面&#xff0c;搜索 python 在 setting.json…

【Shell脚本12】Shell 输入/输出重定向

Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入&#xff0c;默认情况下&#xff0c;这恰好是你的终端。同样&#xff0c;一个命令通常将其输出写入到标准输出&#xff0c;默…

Linux系统编程——进程中vfork函数

函数原型 pid_t vfork(void);//pid_t是无符号整型 所需头文件 #include <sys/types.h> #include <unistd.h> 功能 vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程&#xff0c;但它们创建的子进程是有区别的。 返回值 成功子进程中返回 …

RK3588平台开发系列讲解(摄像头篇)USB摄像头驱动分析

🚀返回专栏总目录 文章目录 一. USB摄像头基本知识1.1 内部逻辑结构1.2 描述符实例解析二. UVC驱动框架2.1、设备枚举过程2.2、数据传输过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 USB摄像头驱动位于 drivers\media\usb\uvc\uvc_driver.c ,我们本篇重点看下…

rpmbuild 包名 version 操作系统信息部分来源 /etc/rpm/macros.dist

/etc/rpm/macros.dist openeuler bclinux src.rpm openssl-1.1.1f-13.oe1.src.rpm 打包名称结果 openeuler openssl-1.1.1f-13.aarch64.rpm bclinux openssl-1.1.1f-13.oe1.bclinux.aarch64.rpm 验证 修改openeuler配置文件macros.dist 重新在openeuler上执行rpmbuild…

opencv:从0到实现人脸识别

目录 opencv 人脸检查原理&#xff1a; 整体目录&#xff1a; 1.读取并展示图片 2.人脸检测 3.视频人脸检测 4.拍照保存 5 数据训练 6 人脸识别 opencv 人脸检查原理&#xff1a; OpenCV 中的人脸检测是基于哈尔特征分类器&#xff08;Haar Feature-based Cascade Cla…

EtherCAT从站EEPROM组成信息详解(1):字0-7ESC寄存器配置区

0 工具准备 1.EtherCAT从站EEPROM数据&#xff08;本文使用DE3E-556步进电机驱动器&#xff09;1 字0-字7ESC寄存器配置区组成信息详解 1.1 ESC寄存器配置区组成规范 对于EtherCAT从站来说&#xff0c;EEPROM的字0-字7组成的ESC寄存器配置区决定了从站上电后ESC能否正常工作…

【React】React-Redux基本使用

容器组件和 UI 组件 所有的 UI 组件都需要有一个容器组件包裹 容器组件来负责和 Redux 打交道&#xff0c;可以随意使用 Redux 的API UI 组件无任何 Redux API 容器组件用于处理逻辑&#xff0c;UI 组件只会负责渲染和交互&#xff0c;不处理逻辑 在我们的生产当中&#xff0…

C/C++最大质数 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C比n小的最大质数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C比n小的最大质数 2021年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 对于给定的n&#xff0c;求比n小的质数中…

零小时零信任:数据标记如何加速实施

现在是零信任的零小时。 虽然这个概念已经存在多年&#xff0c;但现在联邦政府实施它的时间已经紧迫。 拜登政府备忘录被誉为以战斗速度安全交付关键任务数据的解决方案&#xff0c;要求联邦机构在 2024 财年年底前实现具体的零信任安全目标。 此外&#xff0c;国防部正在努…

ClickHouse的数据类型

1 整型 固定长度的整型&#xff0c;包括有符号整型或无符号整型。 整型范围&#xff08;-2n-1~2n-1-1&#xff09;&#xff1a; Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647] Int64 - [-9223372036854775808 : 9223372036854775807] 无符…

CSDN每日一题学习训练——Python版(输入起始和结束的正整数,求其两个正整数之间的偶数和、两数相加)

版本说明 当前版本号[20231115]。 版本修改说明20231115初版 目录 文章目录 版本说明目录输入起始和结束的正整数&#xff0c;求其两个正整数之间的偶数和。题目解题思路代码思路参考代码 两数相加题目解题思路代码思路参考代码 输入起始和结束的正整数&#xff0c;求其两个…

P6入门:项目初始化11-项目详情之计算Calculations

前言 使用项目详细信息查看和编辑有关所选项目的详细信息&#xff0c;在项目创建完成后&#xff0c;初始化项目是一项非常重要的工作&#xff0c;涉及需要设置的内容包括项目名&#xff0c;ID,责任人&#xff0c;日历&#xff0c;预算&#xff0c;资金&#xff0c;分类码等等&…

STM32与ZigBee技术在智能家居无线通信中的应用研究

一、引言 智能家居系统是利用物联网技术将家庭各种设备进行互联互通&#xff0c;实现智能化控制和管理的系统。在智能家居系统中&#xff0c;无线通信技术起着至关重要的作用&#xff0c;而STM32微控制器和ZigBee技术则是实现智能家居无线通信的关键技术。本文将对STM32与ZigB…

北邮22级信通院数电:Verilog-FPGA(9)第九周实验(4)实现寄存器74LS374

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1 reg_74LS374.v 1.2 reg_LS3…

VIVADO+FPGA调试记录

vivadoFPGA调试记录 vitis编译vivado导出的硬件平台&#xff0c;提示xxxx.h file cant find vitis编译vivado导出的硬件平台&#xff0c;提示’xxxx.h file cant find’ 此硬件平台中&#xff0c;包含有AXI接口类型的ip。在vitis编译硬件平台时&#xff0c;经常会报错&#xf…

Docker Compose详细教程(从入门到放弃)

对于现代应用来说&#xff0c;大多都是通过很多的微服务互相协同组成的一个完整应用。例如&#xff0c; 订单管理、用户管理、品类管理、缓存服务、数据库服务等&#xff0c;它们构成了一个电商平台的应 用。而部署和管理大量的服务容器是一件非常繁琐的事情。而 Docker Compos…