单片机基础知识

news2024/9/28 13:23:20

目录

一、单片机基本认知

二、IO口输入和输出

三、点亮一个LED

1、编程实现LED闪烁

2、按下按键点亮灯

3、按键的消抖

4、记录状态位来控制LED


一、单片机基本认知

单片机和PC电脑相比的话,相当于电脑的主板

单片机是一种集成电路芯片。单片机又称单片微控制器,是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。一块芯片就成了一台计算机。采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

单片机的特点是体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。

2、什么是单片机开发板

基于单片机设计一些外接电路,模块以满足学习,日常调研等工作需求

单片机命名规则:封装、LQFP44、特性、定时器、计数器、串口、看门狗、IO

3、单片机编程是什么

人类要求单片机干具体的活,有点像提前写个小纸条贴冰箱上,告诉你女朋友煮鸡蛋不加水

4、单片机执行程序怎么理解

女朋友看到女朋友,照做

5、单片机能做什么事情

IO口供电、串口数据传输等

6、肉眼可见的引脚是什么

方便人类对单片机IO口,串口接东西

7、单片机CPU怎么找到IO口

通过寻址,说白了有一些地址数据,头文件帮你做很多了

8、怎么写纸条(编程)到IO口呢

sfr"指令":用来直接描述硬件地址,小白先理解成“一组IO口”的起始地址中数据

sfr P0 = 0X80;

9、怎么找到IO具体的一个引脚

sbit"指令":对应可位寻址空间的一个位,小白先理解成"一个IO口针脚"的地址中数据

sbit led2 = P3^6

C语言的一个字节,char型就是8位

二、IO口输入和输出

1、对单片机来讲,IO口的输入(把外面的东西拿回来)输出(给东西到外面)

out:指向外输出数据

in:  指向内输入数据

89C52比较简单粗暴,关于引脚输入还是输出的功能不需要配置

sbit IFfire = P1^0;

int main(){

    int io_data;
    //什么情况叫输入
    io_data = IFfire;  //给变量赋值,就是输入-----或者理解为,这个针脚有数据啦,拿个变量来保存
    if(io_data == 0){
        
    }
  
    //什么情况叫输出
    IFfire = 1;        //被给予一个值,引起IO口变化(一般1代表输出高电平、0代表输出低电平)
                         此时为输出,来影响外接的电路
    return 0;
}

三、点亮一个LED

LED:代表二极管

KEY:代表按键

GND:就是0,代表低电平,上电状态

#include "reg52.h"

sbit ledOne = P3^7;
sbit ledTwo = P3^6;
void main()
{
	
	ledOne = 0;
	ledTwo = 0;
	
}

1、编程实现LED闪烁

软件延时器的使用

#include "reg52.h"

sbit ledOne = P3^7;

void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{	
	while(1){
	//灯亮,给P3.7一个低电平
	ledOne = 0;
	//数数,数的期间,维持低电平,灯亮,延迟
	Delay500ms();
	//灯灭,给一个高电平
	ledOne = 1;
	//数数,数的期间,维持低电平,灯灭,延迟
	Delay500ms();
	}			
}

2、按下按键点亮灯

怎么知道sw1按键被按下

KEY1位置和GND接通,表现为低电平,值为0

怎么知道sw1按键没有被按下

KEY1位置通过上拉电阻到5V,表现为高电平,值为1

通过电路图分析得知

KEY1接到STC89C52的P2.1口,我们只要不断的检测P2.1口的值(0按下,1松开)就能知道按键是否被按下

3、按键的消抖

#include "reg52.h"
#include <intrins.h>

sbit key1   = P2^1;
sbit key2   = P2^0;
sbit ledOne = P3^7;

void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;
	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	while(1){		
			if(key1 == 0){               //KEY1位置和GND接通,表现为低电平,值为0
					Delay500ms();        //给一个延时处理
					if(key1 == 0){				
							ledOne = 0;  //灯亮,给P3.7一个低电平
					}
			}	
			if(key2 == 0){               //KEY2位置和GND接通,表现为低电平,值为0
					ledOne = 1;          //灯灭,给P3.7一个高电平
			}
	}
}

4、记录状态位来控制LED

#include "reg52.h"
#include <intrins.h>

#define ON_STATUS  1
#define OFF_STATUS 0

sbit key1   = P2^1;
sbit key2   = P2^0;
sbit ledOne = P3^7;

void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;
	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	int ledMark = OFF_STATUS;
	ledOne = 1;
	while(1){		
			if(key1 == 0){    
					Delay500ms(); 
					if(key1 == 0){
							ledMark = ON_STATUS;  //记住,key1被按下,记住,在其他地方点灯
					}
			}
			if(key2 == 0){    
					ledMark = OFF_STATUS;
			}
			if(ledMark == OFF_STATUS){
					ledOne = 1;
			}else{
					ledOne = 0;
			}
	}
}

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

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

相关文章

S32DS_Optimization优化选项

S32DS_Optimization优化选项 S32DS3.4的选项, 右击工程后出现的选项 char is signed 让char类型为有符号, 类似signed char bitfield is unsigned 当声明不使用signed/unsigned时, 控制位字段是否无符号; 默认signed(因为基本整形(int等)也是signed) Function sections 默认情…

C语言—动态内存管理和柔性数组

目录 1. C/C的内存开辟 2. 为什么存在动态内存分配 3. 动态内存函数介绍 3.1 malloc 和 free 3.2 calloc() 3.3 realloc() 4. 常见的动态内存错误 4.1 对NULL指针的解引用操作 4.2 对动态开辟的空间越界访问 4.3 对非动态内存开辟的空间进行free&#xff08;&…

外贸谈判前需要注意的4p

01Past了解客户的过去 当一个客户找到我们的时候&#xff0c;作为业务&#xff0c;我们需要第一时间回复客户所问到的问题。让客户感受到&#xff0c;他需要的产品我们公司可以提供。于此同时&#xff0c;在客户沟通意愿度较高的时候&#xff0c;我们不妨多跟客户沟通一下几个问…

Java学习笔记 --- MySQL-索引和事务

一、索引 索引的原理 1、没有索引会全表扫描&#xff0c;从而查找速度会很慢 2、使用索引会形成一个索引的数据结构&#xff0c;比如二叉树 3、索引的代价 磁盘占用 对 dml&#xff08;update、delete、insert&#xff09;语句的效率影响 索引的类型 1、主键索引&#xff…

2022年圣诞节 | 用代码实现简单圣诞树

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ 一、前言 本文我们用 Python 来画一棵带背景音乐效果的雪夜圣诞树以及使用 HTMLCSSJS 在页面渲染出动态圣诞树&#xff0c;所涉及到的源码均来自GitHub开源站点。 二、效果展示 Python HTMLCSSJS 三、编码实现 …

(六)汇编语言——包含多个段的程序

目录 使用数据 使用栈 代码 总结 使用数据 首先&#xff0c;我们来看一个问题&#xff0c;就是编程计算0123H&#xff0c;0456H&#xff0c;0789H&#xff0c;0abcH&#xff0c;0defH&#xff0c;0fedH&#xff0c;0cbaH&#xff0c;0987H的和&#xff0c;结果存在ax寄存器…

《剑指offer》每日三题

这里使用的是题库&#xff1a; https://leetcode.cn/problem-list/xb9nqhhg/?page1 目录剑指 Offer 07. 重建二叉树剑指 Offer 14- I. 剪绳子剑指 Offer 14- II. 剪绳子 II剑指 Offer 07. 重建二叉树 递归思想&#xff1a; 代码 class Solution {int pPre0;//用于遍历preorde…

深入理解HashMap

HashMap集合 1. HashMap集合简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。hashMap的实现不是同步的&#xff0c;这就意味着它不是线程安全的。它的key、value都可以为null。此外&#xff0c;HashMap中的映射不是有序的。 JDK1.8之前…

短视频上热门技巧总结,这样做你也可以快速上热门。

最近开始做短视频&#xff0c;找了很多短视频运营创作技巧&#xff0c;但能上热门的只有那么几个&#xff0c;经过近一周的分析&#xff0c;结合了我赢上短视频运营创作技巧&#xff0c;得到了以下几个经典技巧合集&#xff1a;学会一个就值了。 首先说一下&#xff1a;什么样的…

团簇生长过程-Ovito渲染

文章目录一、选择出团簇原子和非团簇原子1. 选择团簇原子2. 删除非团簇原子二、选择出团簇原子和非团簇原子1. 团簇分析2. 团簇具体信息三、渲染团簇1、 对团簇进行选择2、 获得团簇渲染后的结果四、渲染结果五、 案例dump下载博文《根据近邻列表法识别团簇—冷凝成核 MatlabOv…

java06-面向对象1

一&#xff1a;面向对象学习内容&#xff1a; 1.java 类及成员&#xff1a;属性、方法、构造器、代码块、内部类 2.面向对象三大特征&#xff1a;封装、继承、多态 3.其他关键字&#xff1a;this、super static、final、abstact、interface 、package、import 二&#xff…

iPhone/iPad上值得推荐的5个免费PDF转Word

PDF 文件是在不同平台上传输数据的最便捷方式&#xff0c;可确保保持高端信息质量。处理将不同文件格式转换为 PDF 的任务通常很麻烦&#xff0c;尤其是在 iOS 设备上。为了解决这个问题&#xff0c;这里讨论了您可以轻松依赖的前 5 个iPhone PDF 转换器工具。 适用于 iPhone 和…

多传感器融合定位六-惯性导航原理及误差分析

多传感器融合定位六-惯性导航原理及误差分析1. 惯性技术简介1.1 惯性技术发展历史1.2 惯性器件1.2.1 机械陀螺(几乎没人用了)1.2.2 激光陀螺1.2.3 光纤陀螺1.2.4 MEMS陀螺(常用)1.2.5 加速度计2. 惯性器件误差分析2.1 信号误差组成2.2 Allan方差分析3. 惯性器件内参标定3.1 惯性…

十六、状态管理——Vuex(1)

本章概要 简单的状态管理安装 Vuex基本用法 Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式。他采用集中式存储来管理应用程序中所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 Vuex 也被集成到了 Vue 官方调试工具 vue-devtools 中…

跨年夜,想请你看一场烟花秀!

代码分享地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Cu_lKYfAlMBDttSzhVXPuQ 提取码&#xff1a;2ocd 代码效果展示&#xff1a; 源代码分享如下&#xff1a; <!--* Author: Xiao Wang* Date: 2022-12-30 14:26* Description: --> <!DOCTYPE html …

剑指 Offer 20. 表示数值的字符串

题目 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。 数值&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 若干空格 一个 小数 或者 整数 &#xff08;可选&#xff09;一个 ‘e’ 或 ‘E’ &#xff0c;后面跟着一个…

canopen11-sdo-2b写入命令

源码 1、SDO介绍 就对象而言,主机要访问节点词典的数据,因此主机是client客户端,节点是server服务器。上传与下载是对服务器来说的(这点和常识有点不太一样)。因此,上传指的是服务器发送数据给客户端,下载是客户端给服务器数据。 我们这里要用主机访问节点服务器2000位…

Go 语言从入门到实战

《Go 语言从入门到实战》 的学习笔记&#xff0c;欢迎阅读斧正。感觉该专栏整体来说对有些后端编程经验的来说比无后端编程经验的人更友好。 数据类型 运算符 算数运算符 比较运算符 用 比较数组 相同维数切含有相同个数元素的数组才可以比较&#xff0c;每个元素都相同的才…

四旋翼无人机学习第18节--cadence的bom表、网表导出,PCB板创建,层叠设置

文章目录1 bom表导出2 网表导出3 PCB板创建4 PCB板文件重要设置5 层叠设置1 bom表导出 1、选择DSN文件&#xff0c;之后依次点击Tools&#xff0c;Bill of Materials。 2、当然&#xff0c;也可以点击图标进行bom导出。 3、下图标出的地方可以自行修改&#xff0c;最后点击O…

设计师必须知道的 5个设计灵感网站

设计没灵感&#xff0c;一定要上这5个网站&#xff0c;设计师每天必逛&#xff0c;建议收藏&#xff01; 设计素材免费下载&#xff1a; https://www.sucai999.com/?vNTYwNDUx 国内灵感网 1、设计之窗 http://www.333cn.com/ 设计之窗是一个设计师分享作品及备案的网站&…