单片机及C语言入门 您所在的位置:网站首页 单片机都用什么语言编程软件 单片机及C语言入门

单片机及C语言入门

2024-07-02 07:05| 来源: 网络整理| 查看: 265

本篇文章是给单片机纯小白制作的,为了让刚接触单片机的小伙伴不至于一头雾水,如果有不理解的章节,可以在评论区留言,我会在文章中继续补充。

一、什么是单片机? 将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM中),就构成了一台单片微型计算机(简称单片机)。 由于单片机在使用时,通常处于测控系统的核心地位并嵌入其中,因而,国际上通常把单片机称为嵌入式控制器( Embedded MicroController Unit, EMCU )或微控制器( MicroContoller Unit,MCU)。而在我国,大部分工程技术人员则习惯使用“单片机”这一名称。单片机是一块可编程的控制芯片,通过给单片机设计不同的程序,让单片机执行不同的功能。种类:4位、8位、16位和32位单片机,位数越高,数据处理能力更强。 8051单片机、AVR单片机、PIC单片机、MSP430/432单片机、基于ARM技术的单片机。用途: 工业自动化: 数据采集、测控技术。 智能仪器仪表: 数字示波器、数字信号源、数字万用表、感应电流表等。 消费类电子产品: 洗衣机、电冰箱、空调机、电视机、微波炉、手机、IC 卡、汽车电子设备等 。 通讯方面: 调制解调器、程控交换技术、手机、小灵通等。 武器装备: 飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。单片机最小系统板

需要添加复位电路,电源电路、晶振电路,单片机才能正常工作。

二、单片机结构 单片机的结构 单片机内部各种部件:CPU,RAM,ROM,计时器/计数器、串行口,IO口、中断系统、特殊功能寄存器、看门狗定时器。

举例:AT89S51

片内结构图 在这里插入图片描述 图片来源网络

封装图 在这里插入图片描述

图片来源网络

实物图 在这里插入图片描述 图片来源网络

下面是该51单片机的引脚的介绍: VCC为电源引脚,用于给单片机供电,VSS为接地。 1~40的数字为不同引脚的编号,数字旁边的英文+数字是引脚的名称,如P1.0、P1.1、P1.2,VCC等。 2. IO口(input,output) 以P开头的引脚是IO口引脚(P0.0–P0.7、P1.0–P1.7、P2.0–P2.7,P3.0–P3.7),IO有两种状态,高电平和低电平,也叫1和0。 高电平简单来说就是相对高的电压,一般为单片机的VCC的电压,5V或3.3V,AT89S51为5V。 低电平为0V。 单片机上电后IO口的默认状态为悬空。 可以用程序来控制单片机,让单片机的IO口输出不同的电平,若再给IO口引脚连接到电子元件,可以完成不同的目的如led亮灭等。 也可以给单片机的IO引脚连接外部电源或者接地,此时可以编写程序,让单片机检测自己引脚电平状态,实现计算、逻辑运算等不同的功能。 3. 其他功能 复位:能让单片机内部程序从头开始运行,单片机RST引脚接高电平 RX/TX : 在单片机和其他设备通信时候用。 ADC: 采集外部信号时用

三、单片机工作过程 如果使用实物 设计电路:设计搭建好硬件电路。【最简单电路直接用导线连接,较简单电路可以用面包板连接,当然有焊接条件的可以用洞洞板,PCB板(需要学习画PCB的软件)】。 编程:用软件编写C语言程序(keil4、keil5等)。注:51单片机和一些其他单片机都用C语言进行编程,当然也有可以用Python等语言编写程序的单片机,如ESP32。 编译:把C语言程序编译成 .hex文件 烧录:用下载线连接单片机和电脑 ,把hex文件“输入”到单片机内部,即把程序写入单片机。(这个烧录过程可以理解为光盘的刻录的写入数据,但是它们的原理是不同的) 上电运行:单片机根据烧录的程序,开始执行对于的操作。

注:如果使用实物,只有孤零零的一块MCU芯片是不行的,还需要外围电路(晶振、复位电路、烧录电路等),并且需要焊接。初学者可以用仿真或购买一块该芯片的最小系统板(包含了外围电路和MCU芯片,且较便宜),如果预算充足,可以购买相应芯片的开发板(开发板还焊接了各类外设:LED、数码管、按键等)

如果使用仿真 设计电路:打开proteus软件,选择对应单片机型号,放置单片机,设计需要的电路 编程:用软件编写C语言程序(keil4、keil5等) 编译:把C语言程序编译成 .hex文件 烧录:双击单片机芯片,选择编译好的hex文件,确定。 运行:点击运行按钮,运行proteus仿真

如果需要修改程序,可以重新烧录运行。

四、单片机编程–C语言入门

编程可以让电脑代替人完成一些工作,如果应用到单片机领域,就可以让单片机完成一些功能 1. 位和进制 (1) 介绍进制转化 在此之前,介绍字节和位数的概念:由于内部结构,计算机只能识别0和1两种状态,位是最基本单位,它只能取值0和1 1个字节 = 8位 请添加图片描述 1位二进制只能是0和1,2位二进制的组合方式有00、01、10、11 ,换算成十进制后,分别可以表示 0、1、2、3 。4位二进制的组合方式有16种,可以表示十进制0~15,总共16个数字,如下图所示。 依次类推 n位可以表示2^n个数字。 所以一个字节的大小为0~255。 所以任意一个数字可以被0和1来表示,0和1组成的数叫二进制数 同样的,也有16进制数,十进制的0-15分别用十六进制的0-9、A~F(不区分大小写)表示,一般会在十六进制前加0x用以区分不同进制 举个例子: 十进制的15用0xF表示,16用0x10表示(F+1会向第二位进位),255用0xff表示 在单片机中会经常用到十六进制数和二进制的转换 请添加图片描述 图片来源网络

根据数学规律,二进制每4个一组 转化为对应的十六进制字母 即可得到十六进制数

| 二进制数: 1001 0001 1111 1100  转化为十六进制数 |    |   |   ||---------------------------------------|--------|------|------|------|------|--|--|--|
| 每4位转化为十六进制数              |    | 1001 | 0001 | 1111 | 1100 ||                    |    | 9  | 1  | f  | c  |
| 结果                  | 0x91fc |

即1001000111111100=0x91fc,反之也成立 只有二进制和十六进制转化时可以每一位分开转化,二进制和十进制之间不可以,也就是说 0001 1001 不能等于 十进制19,十进制15也不能等于001101 (2) 介绍位运算 位运算为二进制数的运算,所以其他进制数进行位运算时需要转化为二进制数

运算名称 运算符号 : 运算举例,解释 与 &:0&0=0,0&1=0,1&0=0,1&1=1,0和任意数相与(&)得0。 或 | :0|0=0,0|1=1,1|0=1,1|1=1, 1和任意数相或(|)得1。 异或^: 0^0=0,0^1=1,1^0=1,1^1=0 相同为0,相异为1 取反~:~0=1,~1=0 左移:01=0表示0右移一位,还是0

多位二进制数也可以进行位运算 0001&1111=0001 运算方法为逐位相与 0&0 0&0 0&0 1&1 多位二进制数也可以进行移位运算 01011=0010 ,左侧补0,低位1直接舍弃 2. 语法 下面是一些所要用到的C语言知识。单看一篇文章是无法掌握一门语言的,建议看完本文并有点感觉的同学去阅读相关书籍和视频。 下文仅作入门知识讲解。

(1) 就像学习英语等其他语言一样,掌握语法是基础,C语言也有自己的语法。 电脑执行C语言程序时,会一行执行完,再执行下一行,即顺序执行 请添加图片描述

如图中执行完第24行后,才会到25行,然后26行,27,28… (2) C语言每一条语句末尾都需要添加分号,如果不添加分号,就会和下一条语句视为同一行。 (3) 一条语句分为几部分内容,内容之间需要用空格隔开,如定义变量中int和a之间要用空格隔开。 (4) C语言大括号用于区分不同的代码块,相当于给代码分组,几个语句可以分为一组 (5) 注释: 单行注释用 两个斜杠+注释内容 表示。如上图的绿色字体。 多行注释用 /* 注释内容 */表示,注释内容两边加斜杠和星号。 注释不算语句,对语句的运行没有影响,主要用于解释自己的语句内容。 勤加注释可以帮助自己理清程序思路,让别人读懂自己的程序,在程序出现bug时更好排查 (6) C语言所有语句都用英文输入法来写,包括逗号,分号,引号,如果语句内容出现中文汉字或中文标点,程序会出错 3. 变量 变量可以存储一些数据,能执行逻辑运算等操作。 操作变量分为三步:定义,赋值、运算 (1) 定义 : 定义变量的取值范围,后面的赋值操作不能超出这个范围 ,定义只需定义一次。语法结构为 : 数据类型+空格+变量名字+分号 如

int a; float a1;//a和a1是不同变量的名字 unsigned int car; char car_value1;//变量名字可以为字母数字下划线,但名字开头不能用数字,如1a,1b是错误的命名方式。

数据类型包括char , int,unsigned int,float,short int,unsigned short int,long int,unsigned long int,char,float 等。(数据类型的作用:让数字、浮点数、字符这些内容分开,因为它们各自的所占存储空间是不同的) 这些类型的区别为定义的范围不同: int定义的变量范围为4个字节,范围为 在这里插入图片描述

char定义的为8个字节,范围为-128~127, unsigned char定义的范围和char一样,unsigned意思是没有符号,不能为负数,即unsigned char的变量只能取0~255 ![[Pasted image 20220917171711.png]]

(2) 逻辑运算和算术运算 运算的语法结构为: 变量名字 + 运算符 + 运算的内容(可以为数字、字母、另外一个变量名等)+ 分号 举例

a = 1; //把1赋值给a, 注意:赋值前一定要先定义

还可以把其他变量的值赋值给这个变量

int b; //定义b为int类型 int a; //定义a为int类型 b=1; //给b赋值给1 b=2; //多次赋值会覆盖之前的值,值以最近的一次为准,所以此时b的值为2 a=b; //把b的值赋值给a , 此时a的值为2 b=b-1;//把b-1的值赋值给b,因为b-1等于1,所以b的值此时变成了1 b=b1的结果为true(真或1)。如果a为2,那么结果为真。 a b=1 } //if内条件成立,执行语句b=2,给b赋值

除了if,还有switch case语句。

循环的作用: 执行多条重复或有规律的语句 有两种 while语句 for语句 while:

while(判断语句) { //判断语句成立时执行大括号内的代码 /*如果执行完一次,会进入判断语句,再次判断条件是否成立(true),如果成立,就会再执行代码,如果不成立,不会执行代码,直接执行while后面的其他代码*/ /*执行次数取决于判断语句*/ } /*其他代码(在大括号外边,不在while的作用域内)*/*

举例

int a=1;//定义和赋值写一起也可以 int b; while(a


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有