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.hvoid 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博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity地面交互效果目录

大家好&#xff0c;我是阿赵。   之前写了几篇关于地形交互、地面轨迹、脚印效果实现的博文。虽然写的篇数不多&#xff0c;但里面也包含了不少基础知识&#xff0c;比如局部UV采样、法线动态混合、曲面细分等知识&#xff0c;这些都是可以和别的效果组合在一起&#xff0c;做…

STL—next_permutation函数

目录 1.next_permutation函数的定义 2.简单使用 2.1普通数组全排列 2.2结构体全排列 2.3string 3.补充 1.next_permutation函数的定义 next_permutation函数会按照字母表顺序生成给定序列的下一个较大的排列&#xff0c;直到整个序列为降序为止。与其相对的还有一个函数—…

WebMvcConfigurer配置详解

一、简介 WebMvcConfigurer配置类其实是Spring内部的一种配置方式&#xff0c;采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制&#xff0c;可以自定义一些Handler&#xff0c;Interceptor&#xff0c;ViewResolver&#xff0c;MessageConverter。基于ja…

使用手机作为电脑的麦克风和摄像头外设

工具 Iriun Iriun 电脑端安装&#xff1a;Iriun Android: Iriun 4K Webcam for PC and Mac - Apps on Google Play Apple: Iriun Webcam for PC and Mac on the App Store 基础功能免费&#xff0c;普通使用足够了。 付费功能&#xff1a; 使用 这里有介绍&#xff1a…

软件开发之路——关于架构师的一些书籍

文章目录 &#x1f4cb;前言&#x1f3af;什么是架构师&#x1f525;文末送书《高并发架构实战&#xff1a;从需求分析到系统设计》《中台架构与实现&#xff1a;基于DDD和微服务》《架构师的自我修炼&#xff1a;技术、架构和未来》《分布式系统架构&#xff1a;架构策略与难题…

基于STM32的LoRaWAN无线通信网络设计与实现

LoRaWAN (Long Range Wide Area Network) 是一种低功耗的无线通信技术&#xff0c;用于构建广域物联网。本篇文章将介绍基于STM32微控制器的LoRaWAN无线通信网络的设计与实现&#xff0c;并提供相应的代码示例。 概述 LoRaWAN的无线通信技术采用低功耗长距离传输&#xff0c;…

深度学习+opencv+python实现车道线检测 - 自动驾驶 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…

【libGDX】初识libGDX

1 前言 libGDX 是一个开源且跨平台的 Java 游戏开发框架&#xff0c;于 2010 年 3 月 11 日推出 0.1 版本&#xff0c;它通过 OpenGL ES 2.0/3.0 渲染图像&#xff0c;支持 Windows、Linux、macOS、Android、iOS、Web 等平台&#xff0c;提供了统一的 API&#xff0c;用户只需要…

【JavaSE语法】类和对象(二)

六、 封装 6.1 封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主要研究的就是封装特性。 封装&#xff1a;将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细节&#xff0c;仅对外公开接口来和对象进行交互…

大模型时代的机器人研究

机器人研究的一个长期目标是开发能够在物理上不同的环境中执行无数任务的“多面手”机器人。对语言和视觉领域而言&#xff0c;大量的原始数据可以训练这些模型&#xff0c;而且有虚拟应用程序可用于应用这些模型。与上述两个领域不同&#xff0c;机器人技术由于被锚定在物理世…

Spark通过三种方式创建DataFrame

通过toDF方法创建DataFrame 通过toDF的方法创建 集合rdd中元素类型是样例类的时候&#xff0c;转成DataFrame之后列名默认是属性名集合rdd中元素类型是元组的时候&#xff0c;转成DataFrame之后列名默认就是_N集合rdd中元素类型是元组/样例类的时候&#xff0c;转成DataFrame…

zabbix中图形可视化页面中文乱码解决

在window 电脑中的 C:\Windows\Fonts 里面是字体文件&#xff0c;里面有一个 SIMKAI.TTF &#xff08;有的是小写&#xff09; 这个是楷体 将该文件复制到虚拟机中 怎么导入应该不需要我说吧 查看zabbix的字体文件在哪个目录下 [rootlocalhost /]# find / -name fonts /boo…

基于安卓android微信小程序的装修家装小程序

项目介绍 巧匠家装小程序的设计主要是对系统所要实现的功能进行详细考虑&#xff0c;确定所要实现的功能后进行界面的设计&#xff0c;在这中间还要考虑如何可以更好的将功能及页面进行很好的结合&#xff0c;方便用户可以很容易明了的找到自己所需要的信息&#xff0c;还有系…

Qt控件按钮大全

​ 按钮 在 Qt 里,最常用使用的控件就是按钮了,有了按钮,我们就可以点击,从而响应事件,达到人机交互的效果。不管是嵌入式或者 PC 端,界面交互,少不了按钮。Qt 按钮部件是一种常用的部件之一,Qt 内置了六种按钮部件如下: (1) QPushButton:下压按钮 (2) QToolBu…

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件 2023/11/14 14:11 手机&#xff1a;Realme Q 笔记本电脑&#xff1a;HP https://item.jd.com/100012583174.html 惠普&#xff08;HP&#xff09;战66 三代AMD版 14英寸轻薄笔记本电脑&#xff08;锐龙7nm 六核…

基于PHP的化妆品销售网站,MySQL数据库,PHPstudy,前台用户+后台管理,完美运行,有一万多字论文

目录 演示视频 基本介绍 论文截图 系统截图 演示视频 基本介绍 基于PHP的化妆品销售网站&#xff0c;MySQL数据库&#xff0c;PHPstudy&#xff0c;原生PHP&#xff0c;前台用户后台管理&#xff0c;完美运行&#xff0c;有一万多字论文。 前台功能&#xff1a;用户的注册…

CPU vs GPU:谁更适合进行图像处理?

CPU 和 GPU 到底谁更适合进行图像处理呢&#xff1f;相信很多人在日常生活中都会接触到图像处理&#xff0c;比如修图、视频编辑等。那么&#xff0c;让我们一起来看看&#xff0c;在这方面&#xff0c;CPU 和 GPU 到底有什么不同&#xff0c;哪个更胜一筹呢&#xff1f; 一、C…

【Ubuntu】设置永不息屏与安装 dconf-editor

方式一、GUI界面进行设置 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal打开 Ubuntu 桌面环境的设置菜单。你可以通过点击屏幕右上角的系统菜单&#xff0c;然后选择设置。在设置菜单中&#xff0c;…

Pass基础-DevOps

&#xff0c;DevOps是Dev&#xff08;开发&#xff09;和Ops&#xff08;运维/运营&#xff09;的结合&#xff0c;它将人、流程、工具、工程实践等等结合起来应用到IT价值流的实现过程中&#xff0c;是一系列原则、方法、流程、实践、工具的综合体。DevOps面向应用的全生命周期…

React 高级教程

目录 前言setState函数式编程HooksMy HooksuseState定义原理函数式更新reduce 方法react 源码 useEffect定义原理无限循环 useCallback定义原理 useMemo定义比较 ReduxuseReducer定义使用应用 useContext 前言 在现代前端开发中&#xff0c;React已经成为了一种无法忽视的技术…