单片机程序设计范文

时间:2023-03-07 02:13:30

单片机程序设计

单片机程序设计范文第1篇

【关键词】单片机 程序设计 有效 策略

单片机是一门理论与实践相结合的综合学科,在传统的单片机程序设计中,一般只是为传递一些总线、地址、数据、中断和串行通信口等抽象的理论知识,对于实践却很少实施,由此工作人员便会在不理解的前提下对单片机程序设计产生一种畏惧心理,加之,工作人员本身的专业知识不够扎实,学起来非常困难。为了进一步提高工作人员单片机程序设计的能力,提高单片机工作人员专业水平,单片机程序设计师们必须根据工作人员和实践各方面特点对单片机设计方法和策略进行改革和创新,以能够使基础薄弱的工作人员也能够很好的掌握单片机程序设计方法和应用。

1 加强单片机程序设计的实践分析

一般来说,初上岗位的工作人员在思维方式上更偏向于形象思维,对于编程设计等这些抽象的理论知识而言,工作人员却显得力不从心。为此,应该在工作过程中抓住这一特点,将理论知识融入到实践教学中去,让工作人员在自我摸索中、实践中了解单片机程序设计知识,由此激发工作人员的学习兴趣,提高工作人员的积极性。

例如,在指令系统和汇编语言程序实践中,工作人员可以在首先将基本理论知识了解清楚,然后对工作人员的操作仿真软件加以强化训练,让工作人员在不断的操作中深刻理解指令系统和汇编语言程序的具体操作技巧和应用价值,做到会编辑程序、会汇编原程序等。

再如,工作人员可以在训练操作中了解指令,从而确保工作人员应用指令的能力。单片机的指令系统共有111条,助记符共有42种,寻址方式有7种,如果这些内容仅仅由教师来逐条讲解和介绍,工作人员不仅难以理解,还有可能无法认真研究,这样只能导致适得其反的效果。因此,为了让工作人员更有兴趣的认真了解指令系统,工作人员应该被安排学生在软件平台上操作,按照相应的汇编语言程序命令格式对不同的指令程序进行编辑,使用“仿真器”对单片机的真实状态进行仿真,经过反复练习和操作之后,工作人员必然会对各种程序格式、指令格式、指令助记符和寻址方式等产生深刻的印象。

2 单片机设计必须要理论与实践相结合

单片机技术实际上是一种硬件与软件相结合的综合技术,在设计的过程中,工作人员只有根据单片机程序设计的特点,坚持理论与实践并重和相互穿插渗透的原则,才能充分而全面提高工作人员单片机技术的综合应用能力。

首先,设计人员应该在实践之前,对实践内容进行必要的筛选。由于单片机的相关理论较为抽象和深奥,硬件内容优势交错渗透的,所以在筛选实践内容时应始终坚持够用原则,在参照经典应用实例的基础上,将实践内容分为若干个知识模块,以能够满足技能训练和基本应用所需要的理论知识支撑。在筛选实践内容过程中,设计人员应该从工作人员的单片机的初级性、基础性和工具性的角度出发,删除单片机系统扩展与开发技术等章节的内容,加强基本应用理论教学,为设计人员后续逐步提高单片机理论打下良好的基础。

其次,在汇编语言程序设计中,设计人员应该尽量采用灵活多变的方法促进编程能力的提高。例如,设计人员可以采取指令更换的方法对选择的不同的指令完成同一功能的要求;采取参数改变法,对相关参数进行修改,定时器或技术器工作方式等都可以采用参数改变法;采用地址变更的方法,对中断源、中断入口地址和相关标志位等进行变更等。

最后,在实践教学中巧妙的插入理论知识,加强对工作人员理论知识应用能力的培养。例如,设计人员在指导中应用模块试验时,应该提前将中断的来源、中断控制的方法、中断请求、中断响应、终端服务等及其相关理论知识点讲解给学生,让试验过程中通过硬件和软件两方面分析中断应用,从而提升分析问题和解决问题的能力。

3 创新单片机设计的方法

针对单片机程序设计的特点,工作人员在进行教学时可以采用一些创新型的方法来提高工作人员对学习单片机程序设计课程的兴趣。

3.1 讨论法

提高工作人员对单片机设计的兴趣和充分发挥积极性和主动性都是非常重要的环节,而单片机程序设计作为一题多解的学科,更需要充分调动工作人员的主动性和创新思维。工作人员在采用讨论法的过程中,可以依照提问、答辩、论证、反驳和判断等程序,让工作人员围绕一个知识点进行讨论,以达到工作人员之间、师生之间相互启发、相互协作去分析问题、发现问题、解决问题和总结经验的教学目的。

3.2 分组法

注重培养团队精神,以竞求进上机编程实践是学好程序设计语言的关键但在上机实践过程中工作人员如果各自为战,或在设计人员的统一指挥下以完成不同题型的任务为实践内容,对于工作人员而言很容易失去上机兴趣,也很难达到上机实践的目的 因此,针对工作人员的特点,适当转变上机实践的形式也不失为一种好的方法。

4 结束语

伴随着市场对单片机的需求不断扩大,单片机程序设计在社会中得到了广发的应用,为此,单片机设计公司对单片机程序设计越来越重视。为了迎合社会的需求,在单片机程序设计过程中,应该在吸收传统优秀经验的基础上,不断创新方法,提高设计质量,从而培养出更多社会适应性单片机程序设计人才。

参考文献

[1]黄贞,李俊雄,周朱武.Proteus软件在单片机实验教学中的应用[J].中国教育技术装备,2009(09).

[2]周红明,张萍珍.项目教学法在"单片机应用"教学中的实践[J].科教文汇(上旬刊),2009(04).

[3]周灵彬,张靖武.PROTEUS的单片机教学与应用仿真[J].单片机与嵌入式系统应用,2008(01).

作者单位

单片机程序设计范文第2篇

关键词:单片机 程序编制 模块执行 结构设置

中图分类号:TP368 文献标识码:A 文章编号:1007-9416(2014)05-0094-01

目前单片机的应用十分广泛,在众多行业中都担负起系统控制的任务,而单片机的功能实现则多数依靠应用程序的控制,所以针对单片机的程序编制问题就成为单片机应用的基础性问题,如何选择合适的编写结构以及方法等成为了研究的重点内容。

1 单片机程序结构设计的特征

单片机的程序编制应当从程序开发的语言入手,并针对不同的功能选择不同的程序结构,这样才能为程序编制打下良好的基础,因此在实际的操作中如何选择程序的结构模式就成为了编程的要务。随着计算机技术的成熟以及单片机的技术发展,结构化的程序设计方式被提出并应用。其主要是将程序编写纳入到模块模式下,利用结构标准化、模块化等来实现对程序的编制,利用模块化结构来简化编程的复杂程度。此类设计中是的是可重复利用性,可移植的标准性。简化程序的编制过程提高模块的利用率。从而降低出错的概率,提高单片机的应用效果。可以按照不同的单片机功能选择不同的模块,将各个模块的功能突出应用到系统中,并在特定的工作环境中解决特殊的问题。总是对软件结构的合理配置,理顺模块之间的关系,从而从宏观上完成对编程流程和结构的控制。从而实现对复杂问题的简化,提高单片机的编程效率,并提高对复杂问题的解决能力。

2 单片机的开发语言选择

在单片机的程序编制中C语言因为在应用上的优势而被广泛采用,方便的应用库函数容易实现复杂数据的结构。但是C语言不能在时序控制上获得优势,速度型算法上不易达到单片机的要求。但是随着C语言被纳入到编程范围后,其汇编混合编程的模式已经可以帮助弥补其语言上的缺点。随着单片机的调试技术的发展,单片机已经适应了C语言程序控制,从而为高级语言进入到编程中带来了可能。

3 单片机编程的常用程序结构

为了方便进行单片机的程序编制,通常可以将其程序划分为多种结构以此适应不同的功能需求。具体结构如下。

3.1 基本程序结构

其结构包括了初始化程序和工作程序两个部分,初始化程序负责在单片机上电后的复位,首先执行初始化程序,程序只要在工作前执行一次即可。初始化程序运行对个各种端口和变量、定时器、ADC等进行全面的检测和初始化。如果需要可以建立不同的初始化分支,对不同的终端进行检测和初始化,根据不同的条件来选择不同的初始化方式,比如冷启动和热启动的选择。主程序则是一个循环程序,这所执行的是单片机的工作内容,实现具体的功能,如检测、控制、通讯、人机交互等等。各个功能都是有子程序进行控制,主程序是控制调用这些程序的指挥者,以此方便模块化的程序编制和应用。

3.2 模块结构

在单机片程序中主程序负责的是模块调度工作,将实现功能的各个子程序进行合理调度,此时被调度的程序就是模块。这样的模块中所附加的是一定的功能性,采用模块化的程序结构可以方便程序多种功能的集成,即在不增加主程序难度的同时添加或者减少模块可以实现系统功能的改变,以此实现程序的优化,方便维护与降低出错率。

3.3 模块控制机制

调度主程序时不是所有的模块都被应用,所以模块在一段时间内应被控制,不是所有的循环中都需要所有模块参与。或者某些模块的执行不是经常性的而是在满足某些条件后才被执行。为了解决这个问题,可以给模块设定一个标志,模块在执行前应判断自身的标志位,只有标志位是可用的状态下才能执行相关的操作。如果标志位不可用则应进行返回程序,不执行对应的模块功能。

3.4 优先调用机制

主程序在调用模块的时候应有先后之别,因为模块运行的优先级将限制其应用,如果没有优先限制某些重要模块不能相应或者不及时。因此在调用中主程序应可以对模块的优先级进行分析与选择,按照不同的处理事件来区分模块的优先级。对模块功能的标志进行检测,对优先级较高的模块进行调用,然后查询后续功能模块并异常类推。如果出现不可用的情况则进行新一轮的检测并从优先级较高的模块开始。

3.5 前后台结构

前后台的结构是一种中断机制的引入,即按照实时性事件与突发事件进行差异化对待,实时性较高的事件被前置,让其在中断中响应,将实时性较低的事件和任务纳入到主要程序中,如显示刷新、扫描等等。形成一个以中断为界限的前后台执行程序结构。前后台的程序应按照大多数任务需求进行功能调度。在使用中应注意前后台任务结构的时候,尽可能减少中断服务程序的执行时间。可以在中断服务程序中设置一些标志,然后由后台程序检测标志来进行进一步处理。这样可以很大程度上避免前台程序和后台程序互相抢夺处理器资源,造成某些低优先级任务阻塞。目前随着单片机的发展,有些单片机的中断资源大为丰富,已经可以将所有的任务都可以通过中断来实现,这样我们就可以让中断承担全部工作,废除后台程序,除了只保留必要的初始化程序外就进人低功耗模式等待中断来处理其他任务。

4 结语

上述对单片机的程序编制结构进行了分析,从基础的结构类型出发分析了多种模式框架下,单片机程序执行的差异。同时说明多种结构不是独立存在的,而应在具体问题的解决中进行选择,选择合理而准确的程序结构,有利于单片机功能的实现,也可提高调度机制的合理性,从而有效的指挥单片机完成各种功能。

参考文献

[1]王玲.提高单片机程序设计有效性的策略探究[J].考试(综合版),2012(01):15-16.

[2]刘杰.论单片机程序设计[J].现代商贸工业,2011(07):156-157.

[3]杨打生,李泰.基于事件机制的一种单片机程序设计方法[J].商丘职业技术学院学报,2013(04):26-27.

单片机程序设计范文第3篇

[关键词]:红外遥控 解码 单片机

1红外遥控系统组成

通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括红外接收器、光电转换放大器、解调等。

2红外遥控发射和接收原理

按下遥控器的某一个键,遥控器会发出一连串经过调制后的信号,这个信号经过红外一体化模块接收后,输出解调后的数字脉冲,每个按键对应不同的脉冲,故识别出不同的脉冲就能识别出不同的按键。按键信息采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。

上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的,然后再通过红外发射二极管产生红外线向空间发射,如图3所示。

3单片机解码程序设计

红外一体化接收头输出信号连接到单片机外中断输入引脚,设置为下降沿中断方式。引导码解码过程只解码带数据的引导码,不对连发码引导码进行解码。这就要求使用过程中,长按操作不起作用。

关键解码流程设计如图4所示。

中断解码完成后,完成酥局梦弧V鞒绦蛑胁檠到完成标志,就对解码数据进行反码校验并进行对应的处理。

4效果与应用

以上设计的单片机解码程序,成功应用于万年历、计算器、电机控制、旋转LED广告灯灯各种单片机项目教学过程中,完全取代矩阵键盘进行操作,电路简单,程序可靠。稍有不足的是要占用一个外中断,并且在中断解码操作时,会占用CPU时间。

对于时序有严格要求的项目应用,可以考虑“外中断+定时器”的方式,在每个下降沿时进入中断,对数据进行处理。两次进中断的时间间隔采用定时器来记录,省略此前中断解码流程中设计的各种延时和等待操作,减少时间占用,提高CPU利用率。

参考文献:

[1]黄莺.单片机原理与应用.中国传媒大学出版社,2015.

单片机程序设计范文第4篇

关键词:C程序设计 单片机系统开发 教学方法

随着微电子技术的发展和广泛应用,基于单片机上的系统开发,C语言作为一种高级的编程语言,越来越受到人们的关注。现在,无论是嵌入式系统开发企业还是电子设计竞赛、毕业设计等,一般都以C语言为主要开发工具。结合单片机的系统资源,用C语言开发符合实际工程需要的单片机系统,对于编程者来说就有重要的意义。

1.C在单片机教学中的地位

C语言作为一种结构化的程序设计语言,它是程序开发工具中使用最广泛一门编程语言。C语言具有很强的功能性、结构性、可移植性。用C语言编写程序比汇编更符合人们的思考习惯,程序开发者可以摆脱与硬件不必要的接触,更专心地考虑程序的功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。由于它具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,采用结构化的、自顶向下、逐步求精的程序设计方法,将功能模块化,由不同的模块完成不同的功能。这样可使整个应用系统程序结构清晰,易于调试和维护。

2.单片机教学现状

单片机技术是现代电子工程领域一门飞速发展的技术,是现代电子技术中的一项不可缺少的重要技术。随着技术的不断进步和日益普及,单片机技术已渗透到各个领域,影响着我们的日常生活和工作。因此电子技术及相关专业的学生学习单片机技术越来越成为社会发展的需求。当前,各大高校的电子、计算机类专业均开设单片机课程。

《单片机》是我院电子系一门实践性极强的专业主干课程,是我校电子系重点建设课程之一,是本专业学生的必修课程。为了提高我系单片机教学效果,我们对单片机教学进行了大胆改革,使用C语言开发单片机,且课程的设计打破了学科体系的框架,将单片机和C语言的相关知识和技能按“项目”进行整合,并将《C程序设计》课程列为电子类专业核心基础课程之一。因此,《C程序设计》课程教学效果的好坏,将直接影响学生后续专业课程的学习。

从近几年我系《C程序设计》课程的教学效果来看,学生普遍反映该课程的学习比较困难,课程的语法知识较多,理解和记忆都不太容易,即使记住了语法知识也不能灵活应用;不知道学习C语言究竟有何用处,学完C后不能很好地利用C进行单片机小型系统的开发,缺乏知识的灵活应用能力。因此,根据以往单片机教学所得经验,我觉得教师有必要在《C程序设计》课程的教学过程中在以下几个方面引起足够的重视,并在教学中加以改进,为后续单片机课程的学习打下坚实的基础。

3.《C程序设计》课程教学方法探索

3.1上好每堂课,激发学生的学习兴趣

语言程序设计教学被认为是一种需要师生双方改进的一门课程,因为大多数语言教材中通常先给出一般的语法格式,然后逐步讲解语法要点,再给出实例。这种顺序灌输会使学生失去学习的兴趣,所以我认为在课堂教学环节应采取以学生为主体、以教师为主导的教学模式,要求学生自己先看有关知识点,并识记。教师采取精讲实例,在这过程中引出相关知识点,然后再举一类似实例让学生自己分析,巩固知识点。教师应把主要精力放在算法的分析和各语句语法的具体应用上,同时培养学生自学能力,采取互动机制,迫使学生主动学习。

3.2注重演示,强化实验,提高实践操作能力

因为授课对象是一年级新生,所以教师多用通俗易懂的语言进行讲解,多举实例,使学生容易理解和消化。在教学过程中,尽量采用讲解、演示方法,如在讲解经典算法后,按照理论方法所述,用DEV C++软件进行编程演示,从而加深学生对教学内容的理解。

在教学过程中,教师应将理论知识与实验内容进行整合,根据教学内容并结合实际应用设置实验题目,让每个学生独立完成。遇到学生不能解决的问题,教师应利用多媒体进行演示解决问题的过程,从而加深学生对教学内容的理解并提高实践操作能力。

3.3培养良好的编程风格

3.3.1优化程序

由于在许多工业测控领域中的嵌入式系统都采用单片机开发,它们所需要的计算和控制工作日趋复杂,其中软件的设计是最复杂和困难的,工作量大,特别是对于控制系统,设计人员需要考虑单片机的软硬件资源分配,但是单片机系统是一种资源十分有限的系统。这主要表现在CPU和片内结构简单、程序存储器资源的不足。因此在用C语言进行单片机开发时,如何使用好这些有限的资源就显得十分重要。虽然C语言具有许多的优点,但是生成的代码相对要长,基本多占用存储空间20%―50%。因而,在“C程序设计”课程教学中,教师不仅要教会学生如何编写程序,而且应在教学过程中向学生灌输优化代码的思想,让学生从大一开始就有开发项目的一些经验。

3.3.2合理选用数据类型

C语言在程序开发中提供了的丰富的数据类型,尤其是关于用户界面开发和一些动画与图像技术的实现。但是在开发单片机系统时,我们要按照实际需要,合理地选用数据类型。C语言中有Char等少数的数据类型是机器语言直接支持的数据类型,用此类数据类型的语句所生成的代码较短,而其它的数据类型如整型、浮点型等数据要有一定的内部程序或内部函数的支持,相对来说较复杂的数据类型的语句生成的代码也复杂,不利于转化成单片机的代码。因此,在“C程序设计“教学过程中,要向学生适当说明选择合适数据类型的好处,并尽可能地减少程序中使用的数据类型的种类,为以后学生的单片机学习打好基础。

3.3.3灌输模块化程序设计思想

在普通微型计算机上进行C语言程序开发设计时,只需考虑程序功能实现,而不必考虑程序代码的长短。但是在单片机上进行C语言程序设计就必须考虑系统的硬件资源,要求设计的软件程序结构是合理、紧凑和高效的。同一任务,有时用主程序完成是合理的,但有时需子程序效率最高,占用资源最少;有时并不是程序的算法越简单、长度越短越好,由于有一些算法要调用一些内部的子程序和函数,生成的机器代码质量反而较低。不同的算法对程序代码效率影响很大。因此,在进行“C程序设计”教学时,教师应适当向学生灌输模块化程序设计的思想,在不影响程序功能实现的情况下可以采用一些优化算法,并且把程序分成若干个功能独立的模块,为学生今后的单片机项目开发做好铺垫。

4.结语

单片机系统采用C语言开发与设计,极大地促进了单片机在生产、生活各个领域的应用,提高了程序开发效率。因而,C语言学习效果的好坏,对今后单片机课程的学习具有深远的影响。除了讲解C语言的基本语法外,更重要的是改善教学方法,利用各种方法培养学生的学习兴趣,并向学生灌输良好的编程风格与编程方法,为今后的单片机课程的学习打下良好的基础。

参考文献:

[1]向艳.“C程序设计”课程教学体系和模式探讨[J].计算机教育,2010,(3):112-114.

[2]董蕴宝,潘旭君.浅谈C语言在单片机中的程序设计[J].科技信息,2009,(13):59-67.

[3]张洪静.电类专业C语言教学探讨[J].电脑知识与技术,2010,(29):8280-8281.

[4]林益平,赵福建.单片机C语言课程教学的探索与实践[J].电气电子教学学报,2007,(2):104-106.

[5]石爱荣.C语言程序设计课程教学探析[J].警官教育认论坛,2007.2:158-160.

[6]谭浩强.C语言程序设计[M].清华大学出版社,2004.

单片机程序设计范文第5篇

关键词:太阳能;程序设计;单片机

中图分类号:TP311.52

随着能源日趋紧张,新能源的开发利用越来越成为当务之急,而太阳能在各种新能源中日益突显。太阳能热水系统由于具有简单易行和效率高的优点,在我国取得了前所未有的发展。而如何设计智能高效的系统,更为人们所重视。基于此本文采用定温上水与温差循环相结合的运行方式,设计了智能热水系统工作过程及程序设计。

1 热水系统工作过程程序设计

根据太阳能热水控制系统的要求,需要实现系统的定温上水、温差循环、水箱上水、辅助加热、防冻保护及报警的控制,所以本程序对以上各个过程作了一一对应的程序模块,现概述如下。

1.1 定温上水程序模块设计。该模块的功能是实现太阳能热水系统定温上水的控制。当系统检测到集热器出口温度T1高于设定温度5℃时,并且系统不在防冻状态,水箱水位低于90%的情况下,进行定温上水,即通过电磁阀D1上水,同时使定温上水指示灯亮,直到集热器出口温度T1等于设定温度或水箱已满时停止上水,使定温上水指示灯灭。完成定温上水。[1]

1.2 温差循环程序模块设计。该模块的功能是实现太阳能热水系统温差循环的控制。当系统检测到集热器出口温度T1高于水箱水温T2 8℃,并且系统不在防冻状态,也不在定温上水状态时,可以进行温差循环,即启动温差循环泵P1,同时使温差循环指示灯亮,直到集热器出口温度T1高于水箱水温T2 2℃时停止温差循环,使温差循环指示灯灭。[2]

1.3 水箱上水程序模块设计。该模块的功能是实现水箱上水控制,分恒温上水和低温上水两部分,在用时段内时进行恒温上水,不在用水时段内时进行低温上水。在程序中首先调用时间比较程序,比较当前时间是否在设定的时段内,判断是进行恒温上水还是低温上水。在恒温上水时,根据是否在防冻状态,选择上水电磁阀D1或D4,在防冻状态选择D4,否则选择D1,同时点亮恒温上水指示灯,并判断当前温度是否低于设定温度,或水位是否已达到特定水位。如果是,则关闭电磁阀D1或D4,使恒温上水指示灯灭;在低温上水时,同样选择上水电磁阀D1或D4,点亮低温上水指示灯亮,并判断水位是否已达到特定水位。如果是,则关闭电磁阀D1或D4,使低温上水指示灯灭。

1.4 时段温控辅助加热程序模块设计。该程序的功能是实现辅助加热的控制,程序的工作概述如下:首先,判断水箱水温是否低于设定温度2℃,并且判断水箱水位是否高于下限水位,若是,则调用时间比较函数,判断是否在用水时段内,若不是,则不启动锅炉,若是,则启动锅炉,并使辅助加热指示灯亮。其次,判断水箱水温是否高于设定温度8℃或者水箱水位低于下限水位,若是,则停止辅助加热,指示灯灭。

1.5 防冻保护程序模块设计。该程序的功能是实现系统防冻控制,程序的工作概述如下:首先,判断防冻标志Pre_Fro_Flag是否有效,若无效,则进一步判断管路温度T3是否低于临界防冻温度(4℃),若是,则打开电磁阀D2与D5,进行回水,并延时10min。充分放水后再关闭电磁阀D2与D5。其次,判断管路温度T3是否高于10℃,若是则清除防冻标志。具体功能见防冻保护函数。

1.6 报警程序模块设计。该程序的功能是实现各种报警的控制,本系统的报警包括集热器温度上限报警,水箱水位上限报警,水箱水位下限报警和防冻报警。程序介绍如下:(1)判断集热器温度T1是否大于其上限报警温度,如果是,则使集热器温度上限报警指示灯亮,并且响铃;如果不是,则使集热器温度上限报警指示灯灭,并且灭铃。(2)判断水箱水位是否达到上限报警水位,如果是,则使水箱水位上限报警灯亮,并且响铃;如果不是,则使水箱水位上限报警灯灭,并且灭铃。(3)判断水箱水位是否达到下限报警水位,如果是,则使下限报警水位指示灯亮,并且响铃;如果不是,则使下限报警水位指示灯灭,并且灭铃。(4)判断管路温度是否低于其报警温度,如果是,则使防冻指示灯亮,并且响铃;如果不是,则使防冻指示灯灭,并且灭铃。(5)最后输出报警状态。

2 主程序工作过程

2.1 系统初始化。系统初始化包括定时器T0初始化,外部中断Int0的初始化,DS12887的初始化,8255初始化。(1)键盘扫描及按键处理。判断是否有键按下,若有则进行按键处理。按键功能包括移位键,加1键,减1键,校时键,温度设置键,时间段设定键,取消报警键,确认键及消隐键(复合键)。(2)系统启动。单片机读取开关状态,判断是否启动系统。(3)数据采集及处理。通过ADC0809采集集热器出口温度,水箱水温,管路温度,水箱水位四个模拟量。然后进行滤波,和数据处理。(4)自动与手动的选择。单片机读取开关状态,判断是自动还是手动。(5)手动操作。通过读取外部开关的状态,执行相应的操作,包括系统的启停,集热器上水,水箱上水,集热器排空,温差循环,辅助加热循环和锅炉启停。手动操作程序流程如图1所示。(6)系统报警。报警包括集热器温度上限报警,水箱水位上限报警,水箱水位下限报警,防冻报警。(7)定温上水。当集热器温度T1高于设定温度5℃,并且不在防冻状态,水箱水位低于90%时,进行定温上水。(8)水箱上水。分恒温上水和低温上水两部分,在用时段内时进行恒温上水,不在用水时段内时进行低温上水。(9)温差循环。当热器出口水温T1比储热水箱底部温度T2高8℃时,温差循环泵启动,系统开始循环,直至T1高于T2 2℃ 时, 温差循环泵停止工作,系统完成温差循环集热。(10)辅助加热。当储热水箱水温T2低于设定值A 2℃时,且处于用水时段内时,水箱水位高于下限水位时进行辅助加热。(11)防冻保护。当管路温度是否低于4℃时,进行排空防冻,并设置防冻标志。

3 结束语

本文以单片机为核心,对智能太阳能热水系统的主程序和热水系统运行工况进行了详细设计,经实验检验,本系统可以做到高效地利用太阳能获得热水,具有很大的实用意义。

参考文献:

[1]李子剑.太阳能锅炉供热水系统比较研究[J].科技风,2009(12):228.

[2]高军林.高校太阳能热水系统集成与优化[J].太阳能,2006(4):26-28.

单片机程序设计范文第6篇

状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。

比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识。

进一步看,击键动作本身也可以看做一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态。

同样,一个串行通信的时序(不管它是遵循何种协议,标准串口也好、I2C也好。也不管它是有线的、还是红外的、无线的)也都可以看做由一系列有限的状态构成。

显示扫描程序也是状态机;通信命令解析程序也是状态机,甚至连继电器的吸合/释放控制、发光管(LED)的亮/灭控制又何尝不是个状态机。

当我们打开思路,把状态机作为一种思想导入到程序中去时,就会找到解决问题的一条有效的捷径。有时候用状态机的思维去思考程序该干什么,比用控制流程的思维去思考,可能会更有效。这样一来状态机便有了更实际的功用。

程序其实就是状态机。

也许你还不理解上面这句话。请想想看,计算机的大厦不就是建立在“0”和“1”两个基本状态的地基之上么?

状态机的要素

状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:

①现态:是指当前所处的状态。

②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。

③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。

④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

如果我们进一步归纳,把“现态”和“次态”统一起来,而把“动作”忽略(降格处理),则只剩下两个最关键的要素,即:状态、迁移条件。

状态机的表示方法有许多种,我们可以用文字、图形或表格的形式来表示一个状态机。

纯粹用文字描述是很低效的,所以就不介绍了。接下来先介绍图形的方式。

状态迁移图(STD)

状态迁移图(STD),是一种描述系统的状态、以及相互转化关系的图形方式。状态迁移图的画法有许多种,不过一般都大同小异。我们结合一个例子来说明一下它的画法,如图1所示。

①状态框:用方框表示状态,包括所谓的“现态”和“次态”。

②条件及迁移箭头:用箭头表示状态迁移的方向,并在该箭头上标注触发条件。

③节点圆圈:当多个箭头指向一个状态时,可以用节点符号(小圆圈)连接汇总。

④动作框:用椭圆框表示。

⑤附加条件判断框:用六角菱形框表示。

状态迁移图和我们常见的流程图相比有着本质的区别,具体体现为:在流程图中,箭头代表了程序PC指针的跳转;而在状态迁移图中,箭头代表的是状态的改变。

我们会发现,这种状态迁移图比普通程序流程图更简练、直观、易懂。这正是我们需要达到的目的。

状态迁移表

除了状态迁移图,我们还可以用表格的形式来表示状态之间的关系。这种表一般称为状态迁移表。

表1就是前面介绍的那张状态迁移图的另一种描述形式。

①采用表格方式来描述状态机,优点是可容纳更多的文字信息。例如,我们不但可以在状态迁移表中描述状态的迁移关系,还可以把每个状态的特征描述也包含在内。

②如果表格内容较多,过于臃肿不利于阅读,我们也可以将状态迁移表进行拆分。经过拆分后的表格根据其具体内容,表格名称也有所变化。

③比如,我们可以把状态特征和迁移关系分开列表。被单独拆分出来的描述状态特征的表格,也可以称为“状态真值表”。这其中比较常见的就是把每个状态的显示内容单独列表。这种描述每个状态显示内容的表称之为“显示真值表”。同样,我们把单独表述基于按键的状态迁移表称为“按键功能真值表”。另外,如果每一个状态包含的信息量过多,我们也可以把每个状态单独列表。

④由此可见,状态迁移表作为状态迁移图的有益补充,它的表现形式是灵活的。

⑤状态迁移表优点是信息涵盖面大,缺点是视觉上不够直观,因此它并不能取代状态迁移图。比较理想的是将图形和表格结合应用。用图形展现宏观,用表格说明细节。二者互为参照,相得益彰。

用状态机思路实现一个时钟程序

接下来,我将就状态机的应用,结合流程图、状态迁移图和状态迁移,举一个实际例子。下面这张图是一个时钟程序的状态迁移图,如图2所示。

把这张图稍做归纳,就可以得到它的另一种表现形式――状态迁移表,如表2所示。

状态机应用的注意事项

基于状态机的程序调度机制,其应用的难点并不在于对状态机概念的理解,而在于对系统工作状态的合理划分。

初学者往往会把某个“程序动作”当作是一种“状态”来处理。我称之为“伪态”。那么如何区分“动作”和“状态”。本匠人的心得是看二者的本质:“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了,而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。

初学者的另一种比较致命的错误,就是在状态划分时漏掉一些状态。我称之为“漏态”。

“伪态”和“漏态”这两种错误的存在,将会导致程序结构的涣散。因此要特别小心避免。

更复杂的状态机

前面介绍的是一种简单的状态结构。它只有一级,并且只有一维,如图3所示。

如果有必要,我们可以建立更复杂的状态机模型。

1 多级状态结构

状态机可以是多级的。在分层的多级状态机系统里面,一个“父状态”下可以划分多个“子状态”,这些子状态共同拥有上级父状态的某些共性,同时又各自拥有自己的一些个性。

在某些状态下,还可以进一步划分子状态。比如,我们可以把前面的时钟例子修改如下:

把所有和时钟功能有关的状态,合并成1个一级状态。在这个状态下,又可以划分出3个二级子状态,分别为显示时间、设置小时、设置分钟;

同样,我们也可以把所有和闹钟功能有关的状态,合并成1个一级状态。在这个状态下,再划分出4个二级子状态,分别为显示闹钟、设置“时”、设置“分”、设置鸣叫时间。

我们需要用另一个状态变量(寄存器)来表示这些子状态。

子状态下面当然还可以有更低一级的孙状态(子子孙孙无穷尽也),从而将整个状态体系变成了树状多级状态结构,如图4所示。

2 多维状态结构

状态结构也可以是多维的。从不同的角度对系统进行状态的划分,这些状态的某些特性是交叉的。比如,在按照按键和显示划分状态的同时,又按照系统的工作进程做出另一种状态划分。这两种状态划分同时存在,相互交叉,从而构成了二维的状态结构空间。

举一个这方面的例子,如:空调遥控器,如图5所示。

同样,我们也可以构建三维、四维甚至更多维的状态结构。每一维的状态都需要用一个状态变量(寄存器)来表示。

无论多级状态结构和多维状态结构看上去多么迷人,匠人的忠告是:我们依然要尽可能地简化状态结构,能用单级、单维的结构,就不要给自己找事,去玩那噩梦般的复杂结构。

简单的才是最有效的。

结束语

单片机程序设计范文第7篇

关键词 单片机;C语言;TG12864;液晶显示

中图分类号:TP271 文献标识码:A 文章编号:1671—7597(2013)031-017-02

1 TG12864液晶原理

1.1 TG12864显示原理

点阵式LCD其显示原理是控制LCD点阵中点的亮暗,亮和暗的点阵按一定规律可以组成汉字,组成一幅图形和曲线等。

1.2 TG12864内部结构及相关指令

1.2.1 TG12864内部结构

TG12864是一种图形点阵液晶显示器,它主要由行驱动器、列驱动器及128×64全点阵液晶显示器组成,有20个外部引脚。可以由单片机控制显示8×4个16×16点阵汉字。

1.2.2 TG12864相关指令

该类液晶显示模块的指令系统比较简单,总共有七种。

1)显示开关指令。

功能:设置屏幕显示开/关,DB0=1,开显示;DB0=0,关显示。DB7~DB0=0x3f,开显示;DB7~DB0=0x3e,关显示。

2)显示起始行设置。

功能:显示起始行是由Z地址计数器控制的,该命令自动将A0~A5位地址送入Z地址计数器,起始地址可以是0~63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫面同步,当扫描完一行后自动加一。DB7~DB0=0xc0,显示从0行开始。

3)页设置。

功能:页地址存储在X地址计数器中,A2~A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号RST可把页地址计数器内容清零。DB7~DB0=0xb8,显示从0页开始。

4)列地址设置。

功能:列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DDRAM进行读写操作后,Y地址自动加一。DB7~DB0=0x40,显示从0列开始。

5)读状态。

功能:读忙信号标志位BF,复位标志RST以及显示状态(ON/OFF)bf=1,内部忙;bf=0,内部空闲;res=1,正处于复位初始化状态,res=0,正常状态。

6)写数据。

写数据到DDRAM,DDRAM是存储图形数据的,写数据到DDRAM前,要先执行设置页地址及设置列地址命令。

7)读数据。

从DDRAM读数据,读数据前,要先执行设置页地址及设置列地址命令。

2 应用程序设计

#include

#define uchar unsigned char

#define uint unsigned int

#define disp_on 0x3f //定义开显示

#define disp_off 0x3e //定义关显示

#define dis_x 0xb8 //定义显示0页

#define dis_y 0x40 //定义显示0列

#define dis_z 0xc0 //定义显示0行

#define db P0

sbit rs=P2^0;

sbit rw=P2^1;

sbit e=P2^2;

sbit cs1=P2^3;

sbit cs2=P2^4;

sbit rst=P2^5;

sbit bf=P2^6;

sbit res=P2^7;

uchar code tab[]={/*青海工业职业学校*/0x01,0x00,0x01,0x00,0x3F,0xF8,0x01...};

void check_busy(void);

void chushihua(void);

void delay(uint);

void wr_lcd(uchar,uchar);

void clear_lcd(void);

void display(void);

void _disp(uchar,uchar,uchar,uchar,uchar,uchar *);

void main() //主程序

{chushihua();display();while(1);}

void chushihua(void) //液晶初始化函数

{rst=0;delay(50);rst=1;

cs1=1;cs2=1;

wr_lcd(0,disp_off);

wr_lcd(0,disp_on);}

void wr_lcd(uchar i,uchar j) //写液晶函数

{check_busy();

rs=i;rw=0;

db=j;e=1;

delay(1);

e=0;}

void check_busy(void) //检测忙闲函数

{db=0xff;

rs=0;rw=1;

delay(1);

e=1;

while(res||bf==1);

e=0;}

void clear_lcd(void) //清屏函数

{uchar i,j;cs1=1;cs2=1;

wr_lcd(0,disp_on);

for(j=0;j

{wr_lcd(0,dis_x+j);

wr_lcd(0,dis_y);

wr_lcd(0,dis_z);

for(i=0;i

{wr_lcd(1,0x00);

wr_lcd(1,0x00);}

}

}

void _disp(uchar ye,uchar lie,uchar hang,uchar ls,uchar zs,uchar *ptr1) //液晶显示函数

{ uchar i,j,m,n,a;

wr_lcd(0,disp_on);

for(m=0;m

{for(n=0;n

{for(j=0;j

{ wr_lcd(0,dis_x+j+ye+m*2); //显示起始页设置

wr_lcd(0,dis_z); //显示起始行设置

wr_lcd(0,dis_y+lie+n*ls); //显示起始列设置

a=j*ls+n*2*ls+m*zs*2*ls; //控制字的显示数组位

for(i=0;i

{wr_lcd(1,*(ptr1+a+i));}

}

}

}

}

void display(void) //显示主程序

{

uchar *ptr;

clear_lcd();

cs1=1;cs2=0; //开左屏显示青海工业

ptr=&tab[0]; //取数组首地址

_disp(0,0,1,16,4,ptr); //显示从0页、0列开始,显示一行,每个字16列显示2个字

cs1=0;cs2=1; //开右屏显示职业学校

ptr=&tab[128]; //取数组的第128个元素地址

_disp(0,0,1,16,4,ptr); //显示从0页、0列开始,显示一行,每个字16列显示2个字

}

void delay(uint x) //延时函数

{uchar i;

for(;x>0;x--)

for(i=0;i

以上程序,如果要从3页,4列开始,在左屏显示2行,每个字16列,共显示4个字青海工业,只要将显示主程序改为:

void display(void)

{uchar *ptr;

clear_lcd();

cs1=1;cs2=0;

ptr=&tab[0];

_disp(3,4,2,16,2,ptr);}

上述液晶显示程序,应用起来灵活、方便,要将汉字显示在液晶的什么位置,只需修改显示主程序中_disp(0,0,1,16,4,ptr)函数中的数据即可。

3 结束语

用C语言程序来对液晶显示模块进行编程控制,编程效率高,思路清晰,处理问题灵活方便,相对汇编语言有明显的优势。

参考文献

单片机程序设计范文第8篇

摘要:讨论如何利用软件控制LM3033B-0BR3液晶显示模块时序,采用C51语言编程,驱动液晶模块实现并行传输方式的字符、汉字以及图形显示。具体阐述了LM3033B-0BR3液晶显示模块与单片机AT89S52的并行接口电路和软件编程方法。

关键词:LM3033B-0BR3液晶显示模块;ST7920控制器;AT89S52单片机;C51编程

中图分类号:TN40文献标识码:A

Parallel Interface Technique between Chinese Graphic 12864 Dot Matrix LCD Module and 51 Singlechip and C51 Programming

LI Zhi-guang1,2,LI Xiao-quan3,HUAI Jun-xia1,2

(1.Department of Applied Physics, Hebei University of Technology, Tianjin 300130, China;2.Shenzhen Topway Technology CO.,LTD., Shenzhen 518057, China; 3.Tianjin Light Industry Design Institute,TianJin 300193,China)

Abstract: How to control the time sequence of LM3033B-0BR3 LCD module by C51 programming was discussed in this paper. In this way the LCD module was driven by parallel communication and the characters and graphics could be displayed well. The parallel interface circuit and the soft design between LM3033B-0BR3 LCD module and AT89S52 were narrated in detail.

Keywords:LM3033B-OBR3 LCD module;ST7920 controller;AT89S52 single chip micyoco; C51 programming

引言

显示器是人类与应用设备沟通的重要界面,近年来,随着电子技术的飞速发展,液晶显示技术在实际生活中得到了广泛应用。液晶显示模块以其微功耗、体积小、显示内容丰富、模块化以及接口电路简单等诸多优点在科研、生产和产品设计等领域中发挥着越来越重要的作用 [1-2]。LM3033B系列液晶显示模块是深圳TOPWAY公司生产的中文显示模块中的一员。采用了台湾的ST7920控制芯片,并提供了中文字库,为中文显示开发方面带来了更多的方便。本文以LM3033B-0BR3为例介绍了12864点阵液晶显示模块的引脚、结构、功能,详述了与AT89S52单片机的硬件接口电路及有关软件编程方法。

1 LM3033B-0BR3特点及操作

1.1字符显示

每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:显示自定义字型其代码分别是0000H、0002H、0004H和0006H共4个,显示半宽ASCII码字符为02H~7FH,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如表1所示[3]。

1.2图形显示

绘图显示RAM提供64x32个位元组的记忆空间(由扩充指令设定绘图RAM位址),在更改绘图RAM时,由扩充指令设定GDRAM位址先设置垂直位址,再设置水平位址(连续写入两个位元组的资料来完成垂直与水平的坐标位址),再写入两个8位的资料到绘图RAM,而位址计数器(AC)会自动加一,整个写入绘图RAM的步骤如下:

a.关闭绘图显示功能(在写入绘图RAM期间,绘图显示必须关闭)[4];

b.先将垂直的位元组(Y)写入绘图RAM位址;

c.再将水平的位元组(X)写入绘图RAM位址;

d.将D15~D8写入到RAM中;

e.将D7~D0写入到RAM中。

图1 绘图RAM与屏幕显示区域的对应关系

1.3 LM3033B-0BR3的操作指令

LM3033B-0BR3提供两套控制命令:基本指令集和扩充指令集。基本指令集包括了对液晶LM3033B-0BR3的基本操作,如判断控制器忙标志、清除显示、设定显示的地址、写数据和读数据等。而扩充指令集则包括设置睡眠模式,设置图形显示、设置反白、设置滚动等功能,可以进一步满足低功耗的需求,使显示效果更丰富,为使用者提供更方便的环境。

单片机对LM3033B-0BR3的操作过程为:单片机先确认ST7920内部处于非"忙"状态。即读取BF位,当BF为0时,LM3033B-0BR3才可接收新的指令或数据。在操作时,LM3033B-0BR3在单片机的时钟信号的控制下,数据通过数据线传送给LM3033B-0BR3,当LM3033B-0BR3成功接收到数据后,转入内部时钟控制,封锁I/O口缓冲器,置"忙"标志。ST7920根据接收数据中的RW和RS位判断所接收到的是数据还是指令,并进行相应的处理。处理完成后,撤消I/O口缓冲器的封锁,"忙"标志清零。

2 单片机与LM3033B-0BR3的接口电路

一般液晶显示模块与单片机的接口分为直接访问方式和间接控制方式,间接控制方式还分为一位串行、4位并行以及8位并行。本文采用的AT89S52和液晶LM3033B-0BR3模块的接口电路如图2所示。由于LM3033B-0BR3采用并口通信,外接电路简单,与单片机连接采用间接连接的方法,即用I/O口直接与LCD数据线和控制线相连,其特点是简单、直观、操作方便。在此电路中,采用软件模拟液晶的时序,达到正确显示的目的。

图2 AT89S52和液晶LM3033B-0BR3模块的接口电路及LM3033B-0BR3引脚功能

3 液晶显示C51程序设计

对LM3033B-0BR3的软件编程采用Medwin 语言开发,主要包括两部分,一部分是给液晶写指令,另一部分是给液晶写数据。有了这2个基本的子程序,就可以构造出各种实用的显示子程序。由于液晶内部自带汉字模块,只需发送汉字对应的代码就可以实现汉字的显示,其代码可以在ST7920模块的资料中查找。对于图形和曲线显示的原理类似,只需要设置好相应的水平地址和垂直地址,并把相应的图形编码写入液晶模块,就可显示出所要显示的内容[5]。

写命令到LCD:

void WRCMD(uchar cmdcode)

{

chk_busy();

RS=0;

RW=0;

E=1;

lcd_bus=cmdcode;

E=0;

}

写数据到LCD:

void WRData(uchar Dispdata)

{

chk_busy();

RS=1;

RW=0;

E=1;

lcd_bus=Dispdata;

E=0;

}

初始化程序:

void Init()

{

RES=1;

RES=0;

delay(1);

RES=1;

delay(1);

WRCMD(0x30); //选择8位并行

WRCMD(0x30); //选择8位并行

WRCMD(0x0c); //开显示(无游标、不反白)

WRCMD(0x01); //清除显示

WRCMD(0x04); ///shift=0,AC加1

}

4 结论

在单片机与液晶的接口中,关键是要满足液晶的时序要求;在软件编程中,关键是要进行正确的初始化、操作及写入显示内容的代码。以上接口电路和相应的程序已经通过调试,并在实际中得到应用。由ST7920构成的LM3033B-0BR3液晶显示模块与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多。因此,LM3033B-0BR3液晶显示模块将得到广泛的应用。

参考文献

[1]杨应平,石城,蒋爱湘,李振华. 图形点阵液晶显示模块与51系列单片机的接口设计[J].现代显示, 2006,(5):41-45.

[2]李良成,张永顺,张. 基于MSP430单片机的液晶显示[J]. 现代显示,2007,(5):32-33.

[3]深圳市拓普微科技开发有限公司. LM3033B(8位并行接口)液晶显示模块应用参考[R]. 2006.1.

[4]洪家平. 中文图形显示控制芯片ST7920的原理与应用[J]. 国外电子元器件, 2005,(1):38-40.

[5] 马成,何培祥,李庆东. 图形点阵式液晶显示模块与51单片机的接口设计[J]. 应用天地,2007,(5):76-78.

单片机程序设计范文第9篇

要想完成程序设计,需要稳固的C语言基础知识和灵活的逻辑思维。而稳固的C语言基础知识要依赖英语基础。灵活的逻辑思维要有数学基础。英语、数学恰恰是高职学生薄弱的地方。这给单片机的C语言教学带来了不小的阻碍。那么,怎样在薄弱英语和数学基础上,提高单片C语言教学效果便值得研究和探讨一番了。

一、学――软、硬穿插

传统的单片机C语言教学中,往往是先脱离单片机学习C语言程序设计。学生普遍反映该课程的语法知识较多,理解和记忆都不太容易,即使记住了语法知识也不能很好地利用C语言进行单片机小型系统的开发。因此,我们以具体项目为基础将C语言知识穿插在整个单片机硬件教学中。比如,讲解完最小系统后,给学生一个项目《点亮LED灯》。之所以选择这个项目是因为它简单,上手快。它能让学生带着轻松的心情走入单片机应用之门。利用此次设计主要是给学生灌输C语言的基本结构,从而让学生体会单片机的控制意义。之后可以在跑马灯中穿插for语句知识;在按键设计可以讲if、switch语句;在数码管显示中学会一维数组等。在软硬件穿插学习过程中,教师应选择什么项目,项目中应准备哪些C语言知识,教师应仔细考量。项目中包含的C语言知识不用面面俱到,应以实用、够用为度。

二、先读后改――被动变主动

在学之后,学生有了单片机的应用经历,也累积了的一些C语言知识。但是由于英语知识薄弱,C语言关键字、格式记不住。程序设计的逻辑思维累积不够。学生独立设计程序还没办法实施。总是以老师讲,学生做的模式上课,学生的积极性调动不起来。怎么将学生被动接受变成主动学习?

继学之后,采用先读后改的教学方式。读――读程序。设计项目后,由学生上网搜集参考程序,然后读懂参考程序。以这样的方式来完成项目,一来可以锻炼学生信息收集,和信息筛选的能力,这也是我们希望学生能有拥有的一种能力。二来在读程序的过程中可以强化在学的过程中建立起来的C语言知识的模糊记忆。三来在读的过程可以学习一些新颖设计思路。这些设计思路不再拘泥于任课教师,可以激发学生程序设计的创新思维。

读懂程序之后就可以进行程序改造了。网上搜集的程序往往不完全符合自己的设计要求。这样就要求学生在读懂程序的基础上,进行二次改造,变成自己的成果。

单片机程序设计范文第10篇

关键词:机器人;项目驱动;创新实践

中图分类号:G642 文献标识码:A

文章编号:1005-913X(2015)04-0077-02

一、引言

进入21世纪以来,随着国家经济的飞速发展和城市化进程的加快,城市轨道交通进入大发展时期。前瞻产业研究院的《2015-2020年中国城市轨道交通行业市场前瞻与投资战略规划分析报告前瞻》研究显示:2013年,我国城市轨道交通运营里程为2408公里,同比增长17.01%。城轨交通运营线路条数为81条,比上年增加了12条。城市轨道交通的高速发展对轨道交通专业学生的水平和素质也提出了更高的要求。《C语言程序设计》和《单片机原理与应用》课程是城市轨道交通专业群中非常重要的专业核心基础课程,对其教学内容、教学方法的改进,已经成为轨道交通专业人才培养中普遍关注和重点研究的课题。

二、现状和存在的问题

(一)课程的教学课时偏少

教学课时偏少主要体现在两个方面:一是目前我国高职院校的学制一般是2+1或2.5+0.5年,学生在校时间较短,每门课不可能安排过多课时;二是高职院校学生的学习基础相对较差,导致他们接受知识较慢,每堂课讲授的内容不可能太多。正因如此,导致了在实际教学中理论课时和实践课时的不足,教师只能传授一些最基础的知识,没有时间和精力去提高学生应用知识解决实际问题的工程实践能力。

(二)学生的学习积极性不足

有些学生认为学习《C语言程序设计》和《单片机原理与应用》既抽象又枯燥,不如学习其它一些课程生动直观;有的学生是因为学习这些课程需要较强的抽象思维和逻辑思维能力,还需具备一定的数理、英语基础,因而在学习的过程中显得力不从心,不能掌握正确的学习方法和思维方式,从而对学习这两门课程产生了一种畏惧心理。

(三)实践教学环节不能满足教学的要求

城市轨道交通专业群本身就是技术应用专业,而且高职院校是以提高工程实践能力为主的职业教育。然而,现今高职院校所用的相关课程的教材,存在的普遍问题就是实践性教学内容严重不足,课程中的实践性教学多是验证性的实验,而具有实用性、创新性和职业性的基于工作过程的实训项目较少。

(四)教学方法落后、考核方式单一

高职课程一般采用的教学方法是教师课上讲授加学生实验的形式,教师在理论课上常常采用“填鸭式”教学,学生很少有机会发挥自身的主观能动性;实验时学生也仅仅是对书本上现有的一些实例进行验证调试,一旦调试成功就完成任务。这种教学方法根本不能让学生掌握如何从一个实际问题入手分析问题、解决问题。另外,单一的笔试考核方式也使教师和学生忽视了实践课的教学环节,从而导致现今的课程教学不能满足高职教育发展的需求。

三、课程教学创新实践的目的、意义和措施

第一,改革原有的理论和验证性试验相结合的教学体系,构建创新式、相互有机联系、基于实际工程项目开发的教学体系。

第二,激发学生学习《C语言程序设计》和《单片机原理与应用》的兴趣和积极性,充分调动起学生的主观能动性。

第三,提高城市轨道交通专业群及相关专业学生分析问题、解决问题的能力,并且加强了他们在工程实践中的应用能力。

第四,形成一套完整的,便于学生理解和掌握,基于机器人项目驱动的《C语言程序设计》和《单片机原理与应用》讲义,并运用于实际的教学。

通过将单片机的知识和C语言程序设计的知识融入到机器人项目中,让学生通过亲自设计、焊接、调试和组装项目系统中的典型模块,最后完成系统控制,全面掌握工程系统的建模、分析、设计和调试等方法,使学生体会到该课程在工程系统中的作用和地位,激发他们的学习兴趣,提高他们学习的主观能动性。另外,针对《C语言程序设计》和《单片机原理与应用》讲义中涉及到的每个机器人项目设计制作相应的微课视频,加强学生的直观认识,促进知识内容的理解。从而解决了《C语言程序设计》和《单片机原理与应用》这两门专业核心基础课程抽象、难学的老大难问题。

四、课程教学创新实践的内容

第一部分:基于机器人项目驱动的《C语言程序设计》教学实践

项目1:利用机器人实现直线运动

该项目包含的C语言程序设计内容有:简单的C语言程序;程序、算法;数据类型;常量与变量、控制字符;输出语句;顺序程序结构。

项目2:实现智能机器人的曲线运动

该项目包含的C语言程序设计内容有:循环控制语句;while 循环;do……while 循环;break语句与continue语句。

项目3:机器人的变速运动

该项目包含的C语言程序设计内容有:for语句循环;goto语句;嵌套循环;算术运算符与算术表达式;强制类型运算符;自增自减运算符;赋值运算符与赋值表达式;复合的赋值运算符。

项目4:机器人触觉导航

该项目包含的C语言程序设计内容有:选择语句if;关系运算符与关系表达式;逻辑运算符与逻辑表达式。

项目5:机器人循迹导航(跟踪条纹带)

该项目包含的C语言程序设计内容有:if…else分支语句;if语句嵌套;条件运算符;switch多分支选择语句。

项目6:基于I/O接口控制的机器人红外线导航

该项目包含的C语言程序设计内容有:while语句与if……else……语句综合应用。

项目7:C语言函数与机器人尾随小车

该项目包含的C语言程序设计内容有:数组;数组的定义、初始化、引用;二维数组的定义、引用、初始化;字符数组。

项目8:C语言函数与机器人运动状态

该项目包含的C语言程序设计内容有:函数定义;有参函数;函数的调用;参数的传递;形参与实参;函数的嵌套调用;递归;变量的存储方式;全局变量与局部变量;带参数的宏定义。

项目9:机器人与上位机的无线通讯

该项目包含的C语言程序设计内容有:地址和指针;指针变量及运算;数组指针;指针与函数;字符指针;指针与字符串。[1]

第二部分:基于机器人项目驱动的《单片机原理与应用》教学实践

项目1:认识机器人与单片机

该项目包含的C51单片机内容有:单片机定义以及内部结构;单片机电路符号以及封装图;单片机的框架组成及各部分功能;单片机简单控制原理;单片机的使用;单片机的类型及特点;单片机的应用领域。

项目2:机器人开发编程环境的建立

该项目包含的C51单片机内容有:Keil uVision2 IDE 集成开发环境的建立;SL ISP软件下载工具的安装;串口调试软件的安装;简单的单片机C语言的调试与下载。

项目3:机器人的安装

该项目包含的C51单片机内容有:机器人的初步安装;51单片机芯片的安装;触觉传感器的安装;红外传感器的安装;利用面包板搭建电路。

项目4:机器人基本的巡航控制

该项目包含的C51单片机内容有:C51单片机的I/O接口介绍;单片机系统的设计;单片机控制发光二极管;单片机的软件初始化以及控制命令;单片机控制伺服电机;延时程序控制电机时序;单片机输出接口控制伺服电机。

项目5:单片机的输入接口与机器人的触觉导航

该项目包含的C51单片机内容有:单片机的输入接口;单片机控制触觉传感器原理及实物连接;单片机端口值的获取。

项目6:单片机I/O接口与机器人红外避障

该项目包含的C51单片机内容有:单片机输入输出接口控制红外线的发射与接收;单片机发送脉冲;高性能的IR检测

项目7:基于IR LED探测电路的智能机器人测距

该项目包含的C51单片机内容有:测距传感器的分类;频率扫描与区域探测;定时/计数器的应用及编程实现;TCON和TMOD特殊功能寄存器;定时器工作模式;C51单片机中断服务函数的概念和使用;中断使能寄存器;定时器时间调整。

项目8:机器人的串口通信(UART的应用)

该项目包含的C51单片机内容有:单片机串口通信;串口结构

串口控制寄存器SCON;串口的工作模式;波特率;RS232电平与TTL电平转换;存储器结构。

项目9:LCD应用编程及机器人的集成技术

该项目包含的C51单片机内容有:字符型点阵式 LCD 模块;LCD 的引脚说明;LCD引脚与 AT89S52单片机连接方式;LCD 控制器接口、状态字;LCD 内部 RAM 地址设置指令码。[2]

五、课程教学创新实践的成果

(一)提高了学生的工程实践和编程能力

大大提高了学生的工程实践和编程能力,明确了课程知识间的有机联系性。通过教学创新,使学生把《C语言程序设计》和《单片机原理与应用》课程学习与实际工程项目的开发相结合,更好的体现了理论联系实际,激发了学生学习专业的兴趣和积极性。

(二)更新了教师的教学理念

通过基于机器人项目驱动的城市轨道交通专业群课程教学创新实践,使教师深深体会到课程知识间的有机联系性和老师技术的全面性是提高教学质量的关键一环。

(三)教材建设的成果

提交了一套《基于机器人项目驱动的C语言程序设计》讲义和《基于机器人项目驱动的单片机原理与应用》讲义,该教材在城市轨道交通专业群的课程教学过程中起到了很好的效果。完成了和讲义相配套的微课视频的制作。

六、总结

基于机器人项目驱动的城市轨道交通专业群课程教学创新经过一年的运行,取得了很好的教学效果。学生在参加的各项比赛中共有37人次获得各项名次,其中还有一位同学在“国信蓝点杯”全国软件专业人才设计与开发大赛全国总决赛中获得一等奖。此次创新提高了学生对于课程的理解,帮助学生掌握了工程系统的建模、分析、设计和调试等方法,有效提升了学生的能力水平。

参考文献:

[1] Brian W.Kernighan,Dennis M.Ritchie.C程序设计语言[M].北京: 机械工业出版社,2004.

上一篇:at89s52单片机范文 下一篇:单片机项目范文