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

下载本文档

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

文档简介

学习单 片机 c 语言对数据有很强的表达能力, 具有十分丰富的运算符, 利用这些运算符可以组成各种表达式及语句。运算符就 是完成某种特定运算的符号 表达式则是由运算符及运算对象所组成的具有特定含义的一个式子。由运算符或表达式 可以组成 c 语言程序的各种语句 c 语言是一种表达式语言, 在任意一个表达式的后面加一个分号“ ; ” 就构成了一个表 达 式语 句。 按照运算符在表达式中所起 的作用, 可分为算术运算符 、 关系运算符、 逻辑运算符、 赋值运算符 、 增量与减量运算 符、 逗号运算符、 条件运算符、 位运算符、 指针和地址运算符、 强制类型转换运算符和 s i z e o f 运算符等 运算符按其在表 达式中与运算对象的关系, 又可分为单 目 运算符、 双 目 运算符和三 日 运算符等。单 目 运算符只需要有一个运算对象, 双 目 运算符要求有两个运算对象, 三 目 运算符要求有三个运算对象 c 语言提供的算术运算符有: 十 加或取正值运算符。如: 1 十 2的结 果 为 3 。 一 减或取负值运算符。 如: 4 3的结果 为 1 。 乘运算符。如: 2 3的结果为6 。 除运算符。如: 6 3的结果为 2 。 模运算符。 或称取余运算符。如: 7 3的结果为 1 。 上面这些运算符中加、 减、 乘、 除为 双目运算符 。它们要求有两个运算对 象。取余运算要求两个运算对象均为 整型数据。 如果不是整型数据可以采用 强制类型转换。 例如8 3的结果为 2 。 取正值和取负值为单 目 运算符 。 它们的 运算对象只有一个。 分别是取运算对象 的正值和负值。 进 行 数 学 运 算 并 将 结 果 在 L E D 1 6 * 2 字符液晶试验板上输出显示。 在我的文档 中建立一个文件 目录 ( c s l 3) , 然后建立 C S 1 3 u v 2的工程项 目, 最后建立源程序文件( c s l 3 c o 输入下面的程序: # in 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 u c h a r c o d e S E G 7 【 1 O 】 = f 0 x c 0 。 0 x f 9 , 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 S 0 0 x 9 0 ; 3 , , = = 一= 4= v o id m a in ( v o i d ) 1 1 5 f 6 u c h a r a b C o u t ; 7 a = l 0 0 ; 8 b = 6 0 ; 9 c = 9 : 1 0 o u t = a + 3 ( b c ) 2 ; 1 1 P 2 =S E G7 o u t 1 0 0 ; I 2 P 1 =S E G 7 ( o u t 1 0 0 ) 1 0 ; 1 3 P 0 =S E G 7 【 o u t 1 0 ; 1 1 1 4 wh il e ( 1 ) : 1 5 1 1 1 6 编译通过后 ,将生成的 c s 1 3 h e x 文件烧录到 8 9 S 5 1芯片中,将芯片插 入到 L E D 1 6 2 字符液晶试验板上 。 试 验板上接通 9 V电源。 右边 3个 L E D数 码 管显示“ 1 7 6 ” 。 这个结果正确D -5 7我们验证一下: 由于 b - c加了括号 , 因此优先级最高, 其差值为 5 1 。接下来乘法的优先级要 高于其它运算符因此 5 1 乘 3等于 1 5 3 。再下来 1 5 3除 2得 7 6 5 。 舍去小 数部分, 得 7 6 。 7 6加 1 0 0, 结果为 1 7 6 。 完全正确。 分析程序。 序号 1( 程序解释以下同 ) :包含头文件 RE G51 H 序号 2 : 数据类型的宏定义。 序号3 : 数码管 0 - 9 的宇形码。 序号 4 : 程序分隔。 序号 5 : 定义函数名为ma i n的主函数。 序号 6 : ma i n的主函数开始。 序号 7 : 定义无符号宇符型变量 a 、 b 、 c 、 o u t 。 序号 8 : a 赋值 1 O O 。 序号 9 : b赋值 6 O 。 序号 1 0 : C 赋值 9 。 序号 1 1 : 数学运算, 其结粜放 o u t 。 序号 1 2 :取出 o u t 的百位数送 P 2 13显示。 说明: o u t 除 1 O O , 得 o u t 的百位数( 其十、 个 位均成为小数而舍去 ) 。 序号 1 3 :取出 o u t 的十位数送 P 1 13 显示。 说明: o u t 余 1 0 0 , 得 o u t 的十、 个位数, 然后 再除 1 O , 取得o u t 的十位数。 序号 1 4 :取出o u t 的个位数送 P o口显示。 说明: o u t 余 1 O 。 得 o u t 的个位数。 序号 1 5 : 动态停机。 序号 1 6 : ma in的主函数结束。 C语言中有以下的关系运算符: 大于。如: x y 。 = 大于等于。如: = 2 。 : , b, 则数码管千位一 I- 显示“ H” ; 若 a = b 。 则 数码管千位上显示“ = ” ; 若 a 序号( 以下同) : 1 # d e f i n e u c h a r u n s ig n e d c h a r 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 3 f , 0 x 0 6 。 0 x 5 b。 0 x 4 f 0 x 6 6 。0 x 6 d , 0 x 7 d 。 0 x 0 7 。0 x 7 f 。 0 x 6 f ; 4 = = = = = ; = = = = = = = = = 5 = = = = = u c h a r a = O b = O , c : 6 一 一 一 一一 一 一 7 u c h a r k e y s l ( v o id ) ; 8 u c h a r k e y s 2 ( v o id ) ; 9 v o id d e la y ( u i n t k ) : 1 0 , 一 一 一 一 一 1 1 v o id ma i n ( v o id ) 1 2 f u c h a r i : 1 3 w h i le ( 1 ) 1 4 1 5 b =k e y s 1 ( ) : 1 6 a = k ey _s 2 0 ; 1 7 if ( a b ) c = O x 7 6 ; 1 8 if ( a 9 ) x = O ; 5 4 r e t u r n x : 5 5 5 6 - - - - - - 5 7 u ch a r k e y _s 2 ( v o id ) 5 8 s t a t i c u c h a r y : 5 9 P 2 = 0 x f f ; 6 0 if ( P 2 1 = O x ff ) 6 1 d e la y ( 1 0 ) ; 6 2 if ( P 2 = = 0 x f d ) 6 3 I “ 融 y = y +1 6 5 l 6 6 l 6 7 if ( y 9 ) y = O ; 6 8 r e t u r n y : 6 9 7 0 编译通过后,将生成的 c s 1 4 h e x 文件烧录到 8 9 S 5 1 芯片中,将芯片插 入到 L E D 1 2 8 6 4图形液晶试验板上, 试验板上接通 5 V电源, 右边 2个数码 管显示“ 0 0 ”, 左边的千位数码管显示 “ = ” 。按下 S 2 键, 十位数码管上的数字 开始递增, 当十位数码管的数字大于个 位数码管时, 千位数码管显示“ H” ; 按 下 S 1 键 。 个位数码管上的数字开始递 增, 当个位数码管的数字大于十位数码 管时, 千位数码管显示“ L ” ; , 当个位数 码管的数字等于十位数码管时。 千位数 码管显示“ = ” 。程序自己判别出了两个 数值的大小 , 并将结果显示出来。 下面分析程序。 序号 1( 程序解释,以下同) :包含头文件 R E G5 1 H。 序号 2 - 3 : 数据类型的宏定义。 序号 4 : 数码管 0 9的字形码。 序号5 : 程序分隔。 序号 6 : 定义无符号字符型全局 变量 a 、 b、 c。 序号 7 : 程序分隔。 序号8 1 0 : 函数声明。 序号 1 1 : 程序分隔。 序号 1 2 : 定义函数名为 m a i n 的主函数。 序号 1 3 : m a i n的主函数开始。定义无符号 字符型局部变量 l 。 序号 1 4 : w h il e 循环语句进行无限循环。 序号 1 5 : w h il e 循环语句开始。 序号 1 6 : 调用 S 1 键判断子函数 , 其键值返 回至变量 b中。 序号 1 7 : 调用 S 2 键判断子函数, 其键值返 回至变量 a中。 序号 1 8 : 若 a b 。 c 赋值 0 x 7 6 。 序号 1 9 : 若 a = 右移位赋值运算符 序号( 以下同) : 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 in t u n s i g n e d in t 3 s bit P2 _0 =P 2 O : 4 s bit P 2_1 zP 1 : 5 u c h a r c o d e S E G7 1 O 】 = 0 x 3 f ,O x 0 6 0 x 5 b , O x 4 f 。0 x 6 6 0 x 6 d , 0 x 7 d , O x O 7 0 x T f O x 6 f ; 6 = =; = = ; = = = = =一= : = 7 = - - - u c h a r d a t a a = 0 b = 0 O u t ; 1 1 8 - - - - - - - - 9 u c h a r k e y _ s l ( v o i d ) ; 1 0 u c ha r k e y s 2 ( v o i d ) ; 1 1 v o id d e la y ( u i n t k ) : 1 2 _ 一一- 一 一 一一 1 3 v o id m a in ( v o i d ) 1 4 1 5 w h i l e ( 1 ) 1 6 f 1 7 b =k e y s 1 ( ) : 1 8 a- -k e y _s 2 0 ; 1 9 if ( ( a = = 8 ) ( b = = 5 ) ) o u t = 1 : 2 0 e l s e o u t = 0 ; 2 1 P 0 =S E G 7 a ; 2 2 P 2 = 0 x d f ; ff 2 3 d e la y ( 2 ) ; 2 4 P O =S E G7 b ; 2 5 P 2 = 0 x e f ; 2 6 d e la y ( 2 ) ; # 2 7 i f ( o u t = =1 ) P 0 =0 x 7 3 ; 2 8 e ls e P 0 = 0 x 0 0 ; 2 9 P 2 = 0 x 7 f ; 3 0 d e la y ( 2 ) ; 3 1 3 2 | | 3 3 - - - - - - - - - - 3 4 v o id d e la y ( u i n t k ) 3 5 3 6 u i n t i j : 3 7 f o r ( _= 0 : i k = i + + ) 3 8 f o r ( j = 0 ;j 1 2 1 ; j + + ) 3 9 4 0 4 1 - - - - 一 - - 4 2 u c ha r k e y _s 1 ( v o i d ) 4 3 u c h a r d a t a : 4 4 P 2 = 0 x f f ; 4 5 if ( ! P 2 _ 0 ) x = 5 ; 4 6 e l s e x - 0 ; 4 7 r e t u r n x : 4 8 1 4 9 - - 一一一 - 一 一5 o u cha r k e y _s 2 ( v o id ) 5 1 u c h a r d a t a y : 5 2 P 2 = 0 x ff ; 5 3 if ( ! P 2 _ 1 ) y - 8 ; 5 4 e l s e y = 0 : 5 5 r e t u r n y : 5 6 1 5 7 编译通过后 ,将生成的 c s 1 5 h e x 文件烧录到 8 9 S 5 1芯片中,将芯片插 入到L E D 1 2 8 6 4图形液晶试验板上, 试验板上接通 5 V电源。 右边 2 个数码 管显示“ O 0 ” 。按下 S 1键 , 个位数码管 上显示“ 5 ” ; 按下 S 2键, 十位数码管上 显示“ 8 ” : 同时按下 S1 、 S 2键 后, 观察 到千位数码管显示“ P ” 。 对程序进行分析。 序号 1( 程序解释以下同 ) :包含头文件 R E G5 1 H。 序号2 3 : 数据类型的宏定义。 序号4 : 定义 P 2 0的符号名为 P 2 D 。 序号 5 : 定义 P 2 1 的符号名为P 2 1 。 维普资讯 学习单 片机 荤片机系统 l 镕 8 可靠性的简单方法 耿 英 杰 单片机系统可以分为软件和硬件 两个方面, 要保证单片机系统可靠性就 必须从这两方面入手。 首先在设计单片机系统时。就应该 充分考虑到外部的各种各样的可能干 扰, 尽量利用单片机提供的一切手段去 割断或者解决不 良外部干扰造成的影 响。这里以 H OL T E K最基本 的 I O单 片机 H T 4 8 R O 5 A一 1为例 ,它内部提供 了看门狗定时器 WD T防止单片机内 部程序乱跑出错; 提供了低电压复位系 统 L V R。 当电压低于某个允许值时, 单 片机会自动 R E S E T防止芯片被锁死: H OL T E K也提供 了最佳的外围电路连 序号6 : 数码管0 9的宇形码。 序号 7 : 程序分隔。 序号 8 :在 d a t a区定义无符号字符型全局 变量 a 、 b 、 o u t 。 序号9 : 程序分隔。 序号 1 O 一 1 2 : 函数声明。 序号 1 3 : 程序分隔。 序号 1 4 : 定义函数名为m a i n 的主函数。 序号 1 5 : ma i n 的主函数开始。 序号 1 6 : w h i le循环语句进行无限循环。 序号 1 7 : w h i le循环语句开始。 序号 1 8 : 调用 S 1 键判断子函数 。 其键值返 回至变量 b中。 序号 1 9 : 调用 S 2键判断子函数 其键值返 回至变量a中。 序号2 O : 如果 a为8且 b为5同时成立( 逻 辑与) 则o u t 赋值 1 。 序号 2 1 : 否则 o u t 赋值 0 。 序号2 2 : 变量 a 送 P O口。 序号 2 3 : 点亮数码管十位。 序号 2 4 1 延时2 m s 。 序号 2 5 : 变量 b送 P O 12 1 。 序号 2 6 : 点亮数码管个位。 序号 2 7 : 延时2 m s 。 接方案, 最大可能地避免外部干扰对芯 片的影响。 当一个单片机系统设计完成 , 对于不同的单 片机 系统产 品会有不 同的测试项 目和方法 。但 是有一些 是必须测试的 :测试单 片机软件功 能的完善性 ,这是 针对所 有单片机 系统功能的测试 。测试软 件是否写 的正确完整。 上电掉 电测试 , 在使用 中用户必然会遇 到上电和掉 电的情 况 。 可 以进行多次开 关电源 。 测试单 片机系统的可靠性。 老化测试 。 测试 长时间工作情况下 。单 片机 系统的 可靠性。 必要 的话可 以放置在高温 , 序号 2 8 : 如果o u t 为 1 , 则 P O 12 1 赋值 0 x 7 3 。 序号 2 9 : 否则 P O 12 1 赋值 O x O 0 。 序号 3 O : 点亮数码管千位。 序号 3 1 : 延时 2 ms 。 序号 3 2 : w h il e 循环语句结束。 序号 3 3 : m a in主函数结束。 序号 3 4 : 程序分隔。 序号 3 5 4 1 : 延时子函数。 序号 4 2 : 程序分隔。 序号 4 3 :定义函数名为 k e y _ s 1 的 S 1 键判 断子函数。 序号 4 4: k e y _ s 1 子 函数开始。定义局部 变量 x 。 序号 4 5 : P 2 12 1 置全 1 。 以便读取按键状态。 序号 4 6 : 如果 P 2 0为低电平( S 1 键按下) , x 赋值 5 。 序号 4 7 : 否则 x 赋值 0 。 序号 4 8 : 返回 x 值。 序号 4 9 : k e y _ s 1 子函数结束。 序号 5 O : 程序分隔。 序号 5 1 5 7 :函数名为 k e y _ s 2的 S 2键判 断子函数。 具体可参考序号 4 3 - 一 4 9分析。 配 文 优 惠 邮 购 : K e i l C 5 1 W i n d o w s集成开发环境 ( 已汉化光盘, 高压 以及 强 电磁 干 扰 的环 境 下 测 试。 E S D和 E F - r等测试 。 可 以使用 各种干扰模拟器 来测试单片机系统 的可靠性。例如使 用静 电模拟 器测 试单 片机 系统 的抗静 电 E S D能力 ; 使用突波杂讯模拟器进行 快速脉 冲 抗干扰 E F T测试等等 。 当然 如果没有此 类条件 ,可 以 模拟人 为使 用中。可能发 生的破坏 情况。例如用人体或者衣服织物故

温馨提示

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

评论

0/150

提交评论