项目12.ppt

上传人:本田雅阁 文档编号:3376791 上传时间:2019-08-19 格式:PPT 页数:68 大小:2.19MB
返回 下载 相关 举报
项目12.ppt_第1页
第1页 / 共68页
项目12.ppt_第2页
第2页 / 共68页
项目12.ppt_第3页
第3页 / 共68页
项目12.ppt_第4页
第4页 / 共68页
项目12.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《项目12.ppt》由会员分享,可在线阅读,更多相关《项目12.ppt(68页珍藏版)》请在三一文库上搜索。

1、项目一 指示灯控制系统设计与调试,任务2 指示灯开关控制模块,2,内容提要,日常生活中有哪些形式的开关? 开关的工作方式通常有哪些?(具体举例) 按键与单片机的接口电路如何设计? 单片机I/O口有何特殊处理?,3,项目效果图,4,主要内容,5,设计步骤,1,2,3,5,4,任务分析,确定方案,硬件设计,软件设计,系统调试,指示灯开关控制模块,6,设计要求,7,硬件电路设计 具体可分为,硬件电路设计,系统方案设计,具体电路方案设计,总电路原理图设计,8,系统方案设计,微控制器单元,(,MCU,),转向指示灯,时钟电路,复位电路,电源电路,蜂鸣器,控制开关,9,具体电路方案设计设计任务,参考任务1

2、的电路,完成指示灯开关控制电路的设计。,10,具体电路方案设计-开关符号,开关(机械式),11,总电路原理图设计,12,P0口,13,总结特点: (1)P0口可作通用I/O口使用,又可作地址/数据总线口; (2)P0既可按字节寻址,又可按位寻址; (3)作通用I/O 口输出时:是开漏输出,应外接上拉电阻; (4)作地址/数据总线口时,P0是一真正双向口,而作通用I/O口时,只是一个准双向口。,P0口,14,P1口,(1)只能作I / O口,没有地址/数据复用功能 (2)可按字节寻址,也可按位寻址 (3)是一准双向口,输出驱动接有上拉电阻,不是开漏输出。,15,P2口,16,(1)当P2口作为通

3、用I / O时,是一准双向口。 (2)从P2口输入数据时,先向锁存器写“1”。 (3)可位寻址,也可按字节寻址。 (4)可输出地址高8位。,P2口,17,P3口,18,P3口,当P3口作为通用I/O接口时, 第2功能输出线为高电平, 使与非门3的输出取决于口锁存器的状态。 在这种情况下, P3口仍是1个准双向口, 它的工作方式、 负载能力均与P1、 P2口相同。 当P3口作为第2功能使用时, 其锁存器Q端必须为高电平, 否则V1管导通, 引脚被箝位在低电平, 无法输入或输出第2功能信号。当Q端为高电平时, P3口的口线状态就取决于第2功能输出线的状态。,19,布置作业,课后自己多练习,消化上课

4、的内容。 预习指示灯开关控制所需的指令,若有问题先记在笔记本上。 根据老师的引导,自己学着画画流程图,整理自己的编程思路。,20,刹车指示灯 程序流程图1,条件判断 这是分支结构,用什么语句来实现 分支结构呢?,21,if语句,1if语句的形式 C语言提供了三种形式的if语句: (1) if(表达式) 语句 例如: if(x y) printf(%d,x); 这种if语句的执行过程见图1(a)。,22,图1 if语句的执行过程,if语句,23,(2) if(表达式) 语句1 else 语句2 例如: if(x y) printf(%d,x); else printf(%d,y); 这种if语句

5、的执行过程见图1(b)。,if语句,24,(3) else if语句结构。流程图见图2所示。一般格式为 if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式m) 语句m else 语句n,if语句,25,图2 else if语句结构流程图,if语句,26,例如: if (number500) cost=0.15; else if (number300) cost=0.10; else if (number100) cost=0.075; else if (number50) cost=0.05; else cost=0;,if

6、语句,27,说明: (1) 三种形式的if语句中,在if后面都有“表达式”,一般为逻辑表达式或关系表达式。例如: if(a= =b ,if语句,28,此语句是合法的,执行结果输出“O.K.”,因为表达式的值为3,按“真”处理。由此可见,表达式的类型不限于逻辑表达式,可以是任意的数值类型(包括整型、实型、字符型、指针型数据)。例如,下面的if语句也是合法的: if(a)printf(%d, a); 执行后输出a的ASCII码97。,if语句,29,(2) 第二、第三种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。例如: if(x 0) printf(%f,x); else

7、 printf(%f,-x);,if语句,30,(3) 在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。如: if(a+bc,if语句,31,例 输入任意三个整数,求三个数中的最大值。 /*功能:说明if语句的格式。*/,main( ) int num1,num2,num3,max; printf(“please input three numbers: “); scanf(“%d,%d,%d, ,if语句,32,2if语句的嵌套与嵌套匹配原则 if语句允许嵌套。所谓if语句的嵌套,是指在“语句组1”或(和)“语

8、句组2”中,又包含有if语句的情况。 if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近且尚未匹配的if配对。为明确匹配关系,避免匹配错误,建议最好将内嵌的if语句一律用花括号括起来。,if语句,33,刹车指示灯 程序流程图1,学过分支 结构,这里 可用if-else语句 实现,但是P3.2=0吗 在C语言里又是 怎样表达的呢?,用关系运算符,34,关系运算及其表达式,所谓“关系运算”,实际上是“比较运算”,即将两个值进行比较,判断其比较的结果是否符合给定的条件。例如,“a b”中的“”表示一个大于关系运算,如果a的值是5,b的值是3,则大于关系运算“”的结果为“真”,即条件成

9、立;如果a的值是2,b的值是3,则大于关系运算“”的结果为“假”,即条件不成立。,35,1关系运算符 C语言提供6种关系运算符: = (大于或等于) (大于) != (不等于),关系运算及其表达式,36,2优先级 (1) 在关系运算符中,前四个优先级相同,后两个也相同,且前四个高于后两个。例如,“”优先于“= =”。而“”与“”的优先级相同。 (2) 关系运算符的优先级低于算术运算符,但高于赋值运算符,即: 算术运算符 关系运算符 赋值运算符,关系运算及其表达式,37,3关系表达式的概念 用关系运算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式或字符表达式等)连接起来的式

10、子,称为关系表达式。 例如,下面的关系表达式都是合法的: ab,a+bc-d,(a=3)=b,(ab)= =(bc),关系运算及其表达式,38,4关系表达式的值 关系表达式的值是一个逻辑值(非“真”即“假”)。由于C语言没有逻辑型数据,所以用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。 例如,假设num1=3,num2=4,num3=5,则: (1) num1num2的值为0,因为表达式的值为“逻辑假”,在C语言中用0表示。 (2) (num1num2)!=num3的值为1,因为num1num2的值为0,显然不等于num3的值,所以不等于关系成立,即为“逻辑真”,用整数“1”表示。,

11、关系运算及其表达式,39,(3)num1num2num3的值为1,因为num1num2的值为1,1小于num3,即小于关系成立。 (4)(num1num2)+num3的值为6,因为num1num2的值为1,1+56。 C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值还可以参与其他种类的运算,例如算术运算、逻辑运算等。,关系运算及其表达式,40,刹车指示灯 程序流程图1,条件判断 这是分支结构,用关系运算符 =,41,参考程序,#include main() while(1) if(P3_2=0) P2_7=0; else P2_7=1; ,42,转向指示灯 程

12、序流程图2,用else if来实现三个分支。,查询与组合开关连接 的每位I/O口的状态,43,参考程序,#include #define uchar unsigned char void delay( ) uchar i,j; for(i=0;i200;+i) for(j=0;j200;+j); main( ) while(1) if(P2_0 = 0) P2_6 = 1; P2_7 = P2_7; delay( ); ,else if(P2_1 = 0) P2_7 = 1; P2_6 = 1; else if(P2_2 = 0) P2_6 = P2_6; P2_7 = 1; delay( )

13、; ,44,转向指示灯 程序流程图2,用else if来实现三个分支。,查询与组合开关连接 的那组I/O口的状态,只查询 和开关 连接的 三位的 状态, 其他的 不查询, 怎么实 现呢?,45,#include #define uchar unsigned char void delay() uchar i,j; for(i=0;i100;+i) for(j=0;j100;+j); void main( ) while(1) if(P2 ,else if(P2 ,46,switch语句,除了用if else语句实现分支结构,还可以用switch语句来实现多分支结构。 switch结构与else

14、 if结构是多分支选择的两种形式。它们的应用环境不同:else if用于对多条件并列测试,从中取一的情形;switch结构由于为单条件测试,从其多种结果中取一种的情形。,47,1switch语句的一般形式 switch(表达式) case 常量表达式1:语句组;break; case 常量表达式2:语句组;break; case 常量表达式n:语句组;break; default:语句组;break; /*default子句是可选的*/ ,switch语句,48,2执行过程 (1) 当switch后面“表达式”的值与某个case后面的“常量表达式”的值相同时就执行该case后面的语句(组);当

15、执行到break语句时,跳出switch语句,转向执行switch语句下面的语句(即右花括号下面的第一条语句)。 (2) 如果没有任何一个case后面的“常量表达式”的值与“表达式”的值匹配,则执行default后面的语句(组)。然后,再执行switch语句下面的语句。,switch语句,49,3说明 (1) switch后面的“表达式”可以是int、char和枚举型中的一种。 (2) 每个case后面“常量表达式”的值必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。 (3) case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口

16、标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。,switch语句,50,(4) 各case及default子句的先后次序不影响程序执行结果。 (5) 多个case子句可共用同一语句(组)。 (6) 用switch语句实现的多分支结构程序,完全可以用if语句和if语句的嵌套来实现。,switch语句,51,例:测试是数字、空白还是其他字符的函数(假设测试的对象只限于以上几种字符)。,test_char(int c) switch(c) case 0: case 1: case 2: case 3:,switch语句,52,case 4: cas

17、e 5: case 6: case 7: case 8: case 9: printf(“its a digitern“); break; case :,case n: case t: printf(“its a whiten“); break; default: printf(“its a charn“); break; ,switch语句,53,使用switch结构还须注意以下几点: (1)switch结构的执行部分是一个由一些case子结构与一个可缺省的default子结构组成的复合语句。(要特别注意写一对花括号) (2)switch后面的条件表达式一般是一个整数表达式(或字符表达式),

18、与之相应,case后面应是一个整数或字符,也可以是不含变量与函数的常数表达式。例如:,switch语句,54,case 3+4: 但不允许写为 int x=3 , y=4; switch (z) case x+y:,switch语句,55,(3)一个switch结构中不可以出现两个case具有相同的常量表达式值。例如: case 3+2: case 8-3 是不允许的。 (4)switch结构允许嵌套。,switch语句,56,已知某公司员工的保底薪水为500元,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):,profit 1000 没有提成 1000 profi

19、t 2000 提成10% 2000 profit 5000 提成15% 5000 profit 10000 提成20% 10000 profit 提成25%,switch语句,57,算法设计要点: 本题显然是一个多分支结构。既可以用嵌套的if语句来实现,也可以使用switch语句来求解。前一种方法留给读者自己完成,本例使用后一种方法来做。 为使用switch语句,必须将利润profit与提成的关系转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整倍数(1000、2000、5000、),如果将利润profit整除1000,则:,switch语句,58,profit1000 对

20、应0、1、2 1000profit2000 对应2、3 2000profit5000 对应3、4、5 5000profit10000 对应5、6、7、8、9、10 10000profit 对应10、11、12、,switch语句,59,为解决相邻两个区间的重叠问题,最简单的方法是:利润profit先减1(最小增量),然后再整除1000即可。 profit1000 对应0 1000profit2000 对应1 2000profit5000 对应2、3、4 5000profit10000 对应5、6、7、8、9 10000profit 对应10、11、12、,switch语句,60,程序如下: /

21、*功能:已知利润求薪水。*/ main( ) long profit; int grade; float salary=500; printf(“Input profit: “); scanf(“%d“, ,switch语句,61,grade=(profit-1/1000; switch(grade) case 0: break; /*profit1000*/ case 1: alary=salary+profit*0.1; break; /*1000profit2000*/ case 2: case 3:,将利润减1,再整除1000,转化成switch语句中的case标号.,switch语句

22、,62,case 4: salary= salary+profit*0.15; break;/*2000profit5000*/ case 5: case 6: case 7: case 8: case 9: salary= salary+ profit*0.2; break;/*5000profit10000*/,switch语句,63,default:salary=salary+profit*0.25; /*10000profit*/ printf(“salary=%.2fn“, salary); ,switch语句,64,思考: 学习了switch语句后,如何用 switch语句完成转向灯的程序?,65,布置作业,课后自己多练习,消化上课的内容。 根据拓展要求,在消化老师讲解的案例,小组讨论实施方案。 小组确定了实施方案后,由小组长组织完成实施方案汇报PPT的制作。 各小组成员做好下次上课被抽查汇报实施方案的准备。,66,方案汇报,小组成员代表进行方案汇报,67,老师点评,68,布置作业,课后总结项目1任务2的学习情况,认真完成学习记录单的填写。 根据项目1任务3的学习任务单中的引导问题先预习。 做好下次课被抽查汇报预习情况的准备。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1