导航:首页 > 操作系统 > 手把手教你单片机之八

手把手教你单片机之八

发布时间:2022-06-27 00:08:49

1. 51单片机如何使用

使用51单片机需要达到以下基本条件:

1、至少要搭建一个最小系统;

2、你需要编制一个51的控制程序;

3、你需要将程序编译连接成HEX或BIN格式的代码并下载或烧录到51单片机。

这样你就可以使用这款51单片机了。

2. 学单片机步骤

使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。?

第一步:数字I/O的使用

使用按钮输入信号,发光二极管显示输出电平,就可以学习引脚的数字I/O功能,在按下某个按钮后,某发光二极管发亮,这就是数字电路中组合逻辑的功能,虽然很简单,但是可以学习一般的单片机编程思想,例如,必须设置很多寄存器对引脚进行初始化处理,才能使引脚具备有数字输入和输出输出功能。每使用单片机的一个功能,就要对控制该功能的寄存器进行设置,这就是单片机编程的特点,千万不要怕麻烦,所有的单片机都是这样。

第二步:定时器的使用

学会定时器的使用,就可以用单片机实现时序电路,时序电路的功能是强大的,在工业、家用电气设备的控制中有很多应用,例如,可以用单片机实 现一个具有一个按钮的楼道灯开关,该开关在按钮按下一次后,灯亮3分钟后自动灭,当按钮连续按下两次后,灯常亮不灭,当按钮按下时间超过2s,则灯灭。数 字集成电路可以实现时序电路,可编程逻辑器件(PLD)可以实现时序电路,可编程控制器(PLC)也可以实现时序电路,但是只有单片机实现起来最简单,成本最低。定时器的使用是非常重要的,逻辑加时间控制是单片机使用的基础。

第三步:中断

单片机的特点是一段程序反复执行,程序中的每个指令的执行都需要一定的执行时间,如果程序没有执行到某指令,则该指令的动作就不会发生,这样就会耽误很多快速发生的事情,例如,按钮按下时的下降沿。要使单片机在程序正常运行过程中,对快速动作做出反应,就必须使用单片机的中断功能,该功能就是在快速动作发生后,单片机中断正常运行的程序,处理快速发生的动作,处理完成后,在返回执行正常的程序。中断功能使用中的困难是需要精确地知道什么时候不允许中断发生(屏蔽中断)、什么时候允许中断发生(开中断),需要设置哪些寄存器才能使某种中断起作用,中断开始时,程序应该干什么,中断完成后,程序应该干什么等等。中断学会后,就可以编制更复杂结构的程序,这样的程序可以干着一件事,监视着一件事,一旦监视的事情发生,就中断正在干的事情,处理监视的事情,当然也可以监视多个事情,形象的比喻,中断功能使单片机具有吃着碗里的,看着锅里的功能。

以上三步学会,就相当于降龙十八掌武功,会了三掌了,可以勉强护身。

第四步:与PC机进行RS232通信

单片机都有USART接口,特别是MSP430系列中很多型号,都具有两个USART接口。USART接口不能直接与PC机的RS232接口连接,它们之间的逻辑电平不同,需要使用一个MAX3232芯片进行电平转换。

USART接口的使用是非常重要的,通过该接口,可以使单片机与PC机之间交换信息,虽然RS232通信并不先进,但是对于接口的学习是非常重要的。正确使用USART接口,需要学习通信协议,PC机的RS232接口编程等等知识。试想,单片机实验板上的数据显示在PC机监视器上,而PC机的键盘信号可以在单片机实验板上得到显示,将是多么有意思的事情啊!

第五步:学会A/D转换

MAP430单片机带有多通道12位A/D转换器,通过这些A/D转换器可以使单片机操作模拟量,显示和检测电压、电流等信号。学习时注意模拟地与数字地、参考电压、采样时间,转换速率,转换误差等概念。使用A/D转换功能的简单的例子是设计一个电压表。

第六步:学会PCI、I2C接口和液晶显示器接口

这些接口的使用可以使单片机更容易连接外部设备,在扩展单片机功能方面非常重要。

第七步:学会比较、捕捉、PWM功能

这些功能可以使单片机能够控制电机,检测转速信号,实现电机调速器等控制起功能。如果以上七步都学会,就可以设计一般的应用系统,相当于学会十招降龙十八掌,可以出手攻击了。

第八步:学习USB接口、TCP/IP接口、各种工业总线的硬件与软件设计????

学习USB接口、TCP/IP接口、各种工业总线的硬件与软件设计是非常重要的,因为这是当前产品开发的发展方向。

到此为止,相当于学会15招降龙十八掌,但还不到打遍天下无敌手的境界。即使如此,也算是单片机大虾了!!

3. 手把手教你学51单片机的目 录

第1章 MCS-51系列单片机的起源和发展 1
1.1 MCS-51系列单片机的起源 2
1.1.1 单片机的诞生 2
1.1.2 单片机的历史 2
1.1.3 MCS-51单片机的历史 3
1.1.4 MCS-51系列单片机的特点 4
1.2 MCS-51系列单片机的发展现况 5
1.2.1 概述 5
1.2.2 最新51系列单片机介绍 6
1.3 小结 12
第2章 开发一个51系列单片机项目需要的资源 14
2.1 基础知识的学习 15
2.1.1 单片机基础知识 15
2.1.2 汇编语言 15
2.1.3 C语言 16
2.1.4 模拟电路和数字电路 16
2.2 硬件资源 17
2.2.1 单片机试验电路板 17
2.2.2 仿真器 17
2.2.3 仿真器的选择和安装 19
2.2.4 编程器(烧录器) 20
2.3 软件开发环境 21
2.3.1 软件编辑环境 21
2.3.2 KEIL软件的安装 21
2.3.3 KEIL软件的使用方法 22
2.4 单片机型号的选择 22
2.5 51单片机下载线的制作 23
2.5.1 硬件调试 24
2.5.2 使用方法 24
2.6 MON51仿真器的制作 25
2.6.1 原理图 25
2.6.2 Mon51硬件调试 26
2.6.3 软件调试 27
2.7 小结 27
第3章 单片机项目的开发流程和需要遵守的规范 28
3.1 单片机项目开发流程介绍 29
3.2 原理图设计规范 30
3.3 PCB图设计规范 31
3.4 汇编语言设计规范 32
3.5 C51语言设计规范 34
3.6 小结 38
第4章 51单片机的基本结构 39
4.1 单片机的基本结构 40
4.1.1 中央处理器(CPU) 41
4.1.2 存储器 43
4.1.3 定时器/计数器 45
4.1.4 中断控制系统 45
4.1.5 串行口、并行口 46
4.1.6 总线(BUS) 46
4.1.7 时钟电路 47
4.2 二进制、十进制、十六进制 47
4.3 哈佛结构与冯·诺伊曼结构 48
4.3.1 哈佛结构 48
4.3.2 冯·诺伊曼结构 49
4.4 单片机的指令系统 50
4.4.1 指令系统 50
4.4.2 寻址方式 51
4.4.3 程序的执行过程 52
4.5 复杂指令集与精简指令集 52
4.5.1 基本概念 52
4.5.2 复杂指令集与精简指令集的特点 52
4.6 小结 53
第5章 51系列单片机指令系统 54
5.1 指令和指令格式 55
5.2 寻址模式 56
5.2.1 直接寻址 56
5.2.2 寄存器寻址 57
5.2.3 寄存器间接寻址 57
5.2.4 立即寻址 57
5.2.5 变址寻址 58
5.2.6 位寻址 58
5.2.7 相对寻址 58
5.3 数据传送指令 58
5.4 算术运算指令 60
5.5 逻辑运算及移位指令 63
5.6 控制转移指令 64
5.7 布尔变量操作指令 66
5.8 小结 67
第6章 汇编语言编程 68
6.1 什么是宏汇编器(Macro Assembler) 69
6.2 汇编语言的开发环境 69
6.3 汇编语言的汇编过程 70
6.3.1 源文件(.ASM) 70
6.3.2 目标代码文件(.HEX) 70
6.3.3 列表输出文件(.LST) 70
6.3.4 汇编处理过程 71
6.3.5 常见的编译错误 72
6.4 51单片机汇编语言指令与伪指令 72
6.4.1 常用单位与术语 72
6.4.2 常量与数值运算 72
6.4.3 汇编语言指令 74
6.4.4 汇编语言伪指令 74
6.5 用汇编语言设计程序的步骤 79
6.5.1 汇编语言程序设计的步骤 79
6.5.2 编制程序流程图 79
6.6 程序设计结构 80
6.6.1 主程序和子程序 80
6.6.2 顺序程序设计 81
6.6.3 分支结构程序设计 82
6.6.4 循环结构程序设计 83
6.6.5 查表程序设计 86
6.6.6 子程序设计 88
6.7 程序设计举例 90
6.7.1 多字节算术运算程序 90
6.7.2 数制转换程序 91
6.7.3 多分支程序 93
6.8 小结 95
第7章 单片机C51语言编程 96
7.1 单片机C51语言概述 97
7.1.1 单片机C51语言的起源和发展 97
7.1.2 C51语言编程的优点 97
7.2 C51关键字和标识符 98
7.3 C51语言的数据类型 99
7.3.1 基本数据类型 99
7.3.2 构造型数据类型 101
7.4 常量、变量和指针 105
7.4.1 常量 105
7.4.2 变量 106
7.4.3 指针 108
7.4.4 存储类型和存储模式 109
7.5 C51的基本运算 112
7.5.1 C51的赋值运算 112
7.5.2 C51的算术运算 113
7.5.3 关系运算符 114
7.5.4 逻辑运算符 115
7.5.5 位运算符 116
7.6 函数 116
C51的库函数 121
7.7 程序结构 122
7.7.1 顺序控制结构 123
7.7.2 选择控制语句 123
7.7.3 循环语句 124
7.7.4 C51语言编程实例 127
7.8 C51语言与汇编语言混合编程 128
7.8.1 在C51语言函数中嵌入汇编语言 128
7.8.2 在C51项目中加入汇编语言文件 129
7.9 一个简单的C语言项目的实施 131
7.10 小结 135
第8章 一些简单的实例 136
8.1 建立一个单片机小系统 137
8.1.1 原理图设计 137
8.1.2 制作电路 139
8.1.3 调试 140
8.2 利用单片机的I/O口控制LED 140
8.2.1 原理图设计 140
8.2.2 制作电路 141
8.2.3 设计程序 141
8.2.4 仿真和调试 143
8.3 利用定时器控制LED闪烁 143
8.3.1 原理图设计 143
8.3.2 制作电路 143
8.3.3 设计程序 143
8.3.4 仿真和调试 145
8.4 控制蜂鸣器发声 145
8.4.1 工作原理 145
8.4.2 原理图设计 146
8.4.3 制作电路 146
8.4.4 程序设计 146
8.4.5 仿真调试 148
8.5 用一个按键控制LED闪烁 148
8.5.1 工作原理 148
8.5.2 原理图设计 148
8.5.3 制作电路 149
8.5.4 程序设计 149
8.5.5 仿真调试 152
8.6 制作LED数码管显示 152
8.6.1 LED数码管结构 152
8.6.2 工作原理 153
8.6.3 原理图设计 153
8.6.4 制作电路 154
8.6.5 程序设计 155
8.6.6 仿真调试 157
8.7 设计一个键盘 158
8.7.1 键盘工作原理 158
8.7.2 原理图设计 159
8.7.3 制作电路 161
8.7.4 程序设计 161
8.7.5 仿真调试 164
8.8 看门狗电路的设计 165
8.8.1 工作原理 165
8.8.2 原理图设计 166
8.8.3 制作电路 168
8.8.4 程序设计 168
8.8.5 仿真调试 171
8.9 小结 172
第9章 51单片机电源系统的设计 173
9.1 开关稳压电源和线性稳压电源的基本知识 174
9.2 线性稳压电源工作原理 174
9.2.1 串联反馈型稳压电源的工作过程 174
9.2.2 稳压电路的保护环节 175
9.3 开关稳压电源工作原理 176
9.3.1 开关电源的起源和发展趋势 176
9.3.2 开关电源的分类 177
9.3.3 开关电源的工作原理 178
9.3.4 开关电源的选用 185
9.4 常用电源转换芯片介绍 186
9.4.1 三端集成稳压器 186
9.4.2 低压差线性稳压器(LDO)的原理与应用 188
9.4.3 常用DC/DC开关稳压电源芯片的选择 191
9.5 设计一个简单的线性电源单片机供电系统 193
常用的三端集成稳压电源 193
9.6 DC/DC开关电源单片机供电系统的设计 194
9.6.1 工作原理 194
9.6.2 基本应用设计 195
9.7 用MC34063设计开关电源 198
9.7.1 MC34063性能简介 198
9.7.2 MC34063降压变换器电路 199
9.7.3 MC34063升压变换器电路 199
9.7.4 MC34063大电流降压变换器电路 200
9.7.5 MC34063大电流升压变换器电路 200
9.7.6 MC34063反向变换电路 201
9.8 小结 201
第10章 51单片机通信接口实例 202
10.1 单片机常用总线简述 203
10.1.1 芯片级总线 203
10.1.2 设备级总线 204
10.2 单片机系统数据的并行传送方式与串行传送方式 207
10.3 单片机系统和计算机之间实现串行通信 207
10.3.1 RS232串行通信工作原理 207
10.3.2 MCS-51系列单片机的串行口和控制寄存器 209
10.3.3 原理图设计 210
10.3.4 制作电路 212
10.3.5 程序设计 213
10.3.6 仿真调试 216
10.4 实现与其他器件间的I2C通信 216
10.4.1 I2C协议 216
10.4.2 原理图设计 220
10.4.3 制作电路 221
10.4.4 程序设计 221
10.4.5 仿真调试 228
10.5 添加一个实时时钟 229
10.5.1 工作原理 229
10.5.2 原理图设计 231
10.5.3 制作电路 232
10.5.4 程序设计 233
10.6 液晶显示模块接口实例 238
10.6.1 液晶显示模块简介 238
10.6.2 原理图设计 243
10.6.3 制作电路 243
10.6.4 程序设计 243
10.6.5 仿真调试 251
10.7 小结 251
第11章 51系列单片机的系统扩展 252
11.1 单片机系统扩展原理 253
11.1.1 为什么扩展系统 253
11.1.2 单片机系统扩展原理 253
11.1.3 程序存储器芯片的选择 257
11.1.4 数据存储器芯片的选择 259
11.1.5 扩展系统I/O接口 260
11.2 存储器系统扩展系统实例 260
11.2.1 扩展系统程序存储器 260
11.2.2 用SRAM扩展数据存储器举例 262
11.2.3 同时扩展数据存储器和程序存储器 264
11.2.4 并行接口Flash存储器扩展实例 265
11.2.5 串行接口Flash存储器扩展实例 274
11.3 系统扩展I/O口实例 278
11.3.1 利用译码器扩展I/O口 278
11.3.2 利用并口扩展芯片8255扩展I/O口 280
11.3.3 8155扩展并行I/O接口 282
11.3.4 利用串并位移寄存器芯片扩展I/O口 286
11.3.5 利用I2C接口扩展I/O口 289
11.4 小结 291
第12章 信号转换接口 292
12.1 单片机与A/D转换接口 293
12.1.1 A/D转换原理 293
12.1.2 A/D转换器的主要技术指标 294
12.1.3 A/D转换器的分类 295
12.1.4 A/D转换器的选择原则 298
12.2 A/D转换设计实例 299
12.2.1 ADC0809介绍 299
12.2.2 原理图设计 300
12.2.3 制作电路 301
12.2.4 程序设计 301
12.2.5 仿真调试 306
12.3 D/A转换原理 306
12.3.1 D/A转换原理 306
12.3.2 D/A转换器的主要技术指标 307
12.3.3 D/A转换器的分类 308
12.3.4 D/A转换器的选择 309
12.4 D/A转换设计实例 310
12.4.1 DAC0832芯片介绍 310
12.4.2 原理图设计 311
12.4.3 制作电路 312
12.4.4 程序设计 312
12.4.5 仿真调试 314
12.5 实现PWM控制 314
12.5.1 PWM原理 314
12.5.2 PWM的实现和应用 314
12.5.3 程序设计 315
12.6 小结 317
第13章 单片机综合实例 318
13.1 用DS18B20实现的温控加热模块 319
13.1.1 DS18B20性能简介 319
13.1.2 DSl8B20时序及工作过程 322
13.1.3 原理图设计 324
13.1.4 程序设计 326
13.1.5 仿真调试 332
13.2 直流电动机控制 333
13.2.1 C8051F300简介 333
13.2.2 原理图设计 334
13.2.3 程序设计 335
13.2.4 仿真调试 340
13.3 数据采集仪设计实例 340
13.3.1 C8051F020介绍 340
13.3.2 CP2102简介 342
13.3.3 原理图设计 343
13.3.4 程序设计 345
13.4 小结 365
附录A 80C51单片机 指令速查表 366
附录B ASIIC码表 370

4. 51单片机流水灯实验(我用的是手把手教你学单片机的教程)

呵呵,这个延时有点长哦,有10S,你耐心再看看,有没有变化,如果再没变化,你可以软件仿真一下那个i变量。看他是不是能加到10000,。还有,学51单片机的话建议你去学 郭天祥十天学会51单片机 那个很不错。希望采纳

5. 51单片机怎么入门

1、建议你买个开发板,200块的配置都非常全了,硬件有个直观认识
2、网上有视频教程《十天学会单片机》、《力天手把手教你单片机》等一些可以让你快速入门,看视频做笔记,边练习,进步很快。手头应该有些比较全面的单片机的书,方便查阅。
3、如果没有开发板,只有用proteus仿真软件,我推荐《单片机C语言程序设计实训100例——基于8051+Proteus仿真》这本书
请看郭天祥大师的《怎样学习单片机》
很多单片机初学者问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机、如何开始上手、如何开始熟练这个过程给大家讲讲。先说说单片机,我们现在用的比较多的是8051单片机,它的资料比较多,用的人也较多,市场也很大,51单片机内部结构比较简单,非常适合初学者学习,建议初学者将51单片机做为入门级芯片。单片机属于硬件,我强烈不推荐大家使用单片机仿真软件来学习单片机,也可以肯定的告诉大家,使用仿真软件是学不会单片机的,硬件只有把它摆在你的面前,亲自操作它,才会有深刻的体会,才能学明白它。单片机这门课是一科非常重视动手实践的科目,不能总是看书,但是也不能完全不看书,我们需要从书中大概了解一下单片机的各个功能寄存器,如果看的多了反而容易搞乱,尤其是现在市场上大多数讲单片机的书一开始就讲解较复杂的内存、地址、存储器什么的,更让初学者感到不知所云、难以入门。简单的说,当我们使用单片机时,实际上就是用我们自己编写的软件去控制单片机的各个功能寄存器,再简单些,就是控制单片机哪些引脚的电平什么时候输出高,什么时候输出低。由这些高低变化的电平来控制外围电路,实现我们需要的各个功能。

关于看书,大家只需大概了解单片机各引脚的功能,了解下寄存器。第一次、第二次你可能看不明白,但这不要紧,因为还缺少实际的感观认识。所以我总是说,学单片机看书看两三天就够了,而我们要把更多的时间放到实践中去,这才是最关键的,在实践的过程有不懂之处再查书,这样记忆才深刻。关于实践有两种方法你可以选择,方法一、你自己花钱买一块单片机的学习板,不要求那种价格上千块功能太太全的,对于初学者来说你买功能太全的板子,上面有很多东西你这辈子都用不着,我建议有流水灯、数码管、独立键盘、矩阵键盘、AD 和DA、液晶、蜂鸣器、IIC总线、有USB扩展也最好,这些就差不多了。如果说我上面提到的这些功能你能熟练应用,那可以说对于单片机本身的操作你已经入门了,剩下的就是自己练习设计外围电路,不断的积累经验。只要过了第一关,后面的路就好走多了,万事开头难,大家都听过。方法二、你身边如果有单片机方面的高手,向他求助,让他帮你搭个简单的最小系统板。对于高手来说,做个单片机的最小系统板可能只需要几分钟的时间,而对于初学者可就难多了,因为只有对硬件彻底了解了,你才能熟练的驾驭它。而如果你身边没有这样的高手,又找不到可以帮助你的人,那我劝你还是选择方法一,毕竟自己有一块学习板要方便的多,以后做单片机类的小实验时经常都能用得上,省时又省事。

有了单片机学习板之后你就要多练习,最好是自己有台电脑,少看电影,少打游戏,把学习板和电脑连好,打开调试软件坐在电脑前,先学会怎么用调试软件,然后从最简单的流水灯实验做起,等你能让那八个流水灯按照你的意愿随意流动时你已经入门了,你会发现单片机是多么迷人的东西啊,太好玩了,这不是在学习知识,而是在玩,比起跑跑卡丁车,比起魔兽世界,要好玩的多的多。当你编写的程序按你的意愿实现时,你比做任何事都开心,你会上瘾的,真的,做电子设计的人真的会上瘾。然后让数码管亮起来,这两项会了后,你已经不能自拔了。就是要这样练习,在写程序的时候你肯定会遇到很多问题,而这时你再去翻书找,或是问别人,或是上网搜索。当得到解答后你会记住一辈子的,知识必须应用于现实生活中,解决实际问题,这样才能发挥它的作用,你自己好好想想,上了这么多年大学,天天上课,你在课堂上学到了什么?是不是为了期末考试而忙碌呢?考完得了90分,哈哈哈好高兴啊,过一个假期,甚至过一个周末,然后忘的一干二净,是不是?你学到什么了?我认为这样的生活没有意义。但是我告诉你单片机一旦学会,永远不会忘了。

另外我再说说关于用汇编语言还是C语言编程的问题。很多同学大一、二就开设了C语言的课,我也上过,我知道那时上课老师讲的就是几乘几、几加几、求个阶乘、画个星星、编个月亮什么的。学完了有什么用?虽然考试我考了90分,可我心里比谁都明白,C语言到底是什么?它有什么用?到底它能做什么我一无所知。我们不能过多的评价当今的高校教育,但我们必须得为自己负责任。让你用C语言编单片机的程序你是不是就傻了?单片机编程用C语言或汇编语言都可以,但是我建议用C语言比较好,如果原来有C语言的基础那学起来会更好,如果没有,也可以边学单片机边学C语言,C语言很简单,只是一门工具而已,我劝大家最好学好学精它,将来肯定用得着,要不然以后也得学,你一点汇编都不会根本无所谓,但你一点C语言都不会那你将来会吃苦头。给大家推荐一本书,作者谭浩强,书名<程序设计>>,清华大学出版社,大家在学习本书的同时再参考上面提到的这本书更有利C语言学习。也根本没必要再从头把<程序设计>>学一边,就算再学一边也许结果还是和你现在一样,最好的办法就是用到哪里学哪里。汇编写程序代码效率高,但相对难度较大,而且很繁琐,尤其是遇到算法方面的问题时,根本是麻烦的不得了,现在单片机的主频在不断的提高,我们完全不需要那么高效率的代码,因为有高频率的时钟,单片机的ROM也在不断的提高,足够装得下你用C语言写的任何代码,C语言的资料又多又好找,将来可移植性非常好,所以我劝大家用C语言。

总结上面,只要你有信心,做事能坚持到底,有不成功绝不放弃的强烈意志,那学个单片机对你来说就是件非常容易的事。建议步骤:
1 、看书大概了解一下单片机结构,大概了解就行。不用都看懂,又不让你出书。
2 、用学习板练习编写程序,学单片机主要就是练编程序,遇到不会的再问人或查书。
3 、自己网上找些小电路类的资料练习设计外围电路。焊好后自己调试,熟悉过程。
4 、自己完全设计具有个人风格的电路、产品 … 你已经是高手了。

6. 手把手教你学51单片机

这个我还是很有发言权的,因为我可谓搞单片机的“革命先烈”。要自学单片机最好先从51单片机开始入门,市面上有很多教程,我推荐去凡亿课程看下,比较详细。 网络里面也有详细介绍。

7. 手把手教你学51单片机的前 言

目前,51系列单片机在我国已得到大力推广和广泛应用,从工业控制系统到小型电子产品都可以见到51单片机的身影,它经典的结构使其成为单片机学习的入门首选,得到了广大单片机使用者的一致推崇,关于51单片机学习和应用的书也五彩纷呈,本书也是其中的一本。
编写本书的目的
笔者从事单片机设计工作已有多年,在这期间设计和参与设计了较多的单片机项目,取得了很多单片机实际设计经验,对单片机设计有了一些较深的认识。所以希望能通过这本书对初步学习单片机的读者有所帮助,并且也是自己对学习和应用单片机的一个总结。
通常在学校学习的单片机知识偏重于理论而不是技能,可是在工作中需要面对的是实际问题,而不是在纸上谈兵;作为一名单片机工程师,笔者在工作中对此深有感触。所以本书的着重点是想让读者了解一个完整的单片机设计过程所需的知识,而不仅仅只是讲述单片机的原理。通过本书的学习,读者可以独立设计和完成一个简单的单片机控制系统,即体验从原理图设计、制作电路板到单片机系统调试的整个过程。
本书的主要内容
本书概括地论述了单片机的基础知识,包括单片机的基本结构和工作原理;并就实际单片机项目开发中会遇到的各种问题进行了阐述,列举了单片机开发的流程和必须遵守的一些规范,说明了仿真器和编程器在开发中的作用以及基本的使用方法。具体内容如下。
 首先论述了单片机的基础知识,包括单片机的基本结构和工作原理,阐述了目前单片机的发展情况,列举了最新流行的单片机种类,总结了单片机的选择方法。
 在了解单片机基本知识的基础上,详细讲解了单片机的主要开发语言——汇编语言和C51语言;编程语言的使用是单片机和其他集成电路的重要区别,用它来赋给单片机命令,使单片机按照设计者的意志运行命令。
 本书也花了一定的篇幅讲解了仿真器和编程器的原理和使用说明。编程器和仿真器是单片机项目开发中常用的工具,仿真器是单片机程序调试中很有用的辅助工具,可以逐步地观察单片机的运行过程,以便发现程序中的错误;而编程器是用来将编写好的程序写入单片机的工具。除了传统的仿真器和编程器外,还列举了一些最新的单片机开发手段,如在线仿真和ISP(在系统编程),这些新的方法大大降低了单片机的开发费用,在线仿真使得设计者不需要去购买昂贵的仿真器,而ISP则替代了编程器,这进一步降低了学习单片机开发的门槛。
 在讲解这些理论知识的过程中,本书还简单讲述了单片机开发中的一些规范,包括单片机原理图、PCB图以及程序设计的设计规范。这在实际工作中是必须了解和遵守的,也是一个单片机设计工程师必须具备的基本知识。
 完成了基本知识的学习后,本书由易至难列举了一些设计实例,这些实例基本上概括了单片机项目设计中遇到的各种问题。
通常,一个单片机系统设计可以分为如下五大方面。
(1)单片机能够运行的最小系统,包括振荡电路、复位电路以及电源电路。
(2)单片机I/O口的使用方法和定时器、中断系统的使用。
(3)单片机的通信接口,单片机的通信在单片机设计中是经常遇到的功能,所以必须注意目前单片机系统常用的各种通信接口和协议。
(4)单片机的系统扩展,系统扩展通常可以分为程序存储器的扩展、数据存储器的扩展以及单片机I/O口的扩展三部分。
(5)信号转换接口,主要是A/D、D/A转换以及PWM的实现。这是单片机信号处理中经常遇到的问题。
前面两部分是单片机最基本的功能,后面三部分则是单片机的扩展应用,掌握了这些基本知识,便可应对用单片机解决的各种项目。
本书的特点
 本书具有知识全面、实例丰富、操作性强的特点,力求以全面、系统的知识和丰富、简短的实例指导初学者学习单片机各方面的知识。因此,本书适合于开始学习单片机设计和具有一定单片机基础知识的读者,目的是使读者通过本书的学习可以初步掌握单片机的开发应用。
 本书安排有“提示”、“注意”、“说明”小栏目,通过这些小栏目可和读者分享一些经验和心得,同时也可为读者清除学习过程中的难点和疑点。
 本光盘内容超值丰富,不但提供了书中全部范例的源代码和电路图,而且提供了多媒体视频教学录像,用以讲解如何使用本书光盘中的源代码,手把手引导读者直观深入地学习。
本书阅读顺序
本书章节的安排是依据读者对单片机学习的过程、以循序渐进的方式建立的,建议初学者从前至后阅读。
 首先阅读第1章至第7章,这些章节是单片机设计的基础知识,必须掌握。只有熟读了这几章的内容,才能阅读后面的章节。其中,第3章可以放到完成基本知识的学习后阅读。
 阅读第8章至第12章,这几章是讲述单片机设计中的一些基本手段和方法,涉及单片机系统设计中的方方面面,掌握这些知识可以解决单片机设计中的大部分问题。
 阅读第13章——综合实例,它由浅入深、由简入繁,将前面讲解的一些知识应用到实际项目中,可以让读者对单片机设计项目有具体的认识。
致谢
经过紧张的策划、写作和编写,本书才得已完稿。在写作的过程中,得到了参与本书策划的各位编辑的大力协助;在此,对所有参与该书编辑、出版的老师表示衷心的感谢。
惠 仇
2008.6.28

8. 单片机教程

王云 51单片机教程,就很好,身边很多同学在用。

9. 手把手教你学会单片机,宋雪松老师的简易计算器,怎么用普中科技单片机实现怎么接线

/* S16 S12 S8 S4分别是123+

S15 S11 S7 S3分别是456-

S14 S10 S6 S2分别是789*

S13 S9 S5 S1分别是0 CLR = /

*/

/* 实现两个数的运算,每个数的位数至少可以八位 */

#include<reg52.h>

typedef unsigned char uint8;

typedef unsigned int uint16;

sbit rw=P2^5;

sbit rs=P2^6;

sbit e=P2^7;

sbit led=P3^7;

sbit beep=P2^0;

uint8 key,num;

uint8 fuhao;//定义具体的那个符号,是加减还是乘除。

uint8 flag; //定义有没有按下符号键,这个是统称

long a,b,c,d; //定义运算数据的第一个和第二个及等于的数变量

uint8 k; //定义小数点后面显示的位数

uint8 biao;

uint8 dat1[]={1,2,3,0x2b-0x30, 4,5,6,0x2d-0x30, 7,8,9,0x2a-0x30, 0,0x01-0x30,0x3d-0x30,0x2b-0x30 };//保存显示的数据

void delay(uint16 i)

{

while(i--);

}

void lcdwrc(uint8 c)

{

delay(1000);

rs=0;

rw=0;

e=0;

P0=c;

e=1;

delay(1000);

e=0;

}

void lcdwrd(uint8 dat)

{

delay(1000);

rs=1;

rw=0;

e=0;

P0=dat;

e=1;

delay(1000);

e=0;

rs=0;

}

void lcdinit()

{

delay(1500);

lcdwrc(0x38);

delay(500);

lcdwrc(0x38);

delay(500);

lcdwrc(0x38);

delay(500);

lcdwrc(0x38);

lcdwrc(0x08);

lcdwrc(0x01);

lcdwrc(0x06);

lcdwrc(0x0c);

key=0;

num=0;

flag=0;

fuhao=0;

a=0;

b=0;

c=0;

d=0;

biao=0;

led=0;

}

void keyscan()

{

P1=0xfe; //令第一行为0,然后判断是哪一列按下

if(P1!=0xfe)

{

delay(1000);

if(P1!=0xfe)

{

key=P1&0xf0;

switch(key)

{

case 0xe0: num=0;break; //1

case 0xd0: num=1;break; //2

case 0xb0: num=2;break; //3

case 0x70: num=3;break; //加

}

}

while(P1!=0xfe);

if(num==0||num==1||num==2) //确认第一行的数1,2,3

{

if(flag==0) //没有按下符号键

{

//led=1;

a=a*10+dat1[num];

}

else

{

//led=1;

b=b*10+dat1[num];

}

}

if(num==3)

{

//led=0;

flag=1;

fuhao=1;//加号+

}

lcdwrd(0x30+dat1[num]);

}

P1=0xfd; //令第二行为0,判断是哪一列按下

if(P1!=0xfd)

{

delay(1000);

if(P1!=0xfd)

{

key=P1&0xf0;

switch(key)

{

case 0xe0: num=4;break; //4

case 0xd0: num=5;break; //5

case 0xb0: num=6;break; //6

case 0x70: num=7;break; //减—

}

}

while(P1!=0xfd);

if(num==4||num==5||num==6)

{

if(flag==0) //没有按下符号键

{

//led=1;

a=a*10+dat1[num];

}

else

{

//led=1;

b=b*10+dat1[num];

}

}

else

{

flag=1;

fuhao=2;//带表减号

}

lcdwrd(0x30+dat1[num]);

}

P1=0xfb; //令第三行为0,判断哪一列按下

if(P1!=0xfb)

{

delay(1000);

if(P1!=0xfb)

{

key=P1&0xf0;

switch(key)

{

case 0xe0: num=8;break; //7

case 0xd0: num=9;break; //8

case 0xb0: num=10;break; //9

case 0x70: num=11;break; //乘*

}

}

while(P1!=0xfb);

if(num==8||num==9||num==10)

{

if(flag==0) //没有按下符号键

{

//led=1;

a=a*10+dat1[num];

}

else

{

//led=1;

b=b*10+dat1[num];

}

}

else

{

flag=1;

fuhao=3;//带表乘号*

}

lcdwrd(0x30+dat1[num]);

}

P1=0xf7; //令第四行为0,判断哪一列按下

if(P1!=0xf7)

{

delay(1000);

if(P1!=0xf7)

{

key=P1&0xf0;

switch(key)

{

case 0xe0: num=12;break; //0

case 0xd0: num=13;break; //清除rst

case 0xb0: num=14;break; //等号=

case 0x70: num=15;break; //除/

}

}

while(P1!=0xf7);

switch(num)

{

case 12:

if(flag==0) //没有按下符号键

{

//led=1;

a=a*10+dat1[num];

lcdwrd(0x30);

}

else

{

//led=1;

b=b*10+dat1[num];

lcdwrd(0x30);

}

break;

case 13:

lcdwrc(0x01); //清屏指令

a=0;

b=0;

flag=0;

fuhao=0;

break;

case 15:

flag=1;

fuhao=4;

lcdwrd(0x2f);//除号/

break;

case 14:

if(fuhao==1)//加

{

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//设置光标左移,屏幕不移动

c=a+b;

while(c!=0) //一位一位显示

{

lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置

c=c/10;//取前面的结果数据

}

lcdwrd(0x3d); //显示等于号=

a=0;

b=0;

flag=0;

fuhao=0;//全部清除为0

}

if(fuhao==2) //减

{

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//设置光标左移,屏幕不移动

if(a>b)

c=a-b;

else

c=b-a;

while(c!=0) //一位一位显示

{

lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置

c=c/10;//取前面的结果数据

}

if(a<b) lcdwrd(0x2d); //显示-号

lcdwrd(0x3d); //显示等于号=

a=0;

b=0;

flag=0;

fuhao=0;//全部清除为0

}

if(fuhao==3)//乘法

{

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//设置光标左移,屏幕不移动

c=a*b;

while(c!=0) //一位一位显示

{

lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置

c=c/10;//取前面的结果数据

}

lcdwrd(0x3d); //显示等于号=

a=0;

b=0;

flag=0;

fuhao=0;//全部清除为0

}

if(fuhao==3)//乘法

{

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//设置光标左移,屏幕不移动

c=a*b;

while(c!=0) //一位一位显示

{

lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置

c=c/10;//取前面的结果数据

}

lcdwrd(0x3d); //显示等于号=

a=0;

b=0;

flag=0;

fuhao=0;//全部清除为0

}

if(fuhao==4)

{

k=0;

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//设置光标左移,屏幕不移动

c=(long)(((float)a/b)*1000);//强制转换为long。

while(c!=0) //一位一位显示

{

k++;

lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置

c=c/10;//取前面的结果数据

if(k==3)

{

lcdwrd(0x2e);

k=0;

}

}

if(a/b<0) //如果a比b小的话那么除的结果最高位是0

{

lcdwrd(0x30);

}

lcdwrd(0x3d); //显示等号

a=0;

b=0;

flag=0;

fuhao=0;//全部清除为0

}

break;

}

}

}

void main()

{

lcdinit();

while(1)

{

keyscan();

}

}

阅读全文

与手把手教你单片机之八相关的资料

热点内容
oraclelinux安装目录 浏览:133
安卓系统可以安装编译器吗 浏览:570
javajson实体类 浏览:690
板加密钢筋是否取代原钢筋 浏览:66
学习编程的思路 浏览:230
app易语言post怎么学 浏览:965
地梁的箍筋加密区位置 浏览:302
二分法排序程序及编译结果 浏览:679
日语命令形和禁止型 浏览:285
安装软件用管理员解压 浏览:505
编译原理代码块 浏览:400
小孩可以用压缩面膜吗 浏览:14
锥形倒角怎么计算法 浏览:882
java合并链表 浏览:508
pic单片机编译器 浏览:805
丽水四轴加工中心编程 浏览:691
国产系统怎么解压 浏览:553
战双程序员 浏览:483
him触摸编程软件 浏览:931
植物大战僵尸存档怎么转移安卓 浏览:852