51单片机原理入门教程

51单片机原理入门教程
51单片机原理入门教程

进行运算 制 数据 储 程序 储 输入 输出 备 如 串行口 并行输出口等 在单 机中 些部份 被做到一块芯 中 所 单 单芯 机 有些单 机 集 了 等 一般用 脚封装 能多一些单 机 有引脚 较多的 如 引脚 能少的 有 多个或 多个引脚 甚至 引脚

单 机和 等的关系

是指 美 生产的一系列单 机的总 包括 等 是最早最 型的产品 系列 它单 机都是在 基础 进行 能增 改 而来 所 惯用 来 系列单 机 美 开发生产 下用 来完 实验

基本概念

半 体 储器的分类

按 能分 读 储器 和 机 储器

可编程 储器

紫外线擦除的可编程 读 储器 擦除次数有限里里几百次

闪 储器 和 类似 电学方法可 擦除 寿 长 几万到几十万次 等 写 是指在 常 作条件 管是 是 的写都有特殊条件 一般用编程器来做 作 置 能改写

一 单 机的外部结构

的芯 线

引脚 负极

引脚

负极 地 接 引脚

电源 电源

电源 极接 引脚

振蒎电路 单 机是时序电路 必 提供脉 信 才能 常 作 单 机内部已集 了振荡器 使用晶体振荡器 接 脚 按 接 晶振 电容 复 电路

复 引脚 复 电路

任何单 机在 作之前都要复 要在单 机的 引脚 高电 时间 少于 可

引脚 引脚接到 电源端 至 一个单 机就接好 通 电 单 机就开始 作了

指 保 在单 机的 读 储器 中

灯灭

调用子程序指 延时

灯亮

转移指

调用子程序指 执行过程中遇到 指 就返回到 指 面的一条指 继续执行 到 是延时程序 程序最 一行是 是一条指 程序到 结束 伪指

符 表一个 单元 指 中来分析 是接 者 是被传递的数 传递者被省略了 大部份数据传递指 都会有传递者 说明 就是被传递者 而 是传递者 指 将 参数中的值 如果 等于 就转移 转去执行 时 中的值 最终 被执行 次

题 如果在 中放入 会有什 的结果

程序将 断循 至零

时序分析

计算机 作时 中 指 然 执行 计算机 一次 储器的时间 之 一个机器周期

机器周期 它包括 个时钟周期 单 机 作于 晶振 时钟周期是 微秒 它的一个机器周期是 微秒 单 机的指 中 有

些 要一个机器周期 有一些要 个 个机器周期 如 指 是 周期指 计算 才的延时就是 毫秒

计一个延时 毫秒的延时程序

单 机内部结构分析单 机内部结构分析单 机内部结构分析

作寄 器

要 的数 源 是 达的地方 目的地 是 寄 器 在数据传递类指 中 均将目的地写在指 面 将源写在最

在单 机中 有一个区域 区 机 储器 它可 将数据写进去。特别地 在 单 机中 将 中分出一块区域 作寄 器区

亮灭时间 的程式

个引脚 并行口

并行口结构分析

输出结构 信 进入 储器的单元 一 的状态就被保 来 直到

一次 让它把开关再打开 器

输入结构 第一种方式是将引脚作 输入 读进输入的值 第 种方式

是 引脚处于输出状态时 读入 器的状态 然 作某种 换 再输出

接在外部的开关如果打开接在外部的开关如果打开 输入 如果 合如果 合 输入 但是如果单 机内部的开关是 合的 机内部的开关是 合的 那 管外部的开关是开是 那 管外部的开关是开是 单 机接 到的数

据都是 可 可 要作 输入使用要作 输入使用 要 让内部的开关断开要 让内部的开关断开

就是端口输出 因 要 做 一个准备 作 所 之 准 向 口

它 个口 除作 输入输出口之外 有 它用途 结构稍

复 一些 但用于输入 输出的结构是相 的

第七課 單 機 部分析五

单 机内部有一个一个 用来运算 制 四个并行四个并行 口

有 放程序 有 放中间结果 外 有定时定时 计数器计数器 串串行 口 中断系统中断系统中断系统 一个内部的时钟电路内部的时钟电路内部的时钟电路

单 机中有一些独立 储单元是用来 制 些器件的 特殊 能寄 器

累 器 通常用 表示 它是一个寄 器 所有运算类指 都离 开它

寄 器 在做 除法时放 数或除数 做 除法时 你怎 用

程序状态 面放了 作时的状态 如 表

地址 能介绍 B

F代寻 B寄 器 ACC

司代寻 累 器 PS上

号代寻 程序状态 导P

B叫寻 中断优 制寄 器 P详

B代寻 P详口 器 导司

A叫寻 中断允许 制寄 器 P该

A代寻 P该口 器 SB栈F 99寻

串行口 器 SC适锁 9叫寻

串行口 制寄 器 号只

号6 号5 号4 号详 号该 号令 号代 C同 AC F代 RS令 RS代 适三 P

P令 9代寻 9代寻

P令口 器 标寻令 叫号寻

定时器/计数器令 高叫 标寻代 叫C寻

定时器/计数器令 叫 标L令 叫B寻

定时器/计数器代 高叫 标L代 叫A寻

定时器/计数器代 叫 标销适号 叫9A

定时器/计数器方式 制寄 器 标C适锁 叫叫寻

定时器/计数器 制寄 器 号P寻 叫详寻

数据地址指针 高叫 号PL 叫该寻

数据地址指针 叫 SP 叫令寻

堆 指针 P代 叫代寻

P代口 器 PC适锁 叫只寻 电源 制寄 器

进 志 中的运算器是 运算器 当超过 被硬件置

半进 志 例

用户 志 编程人员 定什 时候用 什 时候 用

作寄 器 选择 时 里 时 里 时 里 时 里

法溢出 志 除法中除数

奇偶校验 用来表示 运算结果中 的个数的奇偶性

数据指针 用来 外部数据 储器中的任一单元 如果 用 可 作 通用寄 器来用

四个并行输入 输出口的寄 器 对应管脚的输出

堆 指针 在 中构 一个区域用来 放数据 规 是 进 出 进 出 堆 知道第一个数据所在地址单元 如 那 第 个就在 了

单 机中能 放数据的区域有限 堆 分配的 利给用户 编程者 所 单 机中堆 的 置是可 的 种 化体 在 中值的 化 在 机中 开始指针所指的 置是数据 放的前一个 置 如一开始指针指向 单

元 那 第一个数据的 置是 单元

第 課 址方式 指 系统

一 概述

指 的格式

机器码格式 说是数 的形式 符格式 如

汇编

手 汇编和机器汇编

手 汇编就是查表 用计算机 件来替 手 查表 就是机器汇编 址

一共有 条指 单 机共单 机共 条指

条指 把 找操作数所在单元的地址 之 址 直接使用数所在单元的地址 直接 址直接 址直接 址 作寄 器中 找数据 之 寄 器 址寄 器 址

寄 器 址 例 如果选择 作寄 器 就是 单元 和 结果都是将 中的内容 到 中 但执行过程 第一条指 需要 个周期 而第 条 要 个周期 第一条指 目 码要两个 节 而第 条 要一个 节

第五 值 等于 转到 处执行 相当于 到 值等于 单元开始将 个数据 入 中

间址 址 在间址 址中在间址 址中在间址 址中 能用 放 放

数据传递类指

累 器 目的操作数目的操作数

目的操作数的指

将 值 入 中的值保持 类

寄 器 目的操作的指

数据传递类指

直接地址 目的操作数的指

间接地址 目的操作数的指

传 间接地址数和寄 器数给 传 间接地址数和寄 器数给

十 数的传递指

是 机 是唯一一条 立 数传递指 中高 入 入 例 相当于执行

累 器 外 之间的数据传递类指

说明 在 中 外部 储器 打交道的是 累 器 内部 间可 直接进行数据的传递 而外部 行 在 两条指 中 地址被直接放在

中 而前两条指 提供 地址 因 有时扩展的外部 的数 少于或等于 个 提供 地址就够了

使用时首 将地址 入 或 中 然 再用读写

例 将外部 中 单元中的内容 入外部 中 单元中

第十課 單 機指

程序 储器向累 器 传 指

本指 是将 中的数 入 中 本指 查表指 常用来查一个已做好在 中的表格 条指 引出一个新的 址方法 址 址 址 址

址 址 在 的一个地址单元中找出数据 将 和 中的数相 就是要查找的地址 结果放在 中 因 本指 执行前 中的值 一定相

例 有一个数在 中 用查表方法确定它的 方值 值

单元的地址就是 就是到 个单元中去 数 到的是 可 看到 的真实含 就是地址数 的真实含 就是地址数值 它 表了 几个数据在 中 放的起点 置 而 指 中 表了 的那段程序在 中 放的起始地址 是通过 个地址找到 段程序的

可 通过 的例子再来看一看 的含

如果 值 最终地址 到 单元中找到的是

第一条 入 将 中的内容 入堆 中 第 条指 弹出 将堆 中的内容 回到 中 入指 首 将 中的值 然 将

中的值 进 中的值 地址的 单元中 例

指 的执行是 首 将 中的值作 地址 并将 地址中的数 到 指 面的 中 然

接 面程序

将 中的值 作 地址 单元中的数值 到 中 所

执行完 中的值是 然 的值 然 执行 将 中的值 作 地址 地址中 数 在是 并 到 中 些指 会把 中的值 中的值改掉 所 在程序的结束 如果要把 和

中的值恢复原值 那 些指 就有意 了

如果 用堆 如在 指 处用 在 处用指 然 用 来替 两条 指 结果 看一 但过程 一 和 指 都是单 节指 都是单 节 单周期指

单周期指 而 指 是 节指 是 节 周期指 周期指

堆 的作用 于 需要保 数据时 通常用堆 的方法来实

例 写出 程序的运行结果

结果是 中的值 而 中的值 两者进行了数据交换 使用堆 时 入 的 序和出 的 序必 相 才能保证数据被 回原

作业 在 执行 面的例程 注意 察内 窗口和堆 的 化

第十一課 單 機指 四 进 的 法指

用途用途 将 中的值 面的值相 中的值 面的值相 最终结果回到 中

执行完本条指 执行完本条指 中的值

进 的 法指

用途用途 将 中的值和 面的值相 中的值和 面的值相 并且 进 中的值中的值

例 做 超过了 最终保 在

中的是 而 到了 中的 了 了 就相当于是 然 然 再做再做

结果是 所 最终的结果是

借 的 法指

说明说明 没有 借 的 法指 没有 借 的 法指 如果需要做 的 法指 如果需要做 的 法指 在做

第一次相 时第一次相 时 要将 要将 清零 可清零 可

法指

将 和 中的两个 无符 数相 无符 数相 结果用 个

数来表达数来表达 中高 放在 中 放在 中 大于 时 置 溢出溢出 而 总是

例 执行指 是

所 在 是 而 是

除法指

将 中的 无符 数除 中的 无符 数 商放在 中 余数放在 中 和 都是 如果 中的值是 那

将目 中的值

结果 看 和 差 多差 多 但 是单 节单周期指 是单 节单周期指 而 是 是 节 周期指 节 周期指 节 周期指

而且 会影响 如 如果是 是 因 指 并 合做 法 并 合做 法 它 要是用来做计数它 要是用来做计数 地址增 等用途地址增 等用途

外 外 法类指 都是 心的 运算结果必 放在 中 而 类指 的对象 广泛得多类指 的对象 广泛得多 可 是寄 器可 是寄 器 内 地址内 地址 间址 址的地址等等间址 址的地址等等 指

指 类似指 类似 就 多说了就 多说了 综合 综合

第十 課邏輯運算指

逻辑运算类指

逻辑运算类指

对累 器 的逻辑操作

单周期单 节指 效果相

将 中的值清 单周期单 节指

将 中的值按

将 中的值逻辑 移

将 中的值进行逻辑循 移

将 中的值 进 进行逻辑循 移

将 中的值进行逻辑循 右移

将 中的值 进 进行逻辑循 右移

将 中的值高 交换

是将 中的值的第 到第 第 依次类

例 中的值 执行 化 进制 按 进行移 化

是将 中的值 进 进行移

例 中的值 中的值 执行

结果是 就是 进 的值 了 而 了

例 执行 之 中的值就是 如果是 的 执行 之 是

已知 执行 列指 写出 的结果

实验五

实验五

初始化堆 在本程序中有无 无关紧要

口的值是 就是 接的 亮 而 它的 亮 是将 中的值进行 移 是 就是

接在 的 亮 而 它的都亮 调用延时程序 然 转到 处 依次循 就形 了 暗点流 象

如何实 亮点流

如何改 流 的方向

答案 将 中的初始值改 可

将 改 可

第十 課邏輯與指

中的值按 结果 入 中

中的值按 结果 入 中

间址 址单元 中的值按 结果 入 中

立 数 按 结果 入 中

中值 中的值按 结果 入 中

中的值 立 数 按 结果 入 中

或指

和 中的值按 或 结果 入 中

和 中的值按 或 结果 入 中

和立 数 按 或 结果 入 中

和 间址 址单元 中的值按 或 结果 入 中

中值和 中的值按 或 结果 入 中

中的值和立 数 按 或 结果 入 中

异或指

和 中的值按 异或 结果 入 中

和 中的值按 异或 结果 入 中

和间址 址单元 中的值按 异或 结果 入 中

和立 数 按 异或 结果 入 中

中值和 中的值按 异或 结果 入 中

中的值和立 数 按 异或 结果 入 中

四 制转移类指

无条件转移类指

短转移类指

长转移类指

相对转移指

他们的区别在于跳转范围 一 能跳 最多跳 而 最多跳 原 所有用 或 的地方都可 用 来替 是 节指 占用 储器 的两个单元 是 节指 占用 储器 的 个单元

间接转移指

条指 的用途 是跳转 转到什 地方去 简单地 定 将 所 表的地址 入

中 数 面说明

中的值 面的说明

跳转

跳转表格

在单 机开发中 常要用到键盘 要求是 当按 能键 ……… 时去完 的 能

前面的程序读入按键的值 如按 的键值是 按 键 获得 等等 然 据 的值进行跳转 如键值 就转到 执行 就转到 执行

若 个 语 在 储器中 个 语 都占用两个 储器的空间 并且 续 放 放的地址是

第一 执行 中的值是 假 是 按键处理程序获得的键值 按 键 中的值是 类 在假 按 的是 键 执行完 中的值是 第 条 第四条指 将 中的值 值是 面执行 了 在 中的值是 而 就是 因 跳到 个地址继续执行 在 个地址 面是 条指 因 执行 指 程序将跳到 处往 执行

请分析按 键 ……之 的情况

们用 就实 了按 一键跳到相应的程序段去执行的

一个要求 什 得键值 要 如果换 能 确地执行吗 如果 能 应 怎 改

第十四課条件转移指

条件转移指 是指在满足一定条件时进行相对转移

判 内容是 转移指

如果 转移到 处 序执行

如果 中的值 等于 就转移

较转移指

第一条指 的 能是将 中的值和立 数 较 如果两者相等 就 序执行 如果 相等 就转移 如果前面的数 中的 大 因 在程序转移 再次利用 就可判断出 中的数 大 是小了 例

条指 的原型是 作用和 面的 类似 它是判 如果 转移到 面的 处执行 如果 序执行

分析 面的程序 如果 序执行 如果 等于 转到 处继续执行 在 处 再次进行判断 如果 将 序执行 执行 指 而如果 将转移到 处指行 执行 指

因 最终结果是 本程序执行前 如果 如果 如果

它几条类似 第 条是把 当中的值和直接地址中的值 较 第 条 是将直接地址中的值和立 数 较 第四条是将间址 址得到的数和立 数 较

循 转移指

调用 返回指

调用返回过程 程序调用了子程序执行完之 再回到 程序继续执行 调用指

长调用指

短调用指

返回指

空操作指

空操作 就是什 停一个周期 一般用作短时间的延时

第十五課 位操作指

在 单 机中引入一个 处理机制

址区

在 中 有一部份 和一部份 是 有 址 能的 就是说 些 的 一个 都有自已的地址 内部 的

个 节 就是 的 址区 如

的各 定 如 表 如 可用 表示

节第 第 第 第 第 第 第 第

里里 里里

里里 里里

里里 里里

里里 里里

里里 里里

里里 里里

里里 里里

可 址的特殊 能寄 器

中有一些 可 进行 址 特点是 节地址可被 整除 到 个 节 如 中断优 制 中断允许 制 串行口 制 定时器 计数器 制 到 中的 个 节 按 序用 表示

操作指 当指 有两个 时 必 有一个是

在进行 处理时 进 累 器

传 指

修 指

清 指

使

使指 的 地址等于 例

置 指

使

使指定的 地址等于 例 使

使 等于原来的相 的值

使指定的 的值等于原来相 的值

逻辑运算指

指定的 地址的值相 结果 回 将指定 再和 相 结果 回 但指定

或指

条件转移指

判 转移指

如果 等于 就转移 如果 等于 就 序执行

和第一条指 相 如果 就转移 等于 就 序执行

判 转移指

如果指定的 中的值是 转移 序执行

如果指定的 中的值是 转移 时将 清

面 们举个例子说明

接有一 按键 它按 时

接有一 按键 它按 时

均未按 时循 检测

按 接在 的按键 口的灯 亮了 按 接在 的按键 灯就 灭了 如果 是高电 键没有按 序执行 语 如果 是高电 键没有按 序执行 语 就 停地检测 如果有一次 的按键按 去了 转移到 使灯 亮 直到检测到 执行 灯 灭 如 循 已

稍 改 将本程序用 指 改写

第十 課定時器與計數器

一 计数概念的引入

计数器的容

单 机中有两个计数器 和 分别 两个 的 单元 的 都是 的计数器 最大计数是

定时

中的计数器除了可 作 计数之用外 可 用作时钟 计数脉 的间隔 晶振有关 的晶振 计数脉 的间隔是 微秒

四 溢出

五 任意定时 计数的方法

计数器最大的计数值到 计到 就会产生溢出

采用预置数的方法定时

第十七課定時計數器的 制方式

和 它们的地址是 和

中看出 被分 两部份 部份 分别 制 和

被分 两部份 高 用于定时 计数器 用于中断 当计数溢出 看 计数脉 要进入计数器 要 因 运行 制

运行 制 可用指 置 启 计数器 定时器运行 用指 关 定时 计数器的 作

定时器 计数器的 作方式 定时 计数方式 它 的 和 的 构 的计数器 时 的高 未用 定时 计数器一共有四种 作方式 用 来 制

如果 用作定时器 用作计数器

非 是 或门输出 要 是 定时 计数就 作

且 引脚 是高电 计数脉 才得 通过

个特性可 用来测 一个信 的高电 的宽度

在 种模式 用 是 了和 机的前辈 系列兼容而 的一种 作式

作方式

作方式 是 的定时 计数方式 将 可 它特性 作方式 相

采用 作方式 或 都要在溢出 做一个 置预置数的 作

在 作方式 有 参 计数 而高 参 计数 用作预置数的 放 计数范围就小多了 当计数溢出 就会打开 的高 之间的开关 计预置数进入 是 硬件自 完 的 需人 预

作方式

定时 计数器 被拆 个独立的定时 计数器来用 中 可 构 定时器或计数器 而 能作 定时器

定时 计数器需要 制 计满 溢出需要溢出 被分 两个来用 那就要两套 制 溢出 了 是用原来的 的 而 借用 的 如 无 制可用

一般情况 有在 作方式 运行 当波特率发生器用 时 才让 作于方式 的

定时器 计数器的定时 计数范围 作方式 定时 计数方式 最多可 计到 的 次方 次 作方式 定时 计数方式 最多可 计到 的 次方 次 作方式 和 作方式 都是 的定时 计数方式 最多可 计到 预置值计算 用最大计数 去需要的计数次数 可 第十 課 中斷系統 有关中断的概念 把可 引起中断的 之 中断源 单 机中引起中断的 件 中一共有 个 两个外部中断两个外部中断两个外部中断 两个计数 定时器中断定时器中断 一个串行口中断一个串行口中断 第 中断的嵌套 优 处理 优 的 题 仅发生在两个中断 时产生的情况 发生在一个中断已产生 有一个中断产生的情况 第 中断的响应过程 中断响应分 几个 骤 保 断点 保 一将要执行的指 的地址 把 个地址 入堆 找中断入口 据 个 的中断源所产生的中断 查找 个 的入口地址 作 计算机自 完 编程者无关 在 个入口地址处 放有中断处理程序 执行中断处理程序 中断返回 执行完中断指 就 中断处返回到 程序 继续执行 中断系统的结构 中断有关的特殊 能寄 器 中断入口 序查询逻辑电路等 包括 个中断请求源 个用于中断 制的寄 器 和 来 制中断 类型 中断的开 关和各种中断源的优 确定 中断请求源中断请求源

外部中断请求源 外中断 和 外部引脚引入

就是 中有四 外中断有关

触发方式 制 可 件进行置 和复 电

触发方式 负跳 触发方式

中断请求 志 当有外部的中断请求时 就会置 硬件

来完 在 响应中断 硬件将 清

的用途和 相

内部中断请求源

定时器 的溢出中断 当 计数产生溢出时 硬件置

当 响应中断 再 硬件将 清 类似

串行口发 接收中断 在串口中再讲解

中断允许寄 器

在 中断系统中 中断的允许或禁 可进行 址的寄 器 来 制 表

中 是总开关 如果它等于 所有中断都 允许

串行口中断允许

定时器 中断允许

外中断 中断允许

定时器 中断允许

外中断 中断允许

如果要 置外中断 定时器 中断允许 它 允许 是

可 用 操作指

五个中断源的自然优 中断服 入口地址

外中断

定时器

外中断

定时器

串口

它们的自然优 高到 排列

前面有一些程序 写

就是 了让出中断源所占用的向 地址 在程序中没用中断时 直接 开始写程序 在原理 并没有错 但在实 中最好 做

优 单 机采用了自然优 和人 置高 优 的策略 可 定那些中断是高优 优 处于 一 别的 就 自然优 确定

开机时 个中断都处于 优 可 用指 对优 进行 置 中断优 寄 器 置中某 相应的中断就是高优 是 优 例 要求将 外中断 高优 它 优 求 的值

的首 没用 可任意 值 因 最终 IP 的值就是06H E A X X E S E T 1 E X 1 E T 0 E X 0

E A

X X E S E T 1 E X 1 E T 0 E X 0 1 0 0 0 1 1 0 0

X X X P P P P P 0 0 0 0 0 1 1 0

X X X PS PT1 PX1 PT0 PX0

例 在 例中 如果 个中断请求 时发生 求中断响应的次序

响应次序 定时器 外中断 外中断 定时器 串行中断 的中断响应过程

在 列 种情况之一时 将封 对中断的响应

在处理一个 或更高 别的中断请求

行的机器周期 是当前 执行指 的最 一个周期 当前执行指 是是 节或四 节的 就要等整条指 都执行完了才响应中断 因 中断查询是在 个机器周期都可能查到的 当前 执行的指 是返回批 或 寄 器的指 至少再执行一条指 才应中断 如果 可能会开 关中断或改 中断的优 而中断返回指 说明本次中断 没有处理完 所 都要等本指 处理结束 再执行一条指 才可 响应中断

中断响应过程

响应中断时 首 把当前指 的 一条指 就是中断返回 将要执行的指 的地址 入堆 然 据中断 将相应的中断入口地址 入 是程序指针 指 就 据 中的值 转到中断入口处继续执行 些 作都是 硬件来完 的 个中断向 地址间隔 个单元 可安排一个 指 跳转至中断程序 执行 指 把堆 中保 着的地址 出 回 程序 中断处往 执行 所做的保 作很有限 保 了一个地址 而 它的东西都 保

第十九課定時中斷

用定时器来实 灯的闪烁

例 查询方式

关所灯

定时 计数器 作于方式

定时 计数器 开始运行

如果 等于 清 并转 处 是定时 计数器 的溢出 溢出 要用 件将 清 指 在判 转移的 时 将 清

置定时 计数器的初值

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

51单片机新手入门实例详解

51单片机新手入门实例详解 1.硬件和软件准备 ●实验系统:EL89C单片机学习开发系统一套 ●电脑:具有标准串口的台式机或笔记本电脑,如果没有串口也可购 买一条USB转串口线代替 ●工具软件:Keil uVision2(用于编写和编译源程序、仿真调试); 光盘上非安装烧写软件,路径 \单片机EL89C\EL89C光盘\STC52单片机下载程序\stc-isp-v4.79-not-setup\STC_ISP_V483.exe (EL89C的编程控制烧写软件) 2.源程序编写和编译 EL89C的8个发光二极管负极通过限流电阻接入单片机的P1.0~P1.7端口,下面的范例程序可以使这8个发光二极管轮流点亮,形成流水灯效果。 我们使用的开发工具是Keil C51,是目前世界上最优秀、最强大的51单片机应用平台之一,它集编辑、编译、仿真调试于一体,支持汇编、C语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真功能。 下面以一个简单的流水灯程序为例子来介绍Keil C51的使用方法: 2.1首先在硬盘上建立一个文件夹,命名为ledtest(当然可以是其他名字), 为方便程序的编写和调试,我们将调试过程中产生的文件都将放在这个目录中。 2.2启动Keil软件,点击菜单project,选择new project,然后选择你要保 存的路径,输入工程文件的名字,我们现在保存到刚才建立的ledtest目录中,工程文件命名为ledtest,然后点击保存。 2.3这时会弹出下面的对话框Select Device for Target,要求你为刚才的项 目选择一个CPU。我们选择Atmel的AT89C52,如图所示,选择AT89C52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

51单片机C语言编程基础与实例

基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码

51单片机教程

原作:平凡的单片机

1、何谓单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。 天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了。不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。为什么会这样呢?功能有强弱,打个比方,市场上面有的组合音响一套才卖几百块钱,可是有的一台功放机就要卖好几千。另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。既然如此,单片机的功能肯定不强,干吗要学它呢?话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用PIII?应用的关键是看是否够用,是否有很好的性能价格比。所以8051出来十多年,依然没有被淘汰,还在不断的发展中。 2、MCS51单片机和8051、8031、89C51等的关系我们平常老是讲8051,又有什么8031,现在又有89C51,它们之间究竟是什么关系? MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。INTEL 公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL 公司开发生产的。以后我们将用89C51来完成一系列的实验。 一、单片机的外部结构 拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。1、电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。2、振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按图1接上即可。3、复位引脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。4、EA引脚:EA引脚接到正电源端。至此,一个单片机就接好,通上电,单片机就开始工作了。 我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?单片机上除了刚才用掉的5个引脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电阻) 按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1引脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不可以由我们来更改。

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

单片机C语言编程实例

单片机C语言编程实例 前言 INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着 单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的 多种芯片,从而扩充和扩展了其品种和应用领域。 C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。. C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前 最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第 一章单片机C语言入门 1.1建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码, 这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软 件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑, 编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面 和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真 方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周 立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

单片机编程全集(含源代码)

前言 (2) 基础知识:单片机编程基础 (2) 第一节:单数码管按键显示 (4) 第二节:双数码管可调秒表 (6) 第三节:十字路口交通灯 (7) 第四节:数码管驱动 (9) 第五节:键盘驱动 (10) 第六节:低频频率计 (15) 第七节:电子表 (18) 第八节:串行口应用 (19)

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.360docs.net/doc/3a9247858.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。https://www.360docs.net/doc/3a9247858.html, 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) https://www.360docs.net/doc/3a9247858.html, 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

51单片机经典教程

单片机经典教程 目录
第一课 第二课 第三课 第四课 第五课 第六课 第七课 第八课 第九课 第十课 第十一课 第十二课 第十三课 第十四课 第十五课 第十六课 第十七课 第十八课 第十九课 第二十课 第二十一课 第二十二课 第二十三课 第二十四课 单片机的概述 单片机的硬件结构与开发过程 单片机的内部结构 一 半导体存储器 单片机的内部结构 二 工作寄存器 单片机的内部结构 三 时序与时钟 单片机的内部结构 四 并行口 单片机的内部结构 五 数据与地址 单片机的内部结构 六 特殊功能存储器 单片机的工作方式 单片机的寻址 单片机的指令 一 数据传递类指令 单片机的指令 二 数据传递类指令 单片机的指令 三 算术逻辑运算类指令 单片机的指令 四 控制转移类指令 单片机的指令 五 位及位操作指令 单片机的程序设计方法 单片机的定时 计数器 单片机的中断系统 单片机的定时/中断实验 一 单片机的定时/中断实验 二 键盘接口及编程方法 一 独立式按键 键盘接口及编程方法 二 矩阵式按键 单片机显示器接口及编程方法 数码管的静态扫描与编程方法 6 9 11 15 18 20 24 27 29 32 35 38 42 47 51 55 64 68 73 78 81 87 90 94
4

第一课 单片机的概述
因为我们的主要课程是单片机的应用 本来不想讲解单片机的历史与发展 这话说现状更确切 些 但为了兼顾大多数朋友 我还是简单的介绍一下这方面的相关知识 一 单片机的由来 单片机 专业名称—Micro Controller Unit(微控制器件) 它是由大名鼎鼎的 INTEL 公司发明的 最早的系列是 MCS-48 后来有了 MCS-51 我们经常说的 51 系列单片机就是 MCS-51 micro controller system 它是一种 8 位的单片机 8 位是什么意思 我们以后再讲 后来 INTEL 公司把它的核心技术转让给了世界上很多的小公司 不过 再小也有几个亿的销售/ 年哦 所以世界上就有许多公司生产 51 系列兼容单片机 比如飞利浦的 87LPC 系列 华邦的 W78 系列 达拉斯的 DS87 系列 现代的 GSM97 系列等等 目前在我国比较流行的就是美国 ATMEL 公司的 89C51 它是一种带 Flash ROM 的单片机 至于什么是 Flash ROM 我在这儿先不作介绍 等以后大家学到相 关的知识时自然就会明白 我们的讲座就是以该型号的单片机来作实验的 讲到这里 也许有的人会 问 我平时在各种书上看到全是讲解 8031 8051 等型号的单片机 它们又有什么不同呢 其实它们同 属于一个系列 只是 89C51 的单片机更新型一点(事实上,89C51 目前正在用 89S51 代替 我们的实验系 统采用就是 89S52 的 兼容 89C52) 这里随便说一下 目前国内的单片机教材都是以 8051 为蓝本的 尽管其内核也是 51 系列的 但毕竟 8051 的单片机已经属于淘汰产品 在市场上也很少见到了 所以由 此感叹 国内的高等教育是如此的跟不上时代的发展需要 这话可能会引起很多人的不满,所以大家别 说是我讲的哦 二 主要单片机的分类 接着上面的话题 再给大家介绍一下我们经常在各种刊物上看到的 AVR 系列和 PIC 系列单片机是 怎么回事 以便让大家对单片机的发展有一个较全面的认识 在没有学习单片机之前 这是一个令很多 初学者非常困惑的问题 这么多的单片机我该先学哪一种呢 AVR 系列单片机也是 ATMEL 公司生产的一种 8 位单片机 它采用的是一种叫 RISC 精简指令集单 片机 的结构 所以它的技术和 51 系列有所不同 开发设备也和 51 系列是不通用的 它的一条指令的 运行速度可以达到纳秒级 即每秒 1000000000 次 是 8 位单片机中的高端产品 由于它的出色性能 目前应用范围越来越广 大有取代 51 系列的趋势 所以学完了 51 系列的 看来必须学会 AVR 的才行 可叹知识爆炸 人生苦短 说完了 AVR 的 再来说说另一种--PIC 系列单片机 它是美国 MICROCHIP 公 司 唉 又是老美 叫微芯公司的生产的另一种 8 位单片机 它采用的也是 RISC 的指令集 它的指令 系统和开发工具与 51 系列更是不同 但由于它的低价格和出色性能 目前国内使用的人越来越多 国 内也有很多的公司在推广它 不过它的影响力远没有 51 系列的大 所以作为初学者 51 系列当然是首 选 以上几种只是比较多见的系列 其实世界上还有许多的公司生产各种各样的单片机 比如 MOTOROLA 的 MC68H 系列 老牌的单片机 TI 的 MSP430C 系列 极低功耗的单片机 德国的西门子 SIEMENS 等等 它们都有各自的结构体系 并不与 51 系列兼容 为了不搞大家的脑筋 这里就不介绍了 等大 家入了门以后自己去研究它吧 我们还是回来了解一下 51 系列单片机到底是个什么东西 它有那些部 分组成 请接着往下看 三 单片机的结构及组成 单片机到底是一种什么 DD 它究竟能做什么呢 其实它就是一种能进行数学和逻辑运算 根据不 同使用对象完成不同控制任务的面向控制而设计的集成电路 此话好象有点绕口 没关系 大家都应该 知道我们经常使用的电脑吧 在电脑上 我们可以用不同的软件在相同的硬件上实现不同的工作 比如 我们用 WORD 可以打字 用 PROTEL 可以设计图纸等等 单片机其实也是如此 同样的芯片可以根据我们 不同的要求做出截然不同的产品 只不过电脑是面向应用的 而单片机是面向控制的 比如控制一个指
6

c51单片机实例下载大全

单片机资料教程下载,省去找资料的麻烦,只供学习参考用,下载24内删掉,祝大家学习进步 单片机点阵学习资料 https://www.360docs.net/doc/3a9247858.html,/thread-1703-1-1.html 手把手教你学单片机--教程视频 https://www.360docs.net/doc/3a9247858.html,/thread-1688-1-1.html 力天把手教你学单片机视频教程 https://www.360docs.net/doc/3a9247858.html,/thread-1689-1-1.html 谱中单片机开发板例程 https://www.360docs.net/doc/3a9247858.html,/thread-1683-1-2.html 初学单片机的30,硬件简单对初学者有帮助 https://www.360docs.net/doc/3a9247858.html,/thread-1962-1-1.html 用单片机制作的MP3 https://www.360docs.net/doc/3a9247858.html,/thread-1701-1-2.html 51单片机应用开发大全所含100个范例代码及电路图 https://www.360docs.net/doc/3a9247858.html,/thread-1820-1-1.html 【含28个单片机实例流程图】 https://www.360docs.net/doc/3a9247858.html,/thread-1959-1-2.html 谱中单片机程序烧录工具STC https://www.360docs.net/doc/3a9247858.html,/thread-1682-1-2.html 《单片机技术》32讲

https://www.360docs.net/doc/3a9247858.html,/thread-1693-1-1.html 51单片机c语言100例教程 https://www.360docs.net/doc/3a9247858.html,/thread-1700-1-1.html 单片机超级精华包 https://www.360docs.net/doc/3a9247858.html,/thread-1687-1-1.html 新手学的多功能电子钟 https://www.360docs.net/doc/3a9247858.html,/thread-1679-1-1.html 十天学会单片机和c语言视频教程 https://www.360docs.net/doc/3a9247858.html,/thread-1692-1-1.html C语言函数库速查手册 https://www.360docs.net/doc/3a9247858.html,/thread-1696-1-1.html 历史上最全的KEIL中文学习资料 https://www.360docs.net/doc/3a9247858.html,/thread-1729-1-2.html 单片机c语言程序设计实训100例--基于AVR+PROTUES https://www.360docs.net/doc/3a9247858.html,/thread-1695-1-2.html (有电路图和程序) https://www.360docs.net/doc/3a9247858.html,/thread-1965-1-1.html 关于单片机抗干扰的资料 https://www.360docs.net/doc/3a9247858.html,/thread-1961-1-1.html 单片机矩阵扫描键盘程序 https://www.360docs.net/doc/3a9247858.html,/thread-1723-1-1.html 共享通过串口在线调试51单片机的专业版培训资料

51单片机C语言入门教程详细解说

单片机c语言入门 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

基于51单片机FAT32文件系统程序

基于51单片机FAT32文件系统程序 #ifndef __ZNFAT_H__ #define __ZNFAT_H__ #include "mytype.h" //类型重定义 /*******************************************************/ //znFAT的裁减宏--------------------------------------------------------- //#define ZNFAT_ENTER_DIR //有此宏,函数 znFAT_Enter_Dir() 参与编译 #define ZNFAT_OPEN_FILE //有此宏,函数 znFAT_Open_File() 参与编译 //#define ZNFAT_SEEK_FILE //有此宏,函数 znFAT_Seek_File() 参与编译 //#define ZNFAT_READ_FILE //有此宏,函数 znFAT_Read_File() 参与编译 //#define ZNFAT_READ_FILEX //有此宏,函数 znFAT_Read_FileX() 参与编译 //#define ZNFAT_ADD_DAT //有此宏,函数 znFAT_Add_Dat() 参与编译 //#define ZNFAT_CREATE_DIR //有此宏,函数 znFAT_Create_Dir() 参与编译 //#define ZNFAT_CREATE_FILE //有此宏,函数 znFAT_Create_File() 参与编译 //#define ZNFAT_DEL_FILE //有此宏,函数 znFAT_Del_File() 参与编译 //#define ZNFAT_XCOPY_FILE //有此宏,函数 znFAT_XCopy_File() 参与编译 //#define ZNFAT_RENAME_FILE //有此宏,函数 znFAT_Rename_File() 参与编译 //#define ZNFAT_GET_TOTAL_SIZE //有此宏,函数 znFAT_Get_Total_Size() 参与编译 //#define znFAT_GET_REMAIN_CAP //有此宏,函数 znFAT_Get_Remain_Cap() 参与编译 #include "cj.h" #include "cj.h" //---------------------------------------------------------------------- #define SOC(c) (((c-pArg->FirstDirClust)*(pArg->SectorsPerClust))+pArg->FirstDirSector) // 用于计算簇的开始扇区#define CONST const //设备表 #define SDCARD 0 //SD卡 #define UDISK 1 //U盘 #define CFCARD 2 //CF卡 #define OTHER 3 //其它 //这里的存储设备表,可以灵活扩充,以实现对更多存储设备的支持 //------------------------------------------- #define MAKE_FILE_TIME(h,m,s) ((((unsigned int)h)<<11)+(((unsigned int)m)<<5)+(((unsigned int)s)>>1)) /* 生成指定时分秒的文件时间数据 */ #define MAKE_FILE_DATE(y,m,d) (((((unsigned int)y)+20)<<9)+(((unsigned int)m)<<5)+((unsigned int)d)) /* 生成指定年月日的文件日期数据 */ //DPT:分区记录结构如下 struct PartRecord { UINT8 Active; //0x80表示此分区有效 UINT8 StartHead; //分区的开始磁头 UINT8 StartCylSect[2];//开始柱面与扇区 UINT8 PartType; //分区类型 UINT8 EndHead; //分区的结束头 UINT8 EndCylSect[2]; //结束柱面与扇区 UINT8 StartLBA[4]; //分区的第一个扇区 UINT8 Size[4]; //分区的大小

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

51单片机C语言入门实例2

13.动态数码显示技术 1.实验任务 如图4.13.1所示,P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。 2.电路原理图 图4.13.1 3.系统板上硬件连线 (1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上;

(2.把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3.把“单片机系统”区域中的P1.7端口用导线连接到“独立式键盘”区域中的SP1端口上; 4.程序设计内容 (1.动态扫描方法 动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。 (2.在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。 (3.对于显示的字形码数据我们采用查表方法来完成。 5.程序框图 图4.13.2

6.汇编源程序 ORG 00H START: JB P1.7,DIR1 MOV DPTR,#TABLE1 SJMP DIR DIR1: MOV DPTR,#TABLE2 DIR: MOV R0,#00H MOV R1,#01H NEXT: MOV A,R0 MOVC A,@A+DPTR MOV P0,A MOV A,R1 MOV P2,A LCALL DAY INC R0 RL A MOV R1,A CJNE R1,#0DFH,NEXT SJMP START DAY: MOV R6,#4 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET TABLE1: DB 06H,5BH,4FH,66H,6DH TABLE2: DB 78H,79H,38H,38H,3FH END 7. C语言源程序 #include unsigned char code table1[]={0x06,0x5b,0x4f,0x66,0x6d}; unsigned char code table2[]={0x78,0x79,0x38,0x38,0x3f}; unsigned char i; unsigned char a,b; unsigned char temp; void main(void) { while(1) { temp=0xfe; for(i=0;i<5;i++) { if(P1_7==1)

51单片机及C语言入门教程

51单片机 及C语言入门教程 注:排成16开版式,是为了方便自已打印阅读。请不要用于非法用途。 2007.12.20

51单片机及C语言入门教程 第一课 建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。(安装的方法和普通软件相当这里就不做介绍了) 安装好后,你是不是迫不及待的想建立自己的第一个C程序项目呢?下面就让我们一起来建立一个小程序项目吧。或许你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件仿真看到程序运行的结果。 首先当然是运行KEIL51软件。怎么打开?噢,天!那你要从头学电脑了。呵呵,开个玩笑,这个问题我想读者们也不会提的了:P。运行几秒后,出现如图1-1的屏幕。 图1-1启动时的屏幕

接着按下面的步骤建立您的第一个项目: (1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图1-2。接着弹出一个标准Windows文件对话窗口,如图1-3,这个东东想必大家是见了N次的了,用法技巧也不是这里要说的,以后的章节中出现类似情况将不再说明。在"文件名"中输入您的第一个C程序项目名称,这里我们用"test",这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。"保存"后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。 图1-2New Project菜单 图1-3文件窗口 (2)选择所要的单片机,这里我们选择常用的Ateml公司的AT89C51。此时屏幕如图1-4

单片机C语言模块化编程初步资料全

下面让我们揭开模块化神秘面纱,一窥其真面目。 C语言源文件*.c 提到C语言源文件,大家都不会陌生。因为我们平常写的程序代码几乎都在这个XX.C文件里面。编译器也是以此文件来进行编译并生成相应的目标文件。作为模块化编程的组成基础,我们所要实现的所有功能的源代码均在这个文件里。理想的模块化应该可以看成是一个黑盒子。即我们只关心模块提供的功能,而不管模块内部的实现细节。好比我们买了一部手机,我们只需要会用手机提供的功能即可,不需要知晓它是如何把短信发出去的,如何响应我们按键的输入,这些过程对我们用户而言,就是是一个黑盒子。 在大规模程序开发中,一个程序由很多个模块组成,很可能,这些模块的编写任务被分配到不同的人。而你在编写这个模块的时候很可能就需要利用到别人写好的模块的借口,这个时候我们关心的是,它的模块实现了什么样的接口,我该如何去调用,至于模块内部是如何组织的,对于我而言,无需过多关注。而追求接口的单一性,把不需要的细节尽可能对外部屏蔽起来,正是我们所需要注意的地方。 C语言头文件*.h 谈及到模块化编程,必然会涉及到多文件编译,也就是工程编译。在这样的一个系统中,往往会有多个C文件,而且每个C文件的作用不尽相同。在我们的C文件中,由于需要对外提供接口,因此必须有一些函数或者是变量提供给外部其它文件进行调用。 假设我们有一个LCD.C文件,其提供最基本的LCD的驱动函数 LcdPutChar(char cNewValue) ; //在当前位置输出一个字符 而在我们的另外一个文件中需要调用此函数,那么我们该如何做呢? 头文件的作用正是在此。可以称其为一份接口描述文件。其文件内部不应该包含任何实质性的函数代码。我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:不该让外界知道的信息就不应该出现在头文件里,而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里,否则,外界就无法正确的调用我们提供的接口功能。因而为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体),好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件。 下面我们来定义这个头文件,一般来说,头文件的名字应该与源文件的名字保持一致,这样我们便可以清晰的知道哪个头文件是哪个源文件的描述。

相关文档
最新文档