Ⅰ 单片机开发与典型工程项目实例详解的目 录
1.1 单片机的应用和特点 1
1.1.1 单片机的应用 1
1.1.2 主流单片机的种类及特点 3
1.2 MCS-51系列单片机的内部结构 7
1.3 MCS-51单片机的引脚功能与时序 9
1.3.1 MCS-51系列单片机引脚说明 10
1.3.2 MCS-51单片机的时序 16
1.4 MCS-51单片机的存储器组织 17
1.4.1 程序存储器 18
1.4.2 数据存储器 19
1.4.3 特殊功能寄存器 21
1.5 单片机最小系统 24
1.5.1 单片机最小系统 24
1.5.2 彩灯控制器的设计 25
1.5.3 顺序控制器的设计 27
1.6 本章小结 29 2.1 单片机C语言宏配置介绍 30
2.1.1 处理器的配置 30
2.1.2 ID区域 31
2.1.3 EEPROM数据 31
2.2 单片机数据结构 31
2.2.1 类型限定词 32
2.2.2 常数 33
2.2.3 变量 34
2.2.4 构造数据类型 38
2.2.5 函数 46
2.2.6 中断 49
2.2.7 C语言和汇编语言的嵌套使用 53
2.2.8 伪指令 54
2.3 MPLAB IDE编译器简介 57
2.3.1 MPLAB工程管理器(MPLAB Project Manager) 57
2.3.2 MPLAB文本编辑器(MPLAB Editor) 57
2.3.3 MPLAB软件仿真器(MPLAB-SIM Simulator) 58
2.3.4 MPLAB在线仿真器(MPLAB-ICE Simulator) 58
2.4 MPLAB IDE的安装和使用 58
2.4.1 MPLAB IDE的安装要求 58
2.4.2 MPLAB IDE的使用 59
2.4.3 实例应用 59
2.4.4 MPLAB IDE中的工程 62
2.4.5 MPLAB IDE工程的编译 65
2.4.6 MPLAB IDE的软件仿真 66
2.5 MCC18基础 68
2.5.1 MCC18的安装目录浏览 68
2.5.2 MCC18的语言执行流程 70
2.5.3 MCC18举例 70
2.5.4 MCC18的编译环境 72
2.5.5 MCC18和单片机的比较 73
2.6 单片机的混合开发 74
2.6.1 C51和汇编语言的性能比较 74
2.6.2 C51和汇编语言的混合编程 74
2.7 本章小结 79 3.1 单片机应用系统设计的流程 80
3.2 单片机应用系统两设计原则 82
3.2.1 硬件系统设计原则 82
3.2.2 应用软件设计原则 83
3.3 单片机的选型 83
3.3.1 单片机选型的原则 83
3.3.2 单片机选型参考 85
3.3.3 开发工具的选择 86
3.4 系统常见故障与调试 87
3.5 本章小结 88 4.1 数字滤波算法 89
4.1.1 算术平均值滤波 90
4.1.2 滑动平均值滤波 92
4.1.3 防脉冲干扰平均值滤波 93
4.1.4 中值滤波 95
4.1.5 一阶滞后滤波 96
4.2 数字PID控制算法 97
4.2.1 位置式PID控制算法 98
4.2.2 增量式PID控制算法 100
4.2.3 积分分离的PID控制算法 102
4.2.4 变速积分PID控制算法 103
4.3 本章小结 104 5.1 键盘设计的组成和分类 105
5.1.1 键盘的物理结构 106
5.1.2 键盘的组成形式 106
5.2 键盘接口的工作过程和工作方式 111
5.2.1 键盘的抖动干扰和消除方法 111
5.2.2 盘接口的工作过程 112
5.2.3 键盘的工作方式 112
5.3 键位置的判别方法 113
5.4 键盘接口设计的储存芯片和
5.4 相关协议 114
5.4.1 键盘接口设计的储存芯片 114
5.4.2 AT24CXX系列的芯片及I2C协议 114
5.4.3 A93CXX系列的芯片及SPI协议 124
5.5 键盘接口实现的工程实例 132
5.5.1 矩阵键盘接口的工程实例 132
5.5.2 矩阵式中断扫描键盘的设计 137
5.5.3 二进制编码键盘接口的工程实例 139
5.6 重点与难点 141 6.1 交通灯顺序控制 143
6.1.1 硬件系统的设计 143
6.1.2 反向器74F06 145
6.1.3 控制字 145
6.1.4 程序设计 145
6.2 设计一种基于模糊理论的单片机控制交通路口调度系统 148
6.2.1 系统的总体设计 148
6.2.2 十字路口调度系统模糊控制器的设计 149
6.2.3 电路设计 151
6.2.4 车流量检测电路 154
6.2.5 系统主程序和模糊控制程序设计 155
6.2.6 系统显示程序设计 157
6.3 重点与难点 159 7.1 显示屏显示原理及串行通信基本概念 161
7.1.1 显示屏显示原理 161
7.1.2 串行通信 163
7.1.3 阵列式LED显示屏的实现 166
7.2 显示屏硬件电路设计 166
7.2.1 硬件电路介绍 168
7.2.2 外扩数据存储器电路 170
7.3 列式LED显示屏显示程序的171
7.3.1 汉字点阵数据的提取 171
7.3.2 显示主程序 174
7.3.3 串口中断处理程序 176
7.3.4 显示驱动函数 179
7.3.5 外部存储器读写程序 181
7.3.6 串口通信程序 181
7.3.7 文字显示特效程序 182
7.4 本章小结 191 8.1 IC卡基础 192
8.1.1 IC卡的分类 192
8.1.2 IC卡的标准 194
8.2 接触型IC卡读写系统的开发 194
8.2.1 IC卡读写系统的时序 195
8.2.2 IC卡读写系统的硬件连196
8.2.3 IC卡读写系统的软件系统 197
8.3 基于SLE4442加密卡读写系统的开发 201
8.3.1 SLE4442卡的介绍 201
8.3.2 SLE4442的模式 203
8.3.3 SLE4442的操作命令 205
8.3.4 SLE4442读/写系统的软硬件设计 208
8.4 重点与难点 215 9.1 无刷直流电机控制原理 216
9.1.1 无刷直流电机的组成 217
9.1.2 无刷直流电机的工作原理 217
9.1.3 无刷直流电机的控制方法 219
9.2 无刷直流电机的工作特性 220
9.3 直流无刷电机控制的应用实现 221
9.3.1 总体设计概述 221
9.3.2 直流无刷电机控制的硬件设计 222
9.3.3 直流无刷电机控制的软件设计 224
9.3.4 无刷直流电机速度闭环控制系统 227
9.4 本章小结 230 10.1 永磁同步电机的结构与分类 231
10.2 永磁同步电机的矢量控制 232
10.3 永磁同步电机控制 236
10.3.1 控制电路设计 237
10.3.2 光电隔离电路设计 238
10.3.3 功率电路设计 239
10.4 永磁同步电机控制的软件实现 239
10.4.1 电压SVPVM的DSPIC33f软件实现 241
10.4.2 转子位置检测 243
10.4.3 AD转换模块 245
10.5 本章小结 246 11.1 汽车行驶记录仪功能介绍 247
11.2 简易汽车行驶记录仪的设计 249
11.2.1 汽车行驶记录仪的考虑因素 250
11.2.1 MSP430 251
11.2.2 车模拟信号的采集 254
11.2.4 数字信号采集电路 255
11.2.5 SST39VF160芯片介绍 257
11.3 记录仪的软件设计 257
11.3.1 软件流程图 258
11.3.2 数据存储格式 259
11.3.3 SST39VF160存储器数据读写的实现 259
11.4 数据采集的程序实现 263
11.5 本章小结 264 12.1 USB-GPIB控制器简介 265
12.1.1 认识USB 266
12.1.2 GPIB 269
12.2 USB-GPIB控制器的硬件电路设计 271
12.2.1 器件的选择 272
12.2.2 USB-GPIB控制器电路设计 278
12.3 USB-GPIB控制器的软件程序的实现 287
12.3.1 USB单片机协议控制芯片与主机(计算机)的数据交互 288
12.3.2 USB协议控制芯片与GPIB控制器的数据交互 299
12.4 USB-GPIB控制器固件的调试与固化 300
12.4.1 USB-GPIB控制器固件的调试 301
12.4.2 USB-GPIB控制器固件程序的固化 302
12.5 本章小结 303 13.1 研究抗干扰技术的重要性 304
13.2 干扰的分类 305
13.2.1 按噪声产生的原因分类 306
13.2.2 按噪声传导模式分类 306
13.2.3 按噪声波形及性质分类 307
13.3 干扰的耦合方式 308
13.4 单片机系统可靠性的设计任务与方法 310
13.4.1 单片机系统可靠性设计的任务 310
13.4.2 可靠性设计一般方法 311
13.5 本章小结 313 14.1 无源滤波器抗干扰 314
14.1.1 电容滤波器 315
14.1.2 电感滤波器 316
14.1.3 RC低通滤波器 316
14.1.4 1LC低通滤波器 318
14.1.5 低通滤波器的结构选择 319
14.1.6 低通滤波器的平衡结构与串联形式 319
14.2 有源滤波器抗干扰 321
14.2.1 一级低通有源滤波器 321
14.2.2 二级低通有源滤波器 322
14.3 去耦电路 324
14.3.1 尖峰电流的形成原理 324
14.3.2 去耦电容的配置 325
14.3.3 光电隔离 326
14.3.4 继电器隔离 328
14.3.5 变压器隔离 328
14.3.6 布线隔离 329
14.4 接地技术 330
14.5 本章小结 334 15.1 概述 335
15.2 指令冗余技术 336
15.2.1 单字节指令冗余 337
15.2.2 重要指令冗余 337
15.3 软件陷阱技术 337
15.3.1 未使用的中断向量区设置陷阱 338
15.3.2 RAM数据区中设置陷阱 338
15.3.3 未使用的EPROM数据区设置陷阱 339
15.3.4 非EPROM单片机空间设置陷阱 339
15.3.5 运行程序区设置陷阱 339
15.4 看门狗技术 339
15.4.1 硬件看门狗技术 340
15.4.2 软件看门狗技术 342
15.5 本章小结 345
Ⅱ 我现在刚开始学习单片机,编程用的是keil软件,可电脑和硬件总是连不起来怎么回事啊。
手把手教你学单片机
出版社 : 北京航空航天大学出版社作者 : 周兴华 出版日期:2005年4月版别版次:2005年4月第1版第1次印刷 ISBN : 7-81077-613-4字数 :486千字 印张:19印数 :5000 页数:292开本 :787*1092 1/16 内容简介本书以实际编程及做实验为主线贯穿全书。完全摒弃教科书的方法,采用“程序完成后软件仿真→单片机烧录程序→试验板通电实验”的方法,以全新的方式边学边实验,将初学者领进单片机世界的大门。随书所附的光盘中提供了一些工具软件以及本书所有的实验程序文件,在学习、实验时可参考。 本书的读者对象是大中专学生、职业学校学生、广大电子制作爱好者。第1章 实验设备及器材使用介绍1.1 单片机的发展史及特点1.2 单片机入门的有效途径1.3 实验工具及器材第2章 Keil C51集成开发环境及TOP851多功能编程器2.1 Keil C51集成开发环境软件安装2.2 TOP851烧录软件安装2.3 TOP851烧录软件操作第3章 初步接触KeilC51及TOP851软件并感受第一个演示程序效果3.1 建立一个工程项目,选择芯片并确定选项3.2 建立源程序文件3.3 添加文件到当前项目组中3.4 编译(汇编)文件3,5 检查并修改源程序文件中的错误3.6 软件模拟仿真调试3.7 烧录程序(编程操作)3.8 观察程序运行的结果第4章 单片机的基本知识4.1 MCS51单片机的基本结构4.2 80C51基本特性及引脚定义4.3 80C51的内部结构4.4 80C51的存储器配置和寄存器第5章 汇编语言程序指令的学习5.1 MCS51单片机的指令系统5.2 汇编语言的特点5.3 汇编语言的语句格式第6章 数据传送指令的学习及实验6.1 按寻址方式分类的数据传送指令6.2 点亮/熄灭一个发光二极管的实验,自动循环工作6.3 点亮/熄灭一个发光二极管的实验,点亮/熄灭时间自动发生变化(分3段),自动循环工作6.4 P1口的8个发光二极管每隔2个右循环点亮实验6.5 MCS51内部的RAM和特殊功能寄存器SFR的数据传送指令6.6 “跑马灯”实验6.7 单片机的受控输出显示实验6.8 小结第7章 算术运算指令的学习及实验7.1 算术运算指令7.3 FFH、03H两数相乘实验,结果从P0、P1口输出7.4 加1指令实验,让P1口的8个发光二极管模拟二进制的加法运算7.5 加1指令实验(不进行二十进制调整)7.6 加1指令实验(进行二十进制调整)7.7 小结第8章 逻辑运算指令的学习及实验8.1 逻辑运算指令8.2 逻辑运算举例一8.3 逻辑运算举例二8.4 逻辑运算举例三8.5 小结第9章 控制转移类指令的学习及实验9.1 控制转移类指令9.2 散转程序实验9.3 统计含58H关键字的实验84第10章 位操作指令的学习10.1 位操作指令10.2 将P1.0的状态传送到P2.0的实验10.3 比较输入数大小的实验10.4 将累加器A中的立即数移出的实验10.5 实现逻辑函数的实验第11章 栈操作指令、空操作指令、伪指令及字节交换指令的学习11.1 栈操作指令11.2 空操作指令11.3 伪指令11.4 字节交换指令11.5 查0~9平方表实验11.6 利用NOP指令产生精确方波实验11.7 MCS51指令分类表第12章 定时器/计数器及实验12.1 定时器/计数器的结构及工作原理12.2 定时器/计数器方式寄存器和控制寄存器12.3 定时器/计数器的工作方式12.4 定时器/计数器的初始化12.5 蜂鸣器发音实验12.6 定时器T1方式2计数实验12.7 定时器T1方式1定时实验第13章 中断系统及实验13.1 中断的种类13.2 MCS51单片机的中断系统13.3 令LED输出试验板上的蜂鸣器发出1 kHz音频的实验13.4 利用外中断方式进行数据采集实验13.5 中断嵌套实验13.6 交通灯控制器实验13.7 键控计数实验第14章 汇编语言的程序设计及实验14.1 单片机应用系统的设计过程14.2 汇编语言程序设计步骤14.3 顺序程序设计14.4 右移循环流水灯实验14.5 循环程序设计14.6 找数据块中最大数的实验14.7 延时子程序的结构14.8 寻找ASCII码“$”的实验14.9 子程序设计、调用及返回14.10 使P0口的8个LED闪烁20次实验14.11 分支程序设计14.12 做简单的+、-、×、÷实验14.13 查表程序设计14.14 单片机演奏音乐的实验14.15 数据排序实验第15章 键盘接口技术及实验15.1 独立式键盘15.2 行列式键盘15.3 独立式键盘接口的编程模式15.4行列式键盘接口的编程模式15.5 键盘工作方式15.6 独立式键盘输入实验15.7 行列式键盘输入实验15.8 扫描方式的键盘输入实验15.9 定时中断方式的键盘输入实验第16章 LED显示器接口技术及实验16.1 LED数码显示器的构造及特点16.2 LED数码显示器的显示方法16.3 静态显示实验16.4 慢速动态显示实验16.5 快速动态显示实验16.6 实时时钟实验第17章 字符型液晶(LCD)模块原理及设计学习17.1 液晶显示器概述17.2 16×2字符型液晶显示模块(LCM)特性17.3 16×2字符型液晶显示模块(LCM)引脚及功能17.4 16×2字符型液晶显示模块(LCM)的内部结构17.5 液晶显示控制驱动集成电路HD44780特点17.6 HD44780工作原理17.7 LCD控制器的指令17.8 LCM工作时序17.9 单片机驱动LCM的电路第18章 体验第一个液晶程序的效果并建立模块化设计的相关子程序18.1 体验第一个液晶程序的效果18.2 查询忙碌标志信号子程序18.3 写指令到LCM(IR寄存器)子程序18.4 写数据到LCM(DR寄存器)子程序18.5 清除显示屏子程序18.6 启动LCM子程序18.7 让字母“F”在显示屏的第2行第10列显示18.8 使LCM显示2行字符串(英文信息)18.9 使LCM显示2行字符串(英文信息)并循环移动第19章 简单的液晶显示型自动化仪器的设计学习及实验19.1 工业生产自动计数器19.2 设备运行状态自动显示器19.3 液晶显示计时时钟19.4 让液晶显示屏显示自制图形“中”19.5 液晶显示屏显示复杂的自制图形第20章 Keil C51集成开发环境的设置及调试方法20.1 工程项目的建立、源程序文件的建立及加载20.2 工程的详细设置20.3 编译、连接20.4 Keil C51集成开发环境软件的调试方法20.5 外围接口工具单片机有
C51单片机(全都用C语言写程序)
还有
ASM单片机(全用汇编写程序)
如C51点亮一个数码管程序如下:
#include<reg52.h>
sbit D1=P1^0;
void main()
{
D1=0;
}
用C51写简单多了
我在学C51有兴趣一起研究一下……
Ⅲ STC系列增强型8051单片机原理与应用的图书目录
第1章 STC11F08XE单片机的增强型8051内核
1.1 STC单片机概述
1.1.1 单片机的概念
1.1.2 常见单片机
1.1.3 STC系列单片机
1.2 STC11F08XE单片机的引脚
1.3 STC11F08XE单片机的内部结构
1.3.1 STC11F08XE单片机的内部结构框图
1.3.2 CPU结构
1.4 STC11F08XE单片机的存储结构
1.5 STC11F08XE单片机的并行I/O口
1.5.1 STC11F08XE单片机的并行I/O口与工作模式
1.5.2 STC11F08XE单片机的并行I/O口的结构
1.5.3 STC11F08XE单片机并行I/O口的使用注意事项
1.6 STC11F08XE单片机的时钟与复位
1.6.1 STC11F08XE单片机的时钟
1.6.2 STC11F08XE单片机的复位
本章小结
习题1
第2章 单片机应用的开发工具
2.1 Keil μVision 2集成开发环境
2.1.1 Keil μVision 2集成开发环境概述
2.1.2 Keil C集成开发环境下的程序编辑、编译与调试
2.2 STC系列单片机程序的在线编程与STC仿真器
2.2.1 STC系列单片机程序的在线下载电路
2.2.2 STC系列单片机PC端下载软件的使用
*2.2.3 STC仿真器
2.3 单片机学习的实践模式
2.3.1 仿真模式
2.3.2 在线系统调试模式
本章小结
习题2
第3章 STC11F08XE单片机的指令系统
3.1 概述
3.2 数据传送类指令
3.3 算术运算类指令
3.4 逻辑运算与循环移位类指令(24条)
3.5 控制转移类指令(17条)
3.6 位操作类指令(17条)
本章小结
习题3
第4章 STC11F08XE单片机的程序设计
4.1 汇编语言程序设计
4.1.1 汇编语言程序设计基础
4.1.2 基本程序结构与程序设计举例
4.2 C51程序设计
4.2.1 C51基础
4.2.2 C51程序设计
本章小结
习题4
第5章 STC11F08XE单片机存储器的应用
5.1 STC11F08XE单片机的程序存储器
5.2 STC11F08XE单片机的基本RAM
5.3 STC11F08XE单片机的扩展RAM(XRAM)
5.4 STC11F08XE单片机的EEPROM(数据FLASH)
本章小结
习题5
第6章 STC11F08XE单片机中断系统
6.1 中断系统概述
6.1.1 中断系统的几个概念
6.1.2 中断的技术优势
6.1.3 中断系统需要解决的问题
6.2 STC11F08XE单片机的中断系统
6.2.1 STC11F08XE单片机的中断源
6.2.2 STC11F08XE单片机的中断控制
6.2.3 STC11F08XE单片机的中断处理过程
6.2.4 STC11F08XE单片机中断应用举例
6.3 STC11F08XE单片机外部中断的扩展
本章小结
习题6
第7章 STC11F08XE单片机的定时/计数器
7.1 STC11F08XE单片机定时/计数器的结构和工作原理
7.2 STC11F08XE单片机定时/计数器的控制
7.3 STC11F08XE单片机定时/计数器的工作方式
7.4 STC11F08XE单片机定时/计数器的应用举例
7.4.1 STC11F08XE单片机定时/计数器的定时应用
7.4.2 STC11F08XE单片机定时/计数器的计数应用
7.4.3 单片机秒表的设计
7.5 STC11F08XE单片机的可编程时钟输出功能
7.5.1 STC11F08XE单片机的可编程时钟:CLKOUT0、CLKOUT1、CLKOUT2
7.5.2 STC11F08XE单片机可编程时钟的应用举例
本章小结
习题7
第8章 STC11F08XE单片机的串行口
8.1 串行通信基础
8.1.1 串行通信的分类
8.1.2 串行通信的传输方向
8.2 STC11F08XE单片机的串行接口
8.2.1 串行口结构
8.2.2 串行口的控制寄存器
8.2.3 串行口的工作方式
8.2.4 串行口的波特率
8.2.5 串行口的应用举例
8.3 STC11F08XE单片机与PC机的通信
8.3.1 串行通信总线标准及其接口
8.3.2 单片机与PC机串行通信的接口设计
8.3.3 单片机与PC机串行通信的程序设计
8.4 STC11F08XE单片机串行口的扩展功能
8.4.1 STC11F08XE单片机串行口数据通道的切换
8.4.2 STC11F08XE单片机的独立波特率发生器
本章小结
习题8
第9章 STC11F08XE单片机的节能工作模式与看门狗电路
9.1 STC11F08XE单片机的节能工作模式
9.1.1 STC11F08XE单片机的慢速模式
9.1.2 STC11F08XE单片机的空闲(等待)模式与停机(掉电)模式
9.2 STC11F08XE单片机的看门狗定时器
9.2.1 看门狗定时器
9.2.2 STC11F08XE单片机的看门狗定时器
9.2.3 STC11F08XE单片机的看门狗定时器的使用
本章小结
习题9
第10章 STC11F08XE 单片机应用系统设计
10.1 STC11F08XE 单片机常用接口设计
10.1.1 键盘接口与应用实例
10.1.2 LED数码显示接口与应用实例
10.1.3 LCD显示接口与应用实例
10.2 串行总线接口技术与应用设计
10.2.1 单总线数字温度传感器DS18B20与应用实例
10.2.2 I2C串行总线与PCF8563的应用实例
10.3 智能小车的软/硬件设计
10.3.1 智能小车功能
10.3.2 智能小车的硬件设计
10.3.3 智能小车的软件设计
10.4 步进电动机应用的软/硬件设计
10.4.1 步进电动机概述
10.4.2 步进电动机的控制
11.4.3 步进电动机的应用设计
本章小结
习题10
附录A ASCII码表
附录B STC11F08XE单片机指令系统表
附录C 制作单片机的寄存器定义文件
附录D ISP的自定义下载
附录E 常用系列典型型号单片机的功能特性
参考文献
Ⅳ 练习与思考题
第1章 概 述第1章 概 述 1.1 单片机的概念及单片机的种类 1.2 单片机的类型、特点及用途 1.3 单片机的发展趋势本章小结练习与思考题 第1章 概 述 1.1 单片机的概念及单片机的种类 1.1.1 单片机及单片机系统单片机是微型计算机发展的一个分支,是一种专门面向控制的微处理器件,故又称之为微控制器(Micro Controller Unit,MCU)。单片机通常以单一芯片的形式出现,但是它已具有了微型计算机所包含的基本组成结构和特有的控制应用功能,是一种芯片级的微型计算机。另外,由于单片机的体积、结构和功能特点,在实际应用中可以完全融入应用系统之中,故而也称为嵌入式微控制器 (Embedded Micro-Controller)。 第1章 概 述最基本的单片机系统由单片机芯片和软件程序共同组建而成,是用户为了实现某种控制用途的需要而设计的实际装置。在单片机系统中,单片机芯片内部的中央处理单元(CPU)处于核心地位,CPU通过执行软件程序调动硬件电路完成控制功能。根据这种工作方式,单片机系统可以划分为硬件和软件两个组成部分。 第1章 概 述 1. 硬件部分单片机系统的硬件部分是包括CPU在内的所有硬件电路,按照硬件电路的功能和配置大致可以分为以下3类 第1章 概 述 1) 基本功能类基本功能类硬件包括:CPU(用于运算、控制)、 RAM(用于数据存储)、ROM(用于程序存储)、I/O设备(实现串行、并行输入/输出接口)及时钟电路(建立工作时序)。在微型计算机中,上述部件被分成若干块芯片,安装在一块称之为主板的印刷线路板上,在程序的指挥下完成计算机的基本运算操作功能。但是在单片机中,除了时钟电路之外,其余部分一般均被集成到一块半导体芯片上,所以被称为单片机,即单芯片微型计算机。 第1章 概 述 2) 控制功能类控制功能类硬件包括:定时器/计数器(用于时间设定/事件记录)和中断装置(实现实时处理)。使用这类硬件是为了实现单片机的控制功能,即定时控制、顺序控制和实时控制等基本控制功能。作为面向嵌入式控制的特色,这类部件通常也集成在单片机芯片内部。 3) 辅助功能类辅助功能类硬件包括:A/D(模/数转换)和D/A(数/模转换,通常采用PWM形式)等部件。这类部件根据芯片的配置不同不一定集成在单片机芯片上,需要用户根据使用要求选择。 第1章 概 述 2. 软件部分与微型计算机的运行原理相似,单片机系统的运行也需要软件系统的支持,但是由于处理任务的不同,其复杂程度相对较低。根据单片机软件所要实现的功能,可以将软件划分为管理程序和应用程序两类。 1) 管理程序管理程序是单片机系统的监控程序,主要用于控制过程复杂,控制量较大的装置,例如测控仪器、仪表等。对于仅完成简单控制任务的单片机系统一般可以相应简化。 第1章 概 述 2) 应用程序应用程序是针对具体的控制动作而编写的程序,是实现控制具体功能的程序基础,通常以子程序模块的形式出现,便于执行控制动作时调用。 第1章 概 述 1.1.2 单片机程序设计语言及开发环境简介单片机程序设计语言主要是指在开发系统中使用的语言。在单片机开发系统中可以使用机器语言、汇编语言和高级语言。机器语言采用机器码,是单片机能够直接识别的程序语言,汇编语言是以助记符表示机器码的程序设计语言。机器语言和汇编语言都是高效的计算机语言,实时性较强,但它们都是面向机器的语言,通用性差,编程效率低。 第1章 概 述单片机的开发过程涉及3项内容,即编程、纠错和仿真。一般采用PC机内安装的集成开发环境(IDE)软件进行开发调试。在集成开发环境内可以实现文本编程、编译纠错和仿真运行。其中仿真的形式又可以分为两种,即软件仿真和硬件仿真。软件仿真不必连接硬件应用系统,仿真结果在开发环境中模拟的单片机构造中得到体现;硬件仿真需要与用户控制系统配合,以集成开发环境的输出替代用户系统中原有的单片机,仿真过程真实、实时性强。另一种较新的开发形式采用具有ISP(In-System Programming,在系统可编程)功能的单片机,利用下载程序开发单片机系统。 第1章 概 述 1.1.3 单片机的使用环境及产品等级单片机用途广,使用环境差别大,如何保证单片机控制系统或装置的可靠性是设计者和使用者最为关注的问题。作为电子产品而言,其可靠性主要取决于半导体芯片的产品等级,根据运行温度范围,产品等级大致划分为3级,下面分别予以介绍。 第1章 概 述 1. 军用级运行温度范围为�6�1-50℃~+125℃,适用于军用品要求苛刻的应用环境,芯片的价格比较昂贵。例如Intel公司的 MCS-51系列单片机MD80C51FB。型号以MD表示开头的, M代表军品,D代表直插封装。 第1章 概 述 2. 商业级运行温度范围为0℃~+70℃,主要限于机房、办公及住宅环境,适用于民用产品,例如家电、玩具等。商业级产品价格低廉,品种齐全,应用最为广泛。 3. 工业级早期的单片机产品大多为工业级,运行温度范围为�6�1-45℃~+85℃,介于商业级和军用级之间,适宜在工业生产环境下使用。其特点是可靠性远高于商业级,但价格远低于军用级。MCS-51系列单片机的普通产品均属于工业级。 第1章 概 述 1.2 单片机的类型、特点及用途 1.2.1 单片机主要类型及其特点 1. 常用单片机的类型及特点 Intel公司的MCS-51系列及其兼容产品是目前最常用的一种单片机类型,其引进历史较长,学习资料齐全,影响面较广、应用成熟,已被单片机控制装置的开发设计人员广泛接受。本书将以这种单片机产品为主介绍单片机的结构原理、指令系统、编程应用及接口电路等内容。MCS-51系列单片机及其兼容产品的生产厂家很多,以下仅列出具有代表性的 3家公司的产品,其产品的型号及特点如表1-1所示。 第1章 概 述表1-1 常用MCS-51系列单片机一览表公 司 品 名 特 点 Intel 8031 MCS-51 CMOS 单片8 位微控制器,32 条I/O 引线,2 个定时器/计数器, 5 个中断源,2 个优先级,128 B 片内RAM 80C562 基于8051 CMOS 控制器,8 位 A/D,PWM,48 条I/O 引线,3 个定时器/计数器,14 个中断源,4 个优先级,无片内ROM,256 B 片内RAM Philips 87C591 基于8051 CMOS控制器,片内CAN(SJA1000 CAN),10 位 ADC,WDT, 32 条I/O 引线,3 个定时器/计数器,15 个中断源,4 个优先级,I 2 C 总线, 16 KB EPROM,256 B 片内 RAM +256 B 附加AUX RAM 第1章 概 述 2.常用单片机的更新及进步随着单片机技术的发展,高性能的新型单片机开始出现,其中美国Cygnal公司推出的C8051F系列单片机就是在MCS-51系列单片机基础之上进行更新开发的一种产品。�6�1C8051F实际上是一种以8051为内核集成的混合信号系统级芯片。熟悉MCS-51系列单片机的工程技术人员可以很容易地掌握C8051F的应用技术并能进行软件的移植。 第1章 概 述 C8051F系列单片机采用流水线结构,单周期指令运行速度是8051的12倍,全指令集运行速度是原来的9.5倍。 C8051F系列单片机的内部资源非常丰富,例如C8051F020单片机内部除包含8051微控制器内核、RAM、ROM、I/O口、定时器/计数器等MCS-51 系列的配置之外,还具有ADC、 DAC、PCA、SPI和SMBus等部件。这种将单片机的基本组成单元与模拟、数字外设集成在一个芯片上而组成的片上系统(SoC),实质上已超出了以往单片机(MCU)的含义,代表了高性能单片机发展的一个方向。 第1章 概 述 3. 其他类型单片机及特点简介 1) �6�1PIC系列单片机 PIC系列单片机由美国Microchip公司设计生产,与MCS-51 系列对应的产品有PIC16C系列和PIC17C系列8位单片机,广泛应用于消费电子产品、汽车电子及工业控制等领域,就产量和市场份额而言在世界单片机领域排名属于前列。 第1章 概 述 PIC系列单片机有如下特点: (1) 完全哈佛结构。指令和数据空间及传输路径完全分开,提高了数据吞吐率。程序和数据总线采用不同的宽度。数据总线为8位,指令总线根据单片机档次不同分为12、14、 16位,指令均以单字节形式表示。 (2) 流水线结构。取指令和执行指令采用流水线形式,执行一条指令时,同时允许取出下一条指令,从而实现了单周期指令。 第1章 概 述 (3) 寄存器组结构。RAM及寄存器,包括I/O口、定时器和程序计数器等都以寄存器方式工作和寻址,只需要一个指令周期就可以完成访问和操作。通常另辟堆栈RAM空间,不占用片内数据存储单元。 (4) 精简指令系统。采用RISC(精简指令集计算机)结构,与传统的采用CISC(复杂指令集计算机)结构的单片机相比,其指令数量少,易学易记。此外,精简指令系统还具有较高的代码压缩能力,有利于提高程序执行速度。 第1章 概 述 (5) 种类齐全。不单纯追求功能堆积,从实际出发,以多种型号满足不同层次、不同用途的需求。在规模上既有84 脚封装,多达66根I/O口线的型号,也有8脚封装,6根I/O口线的型号。功能较全的高档次单片机产品还配置了A/D(模/ 数转换)、CCP(捕捉/比较)或采用PWM(脉宽调制)的D/A转换单元。 PIC系列单片机功能全、种类多,便于选择使用,开发者可以根据不同的用途和要求设计出性价比较高的单片机控制装置。 第1章 概 述 2) �6�1MSP430单片机 MSP430系列单片机是美国德州仪器(TI)公司1996年开始推向市场的一种16位单片机,采用精简指令集,是一种超低功耗的混合型单片机。MSP430系列单片机的主要特点是,具有极低的功耗、丰富的片内外设和方便灵活的开发手段。 MSP430单片机的主要优点描述如下: (1) 运算处理能力强。MSP430系列是16位单片机,采用了RISC结构,具有丰富的寻址方式和简洁的内核指令以及大量的模拟指令,在8 MHz时钟晶振的驱动下指令周期仅为125 ns。 第1章 概 述 (2) 超低功耗设计。采用1.8~3.6 V工作电压,在1 MHz 的时钟条件下运行时,芯片取用电流在200~400 μA左右。在时钟关断模式运行时,最低维持电流只有0.1 μA。具有独特的时钟系统设计,它有两个时钟,用以产生CPU和各功能单元所需的时钟,可以在指令控制下接通和关断时钟,实现对总体功耗的控制。MSP430系列单片机有5种不同的工作模式。在等待方式下,电流消耗为0.7 μA。在节电方式下,最低可达0.1 μA。当系统处于省电的备用状态时,用中断请求将它唤醒的时间只需6 μs。 第1章 概 述 (3) 丰富的片上外围模块。集成了较丰富的片内外设,其中包括看门狗(WDT)、模拟比较器A、硬件乘法器、液晶驱动器、10/12位ADC、I 2 C总线和直接数据存取(DMA)等。 (4) 方便高效的开发环境。MSP430单片机有OPT、 FLASH和ROM 3种类型,目前主要以FLASH型为主。片内有JTAG(Joint Test Action Group,联合测试行动小组)调试接口,通过PC机和JTAG调试器获取片内信息,从而使设计者在调试开发时,无需仿真器和编程器。开发工具简便,价格也相对低廉,可以实现在线编程。开发语言有汇编语言和C 语言。 第1章 概 述 (5) 运行环境。MSP430系列单片机产品均为工业级,运行环境温度为-40�6�1~+85℃,适合工业环境下使用。 3) 单片机品种及主流单片机概况单片机品种繁多,各具特色。其中Intel公司推出的MCS-51 系列单片机及与其兼容的Philips、Atmel、Winbond等公司的产品应用非常广泛。目前单片机入门教材大多以MCS-51系列单片机作为学习基础,所以被普遍接受,堪称主流。而 Microchip公司的PIC精简指令集单片机产品也有着强劲的发展势头。就产量而言,在可供二次开发的单片机产品中PIC 单片机居全球之首。 第1章 概 述 1.2.2 常用单片机的应用领域单片机的特点是集成度高、功能强、可靠性高、体积小、功耗低、使用方便及价格低廉。单片机的应用几乎是无处不在,已经渗透到我们生活中的各个领域。目前单片机已经在工业控制、仪器仪表、家用电器、办公自动化、医用设备、信息和通信产品、航空航天、专用设备的智能化管理等领域中得到了广泛的应用,其应用形式体现如下。 第1章 概 述 1. 在工业控制中的应用工业自动化控制是最早采用单片机控制的领域之一,在测控系统、过程控制、机电一体化设备中主要利用单片机实现逻辑控制、数据采集、运算处理、数据通信等用途。单独使用单片机可以实现一些小规模的控制功能,作为底层检测、控制单元与上位计算机结合可以组成大规模工业自动化控制系统。特别在机电一体化技术中,单片机的结构特点使其更容易发挥其集机械、微电子和计算机技术于一体的优势。 第1章 概 述 2. 在智能仪器中的应用内部含有单片机的仪器统称为智能仪器,也称为微机化仪器。这类仪器大多采用单片机进行信息处理、控制及通信,与非智能化仪器相比,功能得到了强化,增加了诸如数据存储、故障诊断、联网集控等功能。以单片机作为核心组成智能仪表已经是自动化仪表发展的一种趋势。 第1章 概 述 3. 在家用电器中的应用单片机功能完善、体积小、价格廉、易于嵌入,非常适用于对家用电器的控制。嵌入单片机的家用电器实现了智能化,是传统型家用电器的更新换代,现已广泛应用于洗衣机、空调、电视机、视盘机、微波炉、电冰箱、电饭煲以及各种视听设备等。 第1章 概 述 4. 在信息和通信产品中的应用信息和通信产品的自动化和智能化程度很高,其中许多功能的完成都离不开单片机的参与。这里最具代表性和应用最广的产品就是移动通信设备,例如手机内的控制芯片就属于专用型单片机。另外在计算机外部设备中,如键盘、打印机中也离不开单片机。新型单片机普遍具备通信接口,可以方便地与计算机进行数据通信,为计算机和网络设备之间提供连接服务创造了条件。 第1章 概 述 5. 在办公自动化设备中的应用现代办公自动化设备中大多数嵌入了单片机控制核心。如打印机、复印机、传真机、绘图机、考勤机及电话等。通过单片机控制不但可以完成设备的基本功能,还可以实现与计算机之间的数据通信。 6. 在商业营销设备中的应用在商业营销系统中单片机已广泛应用于电子秤、收款机、条形码阅读器、IC卡刷卡机、出租车计价器以及仓储安全监测系统、商场保安系统、空气调节系统、冷冻保险系统等。 第1章 概 述 7. 在医用设备领域中的应用单片机在医疗设施及医用设备中的用途亦相当广泛,例如在医用呼吸机、各种分析仪、医疗监护仪、超声诊断设备及病床呼叫系统中都得到了实际应用。 8. 在汽车电子产品中的应用现代汽车的集中显示系统、动力监测控制系统、自动驾驶系统、通信系统和运行监视器等装置中都离不开单片机。特别是采用现场总线的汽车控制系统中,以单片机担当核心的节点通过协调、高效的数据传送不仅完成了复杂的控制功能,而且简化了系统结构。 第1章 概 述 1.3 单片机的发展趋势目前,单片机正朝着高性能和多品种方向发展,将会进一步实现低功耗、小体积、大容量、高性能、低价格和外围电路内装化等要求。单片机的发展将主要以满足在嵌入式应用前提下与控制对象的最佳结合,突显其智能化控制能力。并在此基础上寻求应用系统在芯片上的最大化解决方式,即形成了SoC化趋势。在微电子技术、IC设计、 EDA工具发展的推动下,基于SoC的单片机应用系统将会得到较快的发展。 第1章 概 述本章小结本章简要介绍了关于单片机及单片机系统的基本概念、结构特点和发展历程,并且对单片机的应用开发方式及应用环境进行了简介。通过对常用单片机系列、型号和各生产厂家的产品特点的介绍,使我们对单片机的种类及性能有一个初步的了解,便于在今后的应用中能够选择合适的单片机类型,满足具体用途的需要。另外,本章还从开拓视野的角度列举了单片机在各个领域的应用,以及单片机今后的发展趋势。
自己研究吧。。我看得晕掉了- -、、、
Ⅳ 求好心人给一篇电气自动化专业的论文啊
http://wenku..com/view/b2a55f1eb7360b4c2e3f6457.html
基于51单片机的抢答器设计
目 录
第一章 抢答器的概述
1.1 系统设计的功能
1.2 抢答器需求分析
1.3 抢答器的工作原理
第二章 单片机的功能简介
2.1 89系列单片机的概述
2.2 AT89S51的功能
2.2.1 TA89S51特殊功能寄存器
2.2.2 AT89S51单片机的内部结构
第三节 硬件电路的设计
3.1 总电路原理
3.2 时钟频率电路的设计
3.3 复位电路的设计
3.3.1 复位电路的可靠性设计
3.3.2 人工复位
3.4 显示电路的设计
3.5 控制电路的实现
3.6 发声
3.7 系统复位
第四章 软件设计
4.1 软件任务分析
4.2 显示子程序的设计
4.3 定时器T0、T1中断服务程序的设计
4.4 抢答器处理程序的设计
4.5 主程序及分析
第五章 元器件及焊接调试
第六章 设计小结
致谢
参考文献
摘 要
随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。现在单片机已进入各个领域,以其功耗小、智能化而着称,所以若利用单片机来设计抢答器,便使以上问题得以解决.针对以上情况,本文设计出以AT89S51单片机为核心的八路抢答器。我们采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微秒,也可分辨出是哪组优先按下的按键,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。
本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用89S51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。
Ⅵ 单片机的网路资源是什么
随着计算机通信技术、电子信息技术和多媒体技术的飞速发展,Internet网络日益成为人们日常生活中必不可少的工具。信息家电、智能化仪表等需要与Internet网络连接的非PC设备越来越多。就目前来看,在非PC设备中,大约有50%左右的是8位的微处理器。若想实现这些设备与Internet网络的通信,必须扩展8位微处理器的网络功能。本文提出了单片机与Internet网络通信的一种具体实现方案。鉴于8位小型微型单片机系统的广泛应用,在深入学习了解了高性能的32位单片微处理器与Internet网络的通信应用之后,选择目前较为流行的八位单片机和以太网控制芯片构成单片机网络通信系统,并在此基础上成功的将经过裁剪的TCP/IP协议移植到系统中,在此基础上设计并实现了嵌入式webserver应用:客户端通过浏览器中的网页实时操纵单片机应用系统LED小灯的亮灭。 由于8位单片机的内部资源有限,根据其自身特点和实际应用的需要,必须对TCP/IP协议进行适当的裁剪。本系统在设计过程中,选择了TCP/IP协议各层最具代表性的协议,并对其进行裁剪,将裁减后的协议移植到系统中后,经实验证明系统运行良好,达到了预期的目的。
目录
摘要
第一章 绪 论
1.1 单片机与 Internet 网络通信概述
1.2 单片机与 Internet 网络通信的解决方案
1.3 系统在教育领域中的应用展望
1.4 本论文所作的工作
第二章 单片机与 Internet 网络通信的系统实现
2.1 系统的实现原理
2.2 系统的硬件实现
2.3 系统的软件实现
第三章 RTL8019AS 以太网接口芯片的驱动设计
3.1 RTL8019AS 的引脚描述
3.2 RTL8019AS 的内部结构和工作原理
3.3 W78E58B 和 RTL8019AS 实现的以太网接口模块
3.4 RTL8019AS 网络接口模块控制程序设计
第四章 TCP/IP 协议的移植
4.1 TCP/IP 协议概述
4.2 TCP/IP 协议在8位单片机上的实现概述
4.3 ARP 协议
4.4 IP 协议
4.5 ICMP 协议
4.6 UDP 协议
4.7 TCP 协议
第五章 WEBSERVER 的实现及应用
5.1 8位单片机内部实现 webserver 概述
5.2 web 页面的存储
5.3 访问单片机内的 web 页
5.4 HTTP 协议的工作原理
5.5 webserver 的实现
第六章 结论和展望
6.1 全文总结
6.2 突出特点
6.3 工作展望
参考文献
致谢
Ⅶ 刘雨棣单片机
基本信息
作 者:刘雨棣 傅骞
出 版 社:西安电子科技大学出版 出版日期:2008-07
ISBN:756062054 版 次:1
包 装:平装 开 本:16开
页 数:226 页 字 数:345000千
印 张:1次
所属分类:图书 > 计算机与网络 > 计算机系统结构 > 单片机 > (分类细分与勘误) 内容介绍
本书以陕西省高职高专精品课程“单片机原理及应用”为背景,充分考虑高职特色及专科层次,突出了应用技术的特点。在讲述具体内容时,以MCS-51系列8位单片机为基础,使学生认识单片机的基本结构及工作原理。当结合到实际应用介绍时,则以目前市场上流行的MCS-51系列单片机兼容产品作为控制核心,以保证内容的新颖性和先进性。目前,单片机产品经多年的发展己在单个芯片上基本实现了完整功能,因此开发与外部功能部件配合的接口己成为开发单片机的主要任务,本书为此分配了适当的篇幅。 为了全面掌握单片机技术,书中将采用“复杂指令集”的MCS-51系列单片机同采用“精简指令集”的PIC单片机进行对比介绍,以便在实践中针对不同的用途有更灵活、有效的处置方法。 另外,在本书中有~定数量的应用实例,通过对这些实例的分析、研究可以使学习更贴近于实践、更方便于应用。 本书适合作为高职高专电类专业的教材,也可供从事嵌入式控制技术工作的工程技术人员作为参考资料。 本书参考学时为64学时。
更多
作者简介
姓名:刘雨棣 傅骞着
作者简介:
作品:《单片机原理及接口技术》 目录
第1章 概述
1.1 单片机的概念及单片机的种类
1.1.1 单片机及单片机系统
1.1.2 单片机程序设计语言及开发环境简介
1.1 3 单片机的使用环境及产品等级
1.2 单片机的类型、特点及用途
1.2.1 单片机主要类型及其特点
1.2.2 常用单片机的应用领域
1.3 单片机的发展趋势
本章小结
练习与思考题
第2章 mcs-51单片机芯片的结构及原理
2.1 mcs-51单片机基本结构与封装
2.1.1 mcs 51单片机的基本结构与内部结构
2.1.2 mcs 51单片机引脚分布及功能
2.2 mcs-51单片机的存储器
2.2.1 mcs-51单片机的程序存储器
2.2.2 mcs-51单片机的数据存储器
2.3 mcs-51单片机i/o口电路
2.3.1 mcs-51单片机i/o口的硬件结构
2.3.2 mcs-51单片机i/o口的使用特点
2.4 mcs 51单片机的时钟电路与工作时序
2.4.1 单片机时钟电路
2 4.2 指令执行与时序
2.5 mcs-51单片机工作方式
2.5.1 复位方式与复位电路
2.5.2 程序执行方式及掉电保护
2.5.3 单片机的低功耗运行模式
2.6 其他单片机的对照描述
2.6.1 p1c系列单片机的主要特点
2.6.2 典型pic系列单片机的基本性能
本章小结
第3章 单片机的指令系统及功能对照
3.1 mcs 51单片机的指令系统
3.1.1 mcs 51单片机的指令格式
3.1.2 mcs 51单片机的寻址方式
3.2 mcs 51单片机指令功能分类
3.2.1 数据传送类指令
3.2.2 算术运算类指令
3.2.3 逻辑运算及移位类指令
3.2.4 控制转移类指令
3.2.5 布尔操作类指令
3.3 精简指令单片机指令系统简介
3.3.1 pic系列单片机精简指令集及其说明
3.3.2 pic指令系统简介
本章小结
练习与思考题
第4章 mcs-51单片机汇编程序设计
4.1 汇编语言程序设计概述
4.1.1 汇编语言以及汇编语言程序设计特点
4.1.2 mcs-51汇编语言伪指令
4.1.3 汇编
更多
书摘
第1章 概述
1.1 单片机的概念及单片机的种类
1.1.1 单片机及单片机系统
单片机是微型计算机发展的一个分支,是一种专门面向控制的微处理器件,故又称之为微控制器(micro controller unit,mcu)。单片机通常以单一芯片的形式出现,但是它已具有了微型计算机所包含的基本组成结构和特有的控制应用功能,是一种芯片级的微型计算机。另外,由于单片机的体积、结构和功能特点,在实际应用中可以完全融入应用系统之中,故而也称为嵌入式微控制器(embedded micro—controller)。
最基本的单片机系统由单片机芯片和软件程序共同组建而成,是用户为了实现某种控制用途的需要而设计的实际装置。在单片机系统中,单片机芯片内部的中央处理单元(cpu)处于核心地位,cpu通过执行软件程序调动硬件电路完成控制功能。根据这种工作方式,单片机系统可以划分为硬件和软件两个组成部分。
1 硬件部分
单片机系统的硬件部分是包括cpu在内的所有硬件电路,按照硬件电路的功能和配置大致可以分为以下3类。
1)基本功能类
基本功能类硬件包括:cpu(用于运算、控制)、ram(用于数据存储)、rom(用于程序存储)、i/o设备(实现串行、并行输入/输出接口)及时钟电路(建立工作时序)。在微型计算机中,上述部件被分成若干块芯片,安装在一块称之为主板的印刷线路板上,在程序的指挥下完成计算机的基本运算操作功能。但是在单片机中,除了时钟电路之外,其余部分一般均被集成到一块半导体芯片上,所以被称为单片机,即单芯片微型计算机。
……
Ⅷ 跪求 51单片机+12864液晶+1302时钟制成的万年历c程序
顶层文件 万年历.C
#include<reg51.h>
#include "LCD1602.h"
#include "DS1302.h"
#define uchar unsigned char
#define uint unsigned int
sbit speaker=P2^4;
bit key_flag1=0,key_flag2=0;
SYSTEMTIME adjusted;
uchar sec_add=0,min_add=0,hou_add=0,day_add=0,mon_add=0,yea_add=0;
uchar data_alarm[7]={0};
/************键盘控制******************************/
int key_scan() //扫描是否有键按下
{ int i=0;
uint temp;
P1=0xf0;
temp=P1;
if(temp!=0xf0)
i=1;
else
i=0;
return i;
}
uchar key_value() //确定按键的值
{
uint m=0,n=0,temp;
uchar value;
uchar v[4][3]={'2','1','0','5','4','3','8','7','6','b','a','9'} ;
P1=0xfe; temp=P1; if(temp!=0xfe)m=0;
P1=0xfd;temp=P1 ;if(temp!=0xfd)m=1;
P1=0xfb;temp=P1 ;if(temp!=0xfb)m=2;
P1=0xf7;temp=P1 ;if(temp!=0xf7)m=3;
P1=0xef;temp=P1 ;if(temp!=0xef)n=0;
P1=0xdf;temp=P1 ;if(temp!=0xdf)n=1;
P1=0xbf;temp=P1 ;if(temp!=0xbf)n=2;
value=v[m][n];
return value;
}
/***************************设置闹铃函数*******************************/
void naoling(void)
{
uchar i=0,l=0,j;
init1602();
while(key_flag2&&i<12)
if(key_scan()){j=key_value();write_data(j);if(i%2==0)data_alarm[l]=(j-'0')*10;else {data_alarm[l]+=(j-'0');l++;}i++;delay(600);}
write_com(0x01);
}
uchar according(void)
{ uchar k;
if(data_alarm[0]==adjusted.Year&&data_alarm[1]==adjusted.Month&&data_alarm[2]==adjusted.Day&&data_alarm[3]==adjusted.Hour&&data_alarm[4]==adjusted.Minute&&data_alarm[5]==adjusted.Second)
k=1;
else k=0;
return k;
}
void speak(void)
{uint i=50;
while(i)
{speaker=0;
delay(1);
speaker=1;
delay(1);
i--;
}
}
void alarm(void)
{uint i=10;
while(i)
{
speak();
delay(10);
i--;
}
}
/**************************修改时间操作********************************/
void reset(void)
{
sec_add=0;
min_add=0;
hou_add=0;
day_add=0;
mon_add=0;
yea_add=0 ;
}
void adjust(void)
{
if(key_scan()&&key_flag1)
switch(key_value())
{case '0':sec_add++;break;
case '1':min_add++;break;
case '2':hou_add++;break;
case '3':day_add++;break;
case '4':mon_add++;break;
case '5':yea_add++;break;
case 'b':reset();break;
default: break;
}
adjusted.Second+=sec_add;
adjusted.Minute+=min_add;
adjusted.Hour+=hou_add;
adjusted.Day+=day_add;
adjusted.Month+=mon_add;
adjusted.Year+=yea_add;
if(adjusted.Second>59) adjusted.Second=adjusted.Second%60;
if(adjusted.Minute>59) adjusted.Minute=adjusted.Minute%60;
if(adjusted.Hour>23) adjusted.Hour=adjusted.Hour%24;
if(adjusted.Day>31) adjusted.Day=adjusted.Day%31;
if(adjusted.Month>12) adjusted.Month=adjusted.Month%12;
if(adjusted.Year>100) adjusted.Year=adjusted.Year%100;
}
/**************************中断处理函数*********************************/
void changing(void) interrupt 0 using 0 //需要修改时间和日期,或者停止修改
{
if(key_flag1)key_flag1=0;
else key_flag1=1;
}
void alarming(void) interrupt 3 using 0 //需要设置闹铃或者停止设置
{
if(key_flag2)key_flag2=0;
else key_flag2=1;
}
/********************************主函数***********************************/
main()
{uint i;
uchar *l;
uchar p1[]="D:",p2[]="T:";
SYSTEMTIME T;
EA=1;
EX0=1;
IT0=1;
EA=1;
EX1=1;
IT1=1;
init1602();
Initial_DS1302() ;
while(1)
{ write_com(0x80);
write_string(p1,2);
write_com(0xc0);
write_string(p2,2);
DS1302_GetTime(&T) ;
adjusted.Second=T.Second;
adjusted.Minute=T.Minute;
adjusted.Hour=T.Hour;
adjusted.Week=T.Week;
adjusted.Day=T.Day;
adjusted.Month=T.Month;
adjusted.Year=T.Year;
for(i=0;i<9;i++)
{
adjusted.DateString[i]=T.DateString[i];
adjusted.TimeString[i]=T.TimeString[i];
}
adjust();
if(key_flag2)naoling();
if(according())alarm();
DateToStr(&adjusted);
TimeToStr(&adjusted);
write_com(0x82);
write_string(adjusted.DateString,8);
write_com(0xc2);
write_string(adjusted.TimeString,8);
delay(10);
}
(二)头文件1 显示模块 LCD1602.H
#ifndef LCD_CHAR_1602_2009_5_9
#define LCD_CHAR_1602_2009_5_9
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs = P2^0;
sbit lcdrw = P2^1;
sbit lcden = P2^2;
void delay(uint z) // 延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) // 写入指令数据到 lcd
{
lcdrw=0;
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date) // 写入字符显示数据到 lcd
{
lcdrw=0;
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init1602() // 初始化设定
{
lcdrw=0;
lcden=0;
write_com(0x3C);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void write_string(uchar *pp,uint n)
{
int i;
for(i=0;i<n;i++)
write_data(pp[i]);
}
#endif
(三)头文件2 时钟模块 DS1302.H
#ifndef _REAL_TIMER_DS1302_2009_5_20_
#define _REAL_TIMER_DS1302_2003_5_20_
sbit DS1302_CLK = P2^6; //实时时钟时钟线引脚
sbit DS1302_IO = P2^7; //实时时钟数据线引脚
sbit DS1302_RST = P2^5; //实时时钟复位线引脚
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
typedef struct SYSTEM_TIME
{
unsigned char Second;
unsigned char Minute;
unsigned char Hour;
unsigned char Week;
unsigned char Day;
unsigned char Month;
unsigned char Year;
unsigned char DateString[9]; //用这两个字符串来放置读取的时间
unsigned char TimeString[9];
}SYSTEMTIME; //定义的时间类型
#define AM(X) X
#define PM(X) (X+12) // 转成24小时制
#define DS1302_SECOND 0x80
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_WEEK 0x8A
#define DS1302_DAY 0x86
#define DS1302_MONTH 0x88
#define DS1302_YEAR 0x8C
#define DS1302_RAM(X) (0xC0+(X)*2) //用于计算 DS1302_RAM 地址的宏
/******内部指令**********/
void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数)
{
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
{
DS1302_IO = ACC0;
DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1; //因为在前面已经定义了ACC0 = ACC^0;以便再次利用DS1302_IO = ACC0;
}
}
unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数)
{
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
ACC7 = DS1302_IO;
DS1302_CLK = 1;
DS1302_CLK = 0;
}
return(ACC);
}
/********************************/
void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据
{
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr); // 地址,命令
DS1302InputByte(ucDa); // 写1Byte数据
DS1302_CLK = 1;
DS1302_RST = 0;
}
unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据
{
unsigned char ucData;
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr|0x01); // 地址,命令
ucData = DS1302OutputByte(); // 读1Byte数据
DS1302_CLK = 1;
DS1302_RST = 0;
return(ucData);
}
void DS1302_SetProtect(bit flag) //是否写保护
{
if(flag)
Write1302(0x8E,0x10);
else
Write1302(0x8E,0x00);
}
void DS1302_SetTime(unsigned char Address, unsigned char Value) // 设置时间函数
{
DS1302_SetProtect(0);
Write1302(Address, ((Value/10)<<4 | (Value%10))); //将十进制数转换为BCD码
} //在DS1302中的与日历、时钟相关的寄存器存放的数据必须为BCD码形式
void DS1302_GetTime(SYSTEMTIME *Time)
{
unsigned char ReadValue;
ReadValue = Read1302(DS1302_SECOND);
Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将BCD码转换为十进制数
ReadValue = Read1302(DS1302_MINUTE);
Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_HOUR);
Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_DAY);
Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_WEEK);
Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_MONTH);
Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_YEAR);
Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
}
unsigned char *DataToBCD(SYSTEMTIME *Time)
{
unsigned char D[8];
D[0]=Time->Second/10<<4+Time->Second%10;
D[1]=Time->Minute/10<<4+Time->Minute%10;
D[2]=Time->Hour/10<<4+Time->Hour%10;
D[3]=Time->Day/10<<4+Time->Day%10;
D[4]=Time->Month/10<<4+Time->Month%10;
D[5]=Time->Week/10<<4+Time->Week%10;
D[6]=Time->Year/10<<4+Time->Year%10;
return D;
}
void DateToStr(SYSTEMTIME *Time)
{
//将十进制数转换为液晶显示的ASCII值
Time->DateString[0] = Time->Year/10 + '0';
Time->DateString[1] = Time->Year%10 + '0';
Time->DateString[2] = '-';
Time->DateString[3] = Time->Month/10 + '0';
Time->DateString[4] = Time->Month%10 + '0';
Time->DateString[5] = '-';
Time->DateString[6] = Time->Day/10 + '0';
Time->DateString[7] = Time->Day%10 + '0';
Time->DateString[8] = '\0';
}
void TimeToStr(SYSTEMTIME *Time)
{
//将十进制数转换为液晶显示的ASCII值
Time->TimeString[0] = Time->Hour/10 + '0';
Time->TimeString[1] = Time->Hour%10 + '0';
Time->TimeString[2] = ':';
Time->TimeString[3] = Time->Minute/10 + '0';
Time->TimeString[4] = Time->Minute%10 + '0';
Time->TimeString[5] = ':';
Time->TimeString[6] = Time->Second/10 + '0';
Time->TimeString[7] = Time->Second%10 + '0';
Time->DateString[8] = '\0';
}
void Initial_DS1302(void)
{
unsigned char Second;
Second=Read1302(DS1302_SECOND);
if(Second&0x80) //初始化时间
DS1302_SetTime(DS1302_SECOND,0);
}
void DS1302_TimeStop(bit flag) // 是否将时钟停止
{
unsigned char Data;
Data=Read1302(DS1302_SECOND);
DS1302_SetProtect(0);
if(flag)
Write1302(DS1302_SECOND, Data|0x80);
else
Write1302(DS1302_SECOND, Data&0x7F);
}
#endif