当前位置: 首页 > news >正文

单片机 | 51单片机实践

【金善愚】 单片机应用实践——基础篇 笔记整理
课程视频 :https://space.bilibili.com/483942191/channel/collectiondetail?sid=144001

仿真软件:Proteus 8.13
安装链接:https://pan.baidu.com/s/1-1fscykdvulV60xA4Hygaw?pwd=xeob

代码软件:Keil μvision V5.14.2
安装链接:https://pan.baidu.com/s/1MRdG2EkxORr6M6XH-n5ang?pwd=l2rm

文章目录

  • 一、点亮LED 灯
    • 1.仿真原理图
    • 2.代码
    • 2.软硬件关联
  • 二、LED 闪烁
    • 1.基本数据类型
    • 2.代码
    • 2.调试
  • 二、LED 流水灯
    • 1.用简单顺序语句的方法实现
    • 2.用数组的方法实现(多文件)
    • 3.用库函数的方法实现
    • 4.用移位运算符的方法实现
  • 三、蜂鸣器
  • 总结


一、点亮LED 灯

1.仿真原理图

  内容

电阻 RES
电容 CAP
晶振 crystal
按键 button

2.代码


//包含单片机的头文件,建立软件和硬件的联系
#include<reg51.h>//sbit LED0 = P1^0;  //位操作,取P1的0位命名为LED
//sbit LED1 = P1^1; 
//sbit LED2 = P1^2; 
//sbit LED3 = P1^3; void main()
{while(1) //保持循环执行{P1 = 0xF0; //P1.7 - P1.0 赋值 1111_0000//LED0 = 0;//LED1 = 0;//LED2 = 0;//LED3 = 0;  //P1其他位默认为1}
}

2.软硬件关联

(1)生成HEX文件

a.点击图示的快捷图标
在这里插入图片描述

b.生成
在这里插入图片描述

c.编译
在这里插入图片描述

d.文件位置
在这里插入图片描述

(2)仿真中关联代码

a.双击单片机,找到HEX文件位置,关联代码
在这里插入图片描述

(3)开始仿真
在这里插入图片描述

在这里插入图片描述

二、LED 闪烁

1.基本数据类型

在这里插入图片描述

2.代码

(1)用循环语句方式

#include<reg5l.h>void main ( )
{unsigned int i;//无符号整形0~65535while (1){i =20000;P1 = 0xFO;//1111 0000while ( i--){}i = 20000;P1 = 0x0F;//0000 1111while ( i--);//for(i = 0 ; i<50000;i++) //用for语句}
}

(2)用延时函数方式


#include<reg51.h>void delay();//声明函数void main()
{while(1) {P1 = 0xf0;delay();P1 = 0x0f;delay();	}
}void delay()
{unsigned int ms = 500000;while(ms--){		}}

(3)用带参数的延时函数

/****************************************
功  能:带有参数的延时函数实现小灯的闪烁
时  间:****/**/**
****************************************/#include<reg51.h>//声明引脚
sbit LED = P1^7;//函数声明
void DelayXms(unsigned int xms);/****************************************
函数名: main
功  能: 主函数
参  数: 无
返回值: 无
****************************************/
void main()
{while(1) {LED = 0;DelayXms(1000);//调用函数LED = 1;DelayXms(1000);	}
}/****************************************
函数名: DelayXms
功  能: 延时函数
参  数: unsigned int
返回值: 无
****************************************/
void DelayXms(unsigned int xms)
{unsigned int i,j; // 0 -65535 0000H - FFFFHfor(i = xms;i>0;i--){for(j = 124;j>0;j--){}}
}

2.调试

(1)设置

晶振和仿真
在这里插入图片描述
在这里插入图片描述

(2)进入调试模式
在这里插入图片描述

(3)时间等状态
在这里插入图片描述

(4)分步调试
在这里插入图片描述
①运行到鼠标所在位置
②单步运行
③进入函数
④运行全部(直至断点)
⑤设置断点

二、LED 流水灯

1.用简单顺序语句的方法实现

#include<reg51.h>void DelayXms(unsigned int xms); //函数声明,或者将延迟函数放在main()函数前面,否则会报错void main()
{while(1) {P1 = 0xfe; //1111 1110DelayXms(1000); //调用函数P1 = 0xfd; //1111 1101DelayXms(1000);	P1 = 0xfb; //1111 1011DelayXms(1000);P1 = 0xf7; //1111 0111DelayXms(1000);P1 = 0xef; //1110 1111DelayXms(1000);P1 = 0xdf; //1101 1111DelayXms(1000);P1 = 0xbf; //1011 1111DelayXms(1000);P1 = 0x7f; //0111 1111DelayXms(1000);}
}//延时函数
void DelayXms(unsigned int xms)
{unsigned int i,j; // 0 -65535 0000H - FFFFHfor(i = xms;i>0;i--)for(j = 124;j>0;j--);
}

2.用数组的方法实现(多文件)

1.创建工程目录下新建4个文件夹,并修改设置下的存放路径

Listings  放中间文件
Output   放输出HEX等文件
Project   放工程文件
Source  放 .c、 .h文件

在这里插入图片描述

2.创建模块的 .c文件并创建其对应的.h文件

  • .c文件负责函数的定义及变量的定义
  • .h文件负责函数的声明及变量的声明(不允许赋初值)以及常量和I/O口的宏定义

(1) delay.c

#include"delay.h" //""头文件会在当前目录下查找。< >头文件一般是系统头文件,会在安装目录下寻找/*************************************
函数名:DelayXms
功  能:毫秒级延时函数
参  数: unsigned int(1 - 65535)
返回值:无
***********************************/void DelayXms(unsigned int xms)
{unsigned int i,j; // 0 -65535 0000H - FFFFHfor(i = xms;i>0;i--)for(j = 124;j>0;j--);
}

(2) delay.h

#ifndef __DELAY_H__
#define __DELAY_H__void DelayXms(unsigned int xms); //声明加分号#endif

2.创建main函数的 .c文件,可直接引用模块头文件使用

main.c

#include<reg51.h> 
#include"delay.h"unsigned char code LEDBUF[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; 
//创建数组,常量可存放在ROM中,添加关键词code。变量可存放在RAM中void main()
{unsigned char cnt;//unsigned char 类型范围是0 -255while(1) {for (cnt = 0; cnt<8;cnt++){P1 = LEDBUF[cnt];DelayXms(1000);}}
}

3.用库函数的方法实现

1._crol_函数

_crol_函数功能:将 c 进行b位左位移,并将值以unsigned char类型返回

//文档定义
#include <intrins.h>unsigned char _crol_ (
unsigned char c,        /* character to rotate left */
unsigned char b);       /* bit positions to rotate */

函数返回类型为unsigned char,函数的两个形参也是unsigned char类型。
c 为要被进行 位左移 的形式参数
b 为要进行的 位移数

注释:向左循环移位时,从左边出去会从右边重新补入

2._cror_函数

与_crol_函数类似,区别只是进行的是右位移

注释:向右循环移位时,从右边出去会从左边重新补入

3.main.c 代码

#include<reg51.h> 
#include <intrins.h>
#include"delay.h"void main()
{unsigned char temp = 0xfe; //1111 1110while(1){P1 = temp;temp = _crol_(temp,1);DelayXms(1000);}
}

4.用移位运算符的方法实现

1.位运算符 及 位表达式

在这里插入图片描述⚠️注意:位表达式c<<1的值是0011 1100B,而c的值并未改变,仍是1001 1110B。移出补0。

2.代码

(1)main.c 用移位+补位方法

#include<reg51.h> 
#include <intrins.h>
#include"delay.h"void main()
{unsigned char temp = 0xfe; //1111 1110while(1){P1 = temp;			// 输出DelayXms(1000);		// 延时if (temp & 0x80)	// 判断temp最高位是否为1{temp = temp<<1;	// 左移temp = temp|1; 	// 如果左移之前temp最高位为1,则在temp的最低位补1}else{temp<<=1;		// 左移}}
}

(2)main.c 用移位+补位方法

#include<reg51.h> 
#include <intrins.h>
#include"delay.h"void main()
{unsigned char temp = 0x1; //0000 0001unsigned char i;while(1){P1 = ~(temp<<i++);			DelayXms(1000);		if (8 == i)	i=0;	}
}

三、蜂鸣器

1.蜂鸣器工作电路
在这里插入图片描述
图中 D4为 续流二极管:
一种配合电感性负载使用的二极管,当电感性负载的电流有突然的变化或减少时,电感二端会产生突变电压,可能会破坏其他元件。配合续流二极管时,其电流可以较平缓地变化,避免突波电压的发生。

1.原理图

在这里插入图片描述

2.代码

#include<reg51.h> #include"delay.h"sbit Sound = P3^7;
void main()
{unsigned int i;while(1){for(i = 0;i<100;i++){Sound = ~Sound;DelayXms(1);}for(i = 0;i<100;i++){Sound = ~Sound;DelayXms(5);}}
}

总结

以上就是本文要讲的内容。

相关文章:

单片机 | 51单片机实践

【金善愚】 单片机应用实践——基础篇 笔记整理 课程视频 &#xff1a;https://space.bilibili.com/483942191/channel/collectiondetail?sid144001   仿真软件&#xff1a;Proteus 8.13 安装链接&#xff1a;https://pan.baidu.com/s/1-1fscykdvulV60xA4Hygaw?pwdxeob   代…...

根据时间戳获取总用时(天时分秒)

//获取总用时&#xff08;天时分秒&#xff09; export const getTotalTime (time) > { if (!time) { return ""; } let s time / 1000; let m s / 60; let h m / 60; let day h / 24; if (Math.floor(day)) { return Math.floor(day) "天" Mat…...

【独家】华为OD机试 - 符合条件的子串长度 or 连续字串 ABV(C 语言解题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本期题目:符合条件的子串长度 or 连续字…...

达梦数据库 linux安装

检查 Linux(Unix)系统信息 如果用户的 DM 软件安装包是经过数字签名的&#xff0c;请按官网进行相关操作。此处忽略。 获取系统位数 getconf LONG_BIT 查询操作系统release信息 lsb_release -a 查询系统信息 cat /etc/issue 查询系统名称 uname -a 之所以要先检查系统信息&…...

数字孪生颠覆传统铝材挤压生产,全新生产方式即将到来!

随着市场经济的发展&#xff0c;各种新型的高科技建筑材料相继出现&#xff0c;所有的基础工程均需要大量的建筑&#xff0c;需要大量门窗和建筑材料&#xff0c;而铝及其铝合金在其中占有重要的地位。随着时代的进步&#xff0c;材料的应用也发生着变化。因铝合金型材具有强度…...

会声会影2023新版本功能详情讲解

会声会影2023Corel VideoStudio一款功能丰富的视频编辑软件。会声会影2023简单易用&#xff0c;具有史无前例的强大功能&#xff0c;拖放式标题、转场、覆叠和滤镜&#xff0c;色彩分级、动态分屏视频和新增强的遮罩创建器&#xff0c;超越基本编辑&#xff0c;实现影院级效果。…...

nodejs+vue文旅门户信息网站 elementui旅游项目推荐系统 景点门票预订网站vscode

在社会快速发展的影响下&#xff0c;服务行业继续发展&#xff0c;随着旅游的人数不断增加&#xff0c;使哈尔滨旅游项目推荐平台的管理和运营比过去十年更加信息化&#xff0c;依照这一现实为基础&#xff0c;设计一个快捷而又方便的网上哈尔滨旅游项目推荐平台是一项十分重要…...

学习HM微博项目第4天

步骤&#xff1a;OAuth授权01_加载登录界面 -> OAuth授权02_获得accessToken -> OAuth授权03_存储账号信息 -> OAuth授权04_封装账号存储 -> OAuth授权05_封装控制器的切换 OAuth授权01_加载登录界面 为了测试方便&#xff0c;暂时把window的根控制器固定设置为授…...

一次完整的OCR实践记录

一、任务介绍 这次的任务是对两百余张图片里面特定的编号进行识别&#xff0c;涉及保密的原因&#xff0c;这里就不能粘贴出具体的图片了&#xff0c;下面粘贴出一张类似需要识别的图片。 假如说我的数据源如上图所示&#xff0c;那么我需要做的工作就是将上面图片里面标红的数…...

Java中常见的密码学知识

现代密码学 散列函数 散列函数&#xff0c;也见杂凑函数、摘要函数或哈希函数&#xff0c;可将任意长度的消息经过运算&#xff0c;变成固定长度数值&#xff0c;常见的有MD5、SHA-1、SHA256&#xff0c;多应用在文件校验&#xff0c;数字签名中。 MD5 可以将任意长度的原文生…...

Leetcode.2171 拿出最少数目的魔法豆

题目链接 Leetcode.2171 拿出最少数目的魔法豆 Rating &#xff1a; 1748 题目描述 给你一个 正 整数数组 beans&#xff0c;其中每个整数表示一个袋子里装的魔法豆的数目。 请你从每个袋子中 拿出 一些豆子&#xff08;也可以 不拿出&#xff09;&#xff0c;使得剩下的 非空…...

day1 计算机组成与结构考点汇总

一、重点知识点 计算机硬件组成、运算器、控制器奇偶校验码、循环冗余校验码、海明码指令系统&#xff1a;指令操作数寻址方式、CISC和RISC、指令流水线的计算存储系统&#xff1a;分级存储、局部性原理、cache、主存编址计算、磁盘输入输出技术&#xff1a;程序查询方式、中断…...

Java虚拟机的类加载机制

Java虚拟机的类加载机制综述类的生命周期类加载器双亲委派模型---综述 我们编写的Java代码如何能在一个操作系统上运行呢&#xff1f;一般来说&#xff0c;我们使用javac命令将.java文件编译成.class文件&#xff0c;也就是Java字节码文件&#xff0c;然后由JVM将字节码文件加…...

分治法实现合并排序(归并排序),理解分治算法思想,实现分治算法的完美例子合并排序(含码源与解析)

&#x1f38a;【数据结构与算法】专题正在持续更新中&#xff0c;各种数据结构的创建原理与运用✨&#xff0c;经典算法的解析✨都在这儿&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 -…...

Typescript 类 (class)

基本用法 (通过关键字 class) // 基本用法 class VueService {constructor() {} // 构造器 } 类的约束&#xff08;通过关键字 implements&#xff09; // 接口定义属性类型 interface VueProps {name: stringinit: () > void }// 约束类 class VueService implements Vue…...

KDZD程控超低频高压发生器

一、产品概述 本产品接合了现代数字变频技术&#xff0c;采用微机控制&#xff0c;升压、降压、测量、保护自动化。由于电子化&#xff0c;所以体积小重量轻、大屏幕液晶显示&#xff0c;清晰直观、且能显示输出波形、打印试验报告。 设计指标符合《电力设备专用测试仪器通用…...

【华为OD机试 2023最新 】 过滤组合字符串(C++)

文章目录 题目描述输入描述输出描述用例题目解析C++题目描述 数字0、1、2、3、4、5、6、7、8、9分别关联 a~z 26个英文字母。 0 关联 “a”,”b”,”c”1 关联 “d”,”e”,”f”2 关联 “g”,”h”,”i”3 关联 “j”,”k”,”l”4 关联 “m”,”n”,”o”5 关联 “p”,”q”…...

Java笔记034-坦克大战【2】

目录 坦克大战【2】 线程-应用到坦克大战 坦克大战0.3 思路分析&#xff1a; 代码实现&#xff1a; 坦克大战0.4 增加功能 特别说明 思路分析&#xff1a; 代码实现&#xff1a; 坦克大战0.5 增加功能 思路分析&#xff1a; 代码实现&#xff1a; 坦克大战【2】 …...

【算法】【数组与矩阵模块】桶排序思想解决无序数组排序后相邻数间的最大差值

目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介绍 …...

C语言—函数

函数库函数自定义函数函数的参数函数的调用函数的嵌套调用和链式访问函数的声明和定义函数递归递归与迭代函数递归的经典题目维基百科&#xff08;台湾方面维护的&#xff0c;翻译形式跟大陆有所差异&#xff09;中对函数的定义&#xff1a;子程序在计算机科学中&#xff0c;子…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...