(中职)财经基本技能(第3版)教学指南+课后习题答案2022-2023学年_第1页
(中职)财经基本技能(第3版)教学指南+课后习题答案2022-2023学年_第2页
(中职)财经基本技能(第3版)教学指南+课后习题答案2022-2023学年_第3页
(中职)财经基本技能(第3版)教学指南+课后习题答案2022-2023学年_第4页
(中职)财经基本技能(第3版)教学指南+课后习题答案2022-2023学年_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

财经基本技能(第3版)教学指南+课后习题答案财经基本技能(第3版)教学指南+课后习题答案财经基本技能(第3版)教学指南+课后习题答案教材综述一、教材的内容和特色本教材主要内容有:单片机最小系统的学习和制作、单片机编程软件的使用、程序烧录软件的操作、C语言编程、程序流程图的绘制和各种外围电路的安装与制作等。可作为中等职业学校电子专业的选修课教材。本书具有以下特色:结构和内容的创新性:首先是结构新,本书取消了传统教材的章节结构,设置了教学项目和任务,把专业知识和技能落实到具体的项目和任务中,通过项目引领任务驱动教学进程,让学生在任务的实施中巩固知识,习得技能。其次是内容新,在本书的编写过程中,编写人员有意识的联系当前的社会实际,及时吸收新理论、新知识、新技术、新工艺。2、突出职业性和实践性:“以服务为宗旨,以就业为导向、以能力为本位”的中等职业教育担负着培养初、中级技能型人才和数以亿计的高素质劳动者的任务。中职的教材必须为中职的教学改革服务,为学生的就业服务。本教材作为电子专业的技能训练教材非常注重职业性和实践性。3、教材、教案、学案三合一:本书按行动导向教学原则编写,通过任务情境、任务描述、计划与实施、练习与评价、任务资讯呈现内容,展开教学和学习过程,力求做到教材、教案、学案三合一。5、知识、技能、情感相结合:本书不仅注重巩固知识、突出技能,还通过情境模拟、总结评价渗透个人品德、职业道德和社会公德教育。二、教学策略建议1、以促进学生发展为本本课程以提高学生的综合素质和综合职业能力为目的,在对单片机简单电路的教学和基本技能的训练过程中,应体现对职业道德和职业意识的培养,使学生掌握专业学习方法,提高自主学习能力,为学生的可持续发展奠定基础。为适应不同专业需求及学生的多样性和差异性,可通过对选学模块及较高要求内容的灵活选择,以及考核评价方式上,体现课程的选择性和教学要求的层次性。教学中应从学生的实际出发,针对不同层次的学生,采用分层教学,使每一个学生在原有的基础上有所提高,有所发展。2、转变教学观念,改进教学方法改变以课堂为中心、以知识传授为主的单一教学模式,积极探索将理论教学环节和实践教学环节相结合,将课堂知识与生产生活的实践相结合,倡导具有职业教育特色的行为导向教学方法。教学过程中要根据课程内容、学生实际和学校条件,合理选择、综合运用多种教学方法,并结合中职学生思维方式特点,充分利用各种教学资源和教学媒体,设计教学活动,创设学习情境,使教学内容具体化、直观化和形象化,引导学生通过任务的完成、工作过程的体验或典型电子产品的制作等,掌握相应的知识和技能,提高学习兴趣,激发学习动力。3、加强实践性教学环节,突出知识的应用教学中要充分利用和创设实验、实训条件,增加学生动手实践操作的机会,强化实践技能的培养。在电子基本技能的训练过程中,融入理论知识的学习,体现理论在实践过程中的指导与应用。对于课程教学内容中的主要器件和典型电路,教学中要突出其实际应用,引导学生通过查阅相关资料分析其外部特性和功能,分析其在生产、生活实践中的典型应用,了解其工作特性和使用方法,并学会正确使用。在教学过程中,要重视本专业领域新技术、新知识、新工艺、新设备的介绍,体现时代性;贴近生产现场,体现实用性。4、加强与现代教育技术的整合教师应重视现代教育技术与课程的整合,努力推进现代教育技术在职业教育教学中的应用,更新观念,改变传统的教学方法,充分发挥计算机、互联网等现代媒体技术的优势,合理应用多种媒体组合,为教师教学和学生学习提供丰富多样的教学资源、教学工具和教学环境。提倡在教学过程中,利用数字化教学资源大容量、多媒体、超文本、交互性、共享性的特点,与各种教学要素和教学环节有机结合,提高教学的效率和效果。数字化教学资源(如教学演示软件、多媒体光盘、虚拟仿真实训软件、电子试题库等)可作为辅助教学的工具,也可用于情境创设、协作交流等教学活动,有利于创建符合个性化学习及加强实践技能培养的教学环境,并推动教学模式和教学方法的变革。5、考核评价的多元化考核与评价的目的不仅是为了考察教学结果的达成情况,更重要的是及时向教师和学生提供反馈信息,以便更有效的改进和完善教师的教学和学生的学习活动,激发学生学习热情,促进学生个人的发展。考核与评价的功能要从单纯注重水平鉴定和选拔淘汰,过渡到注重促进学生的发展,积极倡导与实施以导向、诊断、激励及过程调控为主的发展性教学评价。(1)考核与评价主体的多元化从传统考核与评价方式的主体单一性(即只有教师的评价),过渡到考核与评价主体的多元化,即教师的评价与学生的相互评价、学生的自我评价相结合。(2)考核与评价标准的多元化从传统的只注重评价学生的学习情况与学业成绩的单一性考核与评价,过渡到对学生在本课程学习过程中各方面活动及发展状况给予全面关注的多元化考核。(3)考核与评价的过程,从传统的以结果性为主,过渡到过程性与结果性相结合,逐步建立学生的发展性考核与评价体系。(4)考核与评价的方式,从传统的以量化为主,过渡到定量考核与定性描述相结合。三、课程性质与任务单片机基础与技能实训课程适用于中职电子相关专业,属于专业选修课,是电气、电子等大类专业重要的综合性基础性实践教学课程。本课程内容侧重于实际应用,教学上应以单片机结构及应用设计为主,使学生通过本课程的学习,具备独立设计简单单片机控制电路的能力。使学生对于单片机的组成原理和结构有比较深刻的理解,基本掌握单片机基础及应用的系统设计方法,可比较灵活地使用单片机构成系统的外围芯片,具备单片机软件设计和编程能力。对于学生学习单片机原理及其应用具有指导意义。为学生进一步学习计算机控制技术及相关专业知识和职业技能,提高全面素质,增强适应职业变化的能力和继续学习的能力打下一定的基础。本书共9个项目,以典型的LED控制电路、彩灯控制电路、数码管控制电路、按键控制电路、蜂鸣器控制电路、数模模数转换电路和温度显示电路为载体,通过安装和调试整机的过程,使学生熟悉单片机最基础的应用电路,让学生了解单片机的工作原理,掌握单片机程序设计、连接I/O设备的接口技术。对单片机应用系统的软、硬件设计有一定了解,为开发单片机及其应用系统打下基础。通过本课程的实践,希望能够使学生掌握单片机的使用方法、开拓学习知识的视野。使学生了解单片机的构造原理,掌握其内部的主要结构和C语言的编程应用,学习单片机常用的接口,常用的外围电路设计等,使学生具备应用单片机进行简单的控制系统开发的能力,注重培养和提高学生应用单片机进行创新设计、解决简单的实际问题的能力。四、预备知识由于本课程涉及到C语言编程,课本中对每个语句都有详细的说明,但是学生如果具备C语言的基础知识,会对编程方面更加得心应手,比如:子程序和主程序的基本结构、位定义、变量的定义、宏定义、条件选择语句、左移右移指令和基本的运算符等;其次,学生要具备简单电路的分析能力,如欧姆定律、节点电流定律等;除此之外,学生还应具备数电和模电的基础知识,如数制转换、三极管的特性、数码管的结构等;另外,完成每个任务都需要制作外围电路,所以学生应具备电路安装与焊接的基本技能。项目一初识单片机项目内容本项目内容主要包括单片机的内、外部结构、引脚、单片机应用开发流程的介绍;各种数制及其相互转换的学习;单片机最小应用系统的认识及制作单片机最小应用系统的实训。教学提要教学重点:单片机最小应用系统的构成和制作。教学难点:单片机各引脚的功能识别。教学建议课时分配任务内容课时任务一认识单片机1任务二认识数制1任务三制作单片机最小应用系统2教学方法情境教学法、任务驱动法教学要点任务一主要是通过实物展示让学生认识各种单片机及其各引脚,还要让学生认识各种仿真器和编程器,要让学生知道程序是如何烧录到单片机里面的,而单片机的内部结构让学生了解即可;任务二主要是介绍二进制和十六进制,以及他们和十进制之间的转换,本内容以练习为主,教师要让学生知道学习这些数制的目的所在;任务三主要以实训为主,教师可以给学生购买一个单片机最小系统的套件,学生制作完最小系统后,教师再根据成品讲解最小系统的构成以及使用方法。实训指导单片机最小系统是完成后续各种电路的基础,所以要确保每位学生都能顺利完成这个电路的制作。如果是给学生购买套件进行制作,要求学生按照先低后高的顺序安装元器件,还要确保元器件的极性不要接错。如果使用万用板或洞洞板制作,则要注意布局,确保整个系统安装在同一块电路板上。电路板制作好以后,教师帮助学生通过烧录一个程序来验证电路是否正常运行。任务一【练一练】答案AT89S51单片机的VSS是公共接地端,即接电源负极;RST/VPD是复位端,具有复位功能,另外,VCC掉电后,此引脚可外接备用电源,在低功耗下保持着RAM中的数据;是外部ROM使能端口,访问外部程序存储器时,该脚输出低电平,控制外部程序存储器输出数据。2、AT89S51单片机的内部由中央处理器、存储器、中断系统及输入输出电路等构成;中央处理器主要有运算器和控制器组成,运算器执行各种算术运算和逻辑运算,控制器的作用是:根据接收到的指令或运算器的运算结果来决定或发出相应的控制信号从而完成一个个指令的提取、运算和控制任务。存储器RAM称为随机存取存储器或数据存储器,用以存储可以读写的数据,如运算的中间量、最终结果和要显示的数据等;ROM称为只读存储器或程序存储器,用以存放程序、原始数据和表格等。I/O电路即输入输出电路,其作用是实现单片机与外部电路的数据交换。中断是单片机与外部信息传递的方式之一,通过中断控制器可以让单片机暂时停止原程序的执行,转而执行中断请求的程序,并在此程序执行完成后自动返回原程序。略任务二【练一练】答案1、(1)43(2)24(3)11.9375(4)272、(1)1010110 (2)10001010 (3)1000101003、(1)2B (2)B34、(1)11100 (2)10110111(3)110100115、(1)1001001 (2)1101100010(3)1000010110016、(1)68 (2)915(3)278(4)5.4任务三【练一练】答案1、填空题:(1)电源、时钟电路、复位电路(2)XTALl、XTAL2(3)RST、高电平2、略【项目检测】答案一、判断题 1、对2、错3、对4、错5、对6、对二、计算题1、5=(101)2=(5)16,17=(10001)2=(11)16,56=(111000)2=(38)16,87=(1010111)2= (57)16,178=(10110010)2=(B2)162、3795.4三、项目二点亮发光二极管项目内容本项目通过“点亮发光二极管”这一任务的驱动,让学生知道用C语言编写单片机程序的基本组成部分和常用运算符号,会写最简单的单片机程序,会对单片机的某一位进行控制;会使用Keil软件对程序进行编译,会使用软件将程序烧录到单片机中;会对单片机的I/O口进行总线控制。教学提要1、教学重点:编写“点亮一只发光二极管”的程序以及两个软件的使用。2、教学难点:I/O口的总线控制方式。教学建议(一)课时分配任务内容课时任务一点亮一只发光二极管1任务二点亮多只发光二极管2(二)教学方法情境教学法、任务驱动法(三)教学要点任务一主要是通过编写程序控制一只LED发光,由于学生是第一次接触单片机编程,所以教学以教师的演示为主,通过编程让学生知道一个完整的单片机程序包括哪几部分,同时学会Keil软件的使用方法,通过烧录程序,让学生学会烧录软件的使用方法,由于在后续的程序中会出现很多逻辑运算,所以笔者在本节将常用的逻辑运算符罗列下来,教师要对学生进行必要说明;任务二的目的是让学生学会进行总线控制,完成了任务一以后,任务二就可以给予学生更多的主动权,如电路的制作,程序的编写,编程方面教师可以引导学生按照任务一提到的位定义的方法进行,之后再给学生介绍总线控制方式。(四)实训指导由于在单片机最小系统中,P1.0口接有一只LED,因此任务一的电路就不需要另外制作,直接编写程序控制这个LED即可。Keil软件的使用过程中,有几个关键点需要教师强调:1、源程序的保存要加“.c”的后缀;2、要将源程序添加到项目组当中;3、最后要输出HEX文件,才能烧录到单片机中。在任务二当中,单片机要控制三只LED发光,因此,要制作三组LED与电阻串联的电路,在制作电路时要注意LED的极性问题,确定采取共阳极或共阴极接法,接法不同,无论是位控制还是总线控制,赋的值都不一样,教师要做必要说明;单片机与外围电路要用排线进行连接。任务一【练一练】答案头文件为用户定义了单片机常用寄存器的内存地址,它其实就是一种声明,将单片机中的一些常用的符号变量进行定义声明,对一些特殊功能寄存器进行声明,对一些关健字进行定义;另外,用户可以根据需要在头文件中定义其它寄存器地址,凡是在头文件中定义过的寄存器地址,编程时就不需要定义了。2、#include<reg51.h>sbitL1=P1^2;voidmain(){L1=1;}任务二【练一练】答案P1口的输出情况被点亮的LED0x7fL70x66L7L4L3L00x9eL6L5L00xabL6L4L20x17L7L6L5L4【项目检测】答案一、填空题1、头文件、符号变量、特殊功能寄存器、关键字2、文件名.h3、main、入口4、11111110、16进制数5、低电平、高电平语句解释1、sbitP10=P1^0:将P1口的第0位定义为P102、L1=0:给变量L1赋值为03、P0=0xfe:给P0口的8位进行赋值为0xfe连线题*按位与/测试等于==除!=逻辑或&&测试不等于||逻辑非!逻辑与>>乘<<按位取反&按位或|按位异或^位左移~位右移四、简答题1、新建文件夹、打开Keil软件、点击“工程---新建工程”新建一个工程、在弹出的对话框中选择新建的文件夹存放新建工程并取名后保存。2、1)设置编程器及接口;2)选择芯片;3)设置熔丝位;4)加载所要烧录的程序文件;5)编程烧录。项目三制作节日彩灯项目内容本项目主要介绍单片机控制一只或多只LED进行闪烁的方法,通过几个程序给学生介绍了延时子程序的编写方法、子程序的调用方法、for语句和while语句的用法、带参数子程序的作用以及循环左移和循环右移指令的应用;还介绍了单片机控制多只LED以不同花样进行闪烁的方法。教学提要1、教学重点:延时子程序、for语句和while语句、循环左移和循环右移指令2、教学难点:指令的书写和程序的格式。教学建议(一)课时分配任务内容课时任务一让发光二极管闪烁1任务二让发光二极管循环闪烁2任务三控制LED以多种花样进行闪烁2(二)教学方法情境教学法、任务驱动法(三)教学要点任务一主要是通过编写程序控制一只LED闪烁,在编程之前,教师可以先让学生分析如何才能让LED闪烁,引导学生形成“LED工作状态受电平高低影响”的概念,进而引入延时程序的编写方法;任务二涉及到八只LED的循环闪烁控制,也可以先让学生独立思考和讨论,形成他们自己的思路,然后教师再介绍循环左移和循环右移的概念,另外,还要适当加以拓展,比如循环左移两位;任务三是对任务一和任务二的综合应用,主要目标是让单片机的两组8个I/O口控制16只LED以不同的花样进行闪烁,在此任务的教学中要鼓励学生设计更多的闪烁方式,然后让同学之间相互分享,相互学习。(四)实训指导与项目二任务一一样,本项目任务一的电路也不需要另外制作,直接编写程序控制P1.0所接的LED即可。在编程方面,教师要引导学生独立思考,不要照抄参考程序,每位学生的程序里面要有自己的思想内容,比如延时时间的长短要不一样;在任务二中,学生首先要制作正确的外围电路,可以随意采取共阳极和共阴极接法(或教师直接进行分工),目的是便于程序方面的必要说明,编程之前,教师还要引导学生认真解读程序流程图,最好让学生自己完成流程图的设计,之后再让学生根据流程图完成“填一填”的内容,最后把程序写到keil软件里,并进行编译和烧录;任务三的外围电路有16只LED,因此需要在任务二的基础上再增加八只LED,电路制作完成后再完成“填一填”,但是最后写程序时要将相应的延时子程序写进去。任务一【练一练】答案#include<reg51.h>#defineucharunsignedchar//宏定义sbitL1=P1^0;sbitL2=P1^1;voiddelay(){uchara,b,c;for(a=20;a>0;a--)for(b=20;b>0;b--)for(c=248;c>0;c--);}voidmain(){while(1){L1=0;L2=1;delay();L1=1;L2=0;delay();}}任务二【练一练】答案#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintvoiddelay(uchar);voidmain(){ucharLED;LED=0xfc;while(1){P0=LED;delay(100);LED=_crol_(LED,2);}}voiddelay(ucharx){uinta,b;for(a=200;a>0;a--)for(b=x;b>0;b--);}任务三【练一练】答案1、共阴极接法和共阳极接法;共阴极接法时,P1=P2=0xff,共阳极接法时,P1=P2=0x00。2、可以通过按键来控制。【项目检测】答案一、填空题1、子程序2、1微秒3、声明子程序4、宏定义5、循环右移、循环右移二、语句解释1、语句while(a--)每执行一次,变量a减1,只要a不为0,则一直执行该语句,否则执行下一条语句,因此,这个程序将执行1001次while(a--),起到延时的作用。2、先让i赋值为0,再判断“i<8”是否为真,显然“0<8”为真,则执行一次花括号中的语句,然后让i加1,重新判断表达式“i<8”,因此,这个程序将执行8次花括号中的语句,最终a=8。3、变量a循环左移一位计算题假设晶振频率为12MHZ,计算下列延时程序的延时时间。1、t=100×200×2=40000微秒=0.04秒2、t=20×20×248×2=198400微秒≈0.2秒项目四制作定时器项目内容本项目的内容主要包括数码管的识别和检测、单片机控制数码管显示数字的方法;数组变量的定义和使用、if语句的应用;还有用动态扫描的方式让数码管显示数字、利用定时器中断设置一秒的标准延时;最后使用switch-case语句编程、制作60秒定时器。教学提要1、教学重点:动态扫描的含义和应用2、教学难点:定时器中断及其初始化教学建议(一)课时分配任务内容课时任务一让单个数码管显示数字2任务二让多个数码管显示数字2任务三完成60秒定时器的制作3(二)教学方法情境教学法、任务驱动法(三)教学要点本项目通过创设短期实习的情境,给学生营造工作的场景,进而给出检测数码管的任务,程序方面,循序渐进,从控制一个数码管显示数字开始,到显示数字的不断变化,然后完成单片机控制多个数码管实现静态显示和动态显示的效果,最终实现60秒定时器的制作。教师在这些过程中,教授学生几个重点的语句或指令,如if语句、switch-case语句;另外,关于定时器中断,教师要想方设法让学生理解它的作用和工作工程,并且要清楚如何开启定时器中断以及开启哪个定时器中断。(四)实训指导任务一先让学生使用万用表检测数码管,确定数码管的类型和各个管脚对应的字段,在“测一测”里记录下来,然后制作外围电路,此过程要特别注意接上拉电阻,最后通过编程控制数码管显示各个数字,再使用延时方式让数码管显示不断变化的数字;任务二是以四位数码管为例进行动态扫描控制,教师也可以让学生控制两位数码管进行动态显示,电路连接方面要注意确定段控制和位控制的I/O口,编程方面要注意定时器中断初值的设定要合适,初值太小显示的数字会闪烁,初值太大会使显示的数字产生互相干扰;如果任务二是使用两位数码管,则任务三就不需要另外制作外围电路,编程方面最关键的是如何使用定时器中断产生1秒的精确延时。任务一【练一练】答案填空题(1)共阳极数码管、电源正极、低(2)共阴极数码管、电源负极、高、低2、#include<reg51.h>unsignedcharb,i;unsignedinta;unsignedcharcodetabledu[]={0x3f,0x06};voiddisplay();voiddelay(){for(a=5000;a>0;a--)for(b=100;b>0;b--);}voidmain(){i=0; while(1) {if(i==1) i=0; display(); i++;delay(); }}voiddisplay(){ P0=tabledu[i];}任务二【练一练】答案填空题:驱动电路、静态、动态编程简单,显示亮度高、占用I/O端口多1~2ms、余辉效应计算题:假设AT89S51单片机晶振频率为12MHz,要求定时时间8ms,使用定时器T0,工作方式0,计算定时器初值X。计数脉冲个数为:8ms/12/12MHz=8000;然后根据工作方式确定定时器初值:若为工作方式0,则计数初值为:2^13-8000=192=C0HTH0=00H,TL0=C0H任务三【练一练】答案1、计算题:(1)5(2)9(3)22、编程题:#include<reg51.h>unsignedchari,count;//i为位选变量,count为计数变量unsignedintt;//t为定时变量unsignedcharcodetabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义段数组变量unsignedcharcodetablewe[]={0xfe,0xfd};//定义位数组变量voiddisplay();voidmain(){ i=0; t=0; count=60;//赋初值 TMOD=0x10;//选择定时器1工作方式1TH1=(65536-5000)/256;TL1=(65536-5000)%256;//给定时器赋初值,保证中断产生一次为0.005秒EA=1;ET1=1;TR1=1;//开中断 while(1);}voidtime1()interrupt3using3//中断子函数{TH1=(65536-5000)/256;TL1=(65536-5000)%256;//恢复定时器初值 t++;//t递增 if(t>=200)//t加到200时,定时时间为1秒,执行以下程序 { t=0;//t清零 if(count>0) count--; //count从60减到0 }; display();//执行显示子程序 if(i>=1)//i在0和1之间转换 i=0; else i++;}voiddisplay(void){ switch(i)//判断变量i { case0://如果i=0,执行以下程序 { P2=tablewe[0];//选择右边的数码管 P0=tabledu[count%10];//显示count的个位 break; } case1://如果i=1,执行以下程序 { P2=tablewe[1];//选择左边的数码管 P0=tabledu[count/10];//显示count的个位 break; } default: break; };}【项目检测】答案一、填空题1、共阴极数码管、共阳极数码管2、七段数码管、八段数码管3、数组4、定时器/计数器T0、定时器/计数器T15、中断优先级、所用工作寄存器组二、简答题1、1)确定工作方式;2)预置定时或计数的初值;3)根据需要开放定时器/计数器的中断直接对IE位赋值,ET0(IE.1)为定时/计数器T0中断允许位,ET1(IE.3)为定时/计数器T1中断允许位,EA(IE.7)为CPU中断允许(总允许位);4)启动定时器/计数器。2、首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句n+1,然后退出switch语句,程序流程转向开关语句的下一个语句。编程题1、#include<reg51.h>unsignedcharb,i;unsignedinta;unsignedcharcodetabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0xec,0x39,0x5e,0xe9,0x71};voiddisplay();voiddelay(){for(a=5000;a>0;a--)for(b=100;b>0;b--);}voidmain(){i=0; while(1) {if(i==16) i=0; display(); i++;delay(); }}voiddisplay(){ P0=tabledu[i];}略项目五制作抢答器项目内容本项目主要涉及到单片机的按键控制,首先是使用按键让单片机控制LED的工作状态,然后编写按键消抖的程序来控制数码管的显示,最后是对矩阵键盘的介绍,要求使用矩阵键盘实现多路输入。教学提要1、教学重点:按键控制单片机输出信号2、教学难点:矩阵键盘的扫描方法、按键消抖的方法教学建议(一)课时分配任务内容课时任务一制作模拟开关灯电路2任务二制作可控数码显示电路2任务三完成16路抢答器的制作3(二)教学方法情境教学法、任务驱动法(三)教学要点在任务一的教学中,首先要指导学生画出正确的电路图,特别是要让学生理解上拉电阻的作用,然后引导学生画流程图,建构编程的思路,最后师生共同完成程序的编写和烧录;任务二可以引导学生结合数码管显示和按键控制独立完成程序编写,根据出现的问题进行思考和讨论,然后再引入按键消抖和松键消抖的概念和语句;任务三最重要的是给学生讲清楚矩阵键盘的结构和行扫描法。(四)实训指导任务一的首要步骤就是制作电路,在这里一般使用四脚的按钮,学生要学会使用万用表检测常开和常闭引脚,以使开关正常工作,安装时要注意接上上拉电阻;任务二的外围电路不用另外制作,利用现有的外围电路即可构成,编程方面,重点是要想办法解决按键抖动的问题;任务三的电路可连接矩阵键盘模块(如图5.1所示),要让学生完整编写程序难度会比较大,所以教师要让学生理解编程的思路,然后对程序进行修改,以使数码管的显示内容发生变化,强调对现有程序的应用,而不是死记硬背。图5.1任务一【练一练】答案编程题#include<reg51.h>sbitLED1=P1^0;sbitLED2=P1^1;sbitopen=P3^0;sbitclose=P3^1;voidmain(){LED1=1;LED2=0;while(1){if(LED1==1){if(!open){LED1=0;LED2=1;}else{LED1=1;LED2=0;}}else{if(!close){LED1=1;LED2=0;}Else{LED1=0;LED2=1;}}}}简答题为了确保I/O口作为输入口时输入高电平,作为输出口时确保输出电流足够大。任务二【练一练】答案1、在按键闭合及断开的瞬间均伴随有一连串的抖动2、在检测出键闭合后执行一个延时程序,5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。任务三【练一练】答案1、填空题(1)矩阵键盘、16(2)行扫描法2、简答题(1)将P1口和0xf0进行与运算,如果结果不为0xf0,则说明高四位不全为1。(2)通过检测P1口高四位是否全为1,如果全为1,说明已经松手。【项目检测】一、填空题1、上拉、限流2、按键抖动、按键消抖3、行扫描法二、简答题1、预先将接按键的I/O口设置为高电平,然后通过检测I/O口输入状态是否发生变化来判断按键是否按下。2、依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。三、编程题1、假设LED接单片机的P1.0口,按钮K接P3.0,编写程序实现以下效果:按下K,LED开始闪烁。#include<reg51.h>sbitLED=P1^0;sbitK=P3^0;inta;voidmain(){LED=1;while(1){if(!K){a=50000; LED=0; while(a--); LED=1; a=50000;while(a--);}}}2、程序略,要注意进行按键消抖处理。项目六制作消防车报警器项目内容本项目主要涉及到单片机对蜂鸣器的控制。介绍了有源蜂鸣器和无源蜂鸣器以及它们之间的区别、蜂鸣器的驱动电路以及驱动蜂鸣器发声的程序;还介绍了利用I/O口定时翻转电平产生矩形波对无源蜂鸣器进行驱动、通过改变I/O口输出矩形波的频率来改变蜂鸣器声音的方法;最后介绍了使用逻辑非和按位异或运算符,让蜂鸣器发出消防车报警声的编程方法。教学提要1、教学重点:驱动无源蜂鸣器发声2、教学难点:编程实现消防车报警声教学建议(一)课时分配任务内容课时任务一让蜂鸣器发声1任务二让蜂鸣器发出音调渐变的声音1任务三制作模拟消防车报警器2(二)教学方法情境教学法、任务驱动法(三)教学要点本项目三个任务的电路部分完全一样,程序方面的核心也相同,都是利用定时器中断产生一定频率的矩形波来驱动蜂鸣器,唯一不同的是随着单片机输出频率的变化,蜂鸣器发出的声音也会产生变化,从而实现任务二和任务三所要达到的效果,因此,教师所要做的就是将每个程序里的关键语句做详细解释,帮助学生理解。(四)实训指导蜂鸣器的驱动电路部分可以使用蜂鸣器模块(如图6.1),但是蜂鸣器模块有无源蜂鸣器模块和有源蜂鸣器模块两种。对于有源蜂鸣器模块,单片机一个高(低)电平就可以让其发出声音,具体是什么电平触发,要看模块中的三极管的类型,如果是NPN型三极管,则高电平触发,如果是PNP三极管,则低电平触发;对于无源蜂鸣器模块,必须用2KHZ~5KHZ频率的方波去驱动它。所以,使用之前要注意区分模块类型。图6.1任务一【练一练】答案1、填空题:(1)压电式蜂鸣器、电磁式蜂鸣器(2)有源蜂鸣器、无源蜂鸣器2、简答题:(1)PWM输出口直接驱动,另一种是利用I/O口定时翻转电平产生矩形波对蜂鸣器进行驱动。(2)PWM输出口直接驱动是利用PWM输出口本身可以输出一定的方波来直接驱动蜂鸣器。任务二【练一练】答案1、响度、音调和音品2、音调3、编写程序,让蜂鸣器每隔一秒钟改变一次音调。#include<reg51.h>unsignedcharfrq;sbitbeep=P1^0;voiddelay(x){uinta,b;for(a=200;a>0;a--)for(b=x;b>0;b--);}voidmain(){frq=10;EA=1;ET1=1;TMOD=0x10;TH1=(65536-5000)/256;TL1=(65536-5000)%256;TR1=1;beep=0;delay(frq);beep=1;delay(frq);while(1);}voidtime1()interrupt3using3{TH1=(65536-5000)/256;TL1=(65536-5000)%256; if(t>=200) { t=0;if(frq>=2000)frq=10;elsefrq=frq+10; };elset++;}任务三【练一练】答案1、0x012、0xee0xfe0x00【项目检测】答案填空题1、多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱2、振荡器、电磁线圈、磁铁、振动膜片3、有源、无源4、电源、振荡音品语句解释1、如果变量key为0,则给变量led赋值02、将0xe0赋给变量a3、对1取反4、对变量beep进行按位取反三、简答题必须利用定时器来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。编程题1、参考项目九任务一的程序。2、略项目七制作D/A、A/D转换电路项目内容本项目主要介绍了D/A转换和A/D转换的原理,并使用D/A转换器DAC0832和A/D转换器ADC0804分别实现“让LED逐渐变亮”和“用电位器逐个点亮8支LED”的效果;还介绍了分析工作时序图的方法。二、教学提要1、教学重点:编程控制DAC0832和ADC08042、教学难点:分析工作时序图教学建议(一)课时分配任务内容课时任务一让LED逐渐变亮2任务二用电位器逐个点亮8支LED2(二)教学方法情境教学法、任务驱动法(三)教学要点任务一首先要让学生了解D/A转换器的作用和原理,然后针对“让LED逐渐变亮”的任务展开教师分析和学生讨论,让学生思考:如何才能使LED逐渐变亮?DAC0832的工作时序图要做重点分析,主要是要教给学生分析的方法,以便在今后拿到其它芯片的时序图也能独立分析;任务二的教学过程与任务一基本相同,由于在任务一当中学生已经接触过时序图,所以,在任务二教师可以先让学生尝试分析ADC0804的工作时序图,然后再加以补充。(四)实训指导本项目的任务内容都需要另外的芯片协助完成,因此完成芯片与单片机之间的电路连接是功能实现的关键,任务资讯已经提供了电路原理图,在安装电路的时候要注意LED的极性不要接错,电源端和接地端不能漏接;任务二可以使用A/D转换模块(如图7.1所示)实现,当短路子置于上面两个插针位置时,内部信号输入可进行有效的模/数转换,此时,用户可以通过旋转电位器来观察,内部电压信号的模/数转换过程,作为模块的测试使用,当短路子置于下面两个插针位置时,外部信号输入可进行有效的模/数转换。图7.1任务一【练一练】答案1、简答题:(1)1)分辨率2)线性度3)绝对精度和相对精度4)建立时间(2)1)分辨率8位2)电流建立时间1μS3)数据输入可采用双缓冲、单缓冲或直通方式4)输出电流线性度可在满量程下调节5)逻辑电平输入与TTL电平兼容6)单一电源供电(+5V~+15V);7)低功耗,20mW。2、填空题:(1)最低有效位、最小变化值(2)数据寄存器、电流任务二【练一练】答案1、填空题:(1)数字、模拟、(2)逐次比较2、简答题:(1)1)分辨率2)量化误差3)偏移误差4)满刻度误差5)线性度6)绝对精度7)转换速率(2)1)准备阶段。2)转换阶段。3)读取阶段。【项目检测】答案填空题1、线性度2、输出值、理论值3、满刻度变化4、电流5、时序6、模拟量、数字量7、模拟电压8、有限位数、量化9、偏移误差10、重复进行数据转换逐次比较简答题首先向片内D/A转换器输入10000000,若电压比较器:VIN>VN(VN为片内D/A转换的输出,VIN为A/D转换器的输入电压),N位寄存器的首位置1(若VIN<VN,则寄存器的首位写0);再向D/A转换输入11000000(首位写0时,输入01111111),若VIN>VN,则寄存器第二位置1(若VIN<VN,则写0);再向D/A转换输入11100000(或00111111),若VIN>VN,则寄存器第三位置1(若VIN<VN,则写0);依次下去直到寄存器第8位赋值结束,控制逻辑检测到比较器进行8次后,EOC输入信号,让A/D转换器将结果通过锁存缓存器输出至D0~D7。项目八制作温度显示器项目内容本项目主要介绍了使用1602液晶屏幕和温度传感器DS18B20制作温度显示器的方法。在任务一中介绍了1602液晶模块的引脚功能、1602写数据和写命令的格式、1602初始化程序以及1602液晶的显示地址的设置;任务二主要介绍了DS18B20的时序图、DS18B20的初始化程序和读写程序以及驱动DS18B20的操作流程;最后一个任务完成了温度显示器的制作。二、教学提要教学重点:1602液晶显示器的使用、驱动DS18B20芯片教学难点:让LCD显示当前温度三、教学建议(一)课时分配任务内容课时任务一让1602液晶显示器显示字符2任务二驱动DS18B20芯片2任务三让LCD显示当前温度2(二)教学方法情境教学法、任务驱动法(三)教学要点要制作温度显示器,首先要学会让液晶显示器显示指定的字符,任务一介绍的液晶显示器是常用的1602液晶显示器,所以任务一的教学要点就是讲清楚1602液晶的时序图,并根据时序图画出写数据和写命令的程序流程图,至于液晶屏能否正常显示字符以及字符显示的位置,就要引导学生查看表8—1—3(见课本)的内部指令,例如:写入命令字“0x01”就起到清屏的作用;温度传感器种类很多,DS18B20温度传感器通常应用于高精度、高可靠性的场合,其内部含有数据存储单元,具备记忆功能,配合指定的程序就可以将其储存的数据读取,所以任务二的关键是搞清楚“写一个字节”和“读一个字节”的程序指令;任务三是对前面两个任务的综合运用,可以让学生独立完成。(四)实训指导任务一实训的首要任务是正确连接电路,因为液晶显示器的管脚比较多,所以要注意区分管脚的顺序,电路连接好以后,学生可以直接将程序烧录到单片机进行测试,显示器正常显示以后,教师要求学生对显示字符和显示位置进行改变,以达到熟悉控制指令的目的;任务二的电路部分较简单,所以要求学生尝试完成“写一个字节”和“读一个字节”的程序指令,然后结合任务三完成温度显示器的制作,但是要求显示内容要略有不同,可以加上日期或其它文字。任务一【练一练】答案00、100x82任务二【练一练】答案1、温度传感器2、单总线、双向3、480uS、15~60uS4、两个、执行温度转换、读RAM5、说出以下运算的意义:(1)将变量dat与0x01按位求与,相当于保留最低位;(2)将变量dat与0x80按位求或,即dat的高位补1。任务三【练一练】答案已知i为四位十进制数,试用适当的算术运算符表示其千位、百位、十位和个位。千位:i/1000百位:i%1000/100十位:i%100/10个位:i%10【项目检测】答案填空题1、慢显示2、字符地址3、显示模式4、480uS5、拉高、存在脉冲6、一根I/O线语句解释(5—9题为单片机向1602液晶写指令的语句)1、将dat的各数据位右移1位2、将dat的各数据位和0x80按位求或3、将dat的各数据位和0x01按位求与,结果赋值给DQ4、将temp的各数据位和变量a按位求或5、lcd_w_com(0x38);

6、显示关闭

7、开启显示屏,关光标,光标不闪烁

8、显示地址递增,即写一个数据后,显示位置右移一位

9、清屏

附录一C语言基础知识汇总语言变量声明和变量赋值1)基本数据类型在C语言中,仅有4种基本数据类型—整型、浮点型、指针和聚合类型(如数组和结构等),所有其他的类型都是从这4种基本类型的某种组合派生而来。整型:整型家族包括字符、短整型、整型和长整型,它们都分为有符号(signed)和无符号(unsigned)两种版本。规定整数值相互之间大小的规则很简单:长整型至少应该和整型一样长,而整型至少应该和短整型一样长。浮点类型:诸如3.14159和2.3×1023这样的数值无法按照整数存储。第一个数为非整数,而第二个数远远超出了计算机整数所表达范围,这样的数就可以用浮点数的形式存储。浮点数家族包括float、double和longdouble类型。通常,这些类型分别提供单精度、双精度以及在某种扩展精度的机器上提供扩展精度。ANSI标准仅仅规定longdouble至少和double一样长,而double至少和float一样长。标准同时规定了一个最小范围:所有浮点类型至少能够容纳从10-37到1037之间的任何值。指针:变量的值存储于计算机内存中,每个变量都占据一个特定的位置。每个内存的位置都由地址唯一确定并应用,就像一条街上的房子由他们的门牌号码标识一样,指针知识地址的另一个名字。2)变量声明形式只知道基本的数据类型是远远不够的,你还应该知道怎样声明变量。变量的基本形式是:说明符(一个或多个)声明表达式列表对于简单的类型,声明表达式列表就是被声明的标识符的基本类型。对于相对比较复杂的类型,声明表达式列表的每个条目实际上是一个表达式,显示被声明的名字的可能用途。例如:inta,doubleb;该语句就是一条声明语句,其中a,b就是变量名,该语句指明了变量a,b是int数据类型。所有变量在使用前都必须写在执行语句之前,也就是变量声明要与执行语句相分离,否则就是出现编译错误。3)变量命名C语言中任何的变量名都是合法的标示符。所谓标识符就是由字母、数字和下划线组成的但不以数字开头的一系列字符。虽然C语言对标示符的长度没有限制,但是根据ANSI标准,C编译器必须要识别前31个字符。C语言是对大小写敏感的,即C语言认为大写字母和小写字母的含义是不同的,因此a1和A1是不同的标识符。到目前为止,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。常用的命名规则有匈牙利命名法和驼峰命名法等,在实际操作中,我们会采取相对简单方便的命名规则,即“类型首字母”+“_”+“变量用途英文缩写”,其中英文缩写首字母为大写,例如inti_Num,charc_Name[5]。4)变量赋值在一个变量声明中,你可以给一个标量变量指定一个初始值,方法是在变量名后面跟一个等号(赋值号),后面就是你想要给变量的值。例如:inti_Num=10;charc_Name[]=”student”;上述语句声明i_Num为一个整数变量,其初始值为10,声明c_Name为一个字符数组,其初始值为“student”。在C语言中,全局变量和静态变量,如果没有赋初值,则默认初始值int,float,char分别为0,0.0,’\0’,除了全局变量和静态变量以外,其他变量如果没有赋初值,则默认初始值为内存中的垃圾内容,对于垃圾内容不能有任何假设。注意:定义指针后,默认初始值不是0,而是随机的一个值,故定义指针后,一定要初始化。在实际操作中,变量的赋值都是以赋值语句的形式出现,赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为:变量=表达式;在赋值语句的使用中需要注意以下几点:由于在赋值符“=”右边的表达式也可以又是一个赋值表达式。下述形式:变量=(变量=表达式);该语句是成立的,从而形成了嵌套的情形。其展开后的一般形式为:变量=变量=…=表达式;例如:a=b=c=d=e=5;按照赋值运算符的右结合性,因此实际上等效于:e=5;d=e;c=d;b=c;a=b;注意在变量声明中给变量赋初值和赋值语句的区别给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其他同类变量之间仍必须用逗号隔开,而赋值语句则必须用分号隔开。例如:inta=5,b,c;在变量声明中,不允许连续给多个变量赋初值。如下述说明就是错误的:inta=b=c=5;正确写法为:inta=5,b=5,c=5;但是,赋值语句允许连续赋值。注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。下述语句是合法的:If((x=y+7)>0)z=x;语句功能为若表达式x=y+5大于0则z=x。但是,下述语句是错误的:If((x=y+7;)>0)z=x;因为x=y+7;是语句,不能出现在表达式中。实例:#include“stdafx.h”voidmain(){ inti_Tmp,i_Type=8; floatf_Tmp; doubled_Tmp; charc_Tmp; d_Tmp=d_Tmp=f_Tmp=12; f_Tmp=i_Type; i_Tmp=i_Type+3; printf("a=%d,b=%d,c=%.3f,d=%.6lf",i_Tmp,i_Type,f_Tmp,d_Tmp);}算术运算符及使用方式C语言提供了最基本的算术运算符,如下表:运算符含义举例结果+加法运算符a+ba和b的和-减法运算符a-ba和b的差*乘法运算符a*ba和b的乘积/除法运算符a/ba除b的商%求余运算符a%ba除b的余数++自加运算符a++,++aa自加1--自减运算符a--,--aa自减11)+、-、*、/都适用于浮点类型和整数类型,当两个操作数都为整数时进行整数运算,其余情况则进行double型运算;当/除法运算符的两个操作数为整数时,结果为整数,舍去小数部分,例如5/3的结果为1;%求余运算符只接受两个整型操作数的运算,结果为余数2)++、--:作用是使变量自加1或自减1,例如i++、++i,都是使i的值加1,但其执行的步骤是不同的。例如:inti=3,j;j=i++;//i的值为4,j的值为3inti=3,j;j=++i;//i的值为4,j的值为4可见当变量在左侧时,先进行赋值运算再进行自加1操作,当变量在右侧时,先进行自加1操作再进行赋值运算。3)在赋值运算符之前加上算术运算符既构成复合运算符,例如:a+=b,等价于a=a+b。-=、*=、/=也是如此。位运算符及使用方式(<<、>>、~、|、&、^)位运算符是用来对二进制位进行操作,如下表:运算符含义<<左移>>右移~取反|按位或&按为与^按为异或<<、>>:移位运算符,例如左移运算符:inti=3;i=i<<4;3的二进制位为00000011,左移4位的结果为00110000,其操作中高位舍弃、低位补0,既i=48,等同于i乘以2的4次方。右移运算符则有所不同,操作中是低位舍弃,高位则有两种补位方式。一种为逻辑移位,高位补0;另一种为算术移位,当符号位为1时高位全部补1,当符号位为0时则高位全部补0。具体使用哪种移位方式则取决于当前的编译环境。~:取反运算符,为单目运算符,其操作是对操作数的二进制位按位求反,既1变0,0变1。例如i=5,二进制位为00000101,取反的结果为11111010。在计算机系统中,数值一律用补码来表示和存储,其中最高位为符号位,用0表示正,1表示负。补码的规定如下:对正数来说,最高位为0,其余各位代表数值本身,例如14的补码为00001110;对负数而言,则将该数绝对值的补码按位取反,再加1,得该数的补码,既-i=~i+1。例如-14的补码为14的二进制00001110取反加1得11110010。|、&、^:均为双目运算符,对操作数的二进位进行运行,且操作数以补码的方式出现。|按位或,两个对应的二进位至少有一个为1则为1,否则为0;&按位与,两个对应的二进位都为1则为1,否则为0;^按位异或,两个对应的二进位不同则为1,否则为0。例如:a=5;(00000101)b=14;(00001110)a|b=15;(00001111)a&b=4;(00000100)a^b=11;(00001011)关系运算符及使用方式(>、>=、<、<=、==、!=)运算符含义>大于>=大于或等于<小于<=小于或等于==等于!=不等于关系运算符用于比较两个数值之间的关系,例如:a>3为关系表达式,大于号为关系运算符,当表达式成立时,“a>3”的值为“真”,当“a>3”不成立时,“a>3”的值为“假”。其中应当注意的是关系表达式的返回值为整型值,而不是布尔型。表达式为真时返回值为1,表达式为假时返回值为0。逻辑运算符及使用方式(&&、||、!)运算符含义举例结果&&逻辑与a&&ba,b都为真则结果为真,否则为假||逻辑或a||ba,b至少有一个为真则结果为真,否则为假!逻辑非!a当a为真则结果为假,当a为假则结果为真其中应当注意逻辑或,例如a||b,当a为真时,C语言中直接跳过对b的判断,其返回值为“真”。当一个表达式包括几种运算符时,则以运算符的优先级对表达式进行运算,表达式的优先级如下:优先级运算符类型说明1初等运算符()、[]、->、.2单目运算符!、~、++、--、*(指针运算符)、&(取地址运算符)3算术运算符先乘除后加减4关系运算符>、>=、<、<=、==、!=5逻辑运算符&&、||6条件运算符三目运算符,例如?:7赋值运算符=8逗号运算符,数组数组是构造类型,是一组具有相同类型数据的有序集合。每个数据成为数组的元素,用一个统一的数组名和下标来唯一地确定数组中的元素。一维数组的声明方式为:<类型标识符><数组名>[常量表达式]类型标识符是任一种基本数据类型或构造数据类型;数组名由用户自定义,表示存储空间的地址;常量表达式表示数组元素的个数,也是数组的长度。例:inta[6];表示一个整型、数组名为a、长度为6的一维数组。(2)一维数组的引用形式:下标法:数组名[下标]例如:a[i];或p[i];a为数组名,p为指向数组的指针变量。注:C语言中不能依次引用整个数组,只能逐个引用数组中的各个元素。下标就是被访问的数组元素在所定义的数组中的相对位置。下标为0表示的是数组元素在数组的第一个位置上,下标等于1表示的是数组元素在数组的第二个位置上,依次类推。例如:inta[10];a[0]=100;//正确a[10]=100;//不正确,下标越界例如:下标法:intmain(){inta[10];for(inti=0;i<10;i++)a[i]=2*i;for(inti=0;i<10;i++)printf(“%d\t”,a[i]);return0;}指针法:*(a+i)或*(p+i);a是数组名,p为指向数组的指针变量。例如:指针法:intmain(){int*p=a;inti;for(i=0;i<10;i++)a[i]=2*i;for(i=0;i<10;i++)printf(“%d\t”,*(p+i));return0;}二维数组的声明方式为:<类型标识符><数组名>[常量表达式1][常量表达式2]:二维数组与一维数组的区别在于多出[常量表达式2]。[常量表达式1]是第一维,常称为行;[常量表达式2]是第二维,也就是列。例:inta[3][5];表示一个3行5列的二维数组;数组元素的个数为:3*5=15个。二维数组的引用形式:下标法:数组名[下标][下标]注:二维数组在引用时和一维数组一样,只能逐个引用数组中的各个元素。例如:sz_A[5][6]下标可以是整数表达式,如sz_A[8-5][2*3-1]。不要写成sz_A[2,3]、sz_A[8-5,2*3-1]形式。注意:严格区分定义数组时用的sz_A[5][6]和引用元素时用的sz_A[5][6]的区别。前者sz_A[5][6]用来定义数组的维数,后者sz_A[5][6]的5和6是下标,代表的是数组中的某一个元素。【例2】分析程序的运行结果源程序如下:#include<stdio.h>voidmain(){ intsz_Array[6];//一维数组 intsz_DlArray[3][5];//二维数组 inti_a;inti_dla; inti_dlb;//一维数组 for(i_a=0;i_a<6;i_a++) {sz_Array[i_a]=i_a*2+2; } printf("\n输出一维数组元素为:\n"); for(i_a=0;i_a<6;i_a++) {printf("%d\t",sz_Array[i_a]); }//二维数组 for(i_dla=0;i_dla<3;i_dla++) {for(i_dlb=0;i_dlb<5;i_dlb++){sz_DlArray[i_dla][i_dlb]=i_dla+i_dlb;} }printf("\n输出二维数组元素为:\n");for(i_dla=0;i_dla<3;i_dla++) {for(i_dlb;i_dlb<5;i_dlb++){ printf("%d",sz_DlArray[i_dla][i_dlb]); } printf("\n"); }}运行结果为:输出一维数组元素为:24681012输出二维数组元素为:0123412345234563456745678指针法:可以通过行指针来引用二维数组元素。定义行指针变量:int(*p)[3],指针p是指向一个由3个元素所组成的整型数组指针。例如:voidmain(){inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}int(*p)[4]=a;for(inti=0;i<3;i++){for(intj=0;i<4;j++)printf(“%d\t”,p[i][j]);printf(“\n”);}}字符数组字符数组的定义与赋值字符数组是一串字符的集合,其数组元素为字符型。字符数组的赋值形式:char数组名[常量表达式]=“字符串”;或char数组名[常量表达式]={“字符串”};例:charsz_A[5]={‘s’,‘t’,‘u’,‘d’,‘y’,};定义数组sz_A,包含5个元素,其在内存中的存放情况为:sz_A[0]sz_A[1]sz_A[2]sz_A[3]sz_A[4]study则各元素赋值如下:sz_A[0]=‘s’;sz_A[1]=‘t’;sz_A[2]=‘u’;sz_A[3]=‘d’;sz_A[4]=‘y’如果花括号中的字符个数大于数组长度,编译系统就会报错,如果花括号中的字符个数小于数组长度,其余元素则由系统自动定义为空字符,即‘\0’。‘\0’作为字符串的结束标志,因此在定义数组长度时,应在字符串原有的长度上加1,为字符串结束标志预留空间。例:charsz_A[6]={‘s’,‘t’,‘u’,‘d’,‘y’,};定义数组sz_A,包含6个元素,其在内存中的存放情况为:sz_A[0]sz_A[1]sz_A[2]sz_A[3]sz_A[4]sz_A[5]study\0则各元素赋值如下:sz_A[0]=‘s’;sz_A[1]=‘t’;sz_A[2]=‘u’sz_A[3]=‘d’;sz_A[4]=‘y’;sz_A[5]=‘\0’【例3】分析程序的运行结果源程序如下:#include<stdio.h>voidmain(){charsz_A[10]="workhard";inti;for(i=0;i<9;i++)printf("%c",sz_A[i]);}运行结果:workhard以上实例中,逐个显示字符数组的各个元素,但需注意的是在定义字符数组的下标时,至少比后面的字符串长度大1。其中,字符串长度应包括其中空格的长度。字符串操作函数:字符串复制函数strcpy()格式:strcpy(字符数组1,字符数组2)功能:是将字符数组2中字符串复制到字符数组1中去。注:字符数组1的长度必须大于字符数组2,从而能够容纳复制的字符数组2的字符串;字符数组1必须写成数组名形式,字符数组2既可以是字符数组名,也可以是字符串;字符数组之间不能相互赋值。例如:charsz_str1[10],sz_str2[6]="workhard";Strcpy(sz_str1,sz_str2);printf("%s\n",sz_str1);运行结果:workhard字符串连接函数strcat()strcat(字符数组1,字符数组2)功能:将字符数组1和字符数组2中的字符串连接起来,字符数组2中的字符串2接到字符数组1中的字符串后面。注:字符数组1的长度必须足够大,能够同时容纳字符数组1中的字符串和字符数组2中的字符串。字符数组名2中的字符串连接到字符数组1的字符串时,删除字符数组1中的字符串后面的标志‘\0’,只在新串的最后保留“\0”。例如:charsz_str1[10]="work",sz_str2[6]="hard";strcat(sz_str1,sz_str2);printf("%s\n",sz_str1);运行结果:workhard字符串比较函数strcmp()strcmp(字符数组1,字符数组2)功能:比较字符数组1和字符数组2中字符串,通过函数返回值得出比较结果。若字符数组1中的字符串<若字符数组1中的字符串,函数返回值<0;若字符数组1中的字符串>若字符数组1中的字符串,函数返回值>0;若字符数组1中的字符串=若字符数组1中的字符串,函数返回值=0;注:比较规则:比较过程中,按照从左到右的顺序,逐个比较字符的ASCII码值,直到遇到不相同的字符或“\0”,即结束比较。例如:charsz_str1[10]="work",sz_str2[10]="hard";if(strcmp(sz_str1,sz_str2)>0) { printf("大于\n"); }if(strcmp(sz_str1,sz_str2)<0) { printf("小于\n"); }if(strcmp(sz_str1,sz_str2)==0) printf("相等\n");运行结果:大于sprintf()sprintf(s,”%s%d%c”,”text”,1,’char’);将输出结果写入数组S中;其函数返回值为字符串长度,相当于strlen;计算长度时不计算“\0”,而sizeof计算时是加上“\0”的。例如:charsz_str;sprintf(sz_str,"%s%d%c","work",6,"hard");i_Tmp=sprintf(sz_str,"%s%d%c","work",6,"hard");printf("sprintf结果输出:%s\n",sz_str);printf("sprintf函数返回值输出:%d\n",i_Tmp);sscanf()sscanf(s,”%d%f%s”,&a,&b,&c);从一个字符串中读进与指定格式相同的数据;其返回值为读入有效数据的个数;从数组S中,以固定格式向a,b,c输入,sscanf不识别空格。charsz_str[11]="work6hard";charsz_str1[11]; sscanf(sz_str,"%4s",sz_str1); i_Tmp=sscanf(sz_str,"%4s",sz_str1)

温馨提示

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

评论

0/150

提交评论