手把手教你学单片机的C语言程序设计(四)——C语言的标识符和关键字.pdf_第1页
手把手教你学单片机的C语言程序设计(四)——C语言的标识符和关键字.pdf_第2页
手把手教你学单片机的C语言程序设计(四)——C语言的标识符和关键字.pdf_第3页
手把手教你学单片机的C语言程序设计(四)——C语言的标识符和关键字.pdf_第4页
手把手教你学单片机的C语言程序设计(四)——C语言的标识符和关键字.pdf_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习 卑 机 手 把 手 教 你 学 单 片 机 的 C语 言 程 序 设 计 ( 四 ) C语言的标识符和关键字 标识符是用来标识源程序中某个 对象的名字 的这些对象可 以是语句 、 数据类型、 函数 、 变量 、 常量 、 数组等 。 一 个标识符由字符串、 数字和下划线等组 成 第一个字符必须是字母或下划线 , 通常 以下划 线开头的标识 符是编译 系 统专用的因此在编写c语言源程序 时一般不要使 用以下划线 开头的标 识 符 而将下划线 用作分 段符 。C5 1 编译 器规定 标识符 最长 可达 2 5 5个字符 但只有前面 3 2个字符在编译时有效 因此在编 写源程序 时标识 符的长 度不 要超过 3 2个字符 这对于一般应用程 序来说已经足 够了 c语言是大小字敏 感的一种 高级语 言, 如果我们要定义一 个时间。 秒” 标识 1 符 可 以 写做 “sec” 如 果 程 序 中有 “ S E C 那么这两个是完 全不同定义的标 识符。 关键字则是 编程语言保髓的 特殊 标识 符 有 时 又 称 为 保 留 字 它们具有固 定 名称 和含 义 , 在 C 语 言 的 程 序编写中不允许 标识符与关键宇 相同。与其他计 算 机语 言相 比 C语言的关键宇 较 少 A NS I C标 准 一 共 规 定 了 3 2个 关键字 , 见 表 1 。 Ke i l C51 编译 器 除 了有 A N S I C标 准 的 3 2个 关键 字 外 还 根 据 5 1单 片机 的 特 点 扩 展 了 相 关的 关键 宇 。在 K e il C 5 1开 发环境 的 文本 编辑 器 中编 写 C 程序 系 统 可 以 把 保 留 字 衷2 以 不 同 颜 色 显 示 缺 省颜 色 为 蓝色 。 表 2为 K e il C 5 1 编译器扩 展 的关键字。 下面做 一下 实验 使大 家实 际认识标识 符与 关键字的作 用与 区别。 周兴华 b Jl 位桥量声明 声明一个位标量或位类型的西教 S b l 位变量声明 声明一个可位寻址变量 s ” 特殊功能寄存器声明声鲷一个特殊功能寄存器【 8 位) s 仃 1 6 特殊功能寄存罾 芦明声朗一个 1 6位的特殊功能寄存器 o a l a 存储器类型说明 直接寻址的 8 0 5 1 内部数据存储器 。D O a 8 存储器类型说婀 可位寻址的 8 0 5 1 内部数据存储器 Id a 存储器类型说明 问接寻址的8 0 5 1 内部数据存储器 p o 。a a 存储器类型说明 。 分页 寻址的8 0 5 1 外部敬据存储器 x o a la 存储器类型说明8 0 5 1外 部数据存储器 1 n f e r r u D t r e e l r a n I u s I n g 8 0 5 1 程序存储器 定义一个中新函数 定义一l十再入函擞 意义8 0 5 1 的工 作寄存珊组 在 L E D 1 6 * 2字符液晶试验板上 实现 :使 4个 L E D数码管从左至 右显 示。 1 2 3 4 。在我的文档中建立一个文 件 目录( c s 3 】 然 后建立 c s 3 u v 2的工 程项 目 最 后建立源程 序文件( c s 3 C) 。 输入下面的程序 : # in c lu d e 序号l 以下同】 : 1 u n s i g n e d c h a r d i s 0 = 0 x 9 9; if 2 u n s i g n e d c h ar d i s 1 = 0 x b O ; 3 u n s i g n e d c h ar d i s 2 = 0 x a 4 ; 4 u n s i g n e d c h ar d i s 3 = 0 x f g ; 5 , 一一一一一6一一= v o id d e la y v o id ) u n s i g n e d l n t I , J f O _ 0 1 ( 5 0 0 I + + f 0 J ; O ; J (1 2 0 : j + + 7 8 9 if1 0 们 1 2 1 3 1 4 1 5 一一一= =1 6一一 v o id m a in ( v o id 】 1 7 I 1 8 wh il e ( 1 ) 1 9 【 2 0 P O = d i s O : 2 1 一 蓥 点 曼 维普资讯 习单 片 机 P1 =d i s 1 : P 2 =d i s 2; P 3 =d i e 3 ; d e la y ( ) 2 2 2 3 1 1 2 4 1 1 2 5 l | 蕊 b 2 1 图 1为 k e il o 5 1软件 编译 时的界 面下部的输出窗13 显示0错误、 0警 告 。 将 生 成 的 c s 3 h e x文件 烧 录 到 辫霉 盏 : z 鳓黝瓣 8 9 S 5 1芯 片 中 将 芯 片 插 入 到 L E 1 6 2字符液晶试验板上试验板 接通 9 V电源 发现 4个 L E D数码管从 左至右显示“ 1 2 3 4 。 对程序进行分析 。 程序详释。 序号 1【 程序懈释以下同 ) :包含头文件 RE G5 1 H 序号 2 : 定义无符号字符型变量 其标识符 为d is O 并赋初值0 x 9 9 。 序号 3 : 定义无符号字符型变量 其标识符 为d is 1 并赋韧值0 x b 0 。 序号4 : 定义无符号字符型变量 其标识符 为d is 2 并赋初值O x a 4 。 序号 5 : 定义无符号字符型变量 其标识符 为d is 3 并赋初值O x f9 。 序号 6 : 程序分隔。 序号 7 : 定义函数名为d e la y的延时子函数, 奠标识符为 d e la y 。 序号8 : d e la y 延时子函数开始 序号9 : 定义两个无符号整形变量 I i 。 序号 1 0 1 4 : 两个 fo r 语句循环体 作用是 延时。 序号 1 5 : d ai a y 延时子函数结束。 序号 1 6 : 程序分隔。 序号 1 7 :定义函数名为m ain 的主函数, 其 标识符为m a in 。 序号 1 8 : m a in的主函数开始。 序号1 9 :w h Ie 循环语句,这里 进行无限 循环。 序号2 0 : w h ile 循环语句开始。 序号2 1 : 将d is O变量送往P 0口 序号2 2 : 将d i s 1 变量送往 P 1 口。 序号 2 3 : 将d is 2变量送往 P 2 1:3 。 序号 2 4 : 将 d is 3 变量送往 P 3口。 序号 2 5 : 调用延时子函数模块。 序号 2 6 : w h ile 循环语句结束。 序号 2 7 : ma i n 的主函数结束 可见我们定义的数据类型、 函 数、 变量等均未与 c语言的关键字 发 生冲 突。 下面我们做一下修改 将第 2行的 d i s 0改为 d o 将 第 7行 、第 2 5行的 d e la y改为 s w it c h 。再进行编译、 连接 。 结果出现了一大堆的错误( 见图 2 l 。因 此切记 在程 序编 写中不允许标识 符与 C语 言的关键宇 相同。 麴 熬裁隧 0 _ R _ J 蠹弼 嘛焖 数据 其字节中的最高位表示该数据 的 符号 , 0 表示正 数 1 ” 表 示负数。 负 数用补码表示。 所能表示 的数值范 围是 一 1 2 8 1 2 7 , u n s i g n e d c h a r 型 数 据 是无符号字符型数据 其字节中的所有 位均用来表示数据的数值 所能表示 的 数值 范围是 0 2 5 5 。 2 整 型 有 s ig n e d in t 和 u n s ig n e d in t 之 分 默认值为 s i g n e d in t 。 它们 的长度均 为两个字节, 用于存放一个双字节的数 据。S ig n e d in t 是 有符号整型 数, 字节 中的最高位表示数据的符号 , O 表示 正数 1 表示负数。 所能表示的数值范 围是 一 3 2 7 6 8 一 + 3 2 7 6 7 。 u n s ig n e d in t 是无符号整型数 , 所能表示的数值范围 是 0 6 5 5 3 5 。 3 1o n g长 整型 有 s ig n e d lo n g和 u n s ig n e d lo n g 之分 默认值为 s i g n e d lo n g 。 它们的长 度 均 为 四 个 字 节 。S in g e d lo n g是 有 符 号 的 长 整 型 数 据 ,字 节 中 的 最 高 位 表 示 数 据 的 符 号 O 表 示 正 数 1 表 示 负数。数值的表示范 单片机 的程 序设计 离不开对数 据 围 是 - 2 1 4 7 4 8 3 6 4 8 + 2 1 4 7 4 8 3 6 4 7 。 的处理 数据在单片机内存中的存放情 u n s i g n e d lo n g是无符号长整型数据 况由数据结构决定。 C语言的数据结构 数值 的表示范围是 0 4 2 9 4 9 6 7 2 9 5 。 是以数据类型出现的 数据类型可分 为 4fr o m浮点型 基本数据类型和复杂数据类型 复 杂数 它 是 符 合 I E E E 一 7 5 4标 准 的 单 据类型由基本数据 精度浮点型数据在十进制中具有 类型构 造 而成。C 裹3 为K e i I c 5 r 编译器所支持的数据类型 要 芋 本 数 据 ! 息 , 啊 _ _ _ _ _ 夏 _ _ _ _ 类 型 有 c n a 1 n 1 茎 。 1 r s h o r t 1o n g f lo a t 讯 u n s ig n e di n t | 戡 嫦 0 - 6 5 5 3 5 d o u b le 对 干 I ,e l s n e din t 毒 - 3 2 7 6 8 一+ 3 2 7 6 7 C 5 编 译 器 来 说 , 等 嚣 2 14 7 s h o r t 型 与 I n 1 型 相 f lo a t四字节 l1 1 7 5 4 9 4 E - 3 8 3 4 0 2 8 2 3 E + 3 8 同, d o u b le 型与 1 -3 常对案 0 a i 型相同c _ b it 。单 一 下面对这些数 |_“ 蜊 双 帑i 。 一 o 话5 3 5 据类型诗行分搋 曲豁0 “ 雄0 袭 7 1 c h a r 字符类型 有 s i g n e d c h a r 和 u n s ig n e d c h a r 7位 有 效 数 字 。f lo a t 型 数 据 占用 4 之 分 默 认 值 为 s ig n e d c h e f= 它 们 的 长 个 兰 3 2 位 二 进 制 数 ) - 在 内 存 中 * 1 的存放格式如下: 个字节 。 用 于 存 放 一 个单宇节的数据。 对于 s in g e dc h a r 型 其中 S为符号位存放在最高字 47 维普资讯 节的最高位 。 “ 1 ” 表示负 , “ 0 表示正。 E 为阶码 , 占用 8位二进 制数 , 存放在 高 两个字节中。注意 , 阶码 E值是 以 2为 底的指数再加上偏移量 1 2 7 这 样处 理 的 目的是为了避免出现 负的阶码值。 而 指数是可正可 负的。阶码 E的正 常取 值范 围是 1 2 5 4而实 际指数 的取值 范围为 一 1 2 6 + 1 2 7 。M 为尾数 的小数 部分 用 2 3位二 进制数 表示 存放 在 低三个字节中。 尾数的整数部分 永远为 1 , 因此不 予保存 , 但 它是 隐古存 在的。 小数点位 于隐含的 整数位“ 1 的后 面。 一 个 浮 点 数 的 数 值 范 围 是 ( 一 1 】 S ) ( 2 E + 1 2 7 x ( 1 M】 。 5 指针型 指针型 数据不同于 以上 4种 基本 数据 类型 它本身是 一个变量 但 在这 个变量 中存放的不 是普通的数据 而是 指向另一个数据的地址。 指针变量也要 占据一定 的内存单元 在 K e il C 51 中 指针 变量 的长度一般 为 1 3个字 节。 指针变量也具有类型, 其表示方法是在 指针符号 的前面冠 以数据类型符 号。 如“ c h a r p o in t ” , 表示 p o in t 是一个 字符型的指针变量。 指针变量的类型表 示该指针所指向地址中数据的类型。 使 用指 针型 变量可 以方便 地对 8 0 5 1单 片机 的各部分物理地址直接进行操作。 6 b 计 位标 这是 C 5 1 编译器 的一种扩充 数据 类型 , 利用它可定 义一个位标量 , 但不 能定义位指针 也不能定义位数缉。 7 s fr 特殊功能寄存器 这也是 C 5 1 编译器 的一种扩充数 据类 型, 利用它可 以访 问 8 0 5 1单片机 的所 有内部 特殊功能寄存器。s f r 型数 据占用一个 内存单元 。其取值 范围是 0- 25 5 。 8 s f r1 6 位特殊功能寄存器 它占用两个 内存单元 , 取值范 围是 0- 65 5 3 5。 9 s b it 可寻址位 这也 是 C5 1 编译 器的一种 扩充数 据类型 。 利用它可 以访问 8 0 5 1 单片机 内部 R A M 中的可 寻址位 或特殊 功能 寄存 器中的可 寻址位 。例 如采 用 : s f f P 0 = 0 x 8 0 ; 可以将 8 0 5 1 单 片机的 P 0口 的 rn 地址定义为 8 O H 。 习单 片 机 以上 的 介 绍 中 我 们 已经 初 步 认识 了数 据类 型 。 下 面做 一 下实验 来感 受 一下 数 据类 型 的不 同 对程 序 执 行 的影 响 。 在 L E D 1 6 * 2字符液晶试验板上 实现:使 4个 L E D数码管从左至右显 示 , 熄 灭 。 0 0 0 0 ” 。显 示 的 时 间 约 1 0 ms 熄灭的时间约 1 0 me 。在我的文 档中建立一个文件目录( c s 4 然后建 立 c s 4 u v 2的工程项 目 最后建立源程 序文件( c s 4 c ) 。 输入下面的程序 : # in c lu d e 序号【 以下同) : 1 r 一一一= = 2 一一一= , v o id d e a y ( u n s Ig n e d in t k ) 3 u n s i gn e d l n t i j : fo I= 0 : i( k :i + + ) l fe r j = O ; 序号( 以下同 ) : 1 u n s ig n e d c h a r c o d e S E G 7 【 1 0 】 = 0 x c O 0 x f 9 O x a 4 O x b O 0 x 9 g 0 x 9 2 0 x 8 2 0 x f 8 0 x 8 o 0 x 9 0 I ;fl 2 v o id ma in (v o id ) 3 u n s ig n e d c h a r x = 3 0 ; 4 u n s i g n e d i n t y = 5 5 ; 5 u n s i g n e d i n t z 6 z = x t y。 7 P 3 =S E GF z 1 0 0 0 ; 8 P 2 =S E G 7 ( z 1 0 0 0 ) 1 0 0 ; 9 P 1 =S E G7 ( z 1 0 0 ) 1 0 ; 1 0 P O =S E G 7 z 1 0 ; 1 1 w h ile ( 1 ) : # 1 2 l 1 3 编译通过后 将生成的 C a 5 h e x文 件烧录到 8 9 S 5 1 芯片中将芯片插入 到 L E D 1 6 2字符液晶试验板上 接通 g v电源。发 现 4个 L E D数 码管 显示 “ 1 6 50 。 程序分析。 序号 1( 程序解释以下同 ) : 包含头文件 RE G5 1 H。 序号 2 : 数码管 0 9的字形码。 序号3 : 定义函数名为m a in的主函数。 序号4 : m a in 的主函数开始。定义无符号字 符型变量 x 并赋初值3 0 。 序号 5 :定义无符号整型变量 Y 井赋韧 僮 5 5。 序号6 : 定义无符号整型变量z 。 序号7 : 乘法运算。大家知道, 这里 x 、 Y 是两 种不同类型的数据 , 编译器在这里对数据娄 型作自动的隐式转换 。即将 先转换成 u n s i g n e d in t 的数据粪型 然后儆乘法 以保 证运算精度。 序号8 : 取出 Z 的千位数 并据此蠢出字形 码送 P 3 1:3 显示。 序号9 : 取出 z 的百位数, 并据此盎出字形 码送口 2口显示。 序号1 0 : 取出 Z 的+位数 并据此查出宇形 码送P 1 口显示。 序号1 1 : 取出Z 的个位数, 并据此查出宇形 码送 P 0口显示 。 序号 1 2 : w h ile循环 即原地踏步作动态 停机。 序号 1 3 : ma in 的主函数结束。 在 L E 1 6 2字符液晶试验板上 实现 : 使无符号整型变量 x 的值 与无符 号整型变量y的值相乘 其积存于无符 号字符型变量 z中。 然后将 Z的内容送 L E D 1 6 2 字 符液晶试验 板 使右侧 3 个 L E D数码管显示 z的内容。 在我的文档中建立一个文件目录 ( c s 6 】 然后建立 c a 6 u v 2的工程项 目 最后建立源程序文件( c a 6 c ) 。 输八下面的程序 : # in c lu d e 序号c 以下同) : 1 u n s i g n e d c h a r c o d e S E G7 【 1 O = 【 0 X C 0 Ox f 9 0 x a4 0 x b 0 0 x 9 9 0 x 92 0 x 8 2, O x f 8 O x a O O x 9 0 ; 2 v o id m a i n (v o id ) 3 【 u n s ig n e d in t x = 2 0 ; 4 u n s i g n e d in t y =l 1 : 5 u n s i g n e d c h a r z : 6 z = ( u n s ig n e d e h a r) ( x y ) 7 P 2 =S E G 7 1 0 0 : f P 1 =S E G 7 ( z 1 0 0 ) 1 0 ; g P 0 =S E G 7 2 1 O 】 : 1 0 wh i l e ( 1 ) : 1 1 维普资讯 习单 片机 单片机应用系统及其开发过程( 二) 海 1 一个应用系统的设计要求 时间是 人们需要 随时掌 握的。除 了时钟 外 定时器 因为能 由使 用者随 时设 定定时时 间具有剩余 时间显示 和语音提 醒功能 对于工作忙 或记性 不好 的人 无疑有很 大的帮助 要是再 给它 加上多点温度 测量和显 示使你 及时了解户 内外温度 亦或给 它加上 煤气检测和 自动排风 功能 岂不更妙。 其实 。 实现 上述计 时和测控功 能。 正是 单片机的强项。 下面是一 个带语音 提醒 的家用 多 功能定时器的主要功能和技术要求 : 能够预置并存储 1 6个定时 时间: 定时时间 1 秒 2 4小时 定时误差 小 于 1 0 ms : 用数码管显示预置时间及剩余时 间的 时、 分、 秒: 具有语音和数码显示两种时间到提示 方式; 用按键预置定时时间 : 有时间到开关量输出功能。 通过用单片机设计该家用多功能 定时器的过程 。 我们可 以初识单 片机应 用系统的构建方法。 2系统框图及系统工作流程 1 ) 系统框图 如果用传统 的电路实现该 多功能 定 时器 , 则 需要 时基 电路 、 定 时计 数 器 、 显示 及 其控 制电 路 、 键盘 扫描 电 路 、 话音 控 制电路 、 存储 器及 控制 电 1 2 类型 以节省内存空间。 编译通过后 将生成 的 c s 6 h e x 文 件烧 录到 B g S 5 1 芯 片中将芯片插入 到 L E D 1 6 * 2字符液晶试验板上 接通 9 V电源。 发现右侧 3 个 L E D数码管显 示 2 2 o 。 程序分析。 序号 1( 程序解释以下同) : 包含头文件 RE G51 H。 序号2 : 数码管 0 - 9的字形码。 序号3 : 定义函数名为m a in的主函数 序号 4 : m 8 in的主函数开始。定义无符号整 型变量x 并赋初值 2 0 。 序号 5 :定义无符 号整型 变量 Y并赋初 值 1 1 。 序号6 : 定义无符号字符型变量 z 。 序号 7 : 乘法运算。由于我们事先估计出乘 积的值不会超过一个字节的长度( 0 2 5 5 因此将乘积值强制转换成 u n s ig n e d c h a r 序号8 : 取出 z 的百位数 并据此查出字形 码送 P 2 1:3 显示。 序号9 : 取出 z 的十位数 并据此盎出字形 码送 P1口显示 。 序号1 0 : 取出 z 的个位散 并据此查出字形 码送 P 0口显示 。 序号 1 2 : w h ile 循环即原地踏步作动态停 机 。 序号1 3 : m a in 的主函数结束。 K e i l C 5 1 编译 器除 了能 支持 以 上 这些基本数据之外 。 还能 支持复 杂的构 造型数据。 如结构类型、 联合类型等。 这 些复杂的数据类型将在后面逐步介绍 。 配 文 优 惠 邮 购 : K e i l C 5 1 W i n d o w s集成开发环境( 已汉化光盘 , 邮 购代号: x 1 ) : 4 6元 T O P 8 5 l多功能鳊程 器( 邮购代号: B 1 ) : 3 0 0 元。L E D I 2 8 * 6 4 图形液 晶试验板( 邮 购代号 : S 3 ) : 1 6 0 路, 以及

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论