手把手教你学单片机的C语言程序设计(八) 运算符与表达式(续).pdf_第1页
手把手教你学单片机的C语言程序设计(八) 运算符与表达式(续).pdf_第2页
手把手教你学单片机的C语言程序设计(八) 运算符与表达式(续).pdf_第3页
全文预览已结束

下载本文档

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

文档简介

学习单 片机 手 自增和自减运算符是 C语言中特 有的一种运算符, 它们的作用分别是对 运算对象作加 1和减 1运算,其功能 如下 : 自增运算符。如: a + + + + a 自减运算符。如 : a 一 一 。 一 一 a 看起来 a + +和 + + a的作用都是 使变量 a的值加 1 ,但是由于运算符 + +所处 的位置不 同。使 变量 a + l 的运 算过程也不同。 + + a ( 或 一 a) 是先执行 a + l ( 或 a 一 1 ) 操 作 , 再使 用 a的值 , 而 a + + ( 或 a 一 一) 则是先使用 a的值, 再执 行 a + 1 ( 或 a 一 1 ) 操 作。 增 量 运 算 符 + + 和 减 量 运 算 符一只能用于变量。 不能用于常数或 表达 式。 嚣 露 ll鏊 囊 鼍 锑 |l薯 壤 簪 藿 誊 :蘩 薯嘻 一-* 簿 荬 0_ t 进行 自增运算 a + +和 + + b ( 范 围 为 0 9) ,并将结果在 L E D 1 6 2字符 液晶试验板上输出显示, 其中a在个位 数码管显示, b在十位数码管显示。 在我的文档中建立一个文件 目录 ( c s l 6 ) , 然后 建立 c s l 6 u v 2的工 程项 目, 最后建立源程序文件( c s l 6 c o 输入下面的程序: # i n c lu d e 序号 ( 以下 同 ) : 1 # d e f in e u c h a r u n s i g n e d c h a r 1 1 2 # d e f i n e u in t u n s ig n e d i n t 3 u c h a r c o d e S E G 7 1 0 = 0 x c 0 。 0 x f9 0 x a 4 0 x b 0 0 x 9 9 0 x 9 2 。 0 x 8 2 。 0 x f 8 0 x 8 0 0 x 9 0 ; 4 =一:一:一=5 v o i d d e l a y ( u i n t k ) 6 f 7 u in t i j : 8 f o r ( _ - 0 : i b ) ? a : b 当 a b成 立时。 ma x = a 否则 a b不成立 。 ma x = b 能对运算对象进行按位操作是 C 语言 的一大特点 , 正是 由于 这一 特点使 C语 言具 有了汇编语言 的一些功能 , 从 而使之能对计算机的硬件直接进行操 作。C语言中共有 6种位运算符。 位运算符的作用是按位对变量进 行运算 。并不改变参与运算的变量的 维普资讯 值。若希望按位改变运算变量的值。 则 应利用相应的赋值运算。 另外位运算符 不能用来对浮点型数据进行操作。 位运算符 的优先 级从高到低依 次 是 : 按位 取 反 ( ) 一 左 移 ( ) 一按位与 ( ) 一按位异或 ( ) 一按 位或 ( 1) 。 表 1 列出了按位取反、 按位与、 按位或 和按位异或的逻辑真值 X y X - y X & y x l y x y O O 1 1 O 0 0 O 1 1 O O 1 1 1 O O 1 O 1 1 1 O 0 1 1 0 | 瞌二 誊 i 在 L E D 1 2 8 6 4图形 液 晶 试 验 板 上。 实现两个变量 x 、 Y的位运算 , 其结 果输 出到 8个 L E D上显示。 在 我的文档 中建 立一个 文件 目录 ( c s l 7 ) , 然后建 立 c s l 7 u v 2的工程 项 目, 最后建立源程序 文件( c s l 7 c o 输入下面的程序: # i n c l u d e 序号( 以下同 】 : 1 # d e f i n e u c h a r u n s i g n e d c h a r 2 # d e f i n e u i n t u n s ig n e d i n t 3 ;=一=一= 4 v o id d e l a y ( u i n t k ) 5 6 u i n t j , j: 7 f o r ( i - O : j k : l + + ) 8 f o r ( j = 0 ; j 1 2 1 : j + + ) 9 : 1 1 1 0 l , 1 1 =一=:=:=1 2 v o i d ma i n ( v o id ) 1 3 1 4 u c h a r x = 5 7 , y =1 3 6 ; 1 5 P 0 = x : 1 1 1 6 d e la y ( 3 0 0 0 ) ; 1 7 P 0 = - y ; 1 8 d e la y ( 3 0 0 0 ) ; 1 9 P 0 = x &y ; 2 0 d e l a y ( 3 0 0 0 ) ; 2 1 P 0 = x l y ; 2 2 d e l a y ( 3 0 0 0 ) ; 2 3 P 0 = x y : 2 4 d e l a y ( 3 0 0 0 ) ; 2 5 学 习单 片机 P O = x 1 : 2 6 d e l a y ( 3 0 o 0 ) : 2 7 P O = y 2 : 2 8 d e l a y ( 3 0 o 0 ) : 2 9 wh i le ( 1 ) : 3 0 3 1 编译 通过后 。将 生成的 c s l 7 h e x 文件烧录 到 8 9 S 5 1芯 片中 ,将 芯片插 入到 L E D 1 2 8 6 4图形液 晶试 验板上 , S X双排 针上 的 8个短路 块全部 取下 。 试验板接通 5 V电源 , 8个 L E D开始灯 光亮灭变化 , 问隔 为 3秒。其亮灭的顺 序为( 0代表亮、 1代表灭) : 11 0 001 1 0 l O11 1 O1 1 1 l O O1 0 0 0 l 1 01 1 1 0 O1 I + 1 O11 O0 O1 I + 011 1 0 01 0 l 0 01 0D OO 0 这些灯光亮灭是否正确。 我们在这 里分析一下 : x赋值 5 7 。 转化成二进制为 0 0 1 1 1 0 01 。 Y赋 值 1 3 6 , 转化成二进制为 1 O O O1 0 o 0 。 x取反后为 : 1 1 0 0 0 1 1 0 ( 正确 】 。 Y取反后为 : O 1 1 1 O 1 1 1 ( 正确 】 。 x & y后 为: 0 0 0 0 1 0 0 0 ( 正确 】 。 x ly后 为: 1 01 1 1 0 01 ( 正确 】 。 x y后 为: 1 01 1 0 o 0 1 ( 正确 】 。 x 1后为 : O 1 1 1 o O 1 0 ( 正确 ) 。 Y 2后 为: 0 01 O 0 o 0 o ( 正确 】 。 分析程 序。 序号 1( 程序解释 。以下 同 】 :包含 头文件 REG51 H。 序号 2 、 3: 数据类型的宏定义 。 序号 4: 程序分隔。 序号 5 1 1 : 延时子函数 。 序 号 1 2 : 程序分隔。 序 号 1 3: 定义函数名为 ma i n的主 函数。 序号 1 4: ma i n的主函数开始 。 序 号 1 5 :定义 无符号字符型变量 x 、 Y并赋 初值 5 7, 1 3 6 。 序号 1 6: x的值取反 后送 P O口。 序号 1 7 : 延时3秒便于观察。 序号 1 8: Y的值取反后送 P 0口。 序号 1 9: 延时 3秒便于观察 。 序号 2 0: x 、 Y按位与后的值送 P 0口。 序号 2 1 : 延时 3秒便于观察。 序号 2 2 : x 、 Y按位或后的值送 P 0口。 序号 2 3 : 延 时 3秒便于观察。 序号 2 4 : x 、 Y 按位异或后的值送 P 0口。 序号 2 5: 延时 3秒便于观察。 序号 2 6 : x的值左移 1 位后送 P O口。 序号 2 7 : 延 时 3秒便于观察。 序号 2 8 : Y的值左移 2位后送 P 0口。 序号 2 9 : 延时 3秒便于观察。 序号 3 O : 动态停机。 序号 31 : ma i n主 函数结束。 C语言 中的圆括号“ ( ) ” 也可作为 强制类型转换运算符, 它的作用是将表 达 式或 变量 的类型 强制转换 成为所 指 定 的类型。 在 C 语 言 程 序 中 进 行 算术 运 算 时, 需要注意数据类型的转换。有两种 数据类型转换方式。 即隐式转换和显式 转换。 隐式转换是在对程序进行编译时 由编译器自动处理的。 隐式转换遵循以 下规则: ( 1 ) 所有 c h a r 型的操作数转换成 i n t 型。 ( 2 ) 用运算符连接的两个操作数如 果具有不同的数据类型, 按以下次序进 行转换 : 如果 一个操 作 数是 f l o a t 类 型 , 则 另一个操 作数也 转换成 f l o a t 类型。 如果 一个操 作 数是 lo n g类 型 , 则 另一个 操作数也 转换成 l o n g类型。 如 果一个操作数是 u n s ig n e d类 型 , 则 另 一 个 操 作 数 也 转 换 成 u n s i g n e d类型 。 ( 3 ) 在对变量 赋值时发生 的隐式转 换 , 将 赋值号 “ : ” 右边 的表达 式类型转 换成赋值 号左边 变量 的类型 。 例如 : 把整数赋值给字符型 变量 , 则整数 的高 8位将丧失。 把浮点数赋值给整型变量 , e IJ d 数 部分将丧 失。 在 C语言 中只有基本数据类 型 维普资讯 习单 片机 单琦规的基本;绻 瀚晦工f ( 三 A T 8 9 S 5 2的存储器结构 及其 程序存储器和数据存储器是单片机最重要的外围单元。本讲我们将介 j 绍 A T 8 9 S 5 2单片机 的存储 器结构及其操作方式。 与 8 0 C 5 1系 列 单 片 机 一 样 , A T 8 9 S 5 2单片机的程序存储器和数据 存储器是两个独立的存储器空间, 图 1 是 A T 8 9 S 5 2单片机的存储器结构示意 图,图 1 a是程序存 储器结构 示意 图 , 图 1 b是数据存储器 的结构示意 图。 F F FF H ( a ) l 2 删 1 F FF H l I I O 0 0 0 H 程序存储器空 片外 l片 外 f E A = 0 l ( R O M )下琵 1 , 程序存储器的结构 关于片内 片外程序存储器的 容量及其选择 A T 8 9 S 5 2是 增 强 型 8 0 C 5 1单 片 机 , 片 内有 8 k字 节 F la s h R OM, 能 够 满足大多数应用系统 的需要 。 如果不够 ( b ) 特殊 功能 高 1 2 8 寄存器 S F R 字节 低 1 2 8 片内 字节 F F H I I 8 0 H 7 F H I I I O O H 数据存储器空 间 ( R A M ) R 石WD 操作方式 陈 阳 海 用, 还可以通过并行总线扩展外部程序 存储器 , 如 图 1 a所 示。扩展 的方法是 : 当片 内 片外程序存储器 选择脚 E A接 高电平( E A= 1 ) 时, 程序存储器地址先 从片内程序存储器 的 0 0 0 0 H开始执 行, 如果有外扩的程序存储器, 当程序 超过 8 k字节 ( 1 F F F H) 时 。 会 自动 转 向 片外程序存储器 去执行 : 而 当 E A接地 ( E A= 0) 时 , 程序直接从片外程序存储 器的 0 0 0 0 H开始执行 ( 参见 图 1 a和第 五讲 单片机的基本结构与工作原理 ( 二 ) 一文 中的表 1 ) 。 A T 8 9 S 5 2程序存 储器的寻址范围为 O O 0 0 HF F F F H, 也 就是说 ,其程序 存储 器可 直接 扩展至 6 4 k字节。 关于 A T 8 9 S 5 2片 内程序存储 器的几个特殊地址 空间 对于 A T 8 9 S 5 2单片机片 内程序存 储器的存储空间, 大家需要记住其中几 个特殊地 址 : 0O0 oH 0 o H 复位后 ,程序计数器 P c的值 为 0 0 0 0 H, 故单片机复位后总是从 O 0 0 0 H 单元开始执行程序的。 ( I P c h a r 、 i n t 、 l o n g和 f lo a t ) 可以进行隐 据类型、 变量以及表达式的字节数的运 型液 晶显示模组 ( 邮购代 号: L 1 ) : 8 0 式转换。 算符 s i z e o f , 元。1 2 8 * 6 4点阵图型液晶显示模组( 邮 其余的数据类型不能进行隐式转 该运算符的一般使用形式为: 购代号: L 2 ) : 1 6 0元。5 V高稳定专用稳 换, 例如, 我们不能把一个整数利用隐 s i z e o f ( 表 达 式 ) 或 s i z e o f ( 数 据 压电源( 邮购代号: D 1 ) : 3 0 元。每次邮 式转换赋值给一个指针变量, 在这种情 类型) 费保价费 1 2 元。开发票另加货款 7 况下就必须利用强制类型转换运算符 注意 , s i z e o f 是一种特殊的运算 ( 汇款时注明) 。 邮购时只需在附言栏中 来进行显式转换。 强制类型转换运算符 符 ,不要认 为它是一个 函数。实际 写明邮购代号及数量并附上联 系电话 的一般使用形式为: 上 。字节数 的计算在编译时就完成 即可。邮局汇款邮购: 上海市闵行区莲 ( 类型) :表达式 了 ,而不 是在程序执行的过程 中才 花路 2 1 5 1弄 5 7号 2 0 1室 ,邮编 : 在 手把手教你学单片机的 C语

温馨提示

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

评论

0/150

提交评论