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

news2024/11/26 2:43:12

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<MySQL> 查询数据进阶操作 -- 联合查询

目录 一、什么是笛卡尔积&#xff1f; 二、什么是联合查询&#xff1f; 三、内连接 3.1 简介 3.2 语法 3.3 更多的表 3.4 操作演示 四、外连接 4.1 简介 4.2 语法 4.3 操作演示 五、自连接 5.1 简介 5.2 自连接非必要不使用 六、子查询(嵌套查询) 6.1 简介 6.…

C语言:简单的用二维数组打印杨氏三角

杨辉三角&#xff0c;又称帕斯卡三角&#xff0c;是一个数学上的规律图形。它的构造规则如下&#xff1a; 每一行的两个端点数字是1。从第三行开始&#xff0c;每个数字是它上方两个数字的和。每一行数字左右对称。 #include<stdio.h> int main() {int arr[50][50];//定…

应用架构的演进 I 使用无服务器保证数据一致性

在微服务架构中&#xff0c;一个业务操作往往需要跨多个服务协作完成&#xff0c;包含了读取数据和更新多个服务的数据同时进行。在数据读取和写入的过程中&#xff0c;有一个服务失败了&#xff0c;势必会造成同进程其他服务数据不一致的问题。 亚马逊云科技开发者社区为开发者…

笔试面试相关记录(13)

&#xff08;1&#xff09;一个链表&#xff0c;当一个结点为偶数&#xff0c;且它前面的结点为奇数时&#xff0c;将这个节点合并到前面的结点中&#xff0c;一直执行这个操作&#xff0c;知道没有满足条件的结点时。 输入如下&#xff1a;{2,3,4,1,2,2,3} 输出&#xff1a;…

windiws docker 部署jar window部署docker 转载

Windows环境下从安装docker到部署前后端分离项目(springboot+vue) 一、前期准备 1.1所需工具: 1.2docker desktop 安装 二、部署springboot后端项目 2.1 部署流程 三、部署vue前端项目 3.1相关条件 3.2部署流程 四、前后端网络请求测试 一、前期准备 1.1所需工具: ①docke…

炒现货黄金怎么做?挖掘黄金的投资机会

黄金一直以来都是备受投资者追捧的避险资产&#xff0c;其价值和潜力是无法忽视的。而炒现货黄金作为一种快速获取收益的投资方式&#xff0c;备受关注。那么&#xff0c;如何在炒现货黄金中找到投资机会呢&#xff1f;为您详细解析&#xff0c;简单易懂&#xff0c;帮助您开启…

[PyTorch][chapter 63][强化学习-QLearning]

前言&#xff1a; 这里结合走迷宫的例子,重点学习一下QLearning迭代更新算法 0,1,2,3,4 是房间&#xff0c;之间绿色的是代表可以走过去。 5为出口 可以用下图表示 目录&#xff1a; 策略评估 策略改进 迭代算法 走迷宫实现Python 一 策略评估 强化学习最终是为了…

247:vue+openlayers 根据坐标显示多边形(3857投影),计算出最大幅宽

第247个 点击查看专栏目录 本示例是演示如何在vue+openlayers项目中根据坐标显示多边形(3857投影),计算出最大幅宽。这里先通过Polygon来显示出多边形,利用getExtent() 获取3857坐标下的最大最小x,y值,通过ransformExtent转换坐标为4326, 通过turf的turf.distance和计算…

Winodws核心编程 多线程

目录 一、基本概念 二、线程创建函数 三、Windows内核对象与句柄 四、简单的多线程案例 五、线程同步 - 互斥对象 六、多线程实现群聊的服务端和客户端 七、线程同步 - 事件对象 八、事件对象 与 互斥对象区别 九、线程同步 - 信号量 十、线程同步 - 关键代码段 十一…

HC^2:基于混合对比学习的多场景广告预估建模

1. 摘要 多场景广告预估建模旨在利用多场景的数据来训练统一的预估模型&#xff0c;以提高各个场景的效果。尽管现有研究方法在推荐/广告领域已取得了不错的提效&#xff0c;但现有的建模方式仍然缺乏跨场景关系的考虑&#xff0c;从而导致模型学习能力的限制和场景间相互关系建…

企业APP软件定制开发的关键步骤|网站小程序搭建

企业APP软件定制开发的关键步骤|网站小程序搭建 在当今数字化快速发展的时代&#xff0c;企业越来越意识到拥有自己的APP软件对于提高业务效率和用户体验的重要性。然而&#xff0c;企业APP软件定制开发并不是一项简单的任务&#xff0c;它需要经过一系列关键步骤来确保最终的产…

vagrant+virtualbox的踩坑记录

vagrant virtualbox 文章目录 vagrant virtualbox一、导入虚拟机ova文件失败二、修改虚拟机的保存位置三、无法使用xshell等软件用密码进行连接四、vagrant up失败 一、导入虚拟机ova文件失败 背景&#xff1a;手动删除了虚拟机文件导致无法重新导入相同名称虚拟机的ova文件…

redis-5.0.8主从集群搭建、不重启修改配置文件

一、环境准备 192.168.5.100 redis-01 192.168.5.101 redis-02 192.168.5.102 redis-03 关闭防火墙、能够通网 二、安装redis [rootlocalhost ~]# wget http://download.redis.io/releases/redis-5.0.8.tar.gz [rootlocalhost ~]# tar xf redis-5.0.8.tar.gz -C /usr/loca…

C进阶---自定义类型:结构体、枚举、联合

目录 一、前言 二、结构体 2.1结构体的声明 2.2特殊的声明 2.3结构体的自引用 2.4结构体变量的定义和初始化 2.5结构体内存对齐 2.6修改默认对齐数 2.7结构体传参 三、位段 3.1什么是位段 3.2位段的内存分配 3.3位段的跨平台问题 3.4位段的应用 四、枚…

IDEA 高分辨率卡顿优化

VM设置优化 -Dsun.java2d.uiScale.enabledfalse 增加该条设置&#xff0c;关闭高分切换 https://intellij-support.jetbrains.com/hc/en-us/articles/115001260010-Troubleshooting-IDE-scaling-DPI-issues-on-Windows​intellij-support.jetbrains.com/hc/en-us/articles/1…

MATLAB中uiresume函数用法

目录 语法 说明 示例 按下按钮后恢复执行 使用函数调用恢复执行 uiresume函数的功能是恢复暂停程序的执行。 语法 uiresume uiresume(f) 说明 uiresume 恢复与当前图窗 (gcf) 关联的对应 uiwait 调用暂停的程序执行。 uiresume(f) 恢复与图窗 f 关联的对应 uiwait 调用…

【C#学习】给FormClosing增加消息响应函数

第一步&#xff1a;增加消息句柄 第二步&#xff1a;编写消息函数 private void Form1_FormClosing(object sender, FormClosingEventArgs e) {//add your code hereserialPort1.Close();}

人工智能 :一种现代的方法 第七章 逻辑智能体

文章目录 前言人工智能 &#xff1a;一种现代的方法 第七章 逻辑智能体7.1 基于知识的智能体7.2 Wumpus世界7.4 命题逻辑7.5 命题逻辑定理证明7.5.1推导和证明7.5.2 归结原理7.5.3 horn子句和限定子句7.5.4 前向链接和后向链接 7.6 有效命题逻辑模型求解7.6.1完备的回溯算法7.6…

分类预测 | Matlab实现QPSO-SVM、PSO-SVM、SVM多特征分类预测对比

分类预测 | Matlab实现QPSO-SVM、PSO-SVM、SVM多特征分类预测对比 目录 分类预测 | Matlab实现QPSO-SVM、PSO-SVM、SVM多特征分类预测对比分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现QPSO-SVM、PSO-SVM、SVM分类预测对比&#xff0c;运行环境Matlab2018b…

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能否正常工作…