单片机及C语言入门

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

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

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

举例:AT89S51

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

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

图片来源网络

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

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

三、单片机工作过程
  1. 如果使用实物
    设计电路:设计好硬件电路
    编程:用软件编写C语言程序(keil4、keil5等)
    编译:把C语言程序编译成 .hex文件
    烧录:用下载线连接单片机和电脑 ,把hex文件“输入”到单片机内部,把程序写入单片机。(这个烧录过程相当于光盘的刻录)
    上电运行:单片机根据烧录的程序,开始执行对于的操作。

  2. 如果使用仿真
    设计电路:打开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进制数,十进制的015,用十六进制的09、A~F(不区分大小写)表示,一般会在十六进制前加0x用以区分不同进制
举个例子: 十进制的15用0xF表示,16用0xF1表示,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。
异或^: 00=0,01=1,10=1,11=0 相同为0,相异为1
取反0=1,~1=0
左移:0<<1=10表示0左移1位,结果为10B(二进制),
右移:0>>1=0表示0右移一位,还是0

多位二进制数也可以进行位运算 0001&1111=0001 运算方法为逐位相与 0&0 0&0 0&0 1&1
多位二进制数也可以进行移位运算 0101<<1=01010,右侧补0
0101>>1=0010 ,左侧补0,低位1直接舍弃
2. 语法
(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,等
这些类型的区别为定义的范围不同: 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=b<<1; //也可以结合位运算,b左移一位,b变成10,即十进制的2

![[Pasted image 20220918211946.png|500]]
![[Pasted image 20220918212110.png|600]]

4.三大基本结构:顺序,选择,循环
![[Pasted image 20220917171630.png]]

顺序就是前面所讲的按行的顺序,向下执行
选择:使用if语句或用switch语句

if(判断语句)
{判断语句的结果为true执行
}
else
{判断语句的结果为false执行
}

判断语句:如
a>1: 如果a的值大于1,a>1的结果为true(真或1)。如果a为2,那么结果为真。
a<1 如果a的值小于1,a<1的结果为true
还有>= , <=表示大于或等于、小于或等于
判断值是否相等用双等号==,例如 a==1判断a是否等于1,等于则结果为true,否则为false
判断值是否不相等用英文感叹号和等号!=,例如 a!=1判断a是否不等于1,不等于则结果为true,否则为false
两个判断语句合并为一个: 语句1 && 语句2 语句1成立且语句2成立
两个判断语句合并为一个: 语句1 || 语句2 语句1成立或语句2成立
if语句的嵌套用法

if(判断语句)
{判断语句的结果为true执行
}
if else(判断句2)
{判断语句2的结果为true执行
}
if else(判断句3)
{判断语句3的结果为true执行
}
...
else
{所有判断语句的结果为false执行
}

举例

int a;
int b;
a=0;
b=1;
if(a==0  && b>0)  //判断是否 a等于0且b大于0
{
b=2
}
else
{
b=1
}//if内条件成立,执行语句b=2,给b赋值

除了if,还有switch case语句。

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

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

举例

int a=1;//定义和赋值写一起也可以
int b;
while(a<3)
{a=a+1;//或写成 a++
}
b=1
/*解释: a<3成立,执行语句a=a+1,a变成2,再执行语句a<3,也成立,再次执行a=a+1,再次判断,3<3不成立,跳出循环,执行b=1,然后顺序执行...*/

其他用法

int a;
while(1)
{a=a+1;
}
/*这里的1也可以看成一条语句,这条语句的结果始终为1,即为true,因此while里面的内容会无限执行下去*/

for语句C for 循环 | 菜鸟教程 (runoob.com)
C 语言中 for 循环的语法:

for ( init; condition; increment )
{ statement(s); 
}

解释

  1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。
    举例
int a;
int b;
for(a=0;a<10;a++)
{//写需要执行的语句if(a==5){b=1;}
}

函数相关知识

函数的定义C 函数 | 菜鸟教程 (runoob.com)
return_type function_name( parameter list )
{
body of the function
}

在 C 语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • **返回类型:**一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void
  • **函数名称:**这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  • **参数:**参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  • **函数主体:**函数主体包含一组定义函数执行任务的语句。
    举例
    ![[Pasted image 20220918212421.png]]

宏定义
![[Pasted image 20220918212515.png|350]]

C语言编程的基本框架
在这里插入图片描述

单片机中用第一种

程序示例

C程序

#include <stdio.h>void main()
{int a;     //定义变量a = 0;     //变量赋值a = a + 1; //变量运算a = a << 1;while(a<3){a = a+1;}b =1 ;for(a=0;a<10;a++){if(a==5){b=1;}}printf("a=%d",a);//打印出a的值
}

单片机程序

#include "reg51.h"  //这是51单片机标准头文件
void main()
{}

编程软件

测试一些的C语言程序可以安装 Dev C++Dev-C++ download | SourceForge.net,能编译成exe文件
如果需要给单片机写程序,需要用keil软件。C51用keil uvision4,编译成单片机能用的hex文件

附录

http://chatgpt.dhexx.cn/article/enJMrs51.shtml

相关文章

【零基础】入门C语言这一篇就够了

初识C语言 1. 什么是C语言&#xff1f;2. 第一个C语言程序2.1 如何写代码2.2 运行代码 3. 数据类型3.1 为什么出现这么多类型&#xff1f;3.2 如何使用数据类型3.3 数据类型的大小 4. 变量、常量4.1 定义变量的方法4.2 变量的命名4.3 全局变量和局部变量4.4 变量的使用4.4.1 sc…

C语言入门学习(入门级C语言)

一、初识C语言 【定义】C语言&#xff1a;一种通用的计算机语言&#xff08;人和计算机交互的语言&#xff09;&#xff0c;广泛用于底层软件开发。 C语言是一门面向过程的编程语言。 【如何写语言代码】 第一步&#xff1a;写出主函数&#xff08;main函数&#xff09; C…

C语言入门教程(一)

C语言入门教程&#xff08;一&#xff09;&#xff1a;输入输出函数、程序中的数据 本文为初学 C语言的学习日志篇一。 实验环境 Ubuntu 16.04 终端gccgedit 代码如下&#xff1a; #include<stdio.h> int main() {int a,b,c;printf(" Please enter a value: &q…

c语言零基础入门(完整版)

1软件下载 官网下载: https://sourceforge.net/projects/orwelldevcpp/ 百度网盘&#xff1a;https://pan.baidu.com/s/1mhHDjO8 提取密码&#xff1a;mken 推荐用百度网盘&#xff0c;官方下载太慢了 开始安装 首先双击打开刚刚下载的软件 点击0k 因为在安装过程中不能使用…

【C语言】 基础知识入门

目录 一&#xff1a;C语言结构 二&#xff1a;C标准库 三&#xff1a;C程序执行过程 编写过程 四&#xff1a;数据类型 五&#xff1a;变量在内存中的存储 六&#xff1a;C基本数据类型 一&#xff1a;C语言结构 1.1 C语言允许分割代码和数据 可以使用具有局部&#xff0…

《零基础看得懂的C语言入门教程 》——(一)脱离学习误区

本节视频连接&#xff1a; https://www.bilibili.com/video/BV1Qv411t7ae 新手C语言学习有些误区你应该知道&#xff0c;这样学习起来事半功倍~ 一、前言 距离上一次编写C语言的教程是5年前了&#xff08;2015年&#xff09;&#xff0c;由于自己是从初一时开始学习编程&…

c语言入门这一篇就够了-学习笔记(一万字)

内容来自慕课网&#xff0c;个人学习笔记。加上了mtianyan标签标记知识点。 C语言入门 -> Linux C语言编程基本原理与实践 -> Linux C语言指针与内存 -> Linux C语言结构体 https://www.imooc.com/course/programdetail/pid/37 c语言入门 C语言一经出现就以其功能丰…

C语言基础知识快速入门(全面)

目录 什么是C语言 计算机语言发展 写第一个C语言代码 基本格式 数据类型 单位 变量 作用域 生命周期 常量 函数 数组 数组初始化 操作符 位操作 赋值 单目操作 关系/逻辑/条件 逗号表达式 关键字 字符串 定义 结束标志 局别 求字符串长度 转义字符 注释…

初识C语言———C语言基础入门

目录 一.什么是C语言 二.第一个C语言程序 三.数据类型 四.常量、变量 1.常量 2.变量 2.1定义变量的方法&#xff1a; 2.2变量的分类&#xff1a; 2.3变量的作用域和生命周期 五、字符串转义字符注释 1.字符串 2.转义字符 3.注释 六、选择语句 七、循环语句 八、…

2021年最新C语言教程入门,C语言自学教程(最全整理)

一、c语言教程入门 C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言&#xff0c;所以说学习C语言教…

C语言程序入门(零基础入门)

C语言一面世就以其简洁紧凑、灵活方便。运算方便、数据结构丰富、适用范围广、执行效率高等特点在全世界迅速推广。c语言也是其他众多高级语言的鼻祖语言&#xff0c;所以学习c语言是进入编程世界的必修课。 一 C语言的书写规则 &#xff08;1&#xff09;一个说明或一个语句…

C语言基础知识入门大全

一、C语言基础知识入门 C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。C语言基础知识入门也是其它众多高级语言的鼻祖语言&#xff0c;…

C/C++编程笔记:指针篇!从内存理解指针,让你完全搞懂指针

C语言最核心的知识就是指针&#xff0c;所以&#xff0c;这一篇的文章主题是「指针与内存模型」&#xff01;说到指针&#xff0c;就不可能脱离开内存&#xff0c;学会指针的人分为两种&#xff0c;一种是不了解内存模型&#xff0c;另外一种则是了解。 不了解的对指针的理解就…

C语言基础知识入门(2022年)

一、C语言基础知识入门 百度百科&#xff1a;C语言是一门面向过程的、抽象化的通用程序设计语言&#xff0c;广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言不仅仅执行效率高而且可移植性非常好&#xff0c;C语言可以用来开发应用软件、驱动、操作系统等…

初识c语言(入门篇)

目录 一、简单介绍C语言 二、认识一个简单的C程序 三、数据类型 四、常量、变量 五、字符串、转义字符和注释 六、选择语句 七、循环语句 八、函数 九、数组 十、关键字 十一、指针 一、简单介绍C语言 1.关于C语言 C语言是一门面向过程的、抽象化的通用程序设计语言&#xff0c…

C语言基础入门教程

目录 第一章 初识C语言 1.C语言基础知识 2.C语言的构成 3.第一个C语言程序 4.数据类型 5.变量 5.1定义变量的方法 5.2变量的分类 5.3变量的使用 5.4变量的作用域和生命周期 6.常量 6.1符号常量 6.2字符串常量 6.3字符常量 6.4实型常量 6.5整型常量 6.6其它常…

C语言初阶——手把手教零基础/新手入门(万字心得笔记)

目录 前言 一、C语言是什么&#xff1f; 二、开发环境 1.编译器 三、初始C语言 1.第一个C语言程序 2.数据类型 2.1 数据类型的长度 3. 变量 && 常量 3.1 如何定义变量 3.2 变量的分类 3.3 变量的作用域和生命周期 3.4常量 1.字面常量 2.const修饰的常变…

JAVA电子书大礼包

通过好友后私聊发送“电子书”有小编整理好的JAVA方向电子书大礼包 通过好友后私聊发送“加群” 小编抱你进技术微信交流群 通过好友后私聊发送“内推” 小编快速审核简历并内推到合适企业 image

【电子书】Head First Java

书名&#xff1a;Head First Java&#xff08;中文版&#xff09; 下载地址 链接&#xff1a;https://pan.baidu.com/s/1jI14ygqx3Vym6eaQMUHSmA 提取码&#xff1a;gsqg

开题报告:基于java电子书阅读系统 毕业设计论文开题报告模板

开发操作系统&#xff1a;windows10 4G内存 500G 开发环境&#xff1a;JDK1.8 Tomcat8 开发语言&#xff1a;Java 开发框架&#xff1a;springboot 模板引擎&#xff1a;Thymeleaf 开发工具&#xff1a;Idea 数据库&#xff1a;mysql8 数据库管理工具&#xff1a;nav…