欢迎来到速发表网,咨询电话:400-838-9661

关于我们 登录/注册 购物车(0)

期刊 科普 SCI期刊 投稿技巧 学术 出书

首页 > 优秀范文 > 单片机原理与应用

单片机原理与应用样例十一篇

时间:2023-03-14 15:20:41

单片机原理与应用

单片机原理与应用例1

《单片机原理及应用》课程是一门面向应用的、具有很强的实践性与综合性的课程,在通信类专业整个课程体系中,单片机知识处于承上启下的核心地位,一般通信系统和智能仪器仪表的实现都离不开单片机。随着计算机相关技术的快速发展,以单片机为最小系统开发的产品层出不穷,为了适应新世纪对电子信息类人才的培养需要[1],《单片机原理及应用》课程教学需不断更新。

本课程是一门综合性、实践性很强的课程,通常分为理论教学与实践教学两部分[2]。从理论教学来说,基本以教师课堂讲授为主,由于该课程接口芯片多、内容抽象、编程难度大,对初学者来说入门较难,学生无法深入理解芯片的原理和指令与程序的运行。从实践教学来说,实验内容多为验证性实验,学生只需要观察和分析实验结果,没有充分发挥自主学习能力,教学效果有限。

现依据多年来的教学实践过程,摸索出一套基于“理论讲授、实验练习、课程设计、电子实习”四阶段的教学新模式,现谈谈此模式下的改革措施。

一、改革课程内容

以知识为基础,以能力为核心,构建“基于应用对象的单片机硬件设计及编程”课堂教学新方法,确保教学内容的合理性、实用性和先进性。打破传统的循序渐进式的教学方法,以典型项目实例分解模块,以各个模块构建知识,前后连贯,层层递进。最后,将前述内容以应用实例进行综合,达到以“应用”为主线连接所学知识内容的目的,加深学生对教学内容的理解和运用。

对教材内容进行选择与结构优化,体现新知识、新技术、新方法,力求“适用、通用、实用、易用”。在突破传统教材框架的方面进行了一些尝试与探索,考虑了教材内容编排的基础性、系统性,引入了反映最新科技发展的知识。内容选材上,选用了STC89C52RC系列单片机作为介绍微处理器的重点,加深对单片机组成与工作原理的理解;在内容上淡化芯片内部组成,从编程所需角度介绍功能,强化其接口连线、应用及总线连接技术,为应用单片机硬件开发奠定基础;从实用的角度着重介绍了串行A/D、TLC2543、SED1330系列大屏幕LCD、全双工单片MODEM、高速并行USB接口芯片与单片机接口电路的设计和使用方法。

编写“单片机应用案例”讲义,将整个单片机工程开发的过程以案例形式进行讲解,从硬件电路的设计到开发工具、环境的使用方法,再到具体的应用案例,同时运用汇编语言和C语言的编程方法,系统培养了学生的单片机产品开发工程应用能力。

二、注重实验环节,培养创新能力

为了建立面向21世纪的通信专业教学新体系[3],必须重新认识课堂教学与实验教学的关系。我们认为,课堂教学和实验教学是相辅相成的,二者都是学生学习与掌握知识的重要手段,其先后顺序也不是固定的。在课程设置上,我们不求按部就班,而求高效率地向学生传输知识,充分调动学生的积极性和主动性,变被动学习为主动学习。以课程内容中的案例为基础,开发“单片机教学、实验、设计系统板”,将理论知识的讲述和硬件电路的现场调试相结合,使学生对单片机的整个开发有了直观的认识,加强了对理论知识的理解。

实验过程[4]从软件和硬件两方面入手,软件实验通过编写程序,上机调试并运行,提高学生编程的能力;硬件实验能够实现学生设计硬件,编写接口程序,完成控制任务的目的。以单片机实习项目的开发和调试代替理论考试,系统考查学生的应用能力和解决实际问题的能力。

实验内容既要满足基本教学实验的要求,又要为课程设计和实习实训所用,通过这3个环节从基础到简单再到复杂的实践过程,从验证性实验向设计性实验过渡,提高学生独立思考解决问题的能力。

三、教学与科研相结合

要求教师能力双向发展。《单片机原理及应用》是一门面向实际应用的课程,要突出学生的工程应用能力。因此,要求教师尽可能做到双向发展,充实理论知识、发展教学能力;多动手实践,提高工程应用能力。

鼓励学生参与电子竞赛。通过这个创新性平台,使学生灵活运用所学知识,并了解设计开发项目的过程,为以后的学习和工作奠定良好基础。

鼓励学生参与科研[5]。在培养学生基本技能的基础上,鼓励学生参与老师的科研项目,在承担力所能及的工作的基础上,积极尝试难度更大的工作,锻炼学生的学习能力和解决问题的能力。

参考文献:

[1]谢斌,沈慧芳,李民生.电子信息工程专业应用型人才培养的几点思考[J].科技广场,2011(7):254-256.

[2]艾德才.大学计算机硬件教学内容改革势在必行[J].计算机教育,2005(3).

[3]樊杨祖.高职通信服务类专业定位及建设路径探究[J].职业与教育,2009,5:120-121.

单片机原理与应用例2

一、紧紧围绕教学目标修订教学大纲

根据单片机课程的教学目标,本着以学生为本、淡化理论、突出实用、加强实践、力求知识的系统和完整为原则,重新修订了教学大纲。

第一,对教学内容进行了合理的取舍。

第二,重新确定了教学重点内容。既然确定“能够开发简单的开关量”产品并确保理论知识的系统性为本门课程的教学目标,那么理论教学重点就放在开发“开关量控制”所必需具备的基础知识上面,即:单片机的内部结构、指令功能、应用程序的编写、中断系统、定时、计数器等。这些内容融会贯通就必须“精讲多练”,所以我们把删除的知识所占用得课时按照一定比例分配给这些内容的理论课和实验课,突出其重要地位。

二、改革教学方法,提高教学效果

单片机系统有着强烈的现实性,对教学方式不应是单一的固定模式。可以采用:

(一)在课堂上可以将多种教学方式熔融一体,灵活应用

可以采用多媒体、实物教学,从智能控制系统的一个样板实物外型到该电路的原理图,采取部部展开,层层推进,让学生看见实物产生感性认识,联系到原理产生理性认识,由实践上升为理论,又由理论去指导实践,全面向学生传递智能系统中单片机的使用。在课堂的教学中采用讲授式、启发式、讨论式、测验等多种教学方法,根据学生的能力及教学内容的需要灵活使用。在教学中多与学生沟通,了解学生对教材、讲课、实验等的要求,根据教学大纲及时加以调整教学内容及模式,达到教学的目的。

(二)加大学生编程的训练

一是编制有规模的、科学的、实用的学生练习题集与试卷库,定期让学生做书面编程,使得他们对指令的记忆加深,二是加大学生实验室的训练,培养他们的调试程序能力,为学生自主学习创造条件。

(三)推进“学研产”结合

让一部分学生利用各种时间投入到实际的项目工程开发中去,培养学生的工程意识,强化学生的工程训练,使他们了解自动控制系统工程中单片机系统的整个开发过程,保证学生所学的知识与实际社会接轨,让这些学生以点带面促进、带动其他学生的学习兴趣。

三、加强单片机实践教学,培养学生分析问题和解决问题的能力

单片机的实践性较强,对实践教学的改革显得尤为重要。通过改革达到使学生具备科学的思维方式和较强的动手能力,并能运用MCS-51系列芯片进行工程开发和应用的能力。在教学过程中可以用单片机仿真试验系统良好的人机界面,通过单步执行功能让学生在显示窗口上可以看见相关寄存器的变化,并能看到转移位置;碰到中断时程序如何转入中断入口去执行以及中断程序结束后程序如何返回。通过程序分析和观察执行过程,一目了然。

为了使学生具有独立分析、解决工程中遇到的实际问题的能力和独立开发单片机应用系统得能力,我们在理论教学结束后另外可以增加两周集中实训教学环节,以体现出实践教学的重要性。比如:我们在分析单片机应用技能基础上,设计了一个典型系统――单片机温度(压力)检测与监控系统。它由检测系统、信号放大系统、A/D转换器、控制系统及单片机系统等六个部分组成。

具体要求如下:检测系统能把0―100℃的温度转换为0-1V的信号。放大及波形变换电路把信号放大到0―5V的直流信号,经A/D后送入单片机系统,单片机系统对测量信号进行滤波,非线性校准,标度变换,通过人机界面显示出来。报警值可通过人机界面(键盘)设定。单片机系统还能完成对控制量的自动设置。本方案是集电工、模拟电子、数字电子、自动检测、单片机的嵌入式应用于一体的系统,为了提高单片机的应用能力,我们把这个综合项目进行分解,把总的要求分解到各相应课程的实践中完成。如温度检测与监控系统分解为以下几个子项目:1.电源变压器的设计与制作;2.稳压电源的设计与制作;3.放大器与波形变换电路设计与制作;4.非电量(温度)检测设计与制作;5.单片机系统设计与制作。根据各部分之间的接口要求提出相应的指标,把这些项目分配到相应的实训中。例如把电源变压器设计与制作在电工实习中完成;稳压电源、放大器及波形变换电路的设计与制作在电子技术实训时完成;检测系统设计与制作在自动检测实训阶段完成;单片机系统的软、硬件设计在单片机课程设计阶段完成;整个系统的组装及调试在单片机实训阶段完成。通过变压器的制作,学生了解了选用漆包线的方法,学会小型变压器的设计,掌握变压器的绕制工艺。放大器的制作,使学生学会了放大器的设计、制作、调试工艺和电子测量仪器的选择与使用。检测电路的设计,使学生学会了传感器的选择和使用,进一步理解传感器的主要技术对检测结果的影响,学会测量误差的分析方法。单片机系统的设计与制作,使学生能根据工程要求,配置单片机应用系统的硬件电路,完成显示、A/D、键盘、程控等子程序的编写调试,熟练软件编程环境和仿真器、编程器的使用方法。

四、结束语

单片机系统教学应突出教学的自主性、开放性和创新性,有利于新世纪创新人才的培养,符合高校的教育教学规律。在教学过程中,以加强基础、培养能力、开拓思维、注重创新、提高素质为指导思想、以培养与提高学生的科学实验素质、动手能力和创新能力为目标,建立以学生为主体、教师为主导,以层次化、模块化、全面开放的新的教学模式运作。力争通过单片机系统教学的改革,使学生能理解、掌握实际的单片机应用系统的开发过程,学会掌握及使用新技术的方法,使学生掌握一个实际单片机应用系统的开发模拟过程。

单片机原理与应用例3

中图分类号:G642.41 文献标志码:A 文章编号:1674-9324(2012)08-0078-03

单片机原理与应用是各高校电子信息类相关专业的一门很重要的课程[1-2],其教学的质量直接决定了学生对单片机应用设计的水平,从而影响学生的就业结果。笔者多年来在国家经济改革与发展的前沿城市广州进行学习,并深入相关企业工作和进行技术交流,深刻感受到了近年来单片机发展的迅速,以及企业对单片机技术人才需求的发展趋势。因此,为进一步加强教学和实践的联系,和促进学生适应当前单片机电子技术发展的需要,笔者认为有必要对高校学生的单片机原理与应用课程教学进行思考,结合当前单片机技术发展的趋势,把握时展的特色,对单片机课程教学模式作进一步的探索和改革,最终实现学生学有所长,学以致用,培养出单片机应用开发的相关公司和企业急需的技术人才[3]。

一、单片机技术发展的趋势

当前单片机发展非常迅速,为了占领不同的应用领域市场,各单片机制造厂商根据自己的优势和市场需要进行定位,开发出具有自己特色的产品。因此,单片机种类繁多,各有特色,且主要发展的方向可以总结为以下几个方面[1-4]。

1.技术成熟,性能稳定。自从1976年9月美国Intel公司推出了MCS48系列的单片机以来,8位单片机经过近四十年的不断发展,淘汰和再发展的市场循环选择,适用于不同应用场合的单片机技术越来越成熟[1-5]。耐低温、耐高温和低功耗等技术的发展也使得单片机的应用领域范围得到不断的拓展。另一方面,越来越细化的应用也促使单片机技术向更高的要求和指标发展,经过多年的积累和改进,单片机技术也正更加完善和深化,性能也更为完善。

2.速度越来越快。由于精简指令集结构和指令处理流水线技术的提出和发展,单片机指令操作也出现了采用同步执行方式,大大缩短了单片机如取指等的运行时间。因此,单片机的运行速度得到了大幅提高,指令速度可高达100ns[2,5]。

3.接口资源丰富,功能更为强大。部分单片机厂商根据自己多年来在单片机制造方面的技术积累,对单片机的内部功能模块进行不断的强化和发展,掌握并形成了一系列高性能的接口设计技术,将之融入到单片机制造中,因此使得单片机的接口资源非常丰富,功能强大。比如,STM8系列单片机不但增加内部接口资源,而且对于特定的接口还考虑了不同应用模式。这类单片机的特点是应用领域比较通用,并且在具体应用中可以免除外接相应的功能模块,而直接使用其内部的功能模块,使得单片机应用设计更简单,稳定,且总体价格也更低廉。

4.功能单一化,价格更低廉。由于单片机市场的进一步细化和竞争加剧,针对具体应用领域,单片机厂商对单片机的功能进行了定制,裁剪了部分不需要的功能模块,强化了主要功能模块的设计,突出其在相关应用领域的优势,为其迅速占领市场/扩大市场份额奠定技术基础和价格优势。

5.功能专用单片机。为了更进一步细化单片机定位和突出其应用的专业性,单片机厂商在单片机内部捆绑特定的功能模块进行定向结合开发,形成了专用单片机,如无线单片机CC2510内部集成了无线RF收发器[6]。这类单片机特色在于简化相应的功能模块的设计和应用开发,操作简单方便,为项目开发缩短周期和节省资金。且由于就专用单片机,其性能得到了严格的验证和测试,为面向特定应用的单片机系统开发提供了技术保障。

二、单片机课程教学改革方向的构想

根据前述的单片机特点和对企业需求的分析,在教学中应该对学生进行因势利导,结合相关企业的情况给学生多讲讲单片机的发展,以及在同一种应用中如何对单片机进行正确选型。在具体内容的讲授教学中,要充分发挥学生的主动性,让学生多思考,相互之间多交流多讨论,并积极鼓励学生参加各种层次的电子设计比赛,以激发学生对单片机学习和设计的兴趣。在具体的学习和设计中,也要注意对学生进行正确引导,尽量规范学生的设计习惯和设计的布局。对于学生的设计也要仔细检查,并和学生进行分析和讨论,发现其中的不足和错误之处要及时指正,以确保设计的可行性。最后,可以多找一些在实际中应用较为广泛的设计例子来给学生参考和分析。

单片机原理与应用例4

1、计算机的数据表示和数据运算

2、计算机的各种编码

3、计算机的组成及工作过程

二、考核要求:

1、识记计算机的各种编码

2、领会计算机的组成及工作过程

3、简明应用计算机的数据表示和数据运算

第二章51单片机的硬件结构和原理

一、考核知识点:

1、单片机的发展史及各方面的应用

2、51单片机的分类和内部结构

3、单片机的引脚和功能

4、单片机工作的时序

二、考核要求:

1、识记单片机的发展史及各方面的应用

2、识记单片机的引脚和功能

3、领会单片机工作的时序

4、简明应用51单片机的分类和内部结构

第三章51单片机指令系统

一、考核知识点:

1、单片机的寻址方式

2、单片机的指令系统

3、助记符指令和二进制代码指令的异同

二、考核要求:

1、领会助记符指令和二进制代码指令的异同

2、综合应用单片机的寻址方式

3、综合应用单片机的指令系统

第四章汇编语言程序设计

一、考核知识点:

1、伪指令

2、汇编语言设计技巧

3、汇编语言到机器语言的编译过程

二、考核要求:

1、领会伪指令

2、简明应用汇编语言设计技巧

3、综合应用汇编语言到机器语言的编译过程

第五章51单片机的中断系统

一、考核知识点:

1、中断基本概念

2、中断系统的程序编制

3、中断系统的初步应用

二、考核要求:

1、领会中断基本概念

2、简明应用中断系统解决工程问题

3、综合简明应用中断系统的程序编制

第六章51单片机的内部定时器/计数器及串行接口

一、考核知识点:

1、单片机内部定时器/计数器的结构及工作原理

2、定时器/计数器的程序编制

3、定时器/计数器的初步应用

4、串行口的基本概念

5、串行口的程序编制

6、串行口的初步应用

二、考核要求:

1、识记串行口的基本概念

2、领会单片机内部定时器/计数器的结构及工作原理

3、简明应用定时器/计数器解决工程问题

4、简明应用串行口的程序编制

5、简明应用串行口解决工程问题

6、综合应用定时器/计数器的程序编制

第七章单片机的系统扩展与接口技术

一、考核知识点:

1、单片机外部总线的扩展

2、外部存储器的扩展

3、I/O接口的扩展

4、管理功能部件的扩展

5、A/D和D/A接口功能的扩展

二、考核要求:

1、识记单片机外部总线的扩展

2、识记管理功能部件的扩展

3、简明应用A/D和D/A接口功能的扩展

4、综合应用外部存储器的扩展

5、综合应用I/O接口的扩展

第八章单片机应用系统设计

一、考核知识点:

1、单片机应用系统的开发过程

2、单片机开发工具的分类和使用

3、单片机应用系统的软件和硬件调试过程

二、考核要求:

1、识记单片机应用系统的软件和硬件调试过程

2、领会单片机应用系统的开发过程

3、领会单片机开发工具的分类和使用

第九章单片机系统的抗干扰技术

一、考核知识点:

1、单片机干扰源与分类

2、干扰对单片机系统的影响

3、硬件抗干扰技术

4、软件抗干扰技术

5、数字滤波

二、考核要求:

1、识记单片机干扰源与分类

2、识记干扰对单片机系统的影响

3、识记数字滤波

4、简明应用硬件抗干扰技术

5、简明应用软件抗干扰技术

第十章其它单片机简介

一、考核知识点:

1、AT89C系列单片机的特点与性能

2、其它8位单片机的特点与性能

3、16位、32位单片机的特点与性能

二、考核要求:

1、识记其它8位单片机的特点与性能

2、识记16位、32位单片机的特点与性能

3、领会AT89C系列单片机的特点与性能

《单片机原理及应用技术》考试大纲

《单片机原理及应用技术》课程是一门面向应用的专业技术课。单片机原理与应用介绍了单片机的基本知识和单片机技术的应用,其内容与工程实际紧密联系,实用性很强,是一门在理论指导下,偏重于实际应用的课程。本课程具有实用性强、理论和实践结合、软硬件结合等特点。本课程围绕使用较为广泛的MCS-51系列单片机进行学习。本课程已成为理、工科电子类专业的一门基础课程,这是从电子系统设计角度考虑的,它体现了电子系统设计的方法和硬件结构的变化。通过该课程的学习,要求学生掌握80C51单片机的工作原理、编程技术,掌握单片机应用系统的扩展方法和实际应用。因此,以单片机为内核,分析和设计一个简单的计算机应用系统是我们学习本课程要达到的目的。

第一部分考试大纲

1单片机概述

本章为单片机的基本概念。

1.掌握有关单片机的基本概念、单片机的特点、单片机的应用。

2.理解单片机的总体组成。

3.了解单片微型计算机的产生、发展历史、主要品种及系列。

2单片机结构和原理

本章以80C51单片机为例介绍了主要硬件结构和主要功能,着重掌握系统所提供的资源特性及其功能特性。

1.掌握80C51的内部结构。

2.掌握80C51单片机的存储器组成。

3.掌握单片机并行输入/输出端口结构及功能。

4.了解单片机的时序概念和复位工作方式。

5.掌握单片机引脚功能

3指令系统

1.掌握指令与伪指令的正确格式。

2.掌握七种寻址方式的使用及寻址方式的含义。

3.掌握

五类指令的功能和使用,特别是传送指令。

4.理解书中所列例题与习题。

4汇编语言程序设计举例

本章为MCS-51的一些常用伪指令,介绍顺序结构程序设计、分支结构程序设计、循环结构程序设计和子程序的设计。

1.程序设计的基本步骤、各种基本的结构化程序设计方法;读懂较复杂的常用程序。

2.掌握数据传送指令的编写。

3.理解算术运算程序设计。

4.理解数码转换程序设计。

5.理解查表程序设计。

6.理解子程序设计和参数传递。

7.理解逻辑运算程序设计

5中断系统

1.掌握有关中断、中断源、中断优先级等概念。

2.掌握中断响应过程。

3.掌握中断优先级排列。

4.掌握中断允许寄存器IE、中断优先级寄存器IP各位的含义及设置。

5.掌握外部中断的两种触发方式:电平触发、边沿触发。

6定时/计数器

1.掌握定时器/计数器的四种工作方式及有何不同。

2.掌握TMOD和TCON中各位的含义、作用。

4.掌握不同工作方式计数初值与定时时间的关系,即能根据定时时间算出计数初值,完成定时器的初始化编程和简单应用编程。

7串行通信

1.理解有关通信、协议的概念。

2.理解串行口的四种工作方式。

3.掌握SBUF的含义及作用。

4.了解串行口的工作原理。

5.了解SCON中每一位的含义及SMOD位的作用。

6.掌握串行通信总线RS-232C标准、RS-232C电平转换。

7.了解RS-232C与MCS-51的接口。

8系统扩展技术

1.掌握总线、驱动、锁存和译码、地址重叠的概念。

2.掌握程序存储器的扩展:EPROM程序存储器及其扩展方法。

3.掌握数据存储器的扩展:静态存储器SRAM及其扩展方法。

4.掌握简单I/O口的扩展。

5.掌握8255A可编程并行接口:结构、控制字、工作方式、与8255A的接口方法。

9A/D和D/A转换器接口技术

1.掌握DAC0832与单片机的接口方法与编程。

2.掌握ADC0809与单片机的接口方法与编程。

10键盘/显示接口技术

1.掌握LED显示器结构、工作原理和显示方式。

2.掌握键盘接口原理。

3.理解LED显示器与80C51单片机接口。

4.理解键输入程序设计方法。

5.了解行列式键盘与80C51单片机接口。

11、功率接口技术

1.掌握简单开关量接口、光电耦合接口和继电器接口。

2.晶闸管与故态继电器的应用接口。

12、单片机系统设计技术

掌握单片机系统的设计、开发、调试的原则、步骤及方法。

13、实用举例

了解一两个典型的单片机开发应用系统的设计思想和实现方法。

14、新型单片机介绍

了解MCS-51常见8位单片机。

第二部分考试考核改革方案

一、考试考核要求

《单片机技术及应用》选择具有代表性的、使用较为广泛的MCS-51系列单片机进行学习(具体以80C51为例),介绍了80C51单片机的硬件组成、软件编程及一般应用系统组成。通过本课程的学习,要求掌握80C51单片机的系统结构、指令系统、程序设计方法、系统扩展方法、单片机常用接口等应用技术。本课程的教学过程由面授辅导、自学、实验及作业四个环节组成,因此本课程考试考核要求为:

1.作业、实验成绩与期末考试成绩共同评定为课程总成绩。

2.作业、实验占课程总分的60,期末理论考试占总分的40。

为使学生不把注意力仅仅放在期末考试上,培养学生系统学习的能力,加强学生各方面能力的培养,平时、实验课、作业、考试都纳入本课程的成绩评定。平时的成绩包括出勤、课堂提问和随堂测试。期末考试可以选择笔试、口试和进行实际实验、设计等多种形式。

二、平时成绩考核要求及说明

1.每章作业按要求完成后交教师批改,完成作业80为12分(及格);所有作业均完成,且质量较好者,20分(满分)。中间情况酌情给分。

2.每次实验均能按照教师安排进行,实验态度好,至少完成5个实验且实验报告完整,为18分(及格);能基本独立完成6个或以上实验,实验报告完整、无误,实验质量高,30分(满分)。中间情况酌情给分。如果实验有创新的特点,酌情加分。

3.作业与实验的平均分为平时成绩,满分50分。

4.课程设计单独计算成绩,考评方法见其大纲。

三、理论考试说明

1.单片机技术及应用理论考试,采用闭卷笔试形式,考试时间120分钟。

2.期末考试试题根据教学大纲,其范围和难度按照本方案中制订的考试考核内容和要求确定。考试命题覆盖考试大纲要求范围。

3.期末考试试题类型有以下几种:

①填空题;

②选择题;

③判断题;

④简答题

⑤综合应用题。

四、考试考核要求层次

按照教学大纲的要求,理论考试要求分为掌握、理解和了解三个层次。

掌握:

对于本课程的重点内容要求学生达到掌握的程度。即能够全面、深入理解和熟练掌握所学内容,并能够用其分析、初步设计和解答与应用相关的问题,能够举一反三。要求学生掌握的内容也就是考试的主要内容,在考试中所占比例约70。

理解:

对于本课程的一般内容要求学生能够理解。即要求学生能够较好地理解所学内容,并且对所涉及的内容能够进行简单分析和判断。要求学生理解的内容也是考试的内容,在考试中所占比例约25。

了解:

对于本课程的次要内容要求学生能够了解。要求学生了解的内容,一般是指在眼下不必进一步深入和扩展,有些也许需要学生自己今后在工作中进行深入研究。对要求了解的内容,在考试中占较小比例,不超过5。

实验五:按键电路、显示电路实验

一、实验目的:

1.掌握独立式按键电路与矩阵式按键电路的设计方法。

2.掌握数码管显示电路的工作原理

3.掌握源程序编辑软件UltraEdit,编译软件KeilC51、仿真软件Proteus的使用方法

4.掌握硬件仿真器ME-52A的使用方法

二、实验器材:

1.单片机实验板

2.单片机硬件仿真器ME-51A

3.计算机

4.电源

三、实验要求:

1.电路如图5所示,用单片机的P3口所接的四个独立式按键控制p1口流水灯花样的方法;具体表现为:p3.0、P3.1、P3.2、P3.3四个小按键分别实现了四个控制:

(1)跑灯:即P1.0---1.7亮点流动:

(2)流水灯:即P1.0-1.7依次点

亮(3)交叉闪烁:即P0.0,P0.2,P0.4,P0.6和P0.1,P0.3,P0.5,P0.7轮流点亮

(4)停止;在任何状态下按此键程序停止运行.

2.电路如图6所示,用P2口所接的4×4矩阵式键盘作为输入,在P1口所接的数码管上显示出每个按键的0~F序号,键盘的布局如下表所示:

F

E

D

C

B

A

9

8

7

6

5

4

3

2

1

四、实验原理:

1.独立式按键电路显示如图5所示,从图中可看出,判断有无键按下,只要检测P3.0~P3.3相应端口的高低电平即可,若检测有某一端口为低电平,表明该端口有按键按下,经延时消抖后转去执行相应的功能子程序。若为高电平,表明无键按1.独立式按键电路如图5所示,下,继续检测。

示例程序如下:

ORG000H

LJMPSTAR1

ORG0030H

STAR1:MOVP3,#0FFH;置P3口为输入态

JNBP3.0,FUN0;判别P3.0是否有键按下,是,则转FUN0

JNBP3.1,FUN1;判别P3.1是否有键按下,是,则转FUN1

JNBP3.2,FUN2;判别P3.2是否有键按下,是,则转FUN2

JNBP3.3,FUN3;判别P3.3是否有键按下,是,则转FUN3

JNBF0,STAR1;曾经有键按下F0置1

RET

图5

FUN0:LCALLDL10MS;消岸抖动

JBP3.0,STAR1

WAITL0:JNBP3.0,WAITL0;等待键释放

SETBF0

FUN01:LCALLFUN00

LCALLSTAR1

LJMPFUN01

FUN1:LCALLDL10MS;消岸抖动

JBP3.1,STAR1

WAITL1:JNBP3.1,WAITL1;等待键释放

SETBF0

FUN10:LCALLFUN11

LCALLSTAR1

LJMPFUN10

FUN2:LCALLDL10MS;消岸抖动

JBP3.2,STAR1

WAITL2:JNBP3.2,WAITL2;等待键释放

SETBF0

FUN20:LCALLFUN22

LCALLSTAR1

LJMPFUN20

FUN3:LCALLDL10MS;消岸抖动

JBP3.3,STAR1

WAITL3:JNBP3.3,WAITL3;等待键释放

CLRF0

MOVP1,#0FFH;关显示

LJMPSTAR1

FUN00:MOVA,#0FEH;跑灯子程序

FUN000:MOVP1,A

LCALLDL05S

JNBACC.7,OUT

RLA

AJMPFUN000

OUT:RET

FUN11:MOVA,#0FEH;流水灯子程序

FUN111:MOVP1,A

LCALLDL05S

JZOUT

RLA

ANLA,P1

AJMPFUN111

FUN22:MOVA,#0AAH;交叉点亮子程序

MOVP1,A

LCALLDL30S

CPLA

MOVP1,A

LCALLDL30S

RET

;____________;

;延时程序;

;____________;

DL512:MOVR2,#0FFH

LOOP1:DJNZR2,LOOP1

RET

DL10MS:MOVR3,#14H

LOOP2:LCALLDL512

DJNZR3,LOOP2

RET

DL05S:MOVR4,#0AH

LOOP3:LCALLDL10MS

DJNZR4,LOOP3

RET

DL30S:MOVR5,#03H

LOOP4:LCALLDL05S

DJNZR5,LOOP4

RET

END

2.矩阵式按键电路显示如图6所示。采用扫描方式进行按键的识别检测,并将对应按键的键号用查表指令将对应的代码显示在数码管上。

图6

参考程序如下:

ORG0000H

LJMPSTART

ORG0030H

START:MOVSP,#60H;设置堆栈指针

SCAN:MOVR3,#0F7H;置行扫描初值

MOVR1,#00H;到TABLE表中取码的指针

SCAN1:MOVA,R3

MOVP2,A;扫描输出

MOVA,P2;重读P2口状态

MOVR4,A;暂存于R4吕中

SETBC;C=1

MOVR5,#03H;扫描4列初值

L1:RLCA;A中内容循环左移

JNCKEYIN;C=0,有键按下,转消抖

INCR1;取码指针加1

DJNZR5,L1;无键按下,继续检测

MOVA,R3;扫描下一行

SETBC

RRCA

MOVR3,A

JCSCAN1;4行是否扫描完,未完,继续

LJMPSCAN

KEYIN:MOVR7,#10;削除抖动

D2:MOVR6,#248

DJNZR6,$

DJNZR7,D2

D3:MOVA,P2;按键放开否?

XRLA,R4

JZD3

MOVA,R1

MOVDPTR,#TABLE;到TABLE中取码

MOVCA,@A DPTR

MOVP1,A

LJMPSCAN

TABLE:DB0C0H,0F9H,0A4H,0B0H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH

END

DB80H,90H,88H,83H

DB0C6H,0A1H,86H,8EH

END

五、实验步骤:

1.运行UltraEdit-32源程序编辑软件,输入、编辑汇编语言源程序。

2.运行KeiluVision2源程序编译软件,对源程序进行编译,得到目标代码文件。

3.运行Proteus模拟仿真软件,打开已绘制好的仿真电路原理图,进行模拟仿真。

4.把硬件仿真器ME-52A与单片实验板连接好,再用硬件仿真器进行仿真验证。

六、实验分析与总结

1.用仿真系统调试简单程序结构、分支程序结构、循环程序结构、子程序结构和中断结构的关键在于,如何将对程序的分析理解和开发系统提供的基本功能有机地结合起来,其前提条件是必须对源程序的作用、结构特点、运行过程与结果有较全面的认识,并能根据程序运行过程中出现的现象和结果分析并判断产生各种故障现象的原因,再运用排除法逐一检验各种判断是否准确。

2.掌握程序结构特点的基础上,合理选择观测点,通过观察在观测点处参数及路径的变化检验程序运行的结果。

3.高调试程序的效率,应对单片机开发系统所提供的几种程序运行调试方式有

足够的了解并能熟练地运用。例如,在调试过程中,若要观察最终结果,则可选择全速运行调试;若要观察相关指令的运行结果或运行路径的变化过程,则可选择单步运行;若要检查子程序的运行过程,则可选择跟踪运行调试;若要检查循环程序或中断服务程序,则可选择断点运行调试;若要定点检查程序运行到某处的结果时,则可选择快速运行到光标处调试。但实际中究竟选用哪种方法更适宜或哪几种方法结合使用更快捷,将随着分析能力与操作的熟练程度逐步提高。4.程序运行结果是否正确时,应运用单片机开发系统所提供的交互界面,将程序运行过程中程序计数器PC(地址)的变化、各单元(内部RAM和外部RAM)内容的变化、特殊功能寄存器内容的变化、堆栈指针SP内容的变化与程序的理论分析结果相对照。

5.程序和调试程序时,需要多次反复的过程,并非一次就能排除全部故障,特别是单片机应用系统的硬件电路和汇编程序相结合的综合调试就更加复杂,因此,必须通过反复调试,不断修改硬件和软件,直到最终符合设计要求为止。如果在调试中能够根据实验现象预先对产生故障的原因加以判断和分析,并制定出相应的调试方法和步骤,可缩小排除故障的范围,提高调试效率。

七、思考与练习

填空题

1、设X=5AH,Y=36H,则X与Y“或”运算为__7EH_______,X与Y的“异或”运算为___6CH_____。

2、若机器的字长为8位,X=17,Y=35,则X+Y=__110100_____,X-Y=_11101110______(要求结果写出二进制形式)。

3、单片机的复位操作是____高电平______(高电平/低电平),单片机复位后,堆栈指针SP的值是___07h_____。

4、单片机中,常用作地址锁存器的芯片是__74HC373____________,常用作地址译码器芯片是_____74HC138____________。

5、若选择内部程序存储器,应该设置为_____高_______(高电平/低电平),那么,PSEN信号的处理方式为___不用__________________。

6、单片机程序的入口地址是____0000H__________,外部中断1的入口地址是______0013H_________。

7、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为__0.5us_______,机器周期为_____2us__________。

8、扩展芯片的选择方法有两种,它们分别是___线选法_______________和_____译码法__________。

9、单片机的内部RAM区中,可以位寻址的地址范围是____20H~2FH______________,特殊功能寄存器中,可位寻址的地址是___是能被8整除的地址_________________。

10、子程序返回指令是___ret______,中断子程序返回指令是__reti。

11、8051单片机的存储器的最大特点是内部RAM与外部RAM分开编址。

12、8051最多可以有32个并行输入输出口,最少也可以有8个并行口。

13、函数是C语言的基本单位。

14、串行口方式2接收到的第9位数据送SCON寄存器的RB8位中保存。

15、MCS-51内部提供3个可编程的16位定时/计数器,定时器有4种工作方式。

16、一个函数由两部分组成,即说明部分和语句部分。

17、串行口方式3发送的第9位数据要事先写入SCON寄存器的TB8位。

18、利用8155H可以扩展3个并行口,256个RAM单元。

19、C语言中输入和输出操作是由库函数scanf和printf等函数来完成。

二、选择题

1、C语言中最简单的数据类型包括(B)。

A、整型、实型、逻辑型B、整型、实型、字符型

C、整型、字符型、逻辑型D、整型、实型、逻辑型、字符型

2、当MCS-51单片机接有外部存储器,P2口可作为(C)。

A、数据输入口B、数据的输出口

C、准双向输入/输出口D、输出高8位地址

3、下列描述中正确的是(D)。

A、程序就是软件B、软件开发不受计算机系统的限制

C、软件既是逻辑实体,又是物理实体D、软件是程序、数据与相关文档的集合

4、下列计算机语言中,CPU能直接识别的是(D)。

A、自然语言B、高级语言C、汇编语言D、机器语言

5、MCS-5l单片机的堆栈区是设置在(C)中。

A、片内ROM区B、片外ROM区C、片内RAM区D、片外RAM区

6、以下叙述中正确的是(C)。

A、用C语言实现的算法必须要有输入和输出操作

B、用C语言实现的算法可以没有输出但必须要有输入

C、用C程序实现的算法可以没有输入但必须要有输出

D、用C程序实现的算法可以既没有输入也没有输出

7、定时器/计数器工作方式1是(D)。

A、8位计数器结构B、2个8位计数器结构

C、13位计数结构D、16位计数结构

8、C语言提供的合法的数据类型关键字是(B)。

A、DoubleB、shortC、integerD、Char

9、片内RAM的20H~2FH为位寻址区,所包含的位地址是(B)。

A、00H~20HB、00H~7FHC、20H~2FHD、00H~FFH

10、以下能正确定义一维数组的选项是(B)。

A、inta[5]={0,1,2,3,4,5};B、chara[]={0,1,2,3,4,5};

C、chara={’A’,’B’,’C’};D、inta[5]="0123";

11、数据的存储结构是指(D)。

A、存储在外存中的数据B、数据所占的存储空间量

C、数据在计算机中的顺序存储方式D、数据的逻辑结构在计算机中的表示

12、下列关于栈的描述中错误的是(C)。

A、栈是先进后出的先性表B、栈只能顺序存储

C、栈具有记忆作用D、对栈的插入和删除操作中,不需要改变栈底指针

13、在寄存器间接寻址方式中,间址寄存器中存放的数据是(B)。

A、参与操作的数据B、操作数的地址值

C、程序的转换地址D、指令的操作码

14、MCS-51单片机的复位信号是(A)有效。

A、高电平B、低电平C、脉冲D、下降沿

15、为了使模块尽可能独立,要求(B)。

A、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强

B、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱

C、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱

D、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强

16、若MCS-51单片机使用晶振频率为6MHz时,其复位持续时间应该超过(B)。

A、2μsB、4μsC、8μsD、1ms

17、以下选项中可作为C语言合法常量的是(A)

A、-80B、-080C、-8e1.0D、-80.0e

18、能够用紫外光擦除ROM中程序的只读存储器称为(C)。

A、掩膜ROMB、PROMC、EPROMD、EEPROM

19、以下不能定义为用户标识符是(D)。

A、MainB、_0C、_intD、sizeof

20、下选项中,不能作为合法常量的是(B)。//幂不能为小数

A、1.234e04B、1.234e0.4C、1.234e 4D、1.234e0

21、以下叙述中错误的是(C)

A、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B、数组名代表的是数组所占存储区的首地址,其值不可改变

C、当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

D、可以通过赋初值的方式确定数组元素的个数

22、以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是(D)

A、feof(f

p)B、ftell(fp)C、fgetc(fp)D、rewind(fp)

23、存储16×16点阵的一个汉字信息,需要的字节数为(A)

A、32B、64C、128D、256

24、已知1只共阴极LED显示器,其中a笔段为字形代码的最低位,若需显示数字1,则它的字形代码应为(B)。

A、06HB、F9HC、30HD、CFH

25、在C语言中,合法的长整型常数是(A)

A、OLB、4962710C、324562&D、216D

26、以下选项中合法的字符常量是(B)

A、"B"B、’\010’C、68D、D

27、若PSW.4=0,PSW.3=1,要想把寄存器R0的内容入栈,应使用(D)指令。

A、PUSHR0B、PUSH@R0C、PUSH00HD、PUSH08H

28、在片外扩展一片2764程序存储器芯片要(B)地址线。

A、8根B、13根C、16根D、20根

29、设MCS-51单片机晶振频率为12MHz,定时器作计数器使用时,其最高的输入计数频率应为(C)

A、2MHzB、1MHzC、500kHzD、250kHz

30、下列数据字定义的数表中,(A)是错误的。

A、DW“AA”B、DW“A”C、DW“OABC”D、DWOABCH

三、判断题

(√)1、在对某一函数进行多次调用时,系统会对相应的自动变量重新分配存储单元。

(×)2、在C语言的复合语句中,只能包含可执行语句。

(√)3、自动变量属于局部变量。

(×)4、Continue和break都可用来实现循环体的中止。

(√)5、字符常量的长度肯定为1。

(×)6、在MCS-51系统中,一个机器周期等于1.5μs。

(√)7、C语言允许在复合语句内定义自动变量。

(√)8、若一个函数的返回类型为void,则表示其没有返回值。

(×)9、所有定义在主函数之前的函数无需进行声明。

(×)10、定时器与计数器的工作原理均是对输入脉冲进行计数。

(×)11、END表示指令执行到此结束。

(√)12、ADC0809是8位逐次逼近式模/数转换接口。

(√)13、MCS-51的相对转移指令最大负跳距是127B。

(×)14、MCS-51的程序存储器只是用来存放程序的。

(√)15、TMOD中的GATE=1时,表示由两个信号控制定时器的的启停。

(×)16、MCS-51的特殊功能寄存器分布在60H~80H地址范围内。

(×)17、MCS-51系统可以没有复位电路。

(×)18、片内RAM与外部设备统一编址时,需要专门的输入/输出指令。

(√)19、锁存器、三态缓冲寄存器等简单芯片中没有命令寄存和状态寄存等功能。

(√)20、使用8751且=1时,仍可外扩64KB的程序存储器。

四、简答题

1、在使用8051的定时器/计数器前,应对它进行初始化,其步骤是什么?

答:(1)确定T/C的工作方式——编程TMOD寄存器;

(2)计算T/C中的计数初值,并装载到TH和TL;

(3)T/C在中断方式工作时,须开CPU中断和源中断——编程IE寄存器;

(4)启动定时器/计数器——编程TCON中TR1或TR0位。

2、什么是重入函数?重入函数一般什么情况下使用,使用时有哪些需要注意的地方?答:多个函数可以同时使用的函数,称为重入函数。

通常情况下,C51函数不能被递归调用,也不能应用导致递归调用的结构。有此限制是由于函数参数和局部变量是存储在固定的地址单元中。重入函数特性允许你声明一个重入函数。即可以被递归调用的函数。

重入函数可以被递归调用,也可以同时被两个或更多的进程调用。重入函数在实时应用中及中断服务程序代码和非中断程序代码必须共用一个函数的场合中经常用到。

3、8051引脚有多少I/O线?他们和单片机对外的地址总线和数据总线有什么关系?地址总线和数据总线各是几位?

答:8051引脚共有40个引脚,8051的地址总线由P2和P0口提供,P2口是地址总线的高8位,P0口是地址总线的低8位;数据总线由P0口提供;P0口的地址总线和数据总线是分时进行的,P0口的地址总线需要外接地址锁存器完成地址锁存。

地址总线共16位,数据总线是8位。

4、在有串行通信时,定时器/计数器1的作用是什么,怎样确定串行口的波特率?

答:在有串行通信时,定时器/计数器1的作用是串行口发生器。

串行口的波特率根据串行口的工作方式具有不同的计算方式:

方式0的波特率固定为晶体振荡器的十二分之一;

方式1的波特率=2SMOD.(定时器1的溢出率)/32;

方式2波特率=2SMOD.(fosc/64);

方式3波特率同方式1(定时器l作波特率发生器)。

5、如何消除键盘的抖动?怎样设置键盘中的复合键?

答:由于按键是机械开关结构,所以当用手按下其中一个键时,往往会出现所按键在闭合位置和断开位置之间发生跳几下后才会稳定到闭合状态的情况。在释放一个键时,也会出现类似的情况,这就是键的抖动,抖动的持续时间不一,但通常不会大于10ms。

若抖动问题不解决,就会引起对闭合键的多次读入。对于键抖动最方便的解决方法就是当发现有键按下后,不是立即进行扫描,而是延时大约10ms后再进行。由于一个键按下的时间一般会持续上百毫秒,所以延迟10ms后再扫描处理并不迟。

复合键可以仿照计算机复合键的处理方法,通常可以假设一个键具有复合功能,再与其它减的键值组合成复合键。

1、矩阵式键盘的结构与工作原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。

2、矩阵式键盘的按键识别方法

确定矩阵式键盘上何键被按下介绍一种“行扫描法”。

行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

下面给出一个具体的例子:

图仍如上所示。8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源 5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。

1、检测当前是否有键被按下。检测的方法是P1.4-P

1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。

2、去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。

3、若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:

P1.71110

P1.61101

P1.51011

P1.40111

在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值

4、为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。

键盘扫描程序:

从以上分析得到键盘扫描程序的流程图如图2所示。程序如下

SCAN:MOVP1,#0FH

MOVA,P1

ANLA,#0FH

CJNEA,#0FH,NEXT1

SJMPNEXT3

NEXT1:ACALLD20MS

MOVA,#0EFH

NEXT2:MOVR1,A

MOVP1,A

MOVA,P1

ANLA,#0FH

CJNEA,#0FH,KCODE;

MOVA,R1

SETBC

RLCA

JCNEXT2

NEXT3:MOVR0,#00H

RET

KCODE:MOVB,#0FBH

NEXT4:RRCA

INCB

JCNEXT4

MOVA,R1

SWAPA

NEXT5:RRCA

INCB

INCB

INCB

INCB

JCNEXT5

NEXT6:MOVA,P1

ANLA,#0FH

CJNEA,#0FH,NEXT6

MOVR0,#0FFH

RET

键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。

到本课为止,本站教程暂告一个段落!感谢大家的关心和支持!

矩阵按键部分由16个轻触按键按照4行4列排列,连接到JP50端口。将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。确定矩阵式键盘上何键被按下,介绍一种“行扫描法”。行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法.判断键盘中有无键按下:将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。判断闭合键所在的位置:在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

下面给出一个具体的例子:

电路图路径:G:\图片\电路图片\xl100097.jpg

8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。

1.检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。

2.去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。

3.若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:

P1.71110

P1.61101

P1.51011

P1.40111

在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。

4.为了保证键每闭合一次CPU仅作一次处理,必须去除键释放时的抖动。

实验目的:通过XL1000的16位矩阵按键,在数码管上分别显示0---9,A,B,C,D,E,F。

接线方法:1用一条8PIN数据排线,把矩阵按键部份的JP50,接到CPU部份的P1口JP44.

2接8位数码管的数据线。将数码管部份的数据口JP5接到CPU部份的P0口JP51.

3接8位数码管的显示位线。将数码管部份的显示位口JP8接到CPU部份的P2口JP52.

参考程序:

;本程序实现扫描按键显示功能.

;分别按16个键盘显示分别显示数字123A456B789C*0#D

;键盘口P1,数码管显示第二位p21,数码管段位p0口

org0000h

ajmpmain

org0030h

main:

movdptr,#tab;将表头放入DPTR

lcallkey;调用键盘扫描程序

movca,@a dptr;查表后将键值送入ACC

movp0,a;将Acc值送入P0口

CLRP2.1;开显示

ljmpmain;返回反复循环显示

KEY:

LCALLKS;调用检测按键子程序

JNZK1;有键按下继续

LCALLDELAY2;无键按调用延时去抖

AJMPKEY;返回继续检测按键

K1:LCALLDELAY2

LCALLDELAY2;有键按下延时去抖动

LCALLKS;再调用检测按键程序

JNZK2;确认有按下进行下一步

AJMPKEY;无键按下返回继续检测

K2:MOVR2,#0EFH;将扫描值送入R2暂存

MOVR4,#00H;将第一列值送入R4暂存

K3:MOVP1,R2;将R2的值送入P1口

L6:JBP1.0,L1;P1.0等于1跳转到L1

MOVA,#00H;将第一行值送入ACC

AJMPLK;跳转到键值处理程序

L1:JBP1.1,L2;P1.1等于1跳转到L2

MOVA,#04H;将第二行的行值送入ACC

AJMPLK;跳转到键值理程序进行键值处理

L2:JBP1.2,L3;P1.2等于1跳转到L3

MOVA,#08H;将第三行的行值送入ACC

AJMPLK;跳转到键值处理程序

L3:JBP1.3,NEXT;P1.3等于1跳转到NEXT处

MOVA,#0cH;将第四行的行值送入ACC

LK:ADDA,R4;行值与列值相加后的键值送入A

PUSHACC;将A中的值送入堆栈暂存

K4:LCALLDELAY2;调用延时去抖动程序

LCALLKS;调用按键检测程序

JNZK4;按键没有松

开继续返回检测POPACC;将堆栈的值送入ACC

RET

NEXT:

INCR4;将列值加一

MOVA,R2;将R2的值送入A

JNBACC.7,KEY;扫描完至KEY处进行下一扫描

RLA;扫描未完将A中的值右移一位进行下一列的扫描

MOVR2,A;将ACC的值送入R2暂存

AJMPK3;跳转到K3继续

KS:MOVP1,#0FH;将P1口高四位置0低四位值1

MOVA,P1;读P1口

XRLA,#0FH;将A中的值与A中的值相异或

RET;子程序返回

DELAY2:;40ms延时去抖动子程序

MOVR5,#08H

L7:MOVR6,#0FAH

L8:DJNZR6,L8

DJNZR5,L7

RET

tab:

db28h,34h,28h,34h,0a9h,60h,20h,7ah,

20h,21h,61h,74h,30h,62h,0a2h,7eh

;0h0hc9878654a321轮流显示键盘因为无法表达*#就用H表示,B用8表示

end

这是我做成功的4X4键盘扫描源程序,P1.0-P1.3做四根列线,P1.4-P1.7做四根行线。

数码管的字型表是按照标准接法做的,按对应的按键数码管显示对应的数字。

以下是源程序:

KEYBUFEQU30H

ORG00H

START:MOVKEYBUF,#2

MOVP2,#00001111B

WAIT:

MOVP1,#0FFH

CLRP1.4

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY1

LCALLDELY10MS

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY1

MOVA,P1

ANLA,#0FH

CJNEA,#0EH,NK1

MOVKEYBUF,#0

LJMPDK1

NK1:CJNEA,#0DH,NK2

MOVKEYBUF,#1

LJMPDK1

NK2:CJNEA,#0BH,NK3

MOVKEYBUF,#2

LJMPDK1

NK3:CJNEA,#07H,NK4

MOVKEYBUF,#3

LJMPDK1

NK4:NOP

DK1:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A DPTR

MOVP0,A

DK1A:MOVA,P1

ANLA,#0FH

XRLA,#0FH

JNZDK1A

NOKEY1:

MOVP1,#0FFH

CLRP1.5

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY2

LCALLDELY10MS

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY2

MOVA,P1

ANLA,#0FH

CJNEA,#0EH,NK5

MOVKEYBUF,#4

LJMPDK2

NK5:CJNEA,#0DH,NK6

MOVKEYBUF,#5

LJMPDK2

NK6:CJNEA,#0BH,NK7

MOVKEYBUF,#6

LJMPDK2

NK7:CJNEA,#07H,NK8

MOVKEYBUF,#7

LJMPDK2

NK8:NOP

DK2:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A DPTR

MOVP0,A

DK2A:MOVA,P1

ANLA,#0FH

XRLA,#0FH

JNZDK2A

NOKEY2:

MOVP1,#0FFH

CLRP1.6

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY3

LCALLDELY10MS

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY3

MOVA,P1

ANLA,#0FH

CJNEA,#0EH,NK9

MOVKEYBUF,#8

LJMPDK3

NK9:CJNEA,#0DH,NK10

MOVKEYBUF,#9

LJMPDK3

NK10:CJNEA,#0BH,NK11

MOVKEYBUF,#10

LJMPDK3

NK11:CJNEA,#07H,NK12

MOVKEYBUF,#11

LJMPDK3

NK12:NOP

DK3:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A DPTR

MOVP0,A

DK3A:MOVA,P1

ANLA,#0FH

XRLA,#0FH

JNZDK3A

NOKEY3:

MOVP1,#0FFH

CLRP1.7

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY4

LCALLDELY10MS

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY4

MOVA,P1

ANLA,#0FH

CJNEA,#0EH,NK13

MOVKEYBUF,#12

LJMPDK4

NK13:CJNEA,#0DH,NK14

MOVKEYBUF,#13

LJMPDK4

NK14:CJNEA,#0BH,NK15

MOVKEYBUF,#14

LJMPDK4

NK15:CJNEA,#07H,NK16

MOVKEYBUF,#15

LJMPDK4

NK16:NOP

DK4:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A DPTR

MOVP0,A

DK4A:MOVA,P1

ANLA,#0FH

XRLA,#0FH

JNZDK4A

NOKEY4:

LJMPWAIT

DELY10MS:

MOVR6,#10

D1:MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

TABLE:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H;0-9

DB088H,083H,0C6H,0A1H,086H,08EH,089H,0CFH,0C7H,0C8H;A,B,C,D,E,F,H,I,L,N,

END

;P3.1数据采集控制

;P2.6P2.7个位十位显示转换控制

;P1口接8个开关模拟数据

;P1.0-P1.3为个位开关量输入

;P1.4-P1.7为十位开关量输入

;此程序仅供参考

;功能P1口接8个开关输入量4个一组,分别为个位,十位输入

;P0口接一个数码管,依次显示输入量。P3.1控制是否读入

;开关量。P2.6P2.7控制是否显示个位

或十位

ORG100h

LJMPSTAR

STAR:MOVP1,#0FFH

SETBP3.1数据读入标志

MOVR0,#100,循环工作次数

LOOP:JBP3.1,$P3.1低电平时,采集P1口数据开关量处理显示阶段不再应答P3.1

MOVA,P1

PUSHACC

ANLA,#0FH取个位数值

MOVR1,A个位数值保存到R1

POPACC

ANLA,#0F0H

SWAPA高4位转成字节信息

MOVR2,A十位数值保存到R2

MOVDPTR,#TABLED

MOVA,R1

MOVCA,@A DPTR

MOVP0,A

CLRP2.6个位显示

ACALLDELAY500MS

SETBP2.6

MOVA,R2

MOVCA,@A DPTR

MOVP0,A

CLRP2.7十位显示

ACALLDELAY500MS

SETBP2.7

DJNZR0,LOOP

DELAY500MS:延时500毫秒子程略

RET

TABLED:DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hDB80H,90H,88h,83h,0c6h,0a1h,86h,8eh

END

#include

typedefunsignedcharBYTE;

BYTEcodeTABLED[16]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0X0f8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};

BYTEDATled;

sbitP26=P2^6;

sbitP27=P2^7;

sbitP31=P3^1;

intTIME;

voidtimedelay(DTIME)

intDTIME;

{

intI;

for(I=0;I4;

P0=TABLED[TEMP];

P27=0;

timedelay(TIME);

P27=1;

}

}

}

1.实验任务

在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。

2.电路原理图

图4.24.1

3.硬件电路连线

(1).把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;

(2).把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;

4.程序设计内容

(1).8X8 点阵LED工作原理说明

8X8点阵LED结构如下图所示

图4.24.2

从图4.24.2中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:

一根竖柱:对应的列置1,而行则采用扫描的方法来实现。

一根横柱:对应的行置0,而列则采用扫描的方法来实现。

5.汇编源程序

ORG00H

START:NOP

MOVR3,#3

LOP2:MOVR4,#8

MOVR2,#0

LOP1:MOVP1,#0FFH

MOVDPTR,#TABA

MOVA,R2

MOVCA,@A DPTR

MOVP3,A

INCR2

LCALLDELAY

DJNZR4,LOP1

DJNZR3,LOP2

MOVR3,#3

LOP4:MOVR4,#8

MOVR2,#7

LOP3:MOVP1,#0FFH

MOVDPTR,#TABA

MOVA,R2

MOVCA,@A DPTR

MOVP3,A

DECR2

LCALLDELAY

DJNZR4,LOP3

DJNZR3,LOP4

MOVR3,#3

LOP6:MOVR4,#8

MOVR2,#0

LOP5:MOVP3,#00H

MOVDPTR,#TABB

MOVA,R2

MOVCA,@A DPTR

MOVP1,A

INCR2

LCALLDELAY

DJNZR4,LOP5

DJNZR3,LOP6

MOVR3,#3

LOP8:MOVR4,#8

MOVR2,#7

LOP7:MOVP3,#00H

MOVDPTR,#TABB

MOVA,R2

MOVCA,@A DPTR

MOVP1,A

DECR2

LCALLDELAY

DJNZR4,LOP7

DJNZR3,LOP8

LJMPSTART

DELAY:MOVR5,#10

D2:MOVR6,#20

D1:MOVR7,#248

DJNZR7,$

DJNZR6,D1

DJNZR5,D2

RET

TABA:DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH

TABB:DB01H,02H,04H,08H,10H,20H,40H,80H

END

6.C语言源程序

#include0;j--);

}

voidmain(void)

{

unsignedchari,j;

while(1)

{

for(j=0;j<3;j )

//fromlefttoright3time

{

for(i=0;i<8;i )

{

P3=taba[i];

P1=0xff;

delay1();

}

}

for(j=0;j<3;j )

//fromrighttoleft3time

{

for(i=0;i<8;i )

{

P3=taba[7-i];

P1=0xff;

delay1();

}

}

for(j=0;j<3;j )

//fromtoptobottom3time

{

for(i=0;i<8;i )

{

P3=0x00;

P1=tabb[7-i];

delay1();

}

}

for(j=0;j<3;j )

//frombottomtotop3time

{

for(i=0;i<8;i )

{

P3=0x00;

P1=tabb[i];

delay1();

}

}}

}

LED点阵显示实验

一.实验要求

编程实现中英文字符的显示。

二.实验目的

1.了解LED点阵显示的基本原理和实现方法。

2.掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法。

三.实验电路及连线

点阵显示模块WTD3088的(红色)列输入线接至内部LED的阴极端,行输入线接至内部LED的阳极端(若阳极端输入为高电平,阴极端输入低电平,则该LED点亮)。发光点的分布如图22-0所示。

Fig22-0WTD3088LED分布

如图22-1示,本实验模块使用74LS374来控制列输入线的电平值。将74LS374的某输出置0,则对应的LED阴极端被置低。如图22-2示,本实验模块使用74LS273来控制行输入线,并通过9013提供电流驱动。将74LS273的某输出置1,则对应的LED阳极端被置高。每次系统重新开启或总清后,74LS273输出为全0,LED显示被关闭。

通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。

Fig22-1LED模块及列扫描电路

Fig22-2行扫描电路

Fig22-3地址译码电路

本实验模块使用4块WTD3088组成16×16点阵,以满足汉字显示的要求。为了方便的控制四个单元,使用了一片74LS139译码,产生四个地址片选信号:CLKR1=CSLED,CLKR2=CSLED 1,用于行控制的两片74LS273;CLKC1=CSLED 2,CLKC2=CSLED 3,用于列控制的两片74LS374。

实验接线:按示例程序,模块的CSLED接51/96地址的8000H。

四.实验说明

使用高亮度LED发光管构成点阵,通过编程控制可以显示中英文字符、图形及视频动态图形。LED显示以其组构方式灵活、亮度高、技术成熟、成本低廉等特点在证券、运动场馆及各种室内/外显示场合得到广泛的应用。

所显示字符的点阵数据可以自行编写(即直接点阵画图),也可从标准字库(如ASC16、HZ16)中提取。后者需要正确掌握字库的编码方法和字符定位的计算。

实验盘片中“字符转换”子目录下提供的Basc16.exe,BHz16.exe可方便的将单个字符的码表从标准字库Asc16,Hzk16中提取出来。具体使用方法是运行上述可执行程序,根据提示输入所需字符(如是汉字还需要先启动dos下的汉字环境,如ucdos,pdos95等)。程序将该字符的码表提取出来,存放在该字符ASC或区位码为文件名称的.dat文件中。用户只需将该文件中内容拷贝、粘贴到自己的程序中即可。但需要注意字节排列顺序、字节中每一位与具体显示点的一一对应关系,必要时还要对码表稍作修改。同一目录下还提供了上述可执行程序的源文件,使用BC3.1编写,供用户参考。

五.实验程序框图

用户应留心其中行扫描的实现及码表的处理。

六.实验程序:

(一)提供LEDA51演示Asc16字符的简单点阵显示。

;________*LED点阵显示示例程序______________________*

;__该程序显示Asc16字符__

;__为了简单起见,程序只显示一个字符__

;__该程序针对T598实验机的模块14__

;____________________________________________________

CSLEDEQU8000H

CSR1EQUCSLED;行1273

CSR2EQUCSLED 1H;行2273

CSC1EQUCSLED 2H;列1374

CSC2EQUCSLED 3H;列2374

ORG0000H

MOVSP,#60H

INIT:MOVA,#0H;关闭行

MOVDPTR,#CSR1

MOVX@DPTR,A

MOVDPTR,#CSR2

MOVX@DPTR,A

MOVA,#0FFH;关闭列

MOVDPTR,#CSC1

MOVX@DPTR,A

MOVDPTR,#CSC2

MOVX@DPTR,A

D:MOVR5,#00H

MOVR4,#01H;每次为单行扫描

DISP:

MOVA,R5

MOVDPTR,#ASCE;此处设定所要显示的字符

MOVCA,@A DPTR

CPLACC;代码取反,决定显示的阴阳

MOVDPTR,#CSC2

MOVX@DPTR,A

MOVDPTR,#CSR1

MOVA,R4

MOVX@DPTR,A

RLACC

MOVR4,ACC

INCR5

LCALLDELAY

CJNER5,#8H,DISP

MOVA,#0H

MOVX@DPTR,A

MOVR5,#08H

MOVR4,#01H

DISP2:

MOVA,R5

MOVDPTR,#ASCE

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC2

MOVX@DPTR,A

MOVDPTR,#CSR2

MOVA,R4

MOVX@DPTR,A

RLACC

MOVR4,ACC

INCR5

LCALLDELAY

CJNER5,#10H,DISP2

MOVA,#0H

MOVX@DPTR,A

SJMPD

;________延时子程序,协调字符显示速度____________*

DELAY:MOVR7,#1H

DL1:MOVR6,#00H

DL2:DJNZR6,DL2

DJNZR7,DL1

RET

;________字符点阵字库______________*

;ASC16字符编码排列

;0

;1

;|

;|

;14

;15

;高位D7--D0

;请注意编码的排列次序和实际显示点阵分布的关系

ASCA:DB00H,00H,10H,38H,6CH,0C6H,0C6H,0FEH

DB0C6H,0C6H,0C6H,0C6H,00H,00H,00H,00H

ASCE:DB00H,00H,0FEH,66H,62H,68H,78H,68H

DB60H,62H,66H,0FEH,00H,00H,00H,00H

ASCD:DB00H,00H,0F8H,6CH,66H,66H,66H,66H

DB66H,66H,6CH,0F8H,00H,00H,00H,00H

ASCK:DB00H,00H,0E6H,66H,66H,6CH,78H,78H

DB6CH,66H,66H,0E6H,00H,00H,00H,00H

;____________________________________________________

END

(二)LEDHZ51两个示例程序。和Hz16字符的简单点阵显示。

;________*LED点阵显示示例程序______________________*

;__该程序显示hz16字符__

;__为了简单起见,程序只显示一个字符__

;__该程序针对T598实验机的模块14__

;____________________________________________________

CSLEDEQU8000H

CSR1EQUCSLED;行1273

CSR2EQUCSLED 1H;行2273

CSC1EQUCSLED 2H;列1374

CSC2EQUCSLED 3H;列2374ORG0000H

MOVSP,#60H

INIT:MOVA,#0H;关闭LED显示

MOVDPTR,#CSR1

MOVX@DPTR,A

MOVDPTR,#CSR2

MOVX@DPTR,A

MOVA,#0FFH;关闭LED显示

MOVDPTR,#CSC1

MOVX@DPTR,A

MOVDPTR,#CSC2

MOVX@DPTR,A

D:MOVR5,#00H

MOVR4,#01H

DISP:

MOVA,R5

RLACC

MOVDPTR,#HZAI

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC2

MOVX@DPTR,A

MOVA,R5

RLACC

INCACC

MOVDPTR,#HZAI

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC1

MOVX@DPTR,A

MOVDPTR,#CSR1

MOVA,R4

MOVX@DPTR,A

RLACC

MOVR4,ACC

INCR5

LCALLDELAY

CJNER5,#8H,DISP

MOVA,#0H

MOVX@DPTR,A

MOVR5,#08H

MOVR4,#01H

DISP2:

MOVA,R5

RLACC

MOVDPTR,#HZAI

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC2

MOVX@DPTR,A

MOVA,R5

RLACC

INCACC

MOVDPTR,#HZAI

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC1

MOVX@DPTR,A

MOVDPTR,#CSR2

MOVA,R4

MOVX@DPTR,A

RLACC

MOVR4,ACC

INCR5

LCALLDELAY

CJNER5,#10H,DISP2

MOVA,#0H

MOVX@DPTR,A

SJMPD

;________延时子程序,协调字符显示速度____________*

DELAY:MOVR7,#1H

DL1:MOVR6,#00H

DL2:DJNZR6,DL2

DJNZR7,DL1

RET

;________字符点阵字库______________*

;HZ16字符编码排列

;01

;23

;|

;|

;2829

;3031

;高位D7--D0

HZAI:DB00H,78H,3FH,80H,11H,10H,09H,20H

DB7FH,0FEH,42H,02H,82H,04H,7FH,0F8H

DB04H,00H,07H,0F0H,0AH,20H,09H,40H

DB10H,80H,11H,60H,22H,1CH,0CH,08H

HZDI:DB00H,80H,40H,80H,20H,88H,2FH,0FCH

DB08H,88H,08H,88H,0E8H,88H,2FH,0F8H

DB28H,88H,28H,88H,28H,88H,2FH,0F8H

DB28H,08H,50H,06H,8FH,0FCH,00H,00H

HZKE:DB01H,00H,01H,04H,0FFH,0FEH,01H,00H

DB01H,10H,1FH,0F8H,10H,10H,10H,10H

DB10H,10H,1FH,0F0H,14H,50H,04H,40H

DB04H,40H,08H,42H,10H,42H,60H,3EH

;____________________________________________________

END

基于89C51的计算机可锁定加密键盘设计

摘要:介绍PC键盘和键盘接口的PS/2通信协议,以及用89C51实现可锁定键盘的软件和硬件设计方法。具有安全可靠、容错能力强、可以直接采用标准键盘进行改装、便于实现等优点,并保留标准键盘的全部功能。

关键词:PS/289C51C51键盘

引言

在智能仪器、自动控制等领域,已大量使用嵌入式PC,如Advantech公司的PC/104、AMD公司的DIMM-PC等。为适应开放式、模块化的要求,嵌入式PC具有标准的PC接口,如VGA显示器控制接口、以太网接口、RS232接口、PC/AT键盘接口等。所以,可以用标准的PC键盘对嵌入式PC进行操作与控制。键盘在输入指令之后,可能很长一段时间不用。为计算机安全和防止误触发,需要将键盘锁定,还要对某些键采取屏蔽措施,但是PC标准键盘不能满足这些要求。本文介绍一种用89C51设计实现的可锁定加密PC/AT键盘。

1键盘功能及工作原理

PC键盘功能主要有按键识别、去抖、重键处理、发送扫描码、自动重发、接收键盘命令、处理命令等。键盘有编码键盘和非编码键盘。编码键盘程序设计简单,但硬件电路复杂,价格较高;非编码键盘用软件来实现识别键、编码转换、去抖等功能,硬件电路简单,价格便宜。现代微机系统中广泛采用非编码键盘。PC键盘多采用18行×8列的二维矩阵行列结构。采用行扫描法识别按下的按键。

2PS/2协议

PS/2协议是外设与主机之间通信的一种同步双向串行协议。在该协议中主机拥有较高的优先级,在一定条件下可以终止外设正在进行的发送过程。PS/2协议采用的传送数据帧的格式为:1位起始位(0)、8位数据位、1位奇偶校验位、1位停止位(1)。数据发送时低位在前,高位在后。外设每收到主机发来的1帧数据,都要紧随该帧的停止位发送一个握手位ACK(0)应答主机。然后,外设还要发1帧应答数据(0xF0),表示外设已经完整地接收到了主机的命令;而主机则不需发送握手位,也不需要发送应答帧。

2.1键盘到PC键盘接口的通信

当时钟线和数据线均为高电平时,允许键盘发送数据,系统将接收数据;当时钟线被拉为低电平时,表明系统禁止数据传输。图1给出了发送时序,包含1个低电平触发的起始位、8位数据位、1个奇校验位和1个高电平的结束位。

2.2PC系统到键盘的通信协议

若时钟线出现高电平,数据线出现低电平,表明系统请求发送,键盘准备产生同步时钟脉冲串,并接收数据。包含了1个低电平触发的起始位、8位数据位、1个奇校验位、1个应答位、1个高电平的结束位。图2为时序图。

(1)键盘命令及执行过程

①FFH:复位键盘。系统通过此软件复位命令使键盘进入程序复位和内部自测试,称为基本保证测试(BAT)。复位键盘的过程如下:

a.键盘收到FFH后立即回送ACK(FAH)作答;

b.键盘接口收到ACK后,将键盘时钟和数据线置为高电平;

c.键盘检测到此状态后开始BAT操作;

d.如果BAT正确完成,键盘发送AAH以表示结束,

否则以FDH(或其它任何值)表示诊断有误。

②FEH:重新发送。当系统检测

到从键盘送来的任何传输错误时,它便向键盘发送FEH命令。键盘接收到此命令后,将重新送出原来的内容。③FDH~F7H:空操作(保留未用)。

④F6H:设置缺省值。此命令使键盘所有条件复位到电源接通时的缺省状态,键盘继续扫描。

⑤F5H:设置缺省值和停止键盘。此命令使键盘所有条件复位到电源接通时的缺省状态,并停止键盘扫描,等待下一个键盘命令。

⑥F4H:启动键盘。键盘接收到此命令后,用ACK(FAH)作答,清除输出缓冲器,并启动键盘开始扫描。

⑦F3H:设置拍发速率和延时参数。每当按下任一键时,键盘以拍发速率连续送出键的接通码,直到键被释放为止。延时参数是指按下一键后,键盘输出的响应时间。

系统缺省设置:拍发速率=10个/s±20,延时=500ms±20。

当要改变设置时可以使用F3H命令,并后跟一个字节的参数。参数定义如表1所列。

表1

D7

D6D5

D4D3

D2D1D0

C

B

A

计算拍发速率和响应延时的公式如下:

拍发速率=1/[(8 A)×2B×0.00417](1/s)

响应延时=(1 C)×250(ms)

注:缺省的延时参数值为2CH。

此命令的执行过程如下:

a.键盘收到F3H命令后,用FAH予以响应,并停止

扫描和等待随后的参数;

b.键盘若收到随后的设置参数,用另一个ACK响

应,并按其参数设置新的拍发速率和响应延时,

之后重新开始扫描(若键盘原来是开放的);

c.键盘若收到FAH命令,但无随后的设置参数,则

键盘结束命令设置,并保持原来的拍发速率和响

应延时,停止扫描。

⑧F2H,F1,EFH:保留未用。

⑨F0H:设置键盘扫描码命令。此命令用于设置键盘的扫描码,后跟参数指定三种扫描码的哪一种。键盘复位时,默认扫描码是第二种。

⑩EEH:回送命令。此命令用于辅助诊断,要求键盘接收到EEH时也要回送EEH予以响应。若键盘原来是开放的,则继续扫描。

EDH:置位/复位LED指示器。键盘右上角有三个LED指示器,分别反映Caps、Num和Scroll三个键的锁定情况。参数字节如表2所列。

表2

D7D3

D2

D1

D0

保留

1=激励CapsLED

1=激励NumLED

1=激励ScrollLED

此命令执行过程与F3H相似。若命令后跟参数,则按参数设定LED状态并继续扫描。若仅有命令无参数,则不改变LED原状态,并停止扫描。

(2)键盘响应

键盘在下列四种情况下都会向键盘接口发送数据。

①按下任一键,键盘以拍发速率向接口发送键盘接通扫描码。

②释放所按下的键,键盘发送断开扫描码。

③系统向键盘发送键盘命令后,键盘回送应答。

④当用户按键速度超出键盘所能容纳的最大键个数时,键盘做出响应。

后三种情况称为键盘响应。响应字节有7个,定义如下。

①FEH:重新发送响应。当键盘收到一个无效的键盘命令,或者检测到奇偶错的键盘命令时,键盘回送响应字节为FEH,要求系统重发键盘命令。

②FAH:正常应答。对任何一个有效的键盘命令,键盘回送FAH予以响应。

③00H:超限应答。当用户按键速度超出键盘所能容纳的最大键符个数时(16个字节的缓冲器),键盘发送00H。

④FDH:诊断故障应答。键盘接受软件复位命令,执行自测试过程中。若检测到故障,则以FDH应答。此时,键盘停止扫描并等待下一个键盘命令。

⑤AAH:诊断正常应答。键盘在软件复位过程中,正常完成BAT测试,以AAH应答。

⑥FEH:回响命令的应答,对键盘FEH命令的应答。

⑦F0H:断开扫描码前缀,键盘对键符按下后释放的应答,第一个字节为F0H,第二个字节为接通扫描码(有几个键例外)。

3硬件设计

PC系列键盘采用18行×8列的矩阵行列结构。89C51单片机有4个8位I/O端口,因此可以采用P0、P2口再加上P3口的2个(P3.6和P3.7)作为行扫描线。P1口作为列输入线(如果用P0口作列输入线,必须加上拉电阻)。采用P3.0、P3.1作为数据线和时钟线与PC系统进行通信,用P3.2、P3.4、P3.5控制键盘上的3个指示灯。硬件原理如图3所示。

键盘与计算机通过一个五芯(PS/2接口为六芯)插座相接,4个有效引脚的定义分别是电源(VCC)、地(GND)、串行时钟线(SCK)、串行数据线(SIO)。

4软件设计

①消抖及重键处理:通过软件上延时程序来消除抖动;采用后按键优先处理,即多键同时按下时,只重复发送最后按下键的扫描码。

②程序包括键盘扫描子程序、发送键码子程序、发送数据子程序、接收命令子程序、定时器1中断服务程序、主程序等。键盘扫描子程序用于扫描键状态,将被按键的位置号存入缓冲器中;发送键码子程序用于将缓冲区键的接通码或断开码发送给计算机键盘接口或者存在键盘密码缓冲区中;发送数据子程序用于将数据发给计算机键盘接口;接收命令子程序用于接收计算机键盘接口发来的键盘命令;定时器1中断服务子程序用于给程序中的延时提供标准时钟,并具有软件看门狗功能,防止软件出现死机现象;主程序用于系统初始化,子程序调度,锁定状态的显示等。

图6发送缓冲区键码子程序流程图

图4~6是主要软件模块的流程图。单片机源程序见本刊网络补充版(.com)。

5结论

本文介绍的PC/AT键盘具有结构简单、设计灵活、安全可靠的特点,可用于标准PC和嵌入式PC。本键盘可以在标准的键盘基础上进行改造,只需换掉原来的控制芯片即可,可节省设计成本。

单片机C51编程几个有用的模块(1)

KeilC51常用功能模块使用说明

说明

本文档包括单片机系统中常用到的时钟中断、通讯及键盘扫描等模块(见所附源程序)的说明。这些模块使用前后台系统模型。为达到最大的灵活性,需要在用户工程中定义config.h文件,在其中定义各模块可选参数的设置,而不是直接更改源代码。

这些可选内容大部分为宏定义,如果不定义宏相应的功能在编译时被屏蔽,不会增加代码长度。具体可选内容见各模块中的说明。

在Config.h文件中还要包含一个单片机硬件的资源头文件。

各模块使用了定义在Common.h中的一些数据类型。如:BIT(bit)BYTE(unsignedchar)等,具体请参见源程序。

时钟模块

在单片机软件设计中,时钟是重要资源,为了充分利用时钟资源,故设计本时钟模块。本模块使用定时器0,在完成用户指定功能的同时,还能够自动处理一些其它模块中与时钟相关的信息。

时钟模块由声明文件Timer.h以及实现文件Timer.c组成。

用户应该在Config.h中定义宏TIMER_RELOAD来设定定时器0的重装载初值。推荐的定时器0的中断时间大于1毫秒。

在程序的初始化阶段调用时钟模块的初始化函数InitTimerModule()之后,就可以使用时钟模块所以支持的各种功能。具体描述如下:

延时:当用户需要进行一定时间的延时时,可以通过调用Delay()来进行,参数为时钟中断的次数。如时钟中断周期为1ms,想进行100ms的延时,则可以调用Delay(100)。

注意:

如果延时的绝对时间小于时钟中断的周期,则不能够用本方法做到延时。

定时:当程序中需要使用定时功能时,如等待某外部事件,如果在一定时间内发生则继续执行,如果在这段时间内发生,则认为出现错误,转向错误处理机制。

在此推荐一种编程模式,但用户可以用自己认为更合理的方式处理此类问题。

这里简单说明一下关于阻塞式函数及非阻塞式函数。简单说,阻塞式函数就是当检测完成条件,如

果不能够完成则等待,如:

voidCheckSomething()

{

//gbitSuccessFlagisaglobalvariable

while(gbitSuccessFlag==FALSE)

{

//donothingbutwaiting

}

}

可以看到,当bitSuccessFlag没有被设置为TRUE时,函数保持等待状态不返回,这样就是阻塞式的函数。

另外一种情况:

BITCheckSomething()

{

if(gbitSuccessFlag==TRUE)

{

//…

returnTRUE;

}

returnFALSE;

}

在这里,如果所检测的事件有没有完成,函数进行检测之后,立刻返回,通过返回值报告完成情况,如果没有完成,则等待调用者分配再次执行的机会。这样的函数就是非阻塞函数。

在应用定时功能时,首先要将检测函数定义成非阻塞函数。如上面的第二个版本的CheckSomething。

然后下面模式:

BITbitDone=FALSE;

ResetClock();//cleartimerinterrupttimescounter

while(GetClock()

{

if(CheckSomething()==TRUE)

{

bitDone=TRUE;

break;

}

}

if(bitDone==FALSE)

{

//processtimeout

}或者简单写成:

BITbitDone=FALSE;

ResetClock();

while(GetClock()=(z))

当然,用户也可以将IsPackageHeader和IsPackageTailer定义成为函数,通过BIT类型的返回值来向调用者提供与相应宏相同的信息。

另一种办法需要在Config.h文件中定义宏SCOMM_ComplexPackageFormat。(需要注意的是,不能够同时定义SCOMM_SimplePackageFormat和SCOMM_ComplexPackageFormat宏,否则会造成严重的不可预见性错误。

这时需要提供回调函数QueryPackageFormat,原形如下:

BYTEQueryPackageFormat(BYTEbyData,BYTEbyCount,BYTEbyParam);

函数中三个参数的含义与使用简单数据包格式时判断数据包尾的宏的参数相同。

函数通过返回值来通知作为调用者的接收函数对接收到的数据如何处理,但目前这种方法仅为需要处理复杂数据包格式时的一种可选方法,但不推荐。用户如果想使用这种方法可以自己更改接收函数中相应的

#ifdefSCOM_ComplexPackageFormat

#endif//SCOMM_ComplexPackageFormat

预编译指令之间的内容。

例如指定QueryPackageFormat的返回值的含义:

0:继续找数据包头或继续找数据包尾。

1:找到数据包头。

2:找到数据包尾。

3:数据包出错,需要抛弃。

然后更改源代码来实现上面的协议。

注意:当用户需要使用字符串的时候,可以利用简单的包装函数将字符串转换为字节数组。所以没有必要提供专用的字符串处理函数。

键盘扫描模块

键盘扫描模块有两种工作方式,一种为自动的由时钟模块调用,另一种是由程序员自行调用。

1)由时钟模块自动调用的方式

将时钟模块实现文件(Timer.h)及键盘扫描模块的实现文件(KBScan。c)包含进工程,在Config.h文件中添加TIMER_KBSCANDELAY宏。时钟模块自动对时钟中断进行计数,当达到TIMER_KBSCANDELAY宏所定义的值后,自动调用键盘扫描模块中的函数KBScanProcess()进行键盘扫描,也就是说,这个宏的值可以决定按键消抖动的时间。

用户应该提供两个回调函数OnKBScan()及OnKeysPressed()。在函数OnKBScan中进行键盘扫描,并返回扫描码。扫描码的类型缺省为BYTE,当键盘规模较大时,BYTE不能够完全包含键盘信息时,可在Config.h文件中重定义宏KBvalue,如下:

#defineKBvalueWORD

这样,就可以使用16位的键盘扫描码,如果此时还达不到要求,可以将键盘扫描码定义成一个结构,但这样做将会增加代码量及消耗更多的RAM资源,故不推荐。

扫描模块调用OnKBScan取得扫描码,并调用用户可以重定义的宏IsNoKeyPressed来判断是否有键按下,缺省的IsNoKeyPressed实现如下:

#defineIsNoKeyPressed(x)((x)==0x00)

即认为OnKBScan返回0扫描码时为没有键按下,如果扫描函数返回其它非零扫描码做为无键按下的扫描码时,可以在Config.h文件中重定义IsNoKeyPressed宏的实现。

8位键盘扫描码(缺省值)时,相应的扫描函数为:

BYTEOnKBScan()

当扫描模块经过软件消抖动之后,发现有键按下,就会调用另一个回调函数OnKeysPressed。函数的声明应该如下:

voidOnKeyPressed(BYTEbyKBvalue,BYTEbyState)

其中中的参数byKBvalue的类型为BYTE,此为缺省值,如果使用其它类型的扫描码,就将此参数变为相应类型。这个值由OnKBScan返回。另一个参数byState在通常情况下为零。但当用户在Config.h中定义宏KBSCAN_BRUSTCOUNT,同时键盘上的某键被按住不放时,扫描模块对它自己的调用(注意这里和TIMER_KBSCANDELAY宏不同,TIMER_KBSCANDELAY是时钟中断足够的次数后调用扫描模块,而KBSCAN_BRUSHCOUNT为扫描模块自身的被调用次数)进行计数,当达到KBSCAN_BRUSTCOUNT时,扫描模块调用OnKeysPressed,此时第一个参数的含义不变,而byState变成1,同时计数器复位,又经过一段时间后,用值为3的byState调用OnKeysPressed。这样就可以很方便的实现多功能键或者检测某键的长时间被按下。

2)由用户自行调用

由用户自行在程序中调用扫描模块,而不是由时钟中断自行调用。其它与方式1相同。

注意:

1)函数KBScanProcess为非阻塞函数,它将在很快的时间内返回,等待再次分配给它执行的机会。

2)函数KBScanProcess是在时钟中断外部运行的,它的过程可以被任何中断打断,但不影响系统运行。

3)byState的最大值为250,之后被复位为零。

应用举例

现在来举例说明上述几个模块的使用方法。

硬件环境描述:

为了控制一盏灯,需要单片机提供一个做控制功能的开关量,这里不描述外部接口电路,只说明当单片机的P10脚为高电平时,灯灭,当P10脚为低电平时,灯亮。

可以通过计算机由串口发送命令来控制,或通过一个按键(pus

hbutton不是自锁式的按键)来手动控制(按键接在P11脚上,当键没有按下时,P11电平为高,键按下时,引脚电平被接低),当使用按键手动控制的时候,需要给计算机发送通知。

设定串口通讯指令如下:

数据包由0xff做包头,4个字节长,第二个字节为命令代码,第三个字节为数据,最后一个字节为校验位。

命令和数据代码有如下组合:

(计算机发给单片机)

0x100x01:计算机控制灯亮。(数据位是非零值即可)

0x100x00:计算机控制灯灭。

(单片机发给计算机)

0x110x01:单片机正常执行控制指令,返回。(数据位是非零值即可)

0x110x00:单片机不能够正常执行控制指令,或控制指令错(不明含义的数据包或校验错等)。

0x120x01:手动控制灯亮。(数据位是非零值即可)

0x120x00:手动控制灯灭。建立工程:

在硬盘上建立文件夹Projects,在Projects下建立Common文件夹及Example文件夹。将各模块的头文件及实现文件拷贝到Common文件夹下(推荐使用这样的文件组织结构,其它工程也可以建立在Projects下,各工程共享Common文件夹中的代码)。

启动KeilC的IDE,在Example下建立新工程,将各模块的实现文件包含进工程。

在Example文件夹下建立Output文件夹,更改工程设置,将Output作为输出文件和List文件的输出文件夹(推荐使用这样的结构,当保存工程文件时,可以简单的删除Output文件夹中的内容而不会误删有用的工程文件)。

建立工程配置头文件Config.h及工程主文件Example.c,并将Exmaple.c文件加入工程。

输入代码:

代码的具体编写过程略。下面是最后的Config.h文件及Example.c文件。

//

//file:onfig.h

//

#ifndef_CONFIG_H_

#define_CONFIG_H_

#include//使用AT89C52做控制

#include“../Common/Common.h”//使用自定义的数据类型

#defineTIMER_RELOAD922//11.0592MHz晶振,1ms中断周期

#defineTIMER_KBSCANDELAY40//40ms重检测按键状态,即40ms消抖

#defineSCOMM_AsyncInterface//使用异步通讯服务

#defineIsPackageHeader(x)((x)==0xff)//判断包头是不是0xff

#defineIsPackageTailer(x,y,z)((y)<=(z))//判断包的长度是不是足够

#endif//_CONFIG_H_

//

//file:xample.c

//

#include

#include“../Common/Common.h”

#include“../Common/Timer.h”

#include“../Common/Scomm.h”

#include“../Common/KBScan.h”

BITgbitLampState=1;//灯的状态,缺省为off

staticvoidInitialize()

{

InitTimerModule();//初始化时钟模块

InitSCommModule(0xfd,TRUE);//初始化通讯模块,11.0592MHz晶振,

//波特率为19200

EA=1;//开中断

}

voidmain()

{

Initialize();//初始化

while(TRUE)//主循环

{

ImpTimerService();//实现时钟中断服务,如键盘扫描

AsyncRecePackage(4);//接收4个字节长的数据包

}

}

//在中断外部响应时钟中断事件

voidOnTimerEvent()

{

//donothing

}

//控制外部灯

staticvoidTriggerLamp(BITbEnable)

{

P10=~bEnable;//需要反相控制

}

//键扫描回调函数

BYTEKBScan()

{

BITb;

P11=1;//读之前拉高引脚电平

b=P11;//读入引脚状态

return~b;//数据反相做扫描码

}

//计算校验和

staticBYTECalcCheckSum(BYTE*pbyBuf,BYTEbyLen)

{

BYTEby,bySum=0;

for(by=0;by

return0–bySum;

}

//接收到键盘消息回调函数

voidOnKeyPressed(BYTEbyvalue,BYTEbyState)

{

BYTEby[4];

if(byState==0)

{

switch(byvalue)

{

case0x01:

gbitLampState=~gbitLampState;//灯状态取反

TriggerLamp(gbitLampState);//执行控制

by[0]=0xff;//构造数据包

by[1]=0x12;

by[2]=(BYTE)gbitLampState;

by[3]=CalcCheckSum(by,3);//求校验和

SendPackage(by,4);//发送数据包

break;

//处理其它扫描码

default:

break;

}

}

//接收到数据包回调函数

voidOnRecePackage(BYTE*pbyBuf,BYTEbyBufLen)

{

BYTEby[4];

by[0]=0xff;

by[1]=0x11;

if(byBufLen!=4||pbyBuf[3]!=CalcCheckSum(pbyBuf,3))

{

by[2]=0;

by[3]=CalcCheckSum(by,3);

SendPackage(by,4);//处理长度或校验和不正确

}

switch(pbyBuf[1])

{

case0x10:

gbitLampState=(BIT)pbyBuf[2];

TriggerLamp(gbitLampState);

by[2]=1;

by[3]=CalcCheckSum(by,3);

SendPackage(by,4);//发送成功执行通知

break;

default://不知道的命令

by[2]=0;

by[3]=CalcCheckSum(by,3);

SendPackage(by,4);//发送没有成功执行通知

break;

}

}

4.课程设计单独计算成绩,考评方法见其大纲。

三、理论考试说明

1.单片机技术及应用理论考试,采用闭卷笔试形式,考试时间120分钟。

2.期末考试试题根据教学大纲,其范围和难度按照本方案中制订的考试考核内容和要求确定。考试命题覆盖考试大纲要求范围。

3.期末考试试题类型有以下几种:

①填空题;

②选择题;

③判断题;

④简答题⑤综合应用题。

四、考试考核要求层次

按照教学大纲的要求,理论考试要求分为掌握、理解和了解三个层次。

掌握:

对于本课程的重点内容要求学生达到掌握的程度。即能够全面、深入理解和熟练掌握所学内容,并能够用其分析、初步设计和解答与应用相关的问题,能够举一反三。要求学生掌握的内容也就是考试的主要内容,在考试中所占比例约70。

理解:

对于本课程的一般内容要求学生能够理解。即要求学生能够较好地理解所学内容,并且对所涉及的内容能够进行简单分析和判断。要求学生理解的内容也是考试的内容,在考试中所占比例约25。

了解:

对于本课程的次要内容要求学生能够了解。要求学生了解的内容,一般是指在眼下不必进一步深入和扩展,有些也许需要学生自己今后在工作中进行深入研究。对要求了解的内容,在考试中占较小比例,不超过5。实验五:按键电路、显示电路实验一、实验目的:1.掌握独立式按键电路与矩阵式按键电路的设计方法。2.掌握数码管显示电路的工作原理3.掌握源程序编辑软件UltraEdit,编译软件KeilC51、仿真软件Proteus的使用方法4.掌握硬件仿真器ME-52A的使用方法二、实验器材:1.单片机实验板2.单片机硬件仿真器ME-51A3.计算机4.电源三、实验要求:1.电路如图5所示,用单片机的P3口所接的四个独立式按键控制p1口流水灯花样的方法;具体表现为:p3.0、P3.1、P3.2、P3.3四个小按键分别实现了四个控制:(1)跑灯:即P1.0---1.7亮点流动:(2)流水灯:即P1.0-1.7依次点亮(3)交叉闪烁:即P0.0,P0.2,P0.4,P0.6和P0.1,P0.3,P0.5,P0.7轮流点亮(4)停止;在任何状态下按此键程序停止运行.2.电路如图6所示,用P2口所接的4×4矩阵式键盘作为输入,在P1口所接的数码管上显示出每个按键的0~F序号,键盘的布局如下表所示:FEDCBA9876543210四、实验原理:1.独立式按键电路显示如图5所示,从图中可看出,判断有无键按下,只要检测P3.0~P3.3相应端口的高低电平即可,若检测有某一端口为低电平,表明该端口有按键按下,经延时消抖后转去执行相应的功能子程序。若为高电平,表明无键按1.独立式按键电路如图5所示,下,继续检测。示例程序如下:ORG000HLJMPSTAR1ORG0030HSTAR1:MOVP3,#0FFH;置P3口为输入态JNBP3.0,FUN0;判别P3.0是否有键按下,是,则转FUN0JNBP3.1,FUN1;判别P3.1是否有键按下,是,则转FUN1JNBP3.2,FUN2;判别P3.2是否有键按下,是,则转FUN2JNBP3.3,FUN3;判别P3.3是否有键按下,是,则转FUN3JNBF0,STAR1;曾经有键按下F0置1RET图5FUN0:LCALLDL10MS;消岸抖动JBP3.0,STAR1WAITL0:JNBP3.0,WAITL0;等待键释放SETBF0FUN01:LCALLFUN00LCALLSTAR1LJMPFUN01FUN1:LCALLDL10MS;消岸抖动JBP3.1,STAR1WAITL1:JNBP3.1,WAITL1;等待键释放SETBF0FUN10:LCALLFUN11LCALLSTAR1LJMPFUN10FUN2:LCALLDL10MS;消岸抖动JBP3.2,STAR1WAITL2:JNBP3.2,WAITL2;等待键释放SETBF0FUN20:LCALLFUN22LCALLSTAR1LJMPFUN20FUN3:LCALLDL10MS;消岸抖动JBP3.3,STAR1WAITL3:JNBP3.3,WAITL3;等待键释放CLRF0MOVP1,#0FFH;关显示LJMPSTAR1FUN00:MOVA,#0FEH;跑灯子程序FUN000:MOVP1,ALCALLDL05SJNBACC.7,OUTRLAAJMPFUN000OUT:RETFUN11:MOVA,#0FEH;流水灯子程序FUN111:MOVP1,ALCALLDL05SJZOUTRLAANLA,P1AJMPFUN111FUN22:MOVA,#0AAH;交叉点亮子程序MOVP1,ALCALLDL30SCPLAMOVP1,ALCALLDL30SRET;____________;;延时程序;;____________;DL512:MOVR2,#0FFHLOOP1:DJNZR2,LOOP1RETDL10MS:MOVR3,#14HLOOP2:LCALLDL512DJNZR3,LOOP2RETDL05S:MOVR4,#0AHLOOP3:LCALLDL10MSDJNZR4,LOOP3RETDL30S:MOVR5,#03HLOOP4:LCALLDL05SDJNZR5,LOOP4RETEND2.矩阵式按键电路显示如图6所示。采用扫描方式进行按键的识别检测,并将对应按键的键号用查表指令将对应的代码显示在数码管上。图6参考程序如下:ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60H;设置堆栈指针SCAN:MOVR3,#0F7H;置行扫描初值MOVR1,#00H;到TABLE表中取码的指针SCAN1:MOVA,R3MOVP2,A;扫描输出MOVA,P2;重读P2口状态MOVR4,A;暂存于R4吕中SETBC;C=1MOVR5,#03H;扫描4列初值L1:RLCA;A中内容循环左移JNCKEYIN;C=0,有键按下,转消抖INCR1;取码指针加1DJNZR5,L1;无键按下,继续检测MOVA,R3;扫描下一行SETBCRRCAMOVR3,AJCSCAN1;4行是否扫描完,未完,继续LJMPSCANKEYIN:MOVR7,#10;削除抖动D2:MOVR6,#248DJNZR6,$DJNZR7,D2D3:MOVA,P2;按键放开否?XRLA,R4JZD3MOVA,R1MOVDPTR,#TABLE;到TABLE中取码MOVCA,@A DPTRMOVP1,ALJMPSCANTABLE:DB0C0H,0F9H,0A4H,0B0H,80H,90H,88H,83H,0C6H,0A1H,86H,8EHENDDB80H,90H,88H,83HDB0C6H,0A1H,86H,8EHEND五、实验步骤:1.运行UltraEdit-32源程序编辑软件,输入、编辑汇编语言源程序。2.运行KeiluVision2源程序编译软件,对源程序进行编译,得到目标代码文件。3.运行Proteus模拟仿真软件,打开已绘制好的仿真电路原理图,进行模拟 仿真。4.把硬件仿真器ME-52A与单片实验板连接好,再用硬件仿真器进行仿真验证。六、实验分析与总结1.用仿真系统调试简单程序结构、分支程序结构、循环程序结构、子程序结构和中断结构的关键在于,如何将对程序的分析理解和开发系统提供的基本功能有机地结合起来,其前提条件是必须对源程序的作用、结构特点、运行过程与结果有较全面的认识,并能根据程序运行过程中出现的现象和结果分析并判断产生各种故障现象的原因,再运用排除法逐一检验各种判断是否准确。2.掌握程序结构特点的基础上,合理选择观测点,通过观察在观测点处参数及路径的变化检验程序运行的结果。3.高调试程序的效率,应对单片机开发系统所提供的几种程序运行调试方式有足够的了解并能熟练地运用。例如,在调试过程中,若要观察最终结果,则可选择全速运行调试;若要观察相关指令的运行结果或运行路径的变化过程,则可选择单步运行;若要检查子程序的运行过程,则可选择跟踪运行调试;若要检查循环程序或中断服务程序,则可选择断点运行调试;若要定点检查程序运行到某处的结果时,则可选择快速运行到光标处调试。但实际中究竟选用哪种方法更适宜或哪几种方法结合使用更快捷,将随着分析能力与操作的熟练程度逐步提高。4.程序运行结果是否正确时,应运用单片机开发系统所提供的交互界面,将程序运行过程中程序计数器PC(地址)的变化、各单元(内部RAM和外部RAM)内容的变化、特殊功能寄存器内容的变化、堆栈指针SP内容的变化与程序的理论分析结果相对照。5.程序和调试程序时,需要多次反复的过程,并非一次就能排除全部故障,特别是单片机应用系统的硬件电路和汇编程序相结合的综合调试就更加复杂,因此,必须通过反复调试,不断修改硬件和软件,直到最终符合设计要求为止。如果在调试中能够根据实验现象预先对产生故障的原因加以判断和分析,并制定出相应的调试方法和步骤,可缩小排除故障的范围,提高调试效率。七、思考与练习填空题

1、设X=5AH,Y=36H,则X与Y“或”运算为__7EH_______,X与Y的“异或”运算为___6CH_____。

2、若机器的字长为8位,X=17,Y=35,则X+Y=__110100_____,X-Y=_11101110______(要求结果写出二进制形式)。

3、单片机的复位操作是____高电平______(高电平/低电平),单片机复位后,堆栈指针SP的值是___07h_____。

4、单片机中,常用作地址锁存器的芯片是__74HC373____________,常用作地址译码器芯片是_____74HC138____________。

5、若选择内部程序存储器,应该设置为_____高_______(高电平/低电平),那么,PSEN信号的处理方式为___不用__________________。

6、单片机程序的入口地址是____0000H__________,外部中断1的入口地址是______0013H_________。

7、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为__0.5us_______,机器周期为_____2us__________。

8、扩展芯片的选择方法有两种,它们分别是___线选法_______________和_____译码法__________。

9、单片机的内部RAM区中,可以位寻址的地址范围是____20H~2FH______________,特殊功能寄存器中,可位寻址的地址是___是能被8整除的地址_________________。

10、子程序返回指令是___ret______,中断子程序返回指令是__reti。

11、8051单片机的存储器的最大特点是内部RAM与外部RAM分开编址。

12、8051最多可以有32个并行输入输出口,最少也可以有8个并行口。

13、函数是C语言的基本单位。

14、串行口方式2接收到的第9位数据送SCON寄存器的RB8位中保存。

15、MCS-51内部提供3个可编程的16位定时/计数器,定时器有4种工作方式。

16、一个函数由两部分组成,即说明部分和语句部分。

17、串行口方式3发送的第9位数据要事先写入SCON寄存器的TB8位。

18、利用8155H可以扩展3个并行口,256个RAM单元。

19、C语言中输入和输出操作是由库函数scanf和printf等函数来完成。

二、选择题

1、C语言中最简单的数据类型包括(B)。

A、整型、实型、逻辑型B、整型、实型、字符型

C、整型、字符型、逻辑型D、整型、实型、逻辑型、字符型

2、当MCS-51单片机接有外部存储器,P2口可作为(C)。

A、数据输入口B、数据的输出口

C、准双向输入/输出口D、输出高8位地址

3、下列描述中正确的是(D)。

A、程序就是软件B、软件开发不受计算机系统的限制

C、软件既是逻辑实体,又是物理实体D、软件是程序、数据与相关文档的集合

4、下列计算机语言中,CPU能直接识别的是(D)。

A、自然语言B、高级语言C、汇编语言D、机器语言

5、MCS-5l单片机的堆栈区是设置在(C)中。

A、片内ROM区B、片外ROM区C、片内RAM区D、片外RAM区

6、以下叙述中正确的是(C)。

A、用C语言实现的算法必须要有输入和输出操作

B、用C语言实现的算法可以没有输出但必须要有输入

C、用C程序实现的算法可以没有输入但必须要有输出

D、用C程序实现的算法可以既没有输入也没有输出

7、定时器/计数器工作方式1是(D)。

A、8位计数器结构B、2个8位计数器结构

C、13位计数结构D、16位计数结构

8、C语言提供的合法的数据类型关键字是(B)。

A、DoubleB、shortC、integerD、Char

9、片内RAM的20H~2FH为位寻址区,所包含的位地址是(B)。

A、00H~20HB、00H~7FHC、20H~2FHD、00H~FFH

10、以下能正确定义一维数组的选项是(B)。

A、inta[5]={0,1,2,3,4,5};B、chara[]={0,1,2,3,4,5};

C、chara={’A’,’B’,’C’};D、inta[5]="0123";

11、数据的存储结构是指(D)。

A、存储在外存中的数据B、数据所占的存储空间量

C、数据在计算机中的顺序存储方式D、数据的逻辑结构在计算机中的表示

12、下列关于栈的描述中错误的是(C)。

A、栈是先进后出的先性表B、栈只能顺序存储

C、栈具有记忆作用D、对栈的插入和删除操作中,不需要改变栈底指针

13、在寄存器间接寻址方式中,间址寄存器中存放的数据是(B)。

A、参与操作的数据B、操作数的地址值

C、程序的转换地址D、指令的操作码

14、MCS-51单片机的复位信号是(A)有效。

A、高电平B、低电平C、脉冲D、下降沿

15、为了使模块尽可能独立,要求(B)。

A、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强

B、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱

C、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱

D、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强

16、若MCS-51单片机使用晶振频率为6MHz时,其复位持续时间应该超过(B)。

A、2μsB、4μsC、8μsD、1ms

17、以下选项中可作为C语言合法常量的是(A)

A、-80B、-080C、-8e1.0D、-80.0e

18、能够用紫外光擦除ROM中程序的只读存储器称为(C)。

A、掩膜ROMB、PROMC、EPROMD、EEPROM

19、以下不能定义为用户标识符是(D)。

A、MainB、_0C、_intD、sizeof

20、下选项中,不能作为合法常量的是(B)。//幂不能为小数

A、1.234e04B、1.234e0.4C、1.234e 4D、1.234e0

21、以下叙述中错误的是(C)

A、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B、数组名代表的是数组所占存储区的首地址,其值不可改变

C、当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息

D、可以通过赋初值的方式确定数组元素的个数

22、以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是(D)

A、feof(fp)B、ftell(fp)C、fgetc(fp)D、rewind(fp)

23、存储16×16点阵的一个汉字信息,需要的字节数为(A)

A、32B、64C、128D、256

24、已知1只共阴极LED显示器,其中a笔段为字形代码的最低位,若需显示数字1,则它的字形代码应为(B)。

A、06HB、F9HC、30HD、CFH

25、在C语言中,合法的长整型常数是(A)

A、OLB、4962710C、324562&D、216D

26、以下选项中合法的字符常量是(B)

A、"B"B、’\010’C、68D、D

27、若PSW.4=0,PSW.3=1,要想把寄存器R0的内容入栈,应使用(D)指令。

A、PUSHR0B、PUSH@R0C、PUSH00HD、PUSH08H

28、在片外扩展一片2764程序存储器芯片要(B)地址线。

A、8根B、13根C、16根D、20根

29、设MCS-51单片机晶振频率为12MHz,定时器作计数器使用时,其最高的输入计数频率应为(C)

A、2MHzB、1MHzC、500kHzD、250kHz

30、下列数据字定义的数表中,(A)是错误的。

A、DW“AA”B、DW“A”C、DW“OABC”D、DWOABCH

三、判断题

(√)1、在对某一函数进行多次调用时,系统会对相应的自动变量重新分配存储单元。

(×)2、在C语言的复合语句中,只能包含可执行语句。

(√)3、自动变量属于局部变量。

(×)4、Continue和break都可用来实现循环体的中止。

(√)5、字符常量的长度肯定为1。

(×)6、在MCS-51系统中,一个机器周期等于1.5μs。

(√)7、C语言允许在复合语句内定义自动变量。

(√)8、若一个函数的返回类型为void,则表示其没有返回值。

(×)9、所有定义在主函数之前的函数无需进行声明。

(×)10、定时器与计数器的工作原理均是对输入脉冲进行计数。

(×)11、END表示指令执行到此结束。

(√)12、ADC0809是8位逐次逼近式模/数转换接口。

(√)13、MCS-51的相对转移指令最大负跳距是127B。

(×)14、MCS-51的程序存储器只是用来存放程序的。

(√)15、TMOD中的GATE=1时,表示由两个信号控制定时器的的启停。

(×)16、MCS-51的特殊功能寄存器分布在60H~80H地址范围内。

(×)17、MCS-51系统可以没有复位电路。

(×)18、片内RAM与外部设备统一编址时,需要专门的输入/输出指令。

(√)19、锁存器、三态缓冲寄存器等简单芯片中没有命令寄存和状态寄存等功能。

(√)20、使用8751且=1时,仍可外扩64KB的程序存储器。

四、简答题

1、在使用8051的定时器/计数器前,应对它进行初始化,其步骤是什么?

答:(1)确定T/C的工作方式——编程TMOD寄存器;

(2)计算T/C中的计数初值,并装载到TH和TL;

(3)T/C在中断方式工作时,须开CPU中断和源中断——编程IE寄存器;

(4)启动定时器/计数器——编程TCON中TR1或TR0位。

2、什么是重入函数?重入函数一般什么情况下使用,使用时有哪些需要注意的地方?

答:多个函数可以同时使用的函数,称为重入函数。

通常情况下,C51函数不能被递归调用,也不能应用导致递归调用的结构。有此限制是由于函数参数和局部变量是存储在固定的地址单元中。重入函数特性允许你声明一个重入函数。即可以被递归调用的函数。

重入函数可以被递归调用,也可以同时被两个或更多的进程调用。重入函数在实时应用中及中断服务程序代码和非中断程序代码必须共用一个函数的场合中经常用到。

3、8051引脚有多少I/O线?他们和单片机对外的地址总线和数据总线有什么关系?地址总线和数据总线各是几位?

答:8051引脚共有40个引脚,8051的地址总线由P2和P0口提供,P2口是地址总线的高8位,P0口是地址总线的低8位;数据总线由P0口提供;P0口的地址总线和数据总线是分时进行的,P0口的地址总线需要外接地址锁存器完成地址锁存。

地址总线共16位,数据总线是8位。

4、在有串行通信时,定时器/计数器1的作用是什么,怎样确定串行口的波特率?

答:在有串行通信时,定时器/计数器1的作用是串行口发生器。

串行口的波特率根据串行口的工作方式具有不同的计算方式:

方式0的波特率固定为晶体振荡器的十二分之一;

方式1的波特率=2SMOD.(定时器1的溢出率)/32;

方式2波特率=2SMOD.(fosc/64);

方式3波特率同方式1(定时器l作波特率发生器)。

5、如何消除键盘的抖动?怎样设置键盘中的复合键?

答:由于按键是机械开关结构,所以当用手按下其中一个键时,往往会出现所按键在闭合位置和断开位置之间发生跳几下后才会稳定到闭合状态的情况。在释放一个键时,也会出现类似的情况,这就是键的抖动,抖动的持续时间不一,但通常不会大于10ms。

若抖动问题不解决,就会引起对闭合键的多次读入。对于键抖动最方便的解决方法就是当发现有键按下后,不是立即进行扫描,而是延时大约10ms后再进行。由于一个键按下的时间一般会持续上百毫秒,所以延迟10ms后再扫描处理并不迟。

复合键可以仿照计算机复合键的处理方法,通常可以假设一个键具有复合功能,再与其它减的键值组合成复合键。1、矩阵式键盘的结构与工作原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。

2、矩阵式键盘的按键识别方法

确定矩阵式键盘上何键被按下介绍一种“行扫描法”。

行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为 高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

下面给出一个具体的例子:

图仍如上所示。8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源 5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。

1、检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。

2、去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。

3、若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:

P1.71110

P1.61101

P1.51011

P1.40111

在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值

4、为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。

键盘扫描程序:

从以上分析得到键盘扫描程序的流程图如图2所示。程序如下

SCAN:MOVP1,#0FH

MOVA,P1

ANLA,#0FH

CJNEA,#0FH,NEXT1

SJMPNEXT3

NEXT1:ACALLD20MS

MOVA,#0EFH

NEXT2:MOVR1,A

MOVP1,A

MOVA,P1

ANLA,#0FH

CJNEA,#0FH,KCODE;

MOVA,R1

SETBC

RLCA

JCNEXT2

NEXT3:MOVR0,#00H

RET

KCODE:MOVB,#0FBH

NEXT4:RRCA

INCB

JCNEXT4

MOVA,R1

SWAPA

NEXT5:RRCA

INCB

INCB

INCB

INCB

JCNEXT5

NEXT6:MOVA,P1

ANLA,#0FH

CJNEA,#0FH,NEXT6

MOVR0,#0FFH

RET

键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。

到本课为止,本站教程暂告一个段落!感谢大家的关心和支持!矩阵按键部分由16个轻触按键按照4行4列排列,连接到JP50端口。将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。确定矩阵式键盘上何键被按下,介绍一种“行扫描法”。行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法.判断键盘中有无键按下:将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。判断闭合键所在的位置:在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。下面给出一个具体的例子:电路图路径:G:\图片\电路图片\xl100097.jpg8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。1.检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。2.去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。3.若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:P1.71110P1.61101P1.51011P1.40111在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。4.为了保证键每闭合一次CPU仅作一次处理,必须去除键释放时的抖动。实验目的:通过XL1000的16位矩阵按键,在数码管上分别显示0---9,A,B,C,D,E,F。接线方法:1用一条8PIN数据排线,把矩阵按键部份的JP50,接到CPU部份的P1口JP44.2接8位数码管的数据线。将数码管部份的数据口JP5接到CPU部份的P0口JP51.3接8位数码管的显示位线。将数码管部份的显示位口JP8接到CPU部份的P2口JP52.参考程序:;本程序实现扫描按键显示功能.;分别按16个键盘显示分别显示数字123A456B789C*0#D;键盘口P1,数码管显示第二位p21,数码管段位p0口org0000hajmpmainorg0030hmain:movdptr,#tab;将表头放入DPTRlcallkey;调用键盘扫描程序movca,@a dptr;查表后将键值送入ACCmovp0,a;将Acc值送入P0口CLRP2.1;开显示ljmpmain;返回反复循环显示KEY:LCALLKS;调用检测按键子程序JNZK1;有键按下继续LCALLDELAY2;无键按调用延时去抖AJMPKEY;返回继续检测按键K1:LCALLDELAY2LCALLDELAY2;有键按下延时去抖动LCALLKS;再调用检测按键程序JNZK2;确认有按下进行下一步AJMPKEY;无键按下返回继续检测K2:MOVR2,#0EFH;将扫描值送入R2暂存MOVR4,#00H;将第一列值送入R4暂存K3:MOVP1,R2;将R2的值送入P1口L6:JBP1.0,L1;P1.0等于1跳转到L1MOVA,#00H;将第一行值送入ACCAJMPLK;跳转到键值处理程序L1:JBP1.1,L2;P1.1等于1跳转到L2MOVA,#04H;将第二行的行值送入ACCAJMPLK;跳转到键值理程序进行键值处理L2:JBP1.2,L3;P1.2等于1跳转到L3MOVA,#08H;将第三行的行值送入ACCAJMPLK;跳转到键值处理程序L3:JBP1.3,NEXT;P1.3等于1跳转到NEXT处MOVA,#0cH;将第四行的行值送入ACCLK:ADDA,R4;行值与列值相加后的键值送入APUSHACC;将A中的值送入堆栈暂存K4:LCALLDELAY2;调用延时去抖动程序LCALL KS;调用按键检测程序JNZK4;按键没有松开继续返回检测POPACC;将堆栈的值送入ACCRETNEXT:INCR4;将列值加一MOVA,R2;将R2的值送入AJNBACC.7,KEY;扫描完至KEY处进行下一扫描RLA;扫描未完将A中的值右移一位进行下一列的扫描MOVR2,A;将ACC的值送入R2暂存AJMPK3;跳转到K3继续KS:MOVP1,#0FH;将P1口高四位置0低四位值1MOVA,P1;读P1口XRLA,#0FH;将A中的值与A中的值相异或RET;子程序返回DELAY2:;40ms延时去抖动子程序MOVR5,#08HL7:MOVR6,#0FAHL8:DJNZR6,L8DJNZR5,L7RETtab:db28h,34h,28h,34h,0a9h,60h,20h,7ah,20h,21h,61h,74h,30h,62h,0a2h,7eh;0h0hc9878654a321轮流显示键盘因为无法表达*#就用H表示,B用8表示end这是我做成功的4X4键盘扫描源程序,P1.0-P1.3做四根列线,P1.4-P1.7做四根行线。

数码管的字型表是按照标准接法做的,按对应的按键数码管显示对应的数字。

以下是源程序:

KEYBUFEQU30H

ORG00H

START:MOVKEYBUF,#2

MOVP2,#00001111B

WAIT:

MOVP1,#0FFH

CLRP1.4

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY1

LCALLDELY10MS

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY1

MOVA,P1

ANLA,#0FH

CJNEA,#0EH,NK1

MOVKEYBUF,#0

LJMPDK1

NK1:CJNEA,#0DH,NK2

MOVKEYBUF,#1

LJMPDK1

NK2:CJNEA,#0BH,NK3

MOVKEYBUF,#2

LJMPDK1

NK3:CJNEA,#07H,NK4

MOVKEYBUF,#3

LJMPDK1

NK4:NOP

DK1:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A DPTR

MOVP0,A

DK1A:MOVA,P1

ANLA,#0FH

XRLA,#0FH

JNZDK1A

NOKEY1:

MOVP1,#0FFH

CLRP1.5

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY2

LCALLDELY10MS

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY2

MOVA,P1

ANLA,#0FH

CJNEA,#0EH,NK5

MOVKEYBUF,#4

LJMPDK2

NK5:CJNEA,#0DH,NK6

MOVKEYBUF,#5

LJMPDK2

NK6:CJNEA,#0BH,NK7

MOVKEYBUF,#6

LJMPDK2

NK7:CJNEA,#07H,NK8

MOVKEYBUF,#7

LJMPDK2

NK8:NOP

DK2:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A DPTR

MOVP0,A

DK2A:MOVA,P1

ANLA,#0FH

XRLA,#0FH

JNZDK2A

NOKEY2:

MOVP1,#0FFH

CLRP1.6

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY3

LCALLDELY10MS

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY3

MOVA,P1

ANLA,#0FH

CJNEA,#0EH,NK9

MOVKEYBUF,#8

LJMPDK3

NK9:CJNEA,#0DH,NK10

MOVKEYBUF,#9

LJMPDK3

NK10:CJNEA,#0BH,NK11

MOVKEYBUF,#10

LJMPDK3

NK11:CJNEA,#07H,NK12

MOVKEYBUF,#11

LJMPDK3

NK12:NOP

DK3:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A DPTR

MOVP0,A

DK3A:MOVA,P1

ANLA,#0FH

XRLA,#0FH

JNZDK3A

NOKEY3:

MOVP1,#0FFH

CLRP1.7

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY4

LCALLDELY10MS

MOVA,P1

ANLA,#0FH

XRLA,#0FH

JZNOKEY4

MOVA,P1

ANLA,#0FH

CJNEA,#0EH,NK13

MOVKEYBUF,#12

LJMPDK4

NK13:CJNEA,#0DH,NK14

MOVKEYBUF,#13

LJMPDK4

NK14:CJNEA,#0BH,NK15

MOVKEYBUF,#14

LJMPDK4

NK15:CJNEA,#07H,NK16

MOVKEYBUF,#15

LJMPDK4

NK16:NOP

DK4:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A DPTR

MOVP0,A

DK4A:MOVA,P1

ANLA,#0FH

XRLA,#0FH

JNZDK4A

NOKEY4:

LJMPWAIT

DELY10MS:

MOVR6,#10

D1:MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

TABLE:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H;0-9

DB088H,083H,0C6H,0A1H,086H,08EH,089H,0CFH,0C7H,0C8H;A,B,C,D,E,F,H,I,L,N,

END;P3.1数据采集控制

;P2.6P2.7个位十位显示转换控制

;P1口接8个开关模拟数据

;P1.0-P1.3为个位开关量输入

;P1.4-P1.7为十位开关量输入

;此程序仅供参考

;功能P1口接8个开关输入量4个一组,分别为个位,十位输入

;P0口接一个数码管,依次显示输入量。P3.1控制是否读入

;开关量。P2.6P2.7控制是否显示个位或十位

ORG100h

LJMPSTAR

STAR:MOVP1,#0FFH

SETBP3.1数据读入标志

MOVR0,#100,循环工作次数

LOOP:JBP3.1,$P3.1低电平时,采集P1口数据开关量处理显示阶段不再应答P3.1

MOVA,P1

PUSHACC

ANLA,#0FH取个位数值

MOVR1,A个位数值保存到R1

POPACC

ANLA,#0F0H

SWAPA高4位转成字节信息

MOVR2,A十位数值保存到R2

MOVDPTR,#TABLED

MOVA,R1

MOVCA,@A DPTR

MOVP0,A

CLRP2.6个位显示

ACALLDELAY500MS

SETBP2.6

MOVA,R2

MOVCA,@A DPTR

MOVP0,A

CLRP2.7十位显示

ACALLDELAY500MS

SETBP2.7

DJNZR0,LOOP

DELAY500MS:延时500毫秒子程略

RET

TABLED:DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h

DB80H,90H,88h,83h,0c6h,0a1h,86h,8eh

END#include

typedefunsignedcharBYTE;

BYTEcodeTABLED[16]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0X0f8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};

BYTEDATled;

sbitP26=P2^6;

sbitP27=P2^7;

sbitP31=P3^1;

intTIME;

voidtimedelay(DTIME)

intDTIME;

{

intI;

for(I=0;I<=DTIME;I );

}

voidmain()

{

intTEMP;

P26=1;

P27=1;

P31=1;

P1=0xFF;

TIME=1000;

while(1){

while(P31==0){

DATled=P1;

TEMP=DATled&0x0f4;

P0=TABLED[TEMP];

P27=0;

timedelay(TIME);

P27=1;

}

}

}1.实验任务在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。2.电路原理图图4.24.13.硬件电路连线(1).把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;(2).把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;4.程序设计内容(1).8X8 点阵LED工作原理说明8X8点阵LED结构如下图所示图4.24.2从图4.24.2中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:一根竖柱:对应的列置1,而行则采用扫描的方法来实现。一根横柱:对应的行置0,而列则采用扫描的方法来实现。5.汇编源程序

ORG00H

START:NOP

MOVR3,#3

LOP2:MOVR4,#8

MOVR2,#0

LOP1:MOVP1,#0FFH

MOVDPTR,#TABA

MOVA,R2

MOVCA,@A DPTR

MOVP3,A

INCR2

LCALLDELAY

DJNZR4,LOP1

DJNZR3,LOP2

MOVR3,#3

LOP4:MOVR4,#8

MOVR2,#7

LOP3:MOVP1,#0FFH

MOVDPTR,#TABA

MOVA,R2

MOVCA,@A DPTR

MOVP3,A

DECR2

LCALLDELAY

DJNZR4,LOP3

DJNZR3,LOP4

MOVR3,#3

LOP6:MOVR4,#8

MOVR2,#0

LOP5:MOVP3,#00H

MOVDPTR,#TABB

MOVA,R2

MOVCA,@A DPTR

MOVP1,A

INCR2

LCALLDELAY

DJNZR4,LOP5

DJNZR3,LOP6

MOVR3,#3

LOP8:MOVR4,#8

MOVR2,#7

LOP7:MOVP3,#00H

MOVDPTR,#TABB

MOVA,R2

MOVCA,@A DPTR

MOVP1,A

DECR2

LCALLDELAY

DJNZR4,LOP7

DJNZR3,LOP8

LJMPSTART

DELAY:MOVR5,#10

D2:MOVR6,#20

D1:MOVR7,#248

DJNZR7,$

DJNZR6,D1

DJNZR5,D2

RET

TABA:DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH

TABB:DB01H,02H,04H,08H,10H,20H,40H,80H

END

6.C语言源程序

#include

unsignedcharcodetaba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f0;j--);

}

voidmain(void)

{

unsignedchari,j;

while(1)

{

for(j=0;j<3;j )

//fromlefttoright3time

{

for(i=0;i<8;i )

{

P3=taba[i];

P1=0xff;

delay1();

}

}

for(j=0;j<3;j )

//fromrighttoleft3time

{

for(i=0;i<8;i )

{

P3=taba[7-i];

P1=0xff;

delay1();

}

}

for(j=0;j<3;j )

//fromtoptobottom3time

{

for(i=0;i<8;i )

{

P3=0x00;

P1=tabb[7-i];

delay1();

}

}

for(j=0;j<3;j )

//frombottomtotop3time

{

for(i=0;i<8;i )

{

P3=0x00;

P1=tabb[i];

delay1();

}

}

}

}LED点阵显示实验一.实验要求

编程实现中英文字符的显示。

二.实验目的

1.了解LED点阵显示的基本原理和实现方法。

2.掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法。

三.实验电路及连线

点阵显示模块WTD3088的(红色)列输入线接至内部LED的阴极端,行输入线接至内部LED的阳极端(若阳极端输入为高电平,阴极端输入低电平,则该LED点亮)。发光点的分布如图22-0所示。

Fig22-0WTD3088LED分布

如图22-1示,本实验模块使用74LS374来控制列输入线的电平值。将74LS374的某输出置0,则对应的LED阴极端被置低。如图22-2示,本实验模块使用74LS273来控制行输入线,并通过9013提供电流驱动。将74LS273的某输出置1,则对应的LED阳极端被置高。每次系统重新开启或总清后,74LS273输出为全0,LED显示被关闭。

通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。

Fig22-1LED模块及列扫描电路Fig22-2行扫描电路

Fig22-3地址译码电路

本实验模块使用4块WTD3088组成16×16点阵,以满足汉字显示的要求。为了方便的控制四个单元,使用了一片74LS139译码,产生四个地址片选信号:CLKR1=CSLED,CLKR2=CSLED 1,用于行控制的两片74LS273;CLKC1=CSLED 2,CLKC2=CSLED 3,用于列控制的两片74LS374。

实验接线:按示例程序,模块的CSLED接51/96地址的8000H。

四.实验说明

使用高亮度LED发光管构成点阵,通过编程控制可以显示中英文字符、图形及视频动态图形。LED显示以其组构方式灵活、亮度高、技术成熟、成本低廉等特点在证券、运动场馆及各种室内/外显示场合得到广泛的应用。

所显示字符的点阵数据可以自行编写(即直接点阵画图),也可从标准字库(如ASC16、HZ16)中提取。后者需要正确掌握字库的编码方法和字符定位的计算。

实验盘片中“字符转换”子目录下提供的Basc16.exe,BHz16.exe可方便的将单个字符的码表从标准字库Asc16,Hzk16中提取出来。具体使用方法是运行上述可执行程序,根据提示输入所需字符(如是汉字还需要先启动dos下的汉字环境,如ucdos,pdos95等)。程序将该字符的码表提取出来,存放在该字符ASC或区位码为文件名称的.dat文件中。用户只需将该文件中内容拷贝、粘贴到自己的程序中即可。但需要注意字节排列顺序、字节中每一位与具体显示点的一一对应关系,必要时还要对码表稍作修改。同一目录下还提供了上述可执行程序的源文件,使用BC3.1编写,供用户参考。

五.实验程序框图

用户应留心其中行扫描的实现及码表的处理。

六.实验程序:(一)提供LEDA51演示Asc16字符的简单点阵显示。

;________*LED点阵显示示例程序______________________*

;__该程序显示Asc16字符__

;__为了简单起见,程序只显示一个字符__

;__该程序针对T598实验机的模块14__

;____________________________________________________

CSLEDEQU8000H

CSR1EQUCSLED;行1273

CSR2EQUCSLED 1H;行2273

CSC1EQUCSLED 2H;列1374

CSC2EQUCSLED 3H;列2374

ORG0000H

MOVSP,#60H

INIT:MOVA,#0H;关闭行

MOVDPTR,#CSR1

MOVX@DPTR,A

MOVDPTR,#CSR2

MOVX@DPTR,A

MOVA,#0FFH;关闭列

MOVDPTR,#CSC1

MOVX@DPTR,A

MOVDPTR,#CSC2

MOVX@DPTR,A

D:MOVR5,#00H

MOVR4,#01H;每次为单行扫描

DISP:

MOVA,R5

MOVDPTR,#ASCE;此处设定所要显示的字符

MOVCA,@A DPTR

CPLACC;代码取反,决定显示的阴阳

MOVDPTR,#CSC2

MOVX@DPTR,A

MOVDPTR,#CSR1

MOVA,R4

MOVX@DPTR,A

RLACC

MOVR4,ACC

INCR5

LCALLDELAY

CJNER5,#8H,DISP

MOVA,#0H

MOVX@DPTR,A

MOVR5,#08H

MOVR4,#01H

DISP2:

MOVA,R5

MOVDPTR,#ASCE

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC2

MOVX@DPTR,A

MOVDPTR,#CSR2

MOVA,R4

MOVX@DPTR,A

RLACC

MOVR4,ACC

INCR5

LCALLDELAY

CJNER5,#10H,DISP2

MOVA,#0H

MOVX@DPTR,A

SJMPD

;________延时子程序,协调字符显示速度____________*

DELAY:MOVR7,#1H

DL1:MOVR6,#00H

DL2:DJNZR6,DL2

DJNZR7,DL1

RET

;________字符点阵字库______________*

;ASC16字符编码排列

;0

;1

;|

;|

;14

;15

;高位D7--D0

;请注意编码的排列次序和实际显示点阵分布的关系

ASCA:DB00H,00H,10H,38H,6CH,0C6H,0C6H,0FEH

DB0C6H,0C6H,0C6H,0C6H,00H,00H,00H,00H

ASCE:DB00H,00H,0FEH,66H,62H,68H,78H,68H

DB60H,62H,66H,0FEH,00H,00H,00H,00H

ASCD:DB00H,00H,0F8H,6CH,66H,66H,66H,66H

DB66H,66H,6CH,0F8H,00H,00H,00H,00H

ASCK:DB00H,00H,0E6H,66H,66H,6CH,78H,78H

DB6CH,66H,66H,0E6H,00H,00H,00H,00H

;____________________________________________________

END

(二)LEDHZ51两个示例程序。和Hz16字符的简单点阵显示。

;________*LED点阵显示示例程序______________________*

;__该程序显示hz16字符__

;__为了简单起见,程序只显示一个字符__

;__该程序针对T598实验机的模块14__

;____________________________________________________

CSLEDEQU8000H

CSR1EQUCSLED;行1273

CSR2EQUCSLED 1H;行2273

CSC1EQU CSLED 2H;列1374

CSC2EQUCSLED 3H;列2374

ORG0000H

MOVSP,#60H

INIT:MOVA,#0H;关闭LED显示

MOVDPTR,#CSR1

MOVX@DPTR,A

MOVDPTR,#CSR2

MOVX@DPTR,A

MOVA,#0FFH;关闭LED显示

MOVDPTR,#CSC1

MOVX@DPTR,A

MOVDPTR,#CSC2

MOVX@DPTR,A

D:MOVR5,#00H

MOVR4,#01H

DISP:

MOVA,R5

RLACC

MOVDPTR,#HZAI

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC2

MOVX@DPTR,A

MOVA,R5

RLACC

INCACC

MOVDPTR,#HZAI

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC1

MOVX@DPTR,A

MOVDPTR,#CSR1

MOVA,R4

MOVX@DPTR,A

RLACC

MOVR4,ACC

INCR5

LCALLDELAY

CJNER5,#8H,DISP

MOVA,#0H

MOVX@DPTR,A

MOVR5,#08H

MOVR4,#01H

DISP2:

MOVA,R5

RLACC

MOVDPTR,#HZAI

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC2

MOVX@DPTR,A

MOVA,R5

RLACC

INCACC

MOVDPTR,#HZAI

MOVCA,@A DPTR

CPLACC

MOVDPTR,#CSC1

MOVX@DPTR,A

MOVDPTR,#CSR2

MOVA,R4

MOVX@DPTR,A

RLACC

MOVR4,ACC

INCR5

LCALLDELAY

CJNER5,#10H,DISP2

MOVA,#0H

MOVX@DPTR,A

SJMPD

;________延时子程序,协调字符显示速度____________*

DELAY:MOVR7,#1H

DL1:MOVR6,#00H

DL2:DJNZR6,DL2

DJNZR7,DL1

RET

;________字符点阵字库______________*

;HZ16字符编码排列

;01

;23

;|

;|

;2829

;3031

;高位D7--D0

HZAI:DB00H,78H,3FH,80H,11H,10H,09H,20H

DB7FH,0FEH,42H,02H,82H,04H,7FH,0F8H

DB04H,00H,07H,0F0H,0AH,20H,09H,40H

DB10H,80H,11H,60H,22H,1CH,0CH,08H

HZDI:DB00H,80H,40H,80H,20H,88H,2FH,0FCH

DB08H,88H,08H,88H,0E8H,88H,2FH,0F8H

DB28H,88H,28H,88H,28H,88H,2FH,0F8H

DB28H,08H,50H,06H,8FH,0FCH,00H,00H

HZKE:DB01H,00H,01H,04H,0FFH,0FEH,01H,00H

DB01H,10H,1FH,0F8H,10H,10H,10H,10H

DB10H,10H,1FH,0F0H,14H,50H,04H,40H

DB04H,40H,08H,42H,10H,42H,60H,3EH

;____________________________________________________

END基于89C51的计算机可锁定加密键盘设计摘要:介绍PC键盘和键盘接口的PS/2通信协议,以及用89C51实现可锁定键盘的软件和硬件设计方法。具有安全可靠、容错能力强、可以直接采用标准键盘进行改装、便于实现等优点,并保留标准键盘的全部功能。关键词:PS/289C51C51键盘引言

在智能仪器、自动控制等领域,已大量使用嵌入式PC,如Advantech公司的PC/104、AMD公司的DIMM-PC等。为适应开放式、模块化的要求,嵌入式PC具有标准的PC接口,如VGA显示器控制接口、以太网接口、RS232接口、PC/AT键盘接口等。所以,可以用标准的PC键盘对嵌入式PC进行操作与控制。键盘在输入指令之后,可能很长一段时间不用。为计算机安全和防止误触发,需要将键盘锁定,还要对某些键采取屏蔽措施,但是PC标准键盘不能满足这些要求。本文介绍一种用89C51设计实现的可锁定加密PC/AT键盘。

1键盘功能及工作原理

PC键盘功能主要有按键识别、去抖、重键处理、发送扫描码、自动重发、接收键盘命令、处理命令等。键盘有编码键盘和非编码键盘。编码键盘程序设计简单,但硬件电路复杂,价格较高;非编码键盘用软件来实现识别键、编码转换、去抖等功能,硬件电路简单,价格便宜。现代微机系统中广泛采用非编码键盘。PC键盘多采用18行×8列的二维矩阵行列结构。采用行扫描法识别按下的按键。2PS/2协议

PS/2协议是外设与主机之间通信的一种同步双向串行协议。在该协议中主机拥有较高的优先级,在一定条件下可以终止外设正在进行的发送过程。PS/2协议采用的传送数据帧的格式为:1位起始位(0)、8位数据位、1位奇偶校验位、1位停止位(1)。数据发送时低位在前,高位在后。外设每收到主机发来的1帧数据,都要紧随该帧的停止位发送一个握手位ACK(0)应答主机。然后,外设还要发1帧应答数据(0xF0),表示外设已经完整地接收到了主机的命令;而主机则不需发送握手位,也不需要发送应答帧。

2.1键盘到PC键盘接口的通信

当时钟线和数据线均为高电平时,允许键盘发送数据,系统将接收数据;当时钟线被拉为低电平时,表明系统禁止数据传输。图1给出了发送时序,包含1个低电平触发的起始位、8位数据位、1个奇校验位和1个高电平的结束位。2.2PC系统到键盘的通信协议

若时钟线出现高电平,数据线出现低电平,表明系统请求发送,键盘准备产生同步时钟脉冲串,并接收数据。包含了1个低电平触发的起始位、8位数据位、1个奇校验位、1个应答位、1个高电平的结束位。图2为时序图。(1)键盘命令及执行过程①FFH:复位键盘。系统通过此软件复位命令使键盘进入程序复位和内部自测试,称为基本保证测试(BAT)。复位键盘的过程如下:a.键盘收到FFH后立即回送ACK(FAH)作答;b.键盘接口收到ACK后,将键盘时钟和数据线置为高电平;c.键盘检测到此状态后开始BAT操作;d.如果BAT正确完成,键盘发送AAH以表示结束,

否则以FDH(或其它任何值)表示诊断有误。②FEH:重新发送。当系统检测到从键盘送来的任何传输错误时,它便向键盘发送FEH命令。键盘接收到此命令后,将重新送出原来的内容。③FDH~F7H:空操作(保留未用)。④F6H:设置缺省值。此命令使键盘所有条件复位到电源接通时的缺省状态,键盘继续扫描。⑤F5H:设置缺省值和停止键盘。此命令使键盘所有条件复位到电源接通时的缺省状态,并停止键盘扫描,等待下一个键盘命令。⑥F4H:启动键盘。键盘接收到此命令后,用ACK(FAH)作答,清除输出缓冲器,并启动键盘开始扫描。⑦F3H:设置拍发速率和延时参数。每当按下任 一键时,键盘以拍发速率连续送出键的接通码,直到键被释放为止。延时参数是指按下一键后,键盘输出的响应时间。

系统缺省设置:拍发速率=10个/s±20,延时=500ms±20。

当要改变设置时可以使用F3H命令,并后跟一个字节的参数。参数定义如表1所列。

表1D7D6D5D4D3D2D1D00CBA

计算拍发速率和响应延时的公式如下:

拍发速率=1/[(8 A)×2B×0.00417](1/s)

响应延时=(1 C)×250(ms)注:缺省的延时参数值为2CH。此命令的执行过程如下:a.键盘收到F3H命令后,用FAH予以响应,并停止扫描和等待随后的参数;b.键盘若收到随后的设置参数,用另一个ACK响应,并按其参数设置新的拍发速率和响应延时,之后重新开始扫描(若键盘原来是开放的);c.键盘若收到FAH命令,但无随后的设置参数,则键盘结束命令设置,并保持原来的拍发速率和响应延时,停止扫描。⑧F2H,F1,EFH:保留未用。⑨F0H:设置键盘扫描码命令。此命令用于设置键盘的扫描码,后跟参数指定三种扫描码的哪一种。键盘复位时,默认扫描码是第二种。⑩EEH:回送命令。此命令用于辅助诊断,要求键盘接收到EEH时也要回送EEH予以响应。若键盘原来是开放的,则继续扫描。EDH:置位/复位LED指示器。键盘右上角有三个LED指示器,分别反映Caps、Num和Scroll三个键的锁定情况。参数字节如表2所列。

表2D7D3D2D1D0保留1=激励CapsLED1=激励NumLED1=激励ScrollLED

此命令执行过程与F3H相似。若命令后跟参数,则按参数设定LED状态并继续扫描。若仅有命令无参数,则不改变LED原状态,并停止扫描。(2)键盘响应键盘在下列四种情况下都会向键盘接口发送数据。①按下任一键,键盘以拍发速率向接口发送键盘接通扫描码。②释放所按下的键,键盘发送断开扫描码。③系统向键盘发送键盘命令后,键盘回送应答。④当用户按键速度超出键盘所能容纳的最大键个数时,键盘做出响应。后三种情况称为键盘响应。响应字节有7个,定义如下。

①FEH:重新发送响应。当键盘收到一个无效的键盘命令,或者检测到奇偶错的键盘命令时,键盘回送响应字节为FEH,要求系统重发键盘命令。②FAH:正常应答。对任何一个有效的键盘命令,键盘回送FAH予以响应。③00H:超限应答。当用户按键速度超出键盘所能容纳的最大键符个数时(16个字节的缓冲器),键盘发送00H。④FDH:诊断故障应答。键盘接受软件复位命令,执行自测试过程中。若检测到故障,则以FDH应答。此时,键盘停止扫描并等待下一个键盘命令。⑤AAH:诊断正常应答。键盘在软件复位过程中,正常完成BAT测试,以AAH应答。⑥FEH:回响命令的应答,对键盘FEH命令的应答。⑦F0H:断开扫描码前缀,键盘对键符按下后释放的应答,第一个字节为F0H,第二个字节为接通扫描码(有几个键例外)。3硬件设计

PC系列键盘采用18行×8列的矩阵行列结构。89C51单片机有4个8位I/O端口,因此可以采用P0、P2口再加上P3口的2个(P3.6和P3.7)作为行扫描线。P1口作为列输入线(如果用P0口作列输入线,必须加上拉电阻)。采用P3.0、P3.1作为数据线和时钟线与PC系统进行通信,用P3.2、P3.4、P3.5控制键盘上的3个指示灯。硬件原理如图3所示。

键盘与计算机通过一个五芯(PS/2接口为六芯)插座相接,4个有效引脚的定义分别是电源(VCC)、地(GND)、串行时钟线(SCK)、串行数据线(SIO)。

4软件设计①消抖及重键处理:通过软件上延时程序来消除抖动;采用后按键优先处理,即多键同时按下时,只重复发送最后按下键的扫描码。②程序包括键盘扫描子程序、发送键码子程序、发送数据子程序、接收命令子程序、定时器1中断服务程序、主程序等。键盘扫描子程序用于扫描键状态,将被按键的位置号存入缓冲器中;发送键码子程序用于将缓冲区键的接通码或断开码发送给计算机键盘接口或者存在键盘密码缓冲区中;发送数据子程序用于将数据发给计算机键盘接口;接收命令子程序用于接收计算机键盘接口发来的键盘命令;定时器1中断服务子程序用于给程序中的延时提供标准时钟,并具有软件看门狗功能,防止软件出现死机现象;主程序用于系统初始化,子程序调度,锁定状态的显示等。

图6发送缓冲区键码子程序流程图

图4~6是主要软件模块的流程图。单片机源程序见本刊网络补充版(.com)。

5结论

本文介绍的PC/AT键盘具有结构简单、设计灵活、安全可靠的特点,可用于标准PC和嵌入式PC。本键盘可以在标准的键盘基础上进行改造,只需换掉原来的控制芯片即可,可节省设计成本。单片机C51编程几个有用的模块(1)KeilC51常用功能模块使用说明

说明

本文档包括单片机系统中常用到的时钟中断、通讯及键盘扫描等模块(见所附源程序)的说明。这些模块使用前后台系统模型。为达到最大的灵活性,需要在用户工程中定义config.h文件,在其中定义各模块可选参数的设置,而不是直接更改源代码。

这些可选内容大部分为宏定义,如果不定义宏相应的功能在编译时被屏蔽,不会增加代码长度。具体可选内容见各模块中的说明。

在Config.h文件中还要包含一个单片机硬件的资源头文件。

各模块使用了定义在Common.h中的一些数据类型。如:BIT(bit)BYTE(unsignedchar)等,具体请参见源程序。

时钟模块

在单片机软件设计中,时钟是重要资源,为了充分利用时钟资源,故设计本时钟模块。本模块使用定时器0,在完成用户指定功能的同时,还能够自动处理一些其它模块中与时钟相关的信息。

时钟模块由声明文件Timer.h以及实现文件Timer.c组成。

用户应该在Config.h中定义宏TIMER_RELOAD来设定定时器0的重装载初值。推荐的定时器0的中断时间大于1毫秒。

在程序的初始化阶段调用时钟模块的初始化函数InitTimerModule()之后,就可以使用时钟模块所以支持的各种功能。具体描述如下:

延时:当用户需要进行一定时间的延时时,可以通过调用Delay()来进行,参数为时钟中断的次数。如时钟中断周期为1ms,想进行100ms的延时,则可以调用Delay(100)。

注意:

如果延时的绝对时间小于时钟中断的周期,则不能够用本方法做到延时。

定时:当程序中需要使用定时功能时,如等待某外部事件,如果在一定时间内发生则继续执行,如果在这段时间内发生,则认为出现错误,转向错误处理机制。

在此推荐一种编程模式,但用户可以用自己认为更合理的方式处理此类问题。

这里简单说明一下关于阻塞式函数及非阻塞式函数。简单说,阻塞式函数就是当检测完成条件,如果不能够完成则等待,如:

voidCheckSomething()

{

//gbitSuccessFlagisaglobalvariable

while(gbitSuccessFlag==FALSE)

{

//donothingbutwaiting

}

}

可以看到,当bitSuccessFlag没有被设置为TRUE时,函数保持等待状态不返回,这样就是阻塞式的函数。

另外一种情况:

BITCheckSomething()

{

if(gbitSuccessFlag==TRUE)

{

//…

returnTRUE;

}

returnFALSE;

}

在这里,如果所检测的事件有没有完成,函数进行检测之后,立刻返回, 通过返回值报告完成情况,如果没有完成,则等待调用者分配再次执行的机会。这样的函数就是非阻塞函数。

在应用定时功能时,首先要将检测函数定义成非阻塞函数。如上面的第二个版本的CheckSomething。

然后下面模式:

BITbitDone=FALSE;

ResetClock();//cleartimerinterrupttimescounter

while(GetClock()

{

if(CheckSomething()==TRUE)

{

bitDone=TRUE;

break;

}

}

if(bitDone==FALSE)

{

//processtimeout

}

或者简单写成:

BITbitDone=FALSE;

ResetClock();

while(GetClock()=(z))

当然,用户也可以将IsPackageHeader和IsPackageTailer定义成为函数,通过BIT类型的返回值来向调用者提供与相应宏相同的信息。

另一种办法需要在Config.h文件中定义宏SCOMM_ComplexPackageFormat。(需要注意的是,不能够同时定义SCOMM_SimplePackageFormat和SCOMM_ComplexPackageFormat宏,否则会造成严重的不可预见性错误。

这时需要提供回调函数QueryPackageFormat,原形如下:

BYTEQueryPackageFormat(BYTEbyData,BYTEbyCount,BYTEbyParam);

函数中三个参数的含义与使用简单数据包格式时判断数据包尾的宏的参数相同。

函数通过返回值来通知作为调用者的接收函数对接收到的数据如何处理,但目前这种方法仅为需要处理复杂数据包格式时的一种可选方法,但不推荐。用户如果想使用这种方法可以自己更改接收函数中相应的

#ifdefSCOM_ComplexPackageFormat

#endif//SCOMM_ComplexPackageFormat

预编译指令之间的内容。

例如指定QueryPackageFormat的返回值的含义:

0:继续找数据包头或继续找数据包尾。

1:找到数据包头。

2:找到数据包尾。

3:数据包出错,需要抛弃。

然后更改源代码来实现上面的协议。

注意:当用户需要使用字符串的时候,可以利用简单的包装函数将字符串转换为字节数组。所以没有必要提供专用的字符串处理函数。

键盘扫描模块

键盘扫描模块有两种工作方式,一种为自动的由时钟模块调用,另一种是由程序员自行调用。

1)由时钟模块自动调用的方式

将时钟模块实现文件(Timer.h)及键盘扫描模块的实现文件(KBScan。c)包含进工程,在Config.h文件中添加TIMER_KBSCANDELAY宏。时钟模块自动对时钟中断进行计数,当达到TIMER_KBSCANDELAY宏所定义的值后,自动调用键盘扫描模块中的函数KBScanProcess()进行键盘扫描,也就是说,这个宏的值可以决定按键消抖动的时间。

用户应该提供两个回调函数OnKBScan()及OnKeysPressed()。在函数OnKBScan中进行键盘扫描,并返回扫描码。扫描码的类型缺省为BYTE,当键盘规模较大时,BYTE不能够完全包含键盘信息时,可在Config.h文件中重定义宏KBvalue,如下:

#defineKBvalueWORD

这样,就可以使用16位的键盘扫描码,如果此时还达不到要求,可以将键盘扫描码定义成一个结构,但这样做将会增加代码量及消耗更多的RAM资源,故不推荐。

扫描模块调用OnKBScan取得扫描码,并调用用户可以重定义的宏IsNoKeyPressed来判断是否有键按下,缺省的IsNoKeyPressed实现如下:

#defineIsNoKeyPressed(x)((x)==0x00)

即认为OnKBScan返回0扫描码时为没有键按下,如果扫描函数返回其它非零扫描码做为无键按下的扫描码时,可以在Config.h文件中重定义IsNoKeyPressed宏的实现。

8位键盘扫描码(缺省值)时,相应的扫描函数为:

BYTEOnKBScan()

当扫描模块经过软件消抖动之后,发现有键按下,就会调用另一个回调函数OnKeysPressed。函数的声明应该如下:

voidOnKeyPressed(BYTEbyKBvalue,BYTEbyState)

其中中的参数byKBvalue的类型为BYTE,此为缺省值,如果使用其它类型的扫描码,就将此参数变为相应类型。这个值由OnKBScan返回。另一个参数byState在通常情况下为零。但当用户在Config.h中定义宏KBSCAN_BRUSTCOUNT,同时键盘上的某键被按住不放时,扫描模块对它自己的调用(注意这里和TIMER_KBSCANDELAY宏不同,TIMER_KBSCANDELAY是时钟中断足够的次数后调用扫描模块,而KBSCAN_BRUSHCOUNT为扫描模块自身的被调用次数)进行计数,当达到KBSCAN_BRUSTCOUNT时,扫描模块调用OnKeysPressed,此时第一个参数的含义不变,而byState变成1,同时计数器复位,又经过一段时间后,用值为3的byState调用OnKeysPressed。这样就可以很方便的实现多功能键或者检测某键的长时间被按下。

2)由用户自行调用

由用户自行在程序中调用扫描模块,而不是由时钟中断自行调用。其它与方式1相同。

注意:

1)函数KBScanProcess为非阻塞函数,它将在很快的时间内返回,等待再次分配给它执行的机会。

2)函数KBScanProcess是在时钟中断外部运行的,它的过程可以被任何中断打断,但不影响系统运行。

3)byState的最大值为250,之后被复位为零。应用举例

现在来举例说明上述几个模块的使用方法。

硬件环境描述:

为了控制一盏灯,需要单片机提供一个做控制功能的开关量,这里不描述外部接口电路,只说明当单片机的P10脚为高电平时,灯灭,当P10脚为低电平时,灯亮。

可以通过计算机由串口发送命令来控制,或通过一个按键(pushbutton不是自锁式的按键)来手动控制(按键接在P11脚上,当键没有按下时,P11电平为高,键按下时,引脚电平被接低),当使用按键手动控制的时候,需要给计算机发送通知。

设定串口通讯指令如下:

数据包由0xff做包头,4个字节长,第二个字节为命令代码,第三个字节为数据,最后一个字节为校验位。

命令和数据代码有如下组合:

(计算机发给单片机)

0x100x01:计算机控制灯亮。(数据位是非零值即可)

0x100x00:计算机控制灯灭。

(单片机发给计算机)

0x110x01:单片机正常执行控制指令,返回。(数据位是非零值即可)

0x110x00:单片机不能够正常执行控制指令,或控制指令错(不明含义的数据包或校验错等)。

0x120x01:手动控制灯亮。(数据位是非零值即可)

0x120x00:手动控制灯灭。

建立工程:

在硬盘上建立文件夹Projects,在Projects下建立Common文件夹及Example文件夹。将各模块的头文件及实现文件拷贝到Common文件夹下(推荐使用这样的文件组织结构,其它工程也可以建立在Projects下,各工程共享Common文件夹中的代码)。

启动KeilC的IDE,在Example下建立新工程,将各模块的实现文件包含进工程。

在Example文件夹下建立Output文件夹,更改工程设置,将Output作为输出文件和List文件的输出文件夹(推荐使用这样的结构, 当保存工程文件时,可以简单的删除Output文件夹中的内容而不会误删有用的工程文件)。

建立工程配置头文件Config.h及工程主文件Example.c,并将Exmaple.c文件加入工程。

输入代码:

代码的具体编写过程略。下面是最后的Config.h文件及Example.c文件。

//

//file:onfig.h

//

#ifndef_CONFIG_H_

#define_CONFIG_H_

#include//使用AT89C52做控制

#include“../Common/Common.h”//使用自定义的数据类型

#defineTIMER_RELOAD922//11.0592MHz晶振,1ms中断周期

#defineTIMER_KBSCANDELAY40//40ms重检测按键状态,即40ms消抖

#defineSCOMM_AsyncInterface//使用异步通讯服务

#defineIsPackageHeader(x)((x)==0xff)//判断包头是不是0xff

#defineIsPackageTailer(x,y,z)((y)<=(z))//判断包的长度是不是足够

#endif//_CONFIG_H_

//

//file:xample.c

//

#include

#include“../Common/Common.h”

#include“../Common/Timer.h”

#include“../Common/Scomm.h”

#include“../Common/KBScan.h”

BITgbitLampState=1;//灯的状态,缺省为off

staticvoidInitialize()

{

InitTimerModule();//初始化时钟模块

InitSCommModule(0xfd,TRUE);//初始化通讯模块,11.0592MHz晶振,

//波特率为19200

EA=1;//开中断

}

voidmain()

{

Initialize();//初始化

while(TRUE)//主循环

{

ImpTimerService();//实现时钟中断服务,如键盘扫描

AsyncRecePackage(4);//接收4个字节长的数据包

}

}

//在中断外部响应时钟中断事件

voidOnTimerEvent()

{

//donothing

}

//控制外部灯

staticvoidTriggerLamp(BITbEnable)

{

P10=~bEnable;//需要反相控制

}

//键扫描回调函数

BYTEKBScan()

{

BITb;

P11=1;//读之前拉高引脚电平

b=P11;//读入引脚状态

return~b;//数据反相做扫描码

}

//计算校验和

staticBYTECalcCheckSum(BYTE*pbyBuf,BYTEbyLen)

{

BYTEby,bySum=0;

for(by=0;by

return0–bySum;

}

//接收到键盘消息回调函数

voidOnKeyPressed(BYTEbyvalue,BYTEbyState)

{

BYTEby[4];

if(byState==0)

{

switch(byvalue)

{

case0x01:

gbitLampState=~gbitLampState;//灯状态取反

TriggerLamp(gbitLampState);//执行控制

by[0]=0xff;//构造数据包

by[1]=0x12;

by[2]=(BYTE)gbitLampState;

by[3]=CalcCheckSum(by,3);//求校验和

SendPackage(by,4);//发送数据包

break;

//处理其它扫描码

default:

break;

}

}

//接收到数据包回调函数

voidOnRecePackage(BYTE*pbyBuf,BYTEbyBufLen)

{

BYTEby[4];

by[0]=0xff;

by[1]=0x11;

if(byBufLen!=4||pbyBuf[3]!=CalcCheckSum(pbyBuf,3))

{

by[2]=0;

by[3]=CalcCheckSum(by,3);

SendPackage(by,4);//处理长度或校验和不正确

}

switch(pbyBuf[1])

{

case0x10:

gbitLampState=(BIT)pbyBuf[2];

TriggerLamp(gbitLampState);

by[2]=1;

by[3]=CalcCheckSum(by,3);

SendPackage(by,4);//发送成功执行通知

break;

default://不知道的命令

by[2]=0;

by[3]=CalcCheckSum(by,3);

SendPackage(by,4);//发送没有成功执行通知

单片机原理与应用例5

显示对应的拉丁字符的拼音

0引言

《单片机原理及应用》课程是一门理论与实践性均很强的学科,是工科电子类专业一门很重要的专业基础课,把汇编语言、微机接口、通信技术知识等综合在一起,属于技术性、工程性、实践性很强的一门课程[1]。该课程作为电子、通信、自动化等专业最重要的核心课程之一,它是“电子、通信、自动化”高素质复合技能型人才所需知识结构的载体,占据着相当重要的地位[2]。 然而,传统的单片机教学一般均以学科体系为出发点,注重课程本身的体系结构和前后的逻辑联系,但却忽略了“可学性”,致使学生学得吃力,老师教得辛苦,教学效果也不好[3]。为了适应新形势下职业教育的培养目标,近年来,我一直致力于改革传统的教学模式研究,本文就单片机的教学改革作了一定的探索与创新构思。

1《单片机原理与应用》课程教学现状

传统的单片机教学,以单片机的结构为主线,先讲单片机的硬件结构,接着是指令和软件编程,然后是单片机系统的扩展和各种器件的应用,最后再讲一些实例。学生对课程内容理解不深,感觉枯燥无味,从而产生厌学的心理,教学效果往往并不理想。实践教学主要采用验证性实验,学生通过VM,Keil uVision等仿真软件机械的输入抄袭来的程序,验证硬件上结果,其实践能力和创新能力都不可能得到有效的提高,也不能完成实践教学的最终目标。

2《单片机原理与应用》课程教学改革的具体措施

2.1教学内容的改革

教学内容的改革主要是在现有教材的基础上适当增加单片机软件开发平台Keil uVision的内容,同时对当前流行的单片机仿真软件Proteus也应该增加一定的介绍[4],这样做到学以致用,从而增强学生的学习兴趣。

汇编语言具有精简、高效及实时控制的特点,成为单片机开发的主要工具,但是汇编语言程序的代码可读性差、移植性不好,也是学生不能深入掌握单片机编程的重要原因[5] 。而Keil uVision开发平台由于支持C语言开发、提供良好的集成开发环境、支持的单片机厂商众多等因素得到了广泛应用,成为当前最流行的单片机应用系统开发工具[6]。与汇编相比,C语言在功能上、结构性、可维护性上有明显的优势,因而易学易用,从而大大的提高了工作效率和项目开发周期,它还能嵌入汇编,可以在关键的位置插入汇编程序,使程序达到接近于汇编的工作效率。

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

在课堂上,教师可以通过Protel软件绘制电路原理图,用Proteus软件绘制出仿真电路图,用WAVE软件或Keil软件输入程序并编译程序,然后对程序和电路进行仿真调试运行,这样学生在课堂上通过教师直观的演示就能掌握单片机应用电路的搭建,还熟悉了仿真软件的使用及程序的调试方法,加深了学生的印象。

2.2教学方法的改革

在我的实际工作经验中,我发现在讲解指令时,学生经常通过死记硬背的方式记住指令,但在实际运用中又发现自己背下来的指令成了乱码,不知道在什么时候用什么指令,还有一些学生能读懂程序的意思,但当自己写程序时就不知从何下手了,针对这种情况,教师可以通过“项目模块引导”的教学方式,在讲解项目的过程中引出指令的使用方法,这样学生可以在实践中学会蕴含其中的抽象理论,自主的构建学习内容。学习了指令后,教师应该就所学的指令给学生布置由易到难的程序编写任务,便于学生记忆也激发了他们学习单片机的兴趣,使学生在从知识到技术的转化过程中不断学习知识、巩固知识、应用知识,大大缩短了从学到用之间的距离。

在理论教学中,实行多媒体教学、网络教学和课堂教学相结合的教学模式,应用MCS—51仿真软件直接在课堂上对程序进行调试、演示与理论配套的相关器件(如芯片、数码管、按键等)等。基本的重要的概念反复强调,贯穿整个教学活动。在实践教学中,教师要对学生实验过程中的重点、难点、关键点、及学生操作过程中存在的问题进行实时点评。并要求学生在实验任务电路和程序的基础上,进行适当修改,培养其独立进行电路和程序的设计能力。课余时间要求学生对实验任务进行印制电路板设计制作,并将任务程序下载到单片机中,实现任务功能。

2.3改革考核方式培养创造性思维

目前,单片机课程的考核常常是平时成绩与考试成绩各占一定的百分比,实验成绩计入平时成绩,期终考试重点考核理论知识,通常采用闭卷笔试的形式。学生经常是在考试前两周死记硬背知识原理,考试结束后就忘得一干二净了。这种考核方式既不能很好地反映出单片机课程实践性强的特点,也很难考察学生的分析、应用和创新能力。因此,应采取与教学内容相适应的多样化的考核方式,通过增加实验考核的分量,以促进学生应用能力和创新能力的培养与提高。例如,我们首先对考核的方式方法进行了改革,考核包括三个方面,综合能力的考核,占总成绩的40%;实训过程的考核,占总成绩的40%;平时实验、作业、课堂表现的考核,占总成绩的20%。

综合能力的考核采用“闭卷考试”的形式,实行教考分离。试卷内容包括基本概念以及汇编指令和接口等知识的应用。实训过程的考核就是在实验室根据给定的实验项目现场调试结果,教师根据学生完成的准确性和熟练程度现场评分。通过这种方式不但可以了解学生理论知识的掌握程度,而且还考查了学生的动手实践能力。

3总结

本文针对传统单片机教学模式的不足,结合教学实践,提出了“单片机原理及应用”课程改革的一些思路和做法,教师只有不断调整教学内容,改进教学方法,丰富教学手段,才能有效的调动学生学习单片机的兴趣,才能培养出适应时展的高职生。

参考文献

[1]刘守义.单片机应用技术,西安电子科技大学出版社,2007

[2]杨金岩.郑应强,张振仁.8051单片机数据传输接口扩展技术与应用实例[M].北京:人民邮电出版社,2005.

[3]李秀忠.单片机应用技术.人民邮电出版社,2007

[4]张永枫.单片机原理与应用实训教程.西安电子科技大学出版社,2007

单片机原理与应用例6

教学改革 实践

【中图分类号】G 【文献标识码】A

【文章编号】0450-9889(2012)02C-

0118-02

单片机原理与应用课程是高职电气类专业一门十分重要的核心课程。但是,由于该课程内容抽象,相关课程繁多,学生普遍反映难以学习和掌握。笔者结合自己多年教改的体会,分析了单片机课程教学目前存在的一些问题,并提出了改革其理论教学和实践教学的一些措施。

一、目前高职单片机教学存在的问题及原因

(一)教学内容及教学安排与高职单片机课程的教学目标不一致

1.理论教学内容方面。传统的单片机教材一般分为理论与实验两部分。理论教材的内容一般是以单片机的结构为主线,先是论述单片机的基本结构,接着是单片机的指令系统和汇编语言程序设计,然后是单片机的内部资源及编程、单片机的各种接口及应用,最后是各种元器件的应用。这样的教材详细讲解了单片机的结构和功能,为学生全面掌握单片机的理论知识提供了便利。但是,对于高职院校的学生来说,这样的教材不是很适宜。因为,第一,高职院校的学生基础较差,学习能力不强,对于抽象的理论知识难以理解,也不很感兴趣;第二,传统教材的内容陈旧,理论性强,实用性差,未能突出高职院校培养应用型、技能型人才的特点;第三,传统教材的内容与实际应用相脱节,缺少单片机开发应用的最新成果。

2.实验教学内容方面。传统的实验教材一般是根据实验室所配备的单片机实验箱来编写的验证性实验或一些简单的设计性实验。做实验时学生只需按给定的实验步骤进行简单的硬件连接、程序录入和编译下载;无须了解整个系统的开发、调试及工作的过程。这样的实验教材与理论教材的关联是很少的,各自独立成书,理论课与实验课各自为政,相互脱节,其结果必然是使理论教学和实验教学难以相辅相成、相互促进。

3.教学内容的安排上,理论教学与实践教学相分离。单片机课程传统的教学模式一般是:理论教学在教室讲解,实验教学在实验室操作,二者实施的时间、空间完全各自独立,其中又以教室的理论教学为主。这种教学安排将理论教学和实验教学相分离,既无法充分发挥理论对实践的指导作用,也无法及时地通过实践来加深对理论的理解。

(二)传统实验的方式单一、效率和效果差,无法达到培养学生实际动手能力的目的

传统的实验教学大多采用实验箱实验的方式,在实验室中进行,它往往会受到诸如硬件资源、实验时间和实验场地的限制。学生在做实验时,一般是在实验教材的指导下,按已给出的程序(有的甚至是已调试编译好的可执行代码)和已给定的实验连接简图进行,学生无须了解整个系统的电气原理。因而即便学生已按要求正确无误地完成了整个实验,得到了相关的实验结果,但他们对整个系统的工作还是一知半解,没有一个整体的概念,最终还是不会设计电路,有的甚至连基本的电路图都看不懂。这种实验的实验方式单一,实验的效率和效果都很差,根本达不到培养学生实际动手能力的目的。

(三)教学的方式、方法及手段有待提高

单片机技术是现代电子工程领域一门迅速发展的技术,不仅其芯片型号及功能日新月异,而且开发其应用系统的技术手段和方式方法也层出不穷,各种各样的仿真软件大量涌现,单纯依靠板书教学(或“板书式”的多媒体教学)以及实验室内的有限实验,已越来越跟不上技术的发展,越来越适应不了高职院校培养学生实际动手能力的需要。

二、理论与实践方面的改革

(一)理论教学的改革

1.重构教学内容以适应单片机技术的快速发展。结合职业院校单片机教学的目标及学生学习的特点,我们根据单片机应用系统的实际开发过程,基于项目导向的原则,对单片机课程的教材进行了重构,开发出新的单片机教材。新教材摈弃原来的章节概念,打破了原有的知识体系,不再以单片机的结构为主线,而是依据任务驱动、项目导向的教学思路,以项目实践为单位来组织教学内容,将单片机应用系统的设计与开发过程与单片机的相关知识点有机地结合在一起,使学生在学习各个单片机应用系统(即项目实践)的设计与开发的过程中,认识单片机,掌握单片机,应用单片机。对各个项目的编写,一般是先提出项目要求,然后给出能仿真实现的系统电路原理图及程序,接着再陈述本项目所涉及的理论知识及本项目的设计思想、工作原理和过程,最后是相关的理论拓展及相应的技能拓展项目,以便学有余力的学生进行更深入的学习,使之拥有广阔的自主学习和自主创新的空间。所有的项目安排我们都遵照由浅入深的原则,通过渐进的学习逐步提高学生的知识和技能。教学改革的基本思想是强调“做中学”,每一个项目均能通过仿真实验来展示系统运行的结果,既直观生动又费时不多,大大加强了理论与实践的联系。

2.引入C51语言的教学,降低单片机指令的学习要求及难度。传统单片机的教学及其应用系统的开发,一般都是以汇编语言作为开发工具,因为汇编语言具有代码紧凑、执行时间短、控制及时等优点。但是随着单片机技术的发展,其编程繁琐、可读性差、可移植性弱等缺点越来越难以接受;相反,C语言在功能上、结构上、可读性和可维护性上有明显的优势。因此,目前单片机C语言已非常流行,绝大部分的应用系统均可直接用C51来编写,而且在企业的实际应用中已很少有人使用汇编语言来编写程序。有鉴于此,我们将C51语言引入单片机的教学,这样就可以将汇编语言及单片机的汇编指令等传统中极为重要的教学内容作为稍有了解即可的知识,使学生无须花费大量的时间和精力去学习汇编语言及有关指令,从而大大降低单片机理论教学的难度。

3.引入Keil及Proteus的教学,充分发挥单片机仿真软件在理论教学上的辅助作用。Keil编译软件可以对汇编语言、C语言进行编译与调试,Proteus仿真软件可以对数字电路、模拟电路、单片机及其电路进行仿真。将Keil编译软件与Proteus仿真软件相结合,可以在计算机上调试和仿真单片机应用系统的运行情况及结果。过去,我们通常都只是将这两个软件应用于实验教学,而忽视了它们在理论教学上强大的辅助作用。实际上,在理论教学时,通过Proteus仿真,我们可以直观地观察到教学案例的实际运行效果, 这样对理论教学有很大的辅助作用,这主要体现在:(1)能够直观形象地显示案例的运行结果,加深学生的印象和感性的认识,并提高学生学习的兴趣和积极性;(2)可检验案例设计的正确性;(3)直观地见证程序的执行过程及结果,方便理解案例程序;(4)学生课后可随时对课本的所有案例进行仿真验证和学习,以帮助学生理解课本的相关知识,使仿真实验成为可指导学生学习的、可靠的“老师”;(5)通过仿真实验,学生可以从严重依赖于实验室实验的状况中彻底解脱,只要有电脑,在宿舍就可以进行单片机仿真实验。

(二)实践教学改革

1.实践内容层次化,实验形式多样化。将单片机的实验,按内容深浅的不同划分为三个层次,即验证型实验、综合型实验和课程设计型实验;按实验形式的不同划分为四种,即仿真实验、实验箱实验、实验板实验、实际工程应用实验。实验时不管是什么层次的实验均要求先进行仿真实验,而且对于仿真实验除了刚开始学习Keil和Proteus软件时,在实验课堂上统一完成外,其他的仿真实验均要求学生利用课外时间在实验室外独立完成。

验证型实验一般只进行仿真实验,其内容均选自理论教学的案例(目的是加强理论与实验的关系),均作为课外作业的形式布置给学生完成。当然,上课时老师可以将仿真结果演示给学生看,学生在课外只需按照案例给出的程序和电路图即可进行相应的仿真实验。做这种实验的效率很高,不用占用上课时间,而且其仿真效果也很好。通过这些实验,一方面可加深学生对理论教学内容的理解,另一方面可让学生逐步熟悉Keil软件和Proteus软件的使用。

综合型实验是对单片机某一项目内容进行较深入的实验研究,其内容可以是理论教学中所讲到的某一较大的案例,也可以是实验箱或实验板所配送的某一专题的实验案例;我们可以根据实验的时间及实验内容的难易来确定是否给出电路和程序,是否只要求做仿真实验或是还要做实验箱、实验板实验等。通过这种实验一方面可进一步提高学生进行仿真实验的技能,另一方面也让学生逐步熟悉实验箱或实验板等单片机应用系统的开发工具,为学生进行下一步的实际工程应用打下坚实的基础。

课程设计型实验是在单片机课程学习完成后,针对单片机在实际生产、生活中的具体应用而开发的一个单片机应用系统,如数字多用仪表的设计、红外遥控系统设计、简易电子琴设计、带农历的万年历设计,等等。对于课程设计型实验,学生不再单独进行,而是按小组进行,而且要求同学们按照单片机实际工程应用的开发程序完成整个过程,这包括软硬件的设计、仿真实验的实现、电路板的设计与制作、元器件的购买与安装、程序的下载与运行等。通过这种实验可以让学生掌握单片机应用系统的整个开发过程,为今后的实际工作打下坚实的基础。为了保证实验的成功率,增强学生的信心,开始可以先选择一个极其简单的验证型实验来进行,以便让学生熟悉整个单片机应用系统的开发过程,然后再真正从事复杂的课程设计型实验。

2.通过引入仿真实验,大大提高实验的效率和效果,从而可增加实验的内容和难度。如前所述,我们在理论教学和实验教学中均已引入Proteus仿真软件与Keil编译软件,通过仿真实验,可以将很多实验(尤其是验证型实验)作为作业的形式布置给学生,要求他们在课外仿真实现。对于需要用实验箱或实验板进行的实验,我们也要求学生先在仿真软件中实现,然后再进行实验箱(或实验板)的实验,观察硬件运行的结果与软件仿真的结的差别。这样做的目的是将整个实验一分为二,仿真部分学生利用课外时间在自己的电脑上完成,实际硬件实验的部分在实验室完成,从而大大提高实验的效率和效果,为增加实验的内容和难度提供可能。

【参考文献】

[1]陈龙,张亚君.Proteus仿真软件在单片机实验教学中的应用[J].实验技术与管理,2009(8)

[2]唐炜.基于“项目驱动”的单片机类课程实践教学改革[J].实验室研究与探索,2010(5)

[3]王新刚,余洁.浅谈单片机课程教学质量的提高[J].教育与职业,2010(11)

[4]陈宜建.虚拟实验在单片机教学中的应用[J].中国职业技术教育,2010(2)

[5]熊春如,彭小娟,刘世安.项目驱动在高职单片机C语言教学中的实践[J].职教论坛,2010(5)

单片机原理与应用例7

《单片机原理与应用》课程是一门理论和实验结合非常紧密、突出动手能力的课程。实验教学是其中一个重要环节,既是联系理论教学的桥梁,又是培养学生实践、创新能力的重要手段[1-3]。但是在实验教学中会出现学生理论与实验脱节、实验课效果不理想、学生实验课积极性不高等问题,因此《单片机原理与应用》课程实验教学改革就成为许多学校非常重视的一项教改课题。

1.《单片机原理与应用》课程实验教学现状分析

1.1课程自身特点

1.1.1跨越性。《单片机原理与应用》课程是一门软硬件相结合、强调实践性和应用性的课程。学习这门课程的学生需要经历从电子技术基础、电路原理、C语言编程等基础知识向以微处理器为核心、通过软件编程来实现系统功能的思想转变过程,这种思想跨越转变过程对初次接触该课程的学生来讲具有一定难度。

1.1.2桥梁性。《单片机原理与应用》课程是后续嵌入式系统课程、DSP课程、EDA课程及毕业设计等的基础,具有课程桥梁的重要作用。

1.1.3综合性及抽象性。《单片机原理与应用》课程涉及的内容较广泛,包括单片机的硬件组成和功能、软件编程思想、汇编语言的语句及结构等。并且软件编程涉及的汇编语言需要和硬件的配置情况有关,内容抽象,不易理解。

由于该课程具有自身特性,因此需要教师在实验教学中进行改革尝试,帮助学生更好地适应学习这一类课程的方法,增强学生对该课程的理解性,从而提高他们的实际操作及应用能力。

1.2学生对课程的切身感受及认识

通过调研得知,相当一部分学生渴望将这门课程更好地融于自己的专业发展中,牢固掌握课程基本理论和实践知识。调研结果表明,问题主要集中在两个方面:(1)在学习该课程之初,学生在没有大量实验操作机会的情况下,表现出的是对程序的编写问题及对整个课程的困惑,大部分学生对该课程主要应用在哪里没有概念。(2)对于给予大量实验操作机会的学生,他们表现出对单片机的极大兴趣,他们的问题主要集中为:如何设计具有较好功能的源程序,源程序结构的优化,硬件搭建的合理性等。

因此,良好的实验教学可以帮助学生理解课程内容,掌握核心知识,从而提高学生的学习积极性和学习效率。

1.3实验教学中出现的待解决问题

1.3.1实验项目内容设置不够完善,不利于调动学生的实验积极性。各个实验项目独立性强,几乎没有考虑知识的前后贯穿和最后应用系统的设计,这容易使学生学了后面的忘了前面的,自己设计简单的应用系统更是无从下手,非常不利于培养学生的实验积极性。

1.3.2教学模式单一,传统的实验教学偏重于验证性与演示性实验[4-6]。学生在实验过程中按实验讲义逐步进行,分析思考问题的机会比较少,只是机械化地验证实验内容。学生的注意力主要集中在编程及调试上,忽略了实验电路原理的重要性。不清楚系统设计流程,当需要自行设计系统时,学生就会感觉困难无从下手。实验教学没能起到真正推动学生对单片机原理、模拟电路、数字电路等理论知识理解的作用。单一的实验教学模式制约对学生创新能力及分析解决实际问题能力的培养,降低学生的学习兴趣,影响教学效果。

1.3.3学生实验中实际发挥空间有限。在实践教学中,教师经常把主要的实验步骤、程序代码都提供给学生,造成实验教学中学生动手机会少、思考不全面、发挥空间有限的缺点。

2.《单片机原理与应用》课程实验教学改革研究

针对《单片机原理与应用》课程实验教学现状,对该课程实验教学方法进行探讨,在实验项目、实验教学模式、实验教学环境及实验考核方式上进行改革研究,以提高该课程的实验教学质量,为学生的课程实验、课程实训、毕业设计及相关实践提供优质的基础。该课程实验教学改革方法的研究对提高实验课堂教学质量、促进人才培养和就业都有着深远的影响。

2.1实验项目改革研究

《单片机原理与应用》课程比较侧重于学生动手能力的培养,所以针对该课程的实验项目很多,那么如何根据本学校的学生层次及特点进行实验项目的分类是改革中需要研究和分析的问题。笔者以温州医科大学实际授课实例为例进行阐述。温州医科大学针对生物医学工程专业和电子信息工程专业学生开设该课程。针对学生的专业特点及实验学时的安排,将实验项目教学内容分成四部分,可以根据各专业学生层次特点选择合适的实验项目。具体实施方法为:

第一部分为软件模拟实验,主要目的是熟悉Keil软件、Proteus软件等的操作及汇编语言指令的熟练应用,让学生对整个操作软件的使用及汇编语言的使用有一个全面了解,为以后的实验打下坚实的基础。针对软件模拟实验,主要开设的实验项目包括两类:基础类实验及综合应用类实验。基础类实验主要包括数据传送实验、拆字和拼字实验、数据加法实验、查表实验等;综合应用类实验主要包括模拟交通灯、投篮计分及病房呼叫模拟实验等。

第二部分为基本端口实验,主要目的是让学生认识纹机系统的基本硬件。实验项目主要有端口输出实验、定时计数器实验、按键中断实验、A/D转换实验、多位数码管显示实验、串口通信实验等。

第三部分为综合设计性实验,目的是帮助学生全面掌握所学内容,提高学生综合运用知识的能力。主要有用定时器设计时钟实验、键盘结合LCD液晶显示实验、利用外部中断设计流水灯实验、温度检测实验等。

第四部分为创新性实验,主要针对那些对单片机有兴趣的学生,锻炼学生的创新能力、动手能力和解决实际问题的能力等,该部分实验在课下进行,可结合教师的科研项目和各类大学生电子设计大赛,如教师科研课题中的控制系统及大学生电子设计竞赛、智能车设计大赛、机电产品创新设计大赛等。

2.2实验教学模式改革研究

《单片机原理与应用》课程实验教学模式改革中将PBL教学法与TBL教学法相结合,针对该门课程授课学生专业不同,将实验分成三个层次:基本实验、综合实验和自选实验。针对不同层次实验各自特点和难易程度进行教学方法的选择和综合应用。

2.2.1基本实验主要考核学生基础知识的掌握,内容较为简单,可以只采用PBL教学法。教师只需要给出实验设计的问题,由学生独立完成,不需要进行分组,培养学生的自主动手能力。

2.2.2综合实验不再是单一的知识点、单一的学科,考核的知识可能是跨学科多个知识点,教师只需给出实验的要求和技术指标,学生自主选择决定学习哪些知识解决问题,体现典型的PBL教学法的应用优势。具体实验过程中主要采用分组讨论,单人完成或按组汇报两种方式。

2.2.3自选实验在三个实验层次是难度最高的,学生几乎不可能单独完成,同时教师要给予一定的指导,给出明确的学习目标及知识点,适合采用TBL教学法分组讨论,按组汇报。设计性实验往往都是给出一个需要解决的实际问题,实施方法不是唯一的,这是PBL教学法应用最适合的情况。因此,对于设计性实验最好采用两种方法综合应用。

2.3实验教学环境的改革研究

根据学生的实际情况和要求,为学生创造宽松的实验环境。

2.3.1对学生实验中用到的硬件实验仿真平台可以根据学生的特点及基础进行针对性选择及操作。对于大多数学生,可以选用基础开发板与仿真器的硬件仿真平台在实验课堂中完成相应的实验项目设计,对于能力较强的学生,可以鼓励学生自己做单片机最小系统板或者选用高级开发板与仿真器结合的硬件仿真平台,对于积极性较高的学生,可以建议大家在实验课业余时间选用开发板自己烧写程序在实验课堂之外对实验感兴趣的内容进行仿真学习,为学生创造宽松的实验环境,使学生可以不拘束于课上时间进行实验。

2.3.2对于软件仿真平台,学生可以用汇编语言完成简单程序的设计,能够用C51语言完成简单和复杂程序的设计,学生的前序课程中学过C语言,这样大大降低学生学习的难度,同时学生从对比中加深对汇编语言和C51语言的理解。

2.4实验考核方式改革研究

传统的单片机实验课程不单独考核,评价方式主要以实验报告为依据。这种评价方式使学生对实验教学环节不重视,很难调动起学生在实验教学环节中的积极性。本次改革项目将实验考核方式分为四个部分:把学生每次实验课堂的态度及积极操作的自我关注程度作为实验平时成绩的考核依据,占实验成绩的20%;平时实验报告占实验成绩的20%;综合实验项目考核占实验成绩的50%;自选实验项目占实验成绩的10%。

3.结语

为了提高《单片机原理与应用》课程的实验教学质量,给学生的课程实验、课程实训、毕业设计及相关实践提供优质的基础,提高学生的实际应用和创新能力,本课题结合学校各专业学生实验教学的实际情况,对该课程实验教学方面的教学方法进行探讨与改革。经在实际实验教学中的改革实践表明,通过对实验项目的合理设计,可以培养学生的实验积极性和主观能动性。通过对实验教学模式的改革,激发学生的实验兴趣。通过对实验教学环境的改造及考核方式的改变,可以引导学生重视自身实验技能的培养。从本校学生毕业设计过程及实习过程中可以看出,学生在实际工程应用项目的开发数量和质量都有较大程度的提高。随着实验教学改革的不断深入和完善,该课程会取得更良好的实验教学效果,使学生的综合设计能力及创新能力有明显的提高。

参考文献:

[1]李有光,闻新,南英.本科生AVR单片机实验教学探索与研究[J].实验室研究与探索,2015,34(9):216-218.

[2]祖一康,徐妙婧.单片机教学改革实践研究[J].湖北理工学院学报,2015,31(5):67-70.

[3]金国华,滕君华,马宝山,张大力.单片机课程设计中应用能力的分层培养[J].中国现代教育装备,2015,11:81-83.

单片机原理与应用例8

中图分类号:TP434 文献标识码:A 文章编号:16727800(2013)002018202

0 引言

随着微电子及计算机技术的迅速发展,单片机以体积小、功能强和性价比高等特点,在工业控制、通信技术和数据采集等领域获得了广泛应用。目前,许多学校都开设了《单片机原理与应用》,这门课程将程序语言、串口通信、模拟电路和数字电路等知识综合起来,是一门理论性、技术性、工程性和实践性都很强的课程,是计算机、电子类、机电一体化、自动化等专业的专业必修课。掌握好单片机技术对高职生工程素质的培养以及职业技能的提高都大有益处。

1 目前《单片机原理及应用》课程教学的不足

自20世纪80年代后期,我国的高等院校工科专业开始开设单片机课程,至今有20多年了。这期间,在教室讲授理论,到实验室利用实验箱做实验的教学模式一直沿用至今。由于单片机技术涉及到硬件电路设计和软件设计两方面的知识和技能,学习难度较大,致使初学者上课犹如听天书,时间不长多数学生就懵懵然而放弃了,入门者寥寥。出现这些问题的原因主要是教学方法上存在一些不足。

(1)理论与实践教学比例分配不当,重理论轻实践。目前的单片机课程教学多以理论课为主,实践课为辅。教材理论体系严谨,教师教学思路清晰,但学生往往感觉内容枯燥、概念抽象、指令难记。课堂教学按照教材内容的编排顺序、相关知识的逻辑关系进行,学生刚刚接触数字电路,缺乏编程语言及计算机结构的相关知识,难以顺利入门并对课程产生浓厚兴趣。同时,大部分教师的教学方法通常以讲授为主,缺乏直观形象的实际操作。这些原因导致学生普遍认为单片机的课程非常难学。

在教学过程中,往往理论教学的学时远远多于实验教学的学时,并且实验教学一般在“汇编语言设计”讲完之后开始进行。这种教学体系的不足之处在于:①以大量的原理介绍引导学生入门,学生理解苦难,学习过程也感觉枯燥乏味;②教学过程中“重理论轻实践”,实验只是点缀,造成学生的应用能力培养缺乏,对培养应用型人才的培养目标十分不利;③软件和硬件介绍时分开,对单片机系统软硬件结合的设计方法介绍不足,学生在实际工作中缺少系统化的思路。

(2)教学方法老套,无法激起学生的学习兴趣。目前,大多数高校的理论教学过程都是采用先基础后应用的模式,即单片机硬件结构、指令系统、汇编语言设计、外部系统扩展、接口技术和应用系统设计,这种方法虽然思路清晰,但是存在着过于机械性的弊端,缺乏生动、直观的实物等辅助教学手段,这样便使学生觉得学习单片机枯燥乏味,没有现实意义、缺乏兴趣,严重影响了教学效果。实践教学形式单一且受重视不够。当前的实践课教学大多以单片机实验箱为实验平台,而开设的也多为验证性实验。观察中不难发现,学生在做实验时大都是用实验指导书上已经写好的程序资料,几乎没有多少同学去分析程序的流程,更不用说去研究读懂那些代码了。另外,对于用到电路硬件的实验,也只是按实验指导书要求在实验箱上做简单的连线,没有一个整体的电气原理图概念,再加上实验条件的有限,不可能每个同学都能得到老师的辅导,导致学生过度追求实验结果,而忽略了硬件设计、软件调试等过程。

2 《单片机原理与应用》课程教学改革的思路与措施2.1 以“任务驱动”为主要方法的教学内容

任务驱动教学法是一种建立在建构主义学习理论基础上的教学法,它将以往以传授知识为主的传统教学理念,转变为以解决问题、完成任务为主的多维互动式的教学理念;将再现式教学转变为探究式学习,使学生处于积极的学习状态,每一位学生都能根据自己对当前问题的理解,运用共有的知识和自己特有的经验提出方案、解决问题。

在实际教学中,以学生为主体,项目、工作任务为载体,学生在教师的引领下,由浅入深、由易到难,学习单片机控制系统的设计和制作。为取得良好的学习效果,在课堂上由老师先对学生提出一个课内任务,老师不会完整的告诉学生怎么完成任务,而是只提供知识点,由学生课外完成此任务,并根据任务完成的质量进行考核和评分。

从学生的角度说,任务驱动是一种有效的学习方法。它从浅显的实例入手,带动理论的学习和应用软件的操作,大大提高了学习的效率和兴趣,培养他们独立探索、勇于开拓进取的自学能力。一个“任务” 完成了,学生就会获得满足感、成就感,从而激发了他们的求知欲望,逐步形成一个感知心智活动的良性循环。伴随着一个跟着一个的成就感,减少学生们以往由于片面追求信息技术课程的“系统性”而导致的“只见树木,不见森林”的教学法带来的茫然。从教师的角度说,任务驱动是建构主义教学理论基础上的教学方法,将以往以传授知识为主的传统教学理念转变为以解决问题、完成任务为主的多维互动式的教学理念;将再现式教学转变为探究式学习,使学生处于积极的学习状态,每一位学生都能根据自己对当前任务的理解,运用共有的知识和自己特有的经验提出方案、解决问题。这为每一位学生的思考、探索、发现和创新提供了开放的空间,使课堂教学过程充满了民主、充满了个性、充满了人性,课堂氛围真正活跃起来。

2.2 变革传统的实验模式

(1)设立虚拟仿真实验室。单片机课程内容抽象,教师操作实验开发板时演示效果不太好,学生较难理解,因此,计算机虚拟仿真软件演示起着非常重要的作用。虚拟仿真系统具有以下优势:①组织单片机实验的环境简单,只要有电脑即可进行;②由于只涉及到软件,不会有硬件损坏的问题,可以避免由于设计错误导致的硬件投入浪费,降低使用成本;③绘制原理图、编制程序均在软件上实现,程序执行中各元件的运行状态直观明了,调试方便。因此,在单片机教学中引入Proteus和Keil C编程调试软件,采用多媒体教学方法,能在课堂中完成软件、硬件的调试和系统集成等内容的教学。

(2)利用单片机实验开发板进行教学。实验开发板应用十分方便,目前已经集成了键盘、流水灯和LED显示器等通用设备,线路连接简单,可以进行多个基本项目的实训。通过开发板的学习实践,运用项目教学法进行多个项目的操作,能让学生熟悉单片机及其设备的硬件知识,系统地掌握单片机P0-P3口、串口通信和中断控制的工作原理。

(3)结合多学科进行综合实践。很多学生在学习了单片机课程后,即使掌握了单片机知识,但还是不能融合其他课程的知识进行综合应用,因此,教师应将其他课程的知识与单片机的相关内容联系起来。比如,与Protel课程相结合,要求学生利用Protel设计开发板的PCB图,并制作出PCB开发板,同时自己动手焊接所有的元器件,然后进行系统调试。在此过程中,学生可以享受到自己的劳动成果,更加熟练地掌握Protel知识,更加熟悉元器件之间的硬件连接,对数字电路、模拟电路的工作特点更加了解,对单片机C语言有了更深入的认识,锻炼了各学科的综合实践能力。

2.3 考核方式的改革

与以往传统单片机原理及应用课程的教学采用纯理论的考核方式不同,考试成绩由平时考核、实践技能考核、综合能力考核3个部分组成。其中,平时考核占30%,包括平时作业、课堂表现和平时测验,作业和课堂表现侧重于知识的掌握,平时测验侧重于知识的运用。实践技能考核占30%,包括实验、企业实训和技能竞赛,在每个模块的项目实践过程中考核学生解决实际问题的能力;综合能力考核占40%,包括理论知识和实际应用两部分,理论知识考核采用“试题库”,实行开卷考试,主要考察学生对基本概念、基本原理和基本器件的掌握和理解情况,实际应用部分教师根据学生完成的准确性和熟练程度现场评分。这种考核形式注重考察学生的知识迁移能力和融会贯通能力,优于一次期末考试决定结果的传统考核办法,在贯彻执行过程中效果较好,反映出了学生的真实水平。

3 改革效果

这种单片机教学方法为学生提供了很好的实践空间,能充分吸引学生兴趣,大大提高了学生学习的积极性和主动性。很多学生主动要求延长学习时间,利用周末到实验室动手练习。在每次上实训课时,学生都特别积极,不完成任务不下课,这在以往单片机教学过程中很少见到。通过调查发现,学生对这种教学方法的改革都很认可和喜欢,教学效果得到了很好的改善。

这种教学方法既锻炼了学生的动手能力,又提高了学生发现问题、分析问题和解决问题的能力,同时还培养了学生的信息检索能力。实践证明,该教学方法切实有效,对高职院校单片机教学改革有一定借鉴作用。

参考文献:

\[1\] 屈莉莉,等.单片机课程实践性教学环节的建设与改革[J].中山大学学报论丛,2004(3).

单片机原理与应用例9

中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2017)22-0133-02

一、前言

单片机又称为单片微型计算机,是计算机体系的一个重要分支,也是现今较为流行的嵌入式系统的一部分。由于其体积小、控制功能强、成本低等特点可方便地组装成各种智能控制设备和仪器,做到机电一体化,因此广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,可以说单片机已经渗透到我们生活的方方面面。单片机原理及应用课程也是目前高校计算机、电子、电气、自动化等专业均开设的一门专业课。由于该课程是一门理论性、实践性都很强的课程,因此该课程对实验教学有很高的要求,实验教学在学生学习的过程中占了很重要的地位。但是,目前很多高校的单片机课程实践教学环节及考核方式都存在着一些问题。学生在传统的以理论考核为主的学习方式下很难激发学生的学习兴趣,很难提高动手能力。通过考试改革,使学生在重视基础知识学习的同时,更加注重实践能力和动手能力的境况,促进创新精神的形成。

二、目前的教学考核形式及存在的问题

《单片机原理及应用》课程是一门专业课,其前续课程主要有《电路》、《数字电子技术》、《微机原理》等,课程理论教学的主要内容包括以下几方面:(1)单片机的硬件系统结构。包括单片机的基本组成,CPU结构及时序,RAM、ROM的组织结构及扩展,并行I/O接口的基本原理等。(2)单片机指令系统。包括单片机寻址方式及指令,汇编语言程序设计等。(3)单片机接口技术及应用。包括单片机系统开发的基本方法和步骤,单片机系统扩展及外部的接口,单片机的综合应用等内容。考核主要以闭卷的考试为主,学生的总评成绩这样划分:平时作业、实验成绩和考勤各占10%,期末考试成绩70%。这样的教学及考核形式尚存在诸多问题。

1.教学方面问题。实验课时少。根据学院制定的教学计划,《单片机原理及应用》的总学时为32学时,其中实验课程8学时。实验课程的学时数太少,也是影响学生动手能力的一个方面。在实验课程的分配中,软件实验、验证性实验至少占了6学时,所以综合性设计性实验开设率不高,学生对所学课程缺乏整体性了解和综合运用的能力。实验设备缺乏。由于学校扩大招生规模,实验室现有的实验设备台套数太少,为满足学生实验,不得不增加每组实验的学生人数。我国目前的文化教育,重视理论轻视实践,这造成了学生们从小就重视理论知识的学习而轻视动手实践。另外,在考核方式上,实验课一般作为理论课考试分值的一部分,往往也只占很少的学分,并且只要写过实验报告就基本可以通过。久而久之,大部分学生也滋生了重视理论课程轻视实验的思想。

2.考核方面问题。考核方式不合理。学生的考核以闭卷的考试占主要部分,实验环节所占成绩比例低。这样的考试形式使得大部分同学以理论学习及考试成绩为主导,对于课程学习过程中的实践动手环节只是消极地参与,并没有真正起到动手动脑的作用。考试内容不合理。由于考试形式以闭卷考试为主,考试内容只能局限于教材,加上期末考试前划范围、勾重点等,使得一部分同学以考前重点突击复习为主,造成了这些同学在平时学习及实践环节的松懈。考试题型不合理。考试中客观性题型较多,分值比例较大,综合设计性题型、论述性题型较少。这对于学生的思考能力及综合分析问题能力的考查不全面,也不利于激发学生的学习兴趣和主观能动性。能过以上分析,目前《单片机原理及应用课程》的考核方法已经不能满足学校提出的“培养创新性人才”的要求,不利于培养学生动手能力、创新能力,也不能激发学生的学习主动性。

三、教学考试改革的方式及具体措施

针对单片机教学考试存在的问题,可以从以下几个方面进行改革。

1.为考试改革而进行的教学改革。首先,教学改革要进行教学方法的改革。采用从完成实际问题出发,激发学生的学习兴趣和主观能动性的目标教学方法。在课程的开始阶段,设置一个简单的综合性实例,利用仿真软件或实验箱将实际工程问题解决方案演示给学生看,并要求学生下来查找一些与此相关的实际生活中的应用。以此提高学生的学习兴趣。在接下来的教学过程中教师以教学目标为导向,整个教学过程围绕教学目标展开。在教学目标的刺激下,学生为实现目标而努力学习。在完成目标的过程中,教师积极引导,并将教学内容渗透其中。这种教学方法不仅可以使学生清楚地认识到单片机的原理、概念在实际生活中的意义,而且对于激发学习热情,培养理论联系实际的能力极其有益。其次,教学内容的改革。注重接口技术和应用技术的学习,适当减少体系结构的理论学习。在目标教学法中,学生以实际目标引导其学习^程,那么在教学内容上就应增加能够达成实际目标的应用技术的学习内容,理论体系结构的教学可以把框架性的知识传授给学生,学生在应用中遇到的理论问题,他们会在框架的知识基础上自己进一步细化丰富内容;从汇编语言转向C语言的编程方式。传统教学模式中,教师喜欢使用汇编语言编程,汇编语言虽然具有高效控制精确的优点,但其结构性差,语句复杂,调试难度大,学生接受也比较困难。C51高级语言具有程序结构清晰、可读性好、易于维护等优点,一条C语言相当于几条汇编指令,学生在有C语言的基础上入门很快,这样也提高了学生的学习兴趣;使用Proteus仿真软件。通过使用仿真软件,学生只需要一台电脑就可以完成实验室里的基本实验,方便学生自己动手,提高其动手能力。再次,实验的改革。把实验软件实验、验证实验、设计性实验及综合性实验四个部分,通过验证性实验,学生们可以进一步了解单片机及芯片的作用,提高学生的学习兴趣。设计性实验,可以培养学生实践动手能力及创新能力。综合性实验,可以提高学生综合运用所学知识的能力,提高学生的实验技能和和培养学生的创新能力。在原有的实验课时的基础上增加实验课时,同时提高设计性及综合性实验的比例,真正让学生把理论与实践结合起来。

2.考试方法改革。根据《单片机原理及应用》课程的特点,考试可以采用笔试、做设计、写论文、进行实际操作以及开卷、闭卷等多种方式相结合。我们不能因为笔试的一些缺点就否定笔试在成绩评定中的作用,在笔试的过程中还可以增加开卷、闭卷等多种形式。在出卷时增加试卷的灵活性,适当增加设计、分析和综合思考题型。题目的设计应能使每一位学生在解每道题时都有对知识的理解、分析、比较、融会贯通的过程,从而锻炼学生的思维,多给学生提供探索的机会和可能性,鼓励学生独立思考、标新立异、强调智力开发、避免考试中的偶然性。同时在笔试的基础上还应该增加反映学生平时学习情况的评价内容,比如平时作业,实验报告成绩等。还可以增加实际操作环节的评定,比如对每次实验课程都ρ生的操作进行评分,增加实践环节的考评,把学生综合设计性实验的操作调试及结果作为总评成绩的一部分进行考核。或将实践环节改为操作考试,由学生现场操作,教师根据操作内容正确性进行评分。最后在课程结束后,还可以鼓励学生通过学习的知识内容进行创新设计,将其所做的设计或者通过网络、图书查阅到的资料通过分析总结后写成论文的形式提交,以附加分的形式纳入总评成绩中。这种方法锻炼了学生的分析、设计和对信息的处理能力。

3.考试效果的评估和对教学方法的反馈。淡化考试分数之间的微小差异,增大平时考试成绩的比例,实行百分制、等级制及与评语相结合的综合评分方法,对有独立见解或创新的学生加分鼓励。应奖励有个性者,奖励有主见、有独立思维能力的学生。同时,建立考试结果分析制度,不断总结教学经验。发现问题及时纠正,拓宽、疏通教学质量的有效反馈渠道,建立健全沟通机制。改革后的总体效果还有待长时间的检验。在教学过程中可以明显的发现,提问题的同学明显增多,同学之间相互讨论的次数明显增加。希望此次考试改革能给《单片机原理及应用》课程的学习带来新的气象,增强学生学习的积极性、主动性,培养学生的创新精神和创新意识,实现人才的全面发展。

参考文献:

[1]何宏.单片机原理与应用[M].北京:清华大学出版社,2012.

[2]李康林.单片机课程考试方法改革的实践和探索[J].长沙大学学报,2007,(5):107-109.

[3]周晓雁.单片机实验教学改革的尝试[J].山东工业大学学报,1995,(2):63-65.

Single Chip Microcomputer Principle and Application of Examination Reform Exploration and Research

YANG Yan-xin,HUANG Zhao-bo,ZOU Huan,ZHANG Xue-ping,LI Yu

单片机原理与应用例10

关键词 :单片机原理与应用 理实一体化教学模式 项目教学

一、实施以万能板为载体设计单片机硬件电路理实一体化项目教学

传统的理论教学和实践教学是在不同的时间和不同的地点由不同的教师分别进行的。由于教学目标和教学任务不同,教学组织形式分离,因此容易造成理论教学内容和实践教学内容脱节,降低学生学习兴趣,增加教学难度,直接影响到人才培养的质量。

单片机原理与应用是一门实践性很强的应用性课程,在电子产品开发设计中应用非常广泛,并需要硬件电路开发与软件程序设计同时进行。如果只进行理论教学而不进行实践教学,则教学效果不理想;如果只进行实践教学而不进行理论教学,教学效果也不明显,因此学好单片机技术必须是理论、实践“两条腿走路”,缺一不可。理论知识的学习可以通过听课、看书、看视频教程等方式进行,实践技能就必须亲自动手操作。

为了能更好地培养现代生产企业需求的单片机技术人才,根据笔者学院多年来对用人单位的跟踪反馈,以及多种教学模式的比较、实践,笔者主张在单片机原理与应用课程中实施理论与实践一体化教学模式,即把理论与实践结合起来,理论融入到实践中,学一个知识点、做一次产品、编一次程序、总结一次学习成果,真正做到“边学边做”。

在项目教学环节采用万能板设计与制作单片机产品,这种项目教学方法,不仅能锻炼学生的焊接技术,同时还能提高学生识读单片机硬件电路图的能力,更重要的是能让学生掌握单片机开发的基本步骤,提高软硬件的编程与设计能力,为日后开发设计电子产品打下坚实的基础。

二、实施单片机理实一体化教学的项目设计

为了实现统筹单片机原理与应用课程的知识目标和能力目标,笔者将整个课程重新整合为由易到难的具有连贯性的教学项目。每个教学项目包含了必需的理论知识和岗位能力需要的实践技能,以任务驱动教学,把理论知识和实践技能渗透到教学项目的每个环节中。按照这个教学思路,设计了三个教学项目,项目中包含了三个硬件电路和100个程序范例。

1.项目一:单片机最小系统硬件电路设计与制作

单片机最小系统,是指满足单片机的工作条件,可以正常工作的单片机系统。

该项目的学习目的是掌握单片机入门基础知识和单片机的引脚功能,掌握单片机延时程序的多种编写方法,掌握单片机开发的基本步骤和关键环节,掌握单片机简单程序编辑、编译、在线下载等基本步骤。掌握单片机开发软件Keil uVision4和ISP在线编程软件progisp的使用方法。

2.项目二:基于单片机控制的十六路LED霓虹灯设计与制作

霓虹灯广泛应用于商店广告牌、城市美化等场所,采用单片机控制的霓虹灯,显示花样随程序的改变而改变,样式千变万化,深受商家和居民的喜爱。

该项目的学习目的是掌握单片机P0、P1、P2、P3口作为输入输出口的使用方法,掌握单片机键盘的工作原理及使用方法,掌握单片机C语言源程序的结构特点、标志符与关键子、数据类型与运算符、C语言的语句、数组、指针、函数等用法。

3.项目三:基于单片机控制的红外二极管感应计数报警器

红外二极管感应计数报警器可以实现当用手经过红外发射管和红外接收管时,蜂鸣器发声、二位数码管数字加1的功能,其灵敏度非常高。该电路设计思路来源于企业商品自动计数器的应用实例,当有商品从传送带上经过感应器前,计数器加1,并发出提示声。该电路在现实生活中应用广泛,可以作为单片机设计人员的基本电路模块。

该项目的学习目的是掌握单片机的定时器、计数器、中断及接口技术,掌握LED数码管的工作原理和接口电路,能综合运用模拟电路、数字电路、传感器等基础知识设计与制作比较复杂的作品。

三、组织实施单片机理实一体化教学的关键点

1.前期准备是组织教学的起点

在教学准备阶段,推荐购买单片机制作常用工具和用万能板设计的单片机学习套件。

2.课堂管理是组织教学的难点

由于学生的学习动力、接受能力差异较大,教师要有针对性地将学习动力、接受能力较强的学生与学习动力、接受能力较弱的学生组成一个小组,同时指定一个小组长,协助教师进行课堂管理。

3.教师现场技术指导是组织教学的重点

当学生进行实践操作的时候,教师一定要巡视,及时解决学生遇到的困难,批评教育个别不遵守纪律的学生,要求其加强组织性和纪律性。

单片机原理与应用例11

一、实施以万能板为载体设计单片机硬件电路理实一体化项目教学

传统的理论教学和实践教学是在不同的时间和不同的地点由不同的教师分别进行的。由于教学目标和教学任务不同,教学组织形式分离,因此容易造成理论教学内容和实践教学内容脱节,降低学生学习兴趣,增加教学难度,直接影响到人才培养的质量。

单片机原理与应用是一门实践性很强的应用性课程,在电子产品开发设计中应用非常广泛,并需要硬件电路开发与软件程序设计同时进行。如果只进行理论教学而不进行实践教学,则教学效果不理想;如果只进行实践教学而不进行理论教学,教学效果也不明显,因此学好单片机技术必须是理论、实践“两条腿走路”,缺一不可。理论知识的学习可以通过听课、看书、看视频教程等方式进行,实践技能就必须亲自动手操作。

为了能更好地培养现代生产企业需求的单片机技术人才,根据笔者学院多年来对用人单位的跟踪反馈,以及多种教学模式的比较、实践,笔者主张在单片机原理与应用课程中实施理论与实践一体化教学模式,即把理论与实践结合起来,理论融入到实践中,学一个知识点、做一次产品、编一次程序、总结一次学习成果,真正做到“边学边做”。

在项目教学环节采用万能板设计与制作单片机产品,这种项目教学方法,不仅能锻炼学生的焊接技术,同时还能提高学生识读单片机硬件电路图的能力,更重要的是能让学生掌握单片机开发的基本步骤,提高软硬件的编程与设计能力,为日后开发设计电子产品打下坚实的基础。

二、实施单片机理实一体化教学的项目设计

为了实现统筹单片机原理与应用课程的知识目标和能力目标,笔者将整个课程重新整合为由易到难的具有连贯性的教学项目。每个教学项目包含了必需的理论知识和岗位能力需要的实践技能,以任务驱动教学,把理论知识和实践技能渗透到教学项目的每个环节中。按照这个教学思路,设计了三个教学项目,项目中包含了三个硬件电路和100个程序范例。

1.项目一:单片机最小系统硬件电路设计与制作

单片机最小系统,是指满足单片机的工作条件,可以正常工作的单片机系统。

该项目的学习目的是掌握单片机入门基础知识和单片机的引脚功能,掌握单片机延时程序的多种编写方法,掌握单片机开发的基本步骤和关键环节,掌握单片机简单程序编辑、编译、在线下载等基本步骤。掌握单片机开发软件Keil uVision4和ISP在线编程软件progisp的使用方法。

2.项目二:基于单片机控制的十六路LED霓虹灯设计与制作

霓虹灯广泛应用于商店广告牌、城市美化等场所,采用单片机控制的霓虹灯,显示花样随程序的改变而改变,样式千变万化,深受商家和居民的喜爱。

该项目的学习目的是掌握单片机P0、P1、P2、P3口作为输入输出口的使用方法,掌握单片机键盘的工作原理及使用方法,掌握单片机C语言源程序的结构特点、标志符与关键子、数据类型与运算符、C语言的语句、数组、指针、函数等用法。

3.项目三:基于单片机控制的红外二极管感应计数报警器

红外二极管感应计数报警器可以实现当用手经过红外发射管和红外接收管时,蜂鸣器发声、二位数码管数字加1的功能,其灵敏度非常高。该电路设计思路来源于企业商品自动计数器的应用实例,当有商品从传送带上经过感应器前,计数器加1,并发出提示声。该电路在现实生活中应用广泛,可以作为单片机设计人员的基本电路模块。

该项目的学习目的是掌握单片机的定时器、计数器、中断及接口技术,掌握LED数码管的工作原理和接口电路,能综合运用模拟电路、数字电路、传感器等基础知识设计与制作比较复杂的作品。

三、组织实施单片机理实一体化教学的关键点

1.前期准备是组织教学的起点

在教学准备阶段,推荐购买单片机制作常用工具和用万能板设计的单片机学习套件。

2.课堂管理是组织教学的难点

由于学生的学习动力、接受能力差异较大,教师要有针对性地将学习动力、接受能力较强的学生与学习动力、接受能力较弱的学生组成一个小组,同时指定一个小组长,协助教师进行课堂管理。

3.教师现场技术指导是组织教学的重点

当学生进行实践操作的时候,教师一定要巡视,及时解决学生遇到的困难,批评教育个别不遵守纪律的学生,要求其加强组织性和纪律性。