单片机C语言入门.doc

上传人:hw****26 文档编号:4048039 上传时间:2019-09-16 格式:DOC 页数:37 大小:520.58KB
下载 相关 举报
单片机C语言入门.doc_第1页
第1页 / 共37页
单片机C语言入门.doc_第2页
第2页 / 共37页
单片机C语言入门.doc_第3页
第3页 / 共37页
单片机C语言入门.doc_第4页
第4页 / 共37页
单片机C语言入门.doc_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、单片机 C 语言入门 图书导读 【阚平收集】联系 QQ277152571当前章节:目录13.1 简单的跑马灯设计13.2 矩形波发生器13.3 基于 MCS-51 单片机的四路抢答器13.4 I2C 总线数据存储器在单片机系统中的用法13.5 双端口 RAM 在单片机系统中的使用13.6 小结【阚平制作】特别推荐 联系 QQ:277152571【 空间地址】http:/ ? 1998 - 2009 Tencent. All Rights Reserved 腾讯公司 版权所有第 1 章 MCS-51 单片机概述 . 11.1 MCS-51 单片机结构 . 11.1.1 中央处理器(CPU ) .

2、 21.1.2 存储器结构 . 61.1.3 定时器/计数器 . 91.1.4 并行端口 . 91.1.5 串行端口 . 111.1.6 中断系统 . 111.1.7 总线 . 121.1.8 8051 的芯片引脚 . 121.2 MCS-51 单片机的指令系统 . 141.2.1 8051 的指令格式 . 141.2.2 8051 的寻址方式 . 141.2.3 8051 的指令说明 . 181.3 MCS-51 单片机的伪指令 . 321.3.1 ORG 伪指令 . 321.3.2 END 伪指令 . 321.3.3 EQU (或 =)伪指令 . 321.3.4 DATA 伪指令 . 33

3、1.3.5 DB 伪指令 . 331.3.6 DW 伪指令 . 331.3.7 DS 伪指令 . 341.3.8 BIT 伪指令 . 341.4 MCS-51 汇编语言编程实例 . 341.5 MCS-51 单片机 C 语言简介 . 361.5.1 用 C 语言开发单片机的优势 . 361.5.2 C51 程序的例子 . 371.5.3 C51 程序在 Keil C51 下的编译、仿真 . 381.6 小结 . 42第 2 章 C51 语言基本语法 . 432.1 C51 的标识符和关键字 . 432.2 C51 的运算量 . 452.2.1 常量 . 452.2.2 变量 . 462.3 C

4、51 的数据类型 . 462.3.1 字符型(char ) . 472.3.2 整型(char ) . 502.3.3 浮点型(float ) . 522.3.4 指针型 . 532.3.5 位变量(bit ) . 532.3.6 特殊功能寄存器(sfr) . 532.3.7 16 位特殊功能寄存器(sfr16) . 542.3.8 可寻址位(sbit) . 542.4 C51 的存储种类和存储器类型 . 552.4.1 存储种类 . 552.4.2 存储器类型 . 592.4.3 存储模式 . 602.5 C51 运算符和表达式 . 612.5.1 算术运算符和算术表达式 . 612.5.2

5、 赋值运算符和赋值表达式 . 622.5.3 增量、减量运算符与增量、减量表达式 . 632.5.4 关系运算符与关系表达式 . 642.5.5 逻辑运算符与逻辑表达式 . 652.5.6 位运算符与位运算表达式 . 672.5.7 复合赋值运算符与复合赋值表达式 . 692.5.8 逗号运算符与逗号表达式 . 692.5.9 条件运算符与条件表达式 . 702.5.10 指针与地址运算符 . 702.5.11 C51 运算符的优先级 . 712.6 小结 . 72第 3 章 C51 语句 . 733.1 C51 控制结构概述 . 733.2 C51 语句概述 . 743.3 说明语句 . 7

6、53.4 表达式语句 . 763.5 空语句 . 763.6 控制语句 . 773.6.1 条件分支语句 . 773.6.2 循环语句 . 843.6.3 转移语句 . 913.7 小结 . 94第 4 章 C51 函数 . 954.1 函数的定义 . 964.1.1 无参数函数的定义方法 . 964.1.2 有参数函数的定义方法 . 974.1.3 空函数的定义方法 . 974.2 函数参数和返回值 . 984.2.1 形式参数和实际参数 . 984.2.2 函数的返回值 . 994.3 函数的原型声明 . 994.4 函数的调用 . 1014.4.1 函数调用的一般形式 . 1014.4.

7、2 函数调用的方式 . 1014.5 函数的递归调用 . 1024.6 局部变量与全局变量 . 1044.6.1 局部变量 . 1044.6.2 局部静态变量 . 1054.6.3 全局变量 . 1064.6.4 全局静态变量 . 1074.7 内部函数与外部函数 . 1084.7.1 内部函数 . 1084.7.2 外部函数 . 1094.8 中断服务函数 . 1104.9 库函数 . 1124.9.1 标准输入输出函数 . 1134.9.2 其他常用库函数 . 1164.10 小结 . 116第 5 章 数组 . 1175.1 一维数组 . 1175.1.1 一维数组的定义和初始化 . 1

8、175.1.2 一维数组元素的引用 . 1195.1.3 一维数组应用实例 . 1205.2 二维数组 . 1225.2.1 二维数组的定义和初始化 . 1225.2.2 二维数组的引用 . 1245.2.3 二维数组应用实例 . 1255.3 字符数组 . 1295.3.1 字符数组的定义和初始化 . 1295.3.2 字符数组元素的引用 . 1305.4 小结 . 130第 6 章 指针 . 1316.1 指针变量的定义及其运算 . 1316.1.1 地址和指针的定义 . 1316.1.2 变量的指针和指针变量 . 1326.1.3 指针变量的定义和初始化 . 1336.1.4 指针变量的

9、引用 . 1336.1.5 指针变量的运算 . 1366.1.6 指针变量作为函数的参数 . 1376.2 数组与指针 . 1406.2.1 指向数组元素的指针变量 . 1406.2.2 通过指针变量引用数组元素 . 1416.2.3 数组名作为函数参数 . 1436.3 指向函数的指针变量 . 1446.3.1 指向函数的指针变量的定义 . 1446.3.2 用函数指针变量调用函数 . 1456.3.3 用指向函数的指针作函数参数 . 1466.4 指针数组 . 1476.5 C51 的指针类型 . 1496.5.1 通用指针变量 . 1496.5.2 指定存储区的指针变量 . 1506.6

10、 函数指针实例 . 1506.7 小结 . 152第 7 章 结构体与联合体 . 1537.1 结构体 . 1537.1.1 结构体类型的定义 . 1537.1.2 结构体变量的定义 . 1547.1.3 结构体变量的引用和初始化 . 1557.2 结构体数组与指向结构体的指针变量 . 1577.2.1 结构体数组的定义 . 1577.2.2 结构体数组的初始化 . 1577.2.3 结构体数组的应用实例 . 1587.2.4 结构体指针变量 . 1597.3 联合体 . 1607.3.1 联合体变量的定义 . 1607.3.2 联合体变量的引用方式 . 1617.3.3 联合体变量的特点 .

11、 1627.3.4 联合体变量的应用实例 . 1627.4 枚举类型 . 1637.5 typedef 语句 . 1667.6 小结 . 168第 8 章 预处理 . 1698.1 宏定义 . 1698.1.1 不带参数的宏定义 . 1698.1.2 带参数的宏定义 . 1718.2 文件包含 . 1738.3 条件编译 . 1748.4 小结 . 177第 9 章 Keil mVision 集成开发环境 . 1789.1 Keil Vision 概述 . 1789.1.1 Keil Vision 简介 . 1789.1.2 Keil Vision 的安装 . 1809.2 Keil Visi

12、on 的使用 . 1819.2.1 Keil Vision 的菜单条、工具条和快捷键 . 1819.2.2 开发工具选项 . 1869.3 Keil Vision 调试技巧 . 1929.3.1 程序复位 . 1939.3.2 设置和删除断点的方法 . 1949.3.3 查看和修改寄存器的内容 . 1949.3.4 观察和修改变量 . 1959.3.5 观察和修改存储器区域 . 1969.3.6 并行口和串行口的使用方法 . 1979.3.7 定时器/计数器的使用方法 . 1979.3.8 外部中断的使用方法 . 1989.4 小结 . 198第 10 章 单片机内部资源及其 C51 编程 .

13、 19910.1 MCS-51 的中断系统及其编程 . 19910.1.1 中断源 . 19910.1.2 中断相关寄存器 . 20010.1.3 中断响应 . 20310.1.4 中断的 C51 编程实例 . 20410.2 MCS-51 的定时/计数器及其编程 . 20610.2.1 定时/ 计数器的硬件基础知识 . 20610.2.2 定时/ 计数器的相关寄存器 . 20710.2.3 定时/ 计数器的工作方式 . 20810.2.4 定时/ 计数器的 C51 编程实例 . 21010.3 MCS-51 的串行口及其编程 . 21410.3.1 串行异步通信的字符帧格式和波特率 . 21

14、510.3.2 MCS-51 单片机串行口的硬件基础知识 . 21610.3.3 MCS-51 单片机串行口的相关寄存器 . 21610.3.4 MCS-51 单片机串行口的工作方式 . 21710.3.5 串行口的 C51 编程实例 . 21910.4 小结 . 223第 11 章 MCS-51 单片机系统扩展 . 22411.1 单片机最小系统 . 22411.1.1 片内无程序存储器的 MCS-51 单片机的最小系统 . 22411.1.2 片内有程序存储器的 MCS-51 单片机的最小系统 . 22511.2 MCS-51 单片机程序存储器的扩展及应用实例 . 22611.2.1 片外

15、总线结构 . 22611.2.2 地址锁存器 . 22711.2.3 程序存储器 . 22811.2.4 程序存储器的扩展实例 . 23111.3 MCS-51 单片机数据存储器的扩展及应用实例 . 23311.4 MCS-51 单片机 I/O 端口的扩展及应用实例 . 23611.4.1 并行扩展 I/O 端口 . 23611.4.2 串行扩展 I/O 端口 . 23911.5 小结 . 244第 12 章 单片机外围接口技术 . 24512.1 MCS-51 单片机键盘接口技术 . 24512.1.1 独立式键盘的接口设计和编程 . 24612.1.2 矩阵式键盘的接口设计和编程 . 24

16、812.2 MCS-51 单片机显示器接口技术 . 25112.2.1 七段发光二极管基础知识 . 25112.2.2 发光二极管显示常用芯片及编程实例 . 25212.2.3 液晶显示模块基础知识 . 25812.2.4 液晶显示模块的 C51 编程实例 . 26212.3 MCS-51 单片机与模数转换器接口技术 . 26412.3.1 单片机与并行模数转换器 ADC0809 的接口及编程 . 26512.3.2 单片机与串行模数转换器 MAX187 的接口及编程 . 26712.4 MCS-51 单片机与数模转换器接口技术 . 26912.4.1 MCS-51 单片机与并行数模转换器 D

17、AC0832 的接口及编程 . 26912.4.2 MCS-51 单片机与串行数模转换器 TLC5615 的接口及编程 . 27212.5 MCS-51 单片机与微型打印机接口技术 . 27512.5.1 TPmP-TF 系列打印机的接口信号 . 27512.5.2 TPmP-TF 打印机的字符编码和汉字 . 27612.5.3 TPmP-TF 打印机的打印命令 . 27712.5.4 MCS-51 单片机与 TPmP-TF 打印机的接口及编程 . 27912.6 小结 . 280第 13 章 简单 C51 应用实例 . 28113.1 简单的跑马灯设计 . 28113.1.1 硬件设计 .

18、28213.1.2 程序设计 . 28213.2 矩形波发生器 . 28513.2.1 用两个定时器/计数器产生矩形波 . 28513.2.2 用一个定时器/计数器产生矩形波 . 28713.3 基于 MCS-51 单片机的四路抢答器 . 28913.3.1 硬件设计 . 28913.3.2 程序设计 . 29113.4 I 2C 总线数据存储器在单片机系统中的用法 . 29613.4.1 I 2C 总线简介 . 29613.4.2 AT24C02 简介 . 29713.4.3 硬件设计 . 29713.4.4 程序设计 . 29813.5 双端口 RAM 在单片机系统中的使用 . 30213

19、.5.1 硬件设计 . 30213.5.2 程序设计 . 30513.6 小结 . 306当前章节:13.1 简单的跑马灯设计在前面的章节中详细介绍了 C51 语言的知识和 MCS-51 单片机的基本功能接口及应用,本章主要侧重于单片机应用系统设计,通过 5 个比较典型的设计实例,介绍单片机应用系统设计的步骤、思路、方法以及应用系统的硬件电路与软件设计等,使读者了解并掌握单片机系统的设计。本章主要包括以下内容: 简单的跑马灯设计; 矩形波发生器; 4 路抢答器; AT24C02 读写驱动程序; 双端口 RAM IDT7132 的使用。13.1 简单的跑马灯设计跑马灯可以用 MCS-51 单片机

20、控制一个 LED 点阵来实现,参见 5.2.3 小节。一个简单的跑马灯的显示情况如图 13.1 所示,图中的每一个小方格代表一个发光二极管,黑色代表相应位置的发光二极管被点亮,白色的空格表示未被点亮。图13.1 所示为从时刻 1 到时刻 4 这段时间 LED 点阵变化的情况,也就是每过一个时间片,“+”向左移动一个位置,因此如果有 11 个类似的时刻,看上去就是“+”从右边移入从左边移出,有从而产生跑马灯的效果。图 13.1 跑马灯的移动显示13.1.1 硬件设计由于图 13.1 中发光管的数量较多(83=24),直接使用 MCS-51 单片机的 I/O端口是很不经济的,因此需要扩展外部 I/

21、O 通道。对于这种简单的显示电路,通常采用常用的串入并出移位寄存器扩展 I/O 通道。由于 LED 点阵只有 3 组,每组 8 位,因此通常将这 3 组全部接在一片移位寄存器的输出端。这种设计方法利用了人眼的视觉暂留效应,节约了硬件成本。人眼的视觉暂留时间是 0.05s,当连续的图像变化超过每秒 24 帧画面的时候,人眼便无法分辨每幅单独的静态画面,因而看上去是平滑连续的视觉效果。在显示时,3 组 LED分时轮流显示,即某一组显示时其他两组全灭,只要循环显示一次的时间不超过 40ms,人眼看到的效果就和 3 组同时显示的效果一样。为保证足够的驱动电流,每组发光管的公共端电流由一只 8550 晶

22、体管提供,由单片机的 I/O 端口控制晶体管的导通或截至。完整的电路如图 13.2 所示。图 13.2 8051 单片机控制的跑马灯电路图13.1.2 程序设计在程序中产生一组发光二极管显示的时间片有两种方法。一种是在程序中采用延时,在这段延时时间中恒显示一组发光二极管,时间片用完后再显示另外一组并延时同样的时间,如此循环往复。这是一种堵塞型的写法,在延时的这段时间内单片机不能处理其他事务,效率低下。另一种方法是采取定时器中断的方式。每产生一次定时器中断,就切换到下一组的显示,直到下一次定时器中断产生。这种方法占用 CPU 时间很少,在显示的同时还可以处理其他事务,效率较高,是通常采用的方法。

23、在本例中,每 5ms 产生一次定时器中断,切换一次显示,因此 3 组轮流一次要用 15ms,刷新频率约为 67Hz,完全满足刷新频率大于 24Hz 的要求。由于采用串行扩展 I/O 通道的方法,因此单片机向 74LS164 发送数据需要一定的时间。根据中断服务程序尽可能耗时短的原则,显示函数(包括对于 74LS164 的驱动)不应在中断服务程序中实现,而是应该仅在中断设置某个标志,通知显示函数当前应切换到哪一组显示即可。需要注意的是,在切换显示的时候要将 3 个晶体管全部截至,也就是所有的发光二极管全灭,以防止由于 74LS164 输出端的数据变化而带来“串亮”现象。程序流程如图 13.3 所示,其中 LED_selection 表示当前要显示哪一组发光二极管,当 LED_selection 为0 时显示第一组,为 1 时显示第二组,为 2 时显示第三组。程序如例 13-1 所示。【例 13-1】图 13.2 中使用 12.0MHz 的晶振,根据晶振频率设置定时器初值,每 5ms 产生一次中断,随后执行切换显示的动作,每 500ms 显示的图形向左移动一次。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。