单片机原理与应用汇总十篇

时间:2022-12-25 21:11:21

序论:好文章的创作是一个不断探索和完善的过程,我们为您推荐十篇单片机原理与应用范例,希望它们能助您一臂之力,提升您的阅读品质,带来更深刻的阅读感受。

单片机原理与应用

篇(1)

中图分类号:G642 文献标识码:A 文章编号:1009-3044(2015)30-0123-02

An Exploration on the Teaching of the SCM Course

YU Lei, LIU Huai-yu

(Huaibei Normal University, Huaibei 235000, China)

Abstract: For the existing problems in teaching of SCM(single chip microcomputer) course and the need for innovative personnel training, some ideas and plans in Theory Teaching and Experiment Teaching are given. To establish teaching system of SCM, it takes the interest as the guide and the design as the main line, with the combination of theory and experiment for the purpose, it also takes the training of innovative ability and practical ability as the target.The result shows that it improves the students' professional ability and innovation ability with the new teaching system.

Key words: SCM; Proteus simulation; C51 language; virtual lab; innovative training

单片机原理应用》是高等院校电子信息工程、通信工程、自动化、电气控制等专业所开设的一门必修课。该课程综合性、实践性以及应用性都很强,不仅要求学生掌握单片机及其相关知识,还要求学生具有单片机应用系统设计的能力,对培养学生的实践动手能力和创新能力具有重要的意义。然而,既让学生掌握基础知识,又让学生尽快地掌握设计技巧,这无疑是对学生能力和耐心的一个挑战,在实际的教学过程中,一些学生反映该课程比较抽象难懂,从而导致部分学生“遇难而止”,失去了学习单片机的激情和兴趣。

针对这个问题,我们从单片机理论教学和单片机实验教学两个方面进行了一些探索,这对学生的学习兴趣和实践动手能力有了很大的提高。

1 单片机理论教学

理论教学是获取专业知识的基础和主要途径,良好的教学氛围不仅能使同学们轻松地掌握理论知识,还能提高同学们的学习兴趣。

1.1 抓住学生的好奇心

好奇心往往是兴趣培养的动力源泉,抓住学生的好奇心在提高学习兴趣方面至关重要。如我在上第一节课时,没有去过分地强调什么是单片机,学好单片机有什么好处等,而是告诉同学们今天给他们带来一个非常有趣的玩具,然后直接拿了我们自己设计的一款循迹小车,并让某位同学在地上随意画出的一条路径,通过观察一下小车的运行情况,让同学们发挥想象力,猜想一下小车怎么知道行驶路线、怎么进行方向控制等,最后告诉他们“这都是由我们将要学习的单片机进行控制的”。这样就一下子吸引了学生的眼光,也激发了学习和探索单片机的兴趣。

1.2 “虚拟实验室”式的课堂教学

《单片机原理与应用》不仅需要熟悉硬件电路的设计和结构,还要掌握软件编程方法和技巧,一段程序对不对,到底在控制方面起不起作用,那要结合软硬件一起来进行调试,为此,我们将“虚拟实验室”搬进了课堂。“虚拟实验室”由Proteus和Keil C51软件组成,其中,Proteus提供了丰富的模拟和数字器件模型,可以完整地仿真51系列单片机及其相连的模拟和数字电路,充当了实验室里开发板的角色;而Keil C51软件是一个51系列单片机软件开发平台,采用C51语言进行编程,在调试程序和仿真等方面有很强的功能。采用Proteus和Keil C51软件相结合,能将抽象、生涩、陌生的知识直观化、形象化、具体化,更容易让人接受。

1.3 “找茬”互动教学

通过Proteus画出硬件电路图,将Keil C51软件编写程序写进去,演示一下正确的结果,如果仅仅如此,那么久而久之学生也会感到乏味,因此一定要在教学的过程中制造一点“麻烦”,让同学们来“找茬”。如在讲到单片机P0-P3口时,为了强调“P0口做I/O时必须外加上拉电阻”这个知识点,在Proteus画P0控制LED电路图时,故意不加上拉电阻,结果发现P0引脚变灰色,LED不亮,然后再试一试其他端口,LED却可以点亮,让学生找出哪地方出现了问题,怎么去修改,P0口和其他端口有什么区别等。这样就会加深学生的印象,无形中牢牢掌握了该知识点,这要比“强调-强调-再强调”有效地多。同样的方法也可以用在Keil C51软件编程中。

2 单片机实验教学

理论教学和实验教学是紧密结合的,单片机实验教学对于培养学生的动手能力和创新意识有着十分重要的作用。

2.1 验证与设计相结合

验证型实验并不是简简单单地验证一下结果正确与否,而是通过实验来发现问题并寻求解决问题的方法,从而巩固和提高所学的知识。然而,目前的单片机实验大多数以验证为主,实验内容比较单一,实验本身没有太大的创造性,对学生的设计能力要求不高,学生只需在实验箱上连接几条线,编写或修改一段简单的实验程序就可以完成,这样学生只知道怎么做,根本不知道自己为什么要这么做,严重束缚了学生的想象力和创造力。因此,必须通过设计型实验来弥补其中的不足。实验课上由被动转为主动, 不再是依葫芦画瓢。

如在讲到“中断”时,除了让同学们验证一下单片机5个中断源的设置和工作原理外,可以让他们设计一款简单的频率计或是数字钟,这样就可以将中断、数码管动态扫描、按键扫描等综合应用到一起,为单片机系统的设计打下了良好的基础。

2.2 命题和自命题相结合

在设计型实验中,也要采用命题和自命题相结合的方式。先以命题形式出现,由老师出题,这样题目涵盖面比较广,可以全面考查到各个知识点,如上面提到的数字钟的设计。自命题型实验是让一组学生根据自己的兴趣和爱好,自己出题目,一般只注重开发的过程,而不重视最终的结果,因为有可能部分学生出的题目过难而最终无法实现。对于无法完成的小组,要找出原因,是硬件本身的缺陷,还是软件设计方面的不足,自己在命题时,忽略掉哪些因素等等。自命题型实验关键就是激发学生的创新思维,培养学生的团队意识,提高组织协调能力、发现问题和解决问题的能力。

从命题到自命题,从“让我做什么”到“我要做什么”,让学生体味一下两者的不同之处,在经过实战演习后,熟练掌握工程项目的开发流程,

3 结语

《单片机原理与应用》是一门软硬件综合、应用性比较强的课程,在整个的教学过程中,建立以兴趣为引导,以单片机系统的设计为主线,以理论和实验相结合为宗旨,以培养创新能力和实践能力为目标的单片机课程教学体系,运用多媒体技术和“虚拟实验室”软件等多种手段,由整体到具体、由简单到复杂、由模块到系统,循序渐进,加强学生动手操作能力和单片机系统开发能力的培养。经过教学改革,我校学生在全国大学生电子设计大赛、全国信息技术应用水平大赛等各项比赛中所取得了良好的成绩,对提高学生的专业知识水平和创新能力方面具有明显的优势。

参考文献:

[1] 胡敬朋, 王聪. 单片机项目教学研究及实践[J]. 电气电子教学学报, 2009, 31(5): 82-84.

篇(2)

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);//发送没有成功执行通知

篇(3)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

四、结束语

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

篇(4)

2选择合适的多媒体课件以满足教学需求

把多媒体课件应用到单片机课程的教学过程中,使得单片机教学不再枯燥,不仅可以使学生提高对理论知识的认识,而且通过仿真实例可以使学生熟悉单片机系统的开发方法,进而培养学生的动手和实践的能力。但是多媒体课件良莠不齐,必须选择合适的多媒体课件否则事得其反。首先,电子课件的开发工具有很多种,每种工具软件有各自的特点,要合理选择。在单片机多媒体课件的开发过程中,笔者所在教学团队,结合了电子课件开发工具PowerPoint和单片机仿真软件PROTUES,使用PROTUES针对具体实例开发出仿真程序,同时把仿真结果动态的插入到PowerPoint制作的电子课件中,使得多媒体课件能够演示单片机工作的动态及结果,感性且直观,同时又增加了课件的趣味性。其次,要及时更新多媒体课件以适应单片机技术的发展速度。《单片机原理与应用》是一门内容多且杂、实践能力要求高、发展迅速的课程,为了适应数字系统的不断发展,多媒体课件中动态仿真实例要尽可能的选择新事例,一方面能增加知识量,使课程和发展形势紧密结合,另一方面也能调动学生的学习兴趣,从而提高教学效果。

篇(5)

摘要:从单片机行业就业需求特点出发,通过对教学内容和方法的优化组合,对实验教学、考核方式的改革,以达到改善教学效果,增强学生动手能力,培养学生创新精神的目标,从而使学生适应当今就业要求,最终实现教、学、做、就业的高度统一。关键词:单片机;教学改革;就业需求;创新能力中图分类号:G424.1

文献标识码:A

文章编号:16723198(2009)19021601高校教学改革已成为一种必然趋势,只有不断改进教学内容和方法,丰富教学手段,激发学生的学习兴趣,加强实践能力的培养,才能实现教、学、做、就业的高度统一,从某种程度上可缓解大学生的就业问题。1 教学内容和方法的改革根据单片机行业对应聘者的相关要求以及本门课程入门难的特点,教学中打破传统推车式的教学方式,注重对教学内容和方法进行优化和组合,将本门课程的学习分如下四个阶段:第一阶段:单片机相关知识及内部结构。首先在讲授各部分前,教师应对单片机就业前景、应用现状等问题给学生做一细致分析。然后以类比的方式(如:人体各部分)讲解单片机最小系统,并让学生明确最小系统是单片机能够正常工作的基本条件,对单片机有一个整体认识。接下来以最小系统为中心分别对单片机引脚功能、内部结构、晶振、电源、ISP、复位等知识进行简单讲解。此部分应在后面整个学习过程中不断进行回顾和学习。第二阶段:跳过复杂的汇编指令,结合嵌入式C语言讲解单片机并行I/O口工作方式。据调研,目前单片机行业主要以嵌入式C语言为主要编程工具,故授课时主要以嵌入式C语言为工具讲解,在后面出现编写程序需要时(如DS18B20等需精确延时的程序时)再穿插讲解C、汇编混合编程方法,这样既和实际工作更加贴近又使学生避过一开始就面对复杂的汇编指令,增强学好的信心。在对单片机并行I/O口讲解时,要侧重于让学生明白单片机作为双向I/O应用时每次读入前为何需先置1等这类应用型问题。在讲解单片机对I/O口的控制方式时,可以采用类比的方式(如:将单片机的各个功能寄存器比喻成我们平时使用的操作系统),以增强学生的理解。经过基础知识的讲解后,教师应拿出大量学时带领学生从编写简单的流水灯程序开始,结合电脑在编译软件(如KEIL软件)下调试,一边编写程序一边讲解各部分理论知识(如:程序中头文件的作用,LED发光二极管的工作原理等),并且逐步由教师带领学生编写向教师给任务学生自主设计过渡。在此过程中,需不断回故前面知识,学习新接口芯片,并同步电脑调试,验证结果。此部分题目至少涉及如下方面:(1)LED流水灯;(2)独立式按键;(3)LED数码管;(4)矩阵式按键;(5)蜂鸣器。第三阶段:中断、定时器、串行口部分。由于定时器、串行口多使用中断方式,与外部中断具有一定的共性,故放在一起进行讲解,以达到触类旁通的目的。首先以学生看得到、摸得着,运用发生在身边的实际例子(如接电话)进行中断的相关概念和中断处理过程的理论讲解,然后以外部中断为代表,结合大量的程序(如每按一次按键LED小灯亮灭变化一次等)讲解实际中断的处理过程及编程方法,使学生通过具体的程序充份理解中断的用途及处理方式。在外部中断被充分掌握的情况下,利用我们身边的实例(如:以出租车行驶里程计数等)进行定时器和串行口工作方式的讲解,由于前面对中断的相关概念、外部中断的工作原理有了很好的理解,故在学习定时器和串行口工作方式时学生就不会感觉太困难。第四阶段:综合设计及系统扩展。结合前面学过的知识,此部分教师拿出部分课时,以任务的方式提出一系列设计任务,学生综合前面学过的知识进行设计,以达对知识巩固、整合的目的,对学生创新能力也是一个很好的锻炼。以上四阶段需逐级递进,每一阶段在讲授基础知识后,需通过大量的练习进行消化理解,各部分一定要突出单片机的应用性,使学生体会到单片机的应用就在身边,以此激发学生的学习兴趣。2 改革实验教学,提高动手能力打破常规按照指导书学生下载程序单纯进行验证的传统实验模式,对课内实验教学进行改革,每次均将实验分为基础实验和设计性实验两部分,并逐渐加大设计性实验的比例。基础实验主要让学生按照实验指导书指导,对相关理论知识进行验证、对此部分实验系统结构、使用方法和软件调试方法进行掌握,为后面设计性实验打下基础。设计性实验由老师提出相应的设计任务(如:利用现有资源设计一款节日彩灯、设计一个秒表等),学生自主进行设计、实验。设计性实验以前面基础实验为基础,但设计任务又脱离指导书,没有参考的内容,故学生只能自已设计硬件电路的连线,编写程序并调试,从而达到对学生基础理论知识和独立自主创新能力双方面的锻炼,而这两项也是用人单位十分看重的。3 开展课程设计,培养创新能力在单片机教学改革中,增设了课程设计部分。课程一开始教师提供多个具有创新要求的课程设计供学生选择。一般五、六人为一组,此课题伴随整个单片机教学,让学生在学习过程中不断想到自已的课题,遇到问题时先自已解决,不成功时教师再加以适当指导。在教学过程中可以感受到学生学习的主动性明显增强,所提问题具有更强的针对性,学习效果也更好。课程设计主要对学生以下几个方面进行了实战训练:(1)根据设计任务的具体要求,查阅资料、制定设计方案及预其目标;(2)使用Protel软件设计电路原理图和PCB版图(也可利用万能板完成但要保证信号的稳定性);(3)购买元器件并进行电路版的焊接;(4)进行软件编程;(5)进行软、硬件联机调试,完善系统功能;(6)撰写技术文档资料。通过课程设计,使学生掌握了单片机系统开发设计的全过程,培养了学生团队精神和创新能力。4 改革考核方式,注重实际能力改变以往一张试卷定成绩的方式,更加注重了实际能力的考核。改革后,本课程的考核分为四方面:第一方面是平时考核,侧重于课堂上学生出勤、学习态度及参与问题讨论的积极性,占总成绩的20%;第二方面是实践能力的考核,侧重于学生的实际操作能力的考核,此部分主要针对平时实验成绩,占总成绩的30%;第三方面课题设计考核,根据每个人的工作量及最终效果评定此部分成绩,侧重于综合动手能力及自主学习能力的考核,占总成绩的20%;第四方面理论考核,侧重于基本理论的考核,占总成绩的30%。由于考核方式的改革,使学生重视实验教学,提高了学生的实践能力、互动性增强,改善了教学效果和质量。5 教改实施效果通过对教改方案的实施,教学取得了明显的成效。学生学习的主动性大为增强。实际动手能力明显提高,这点从大四学生毕业设计中得到了很好的体现,学生能较容易地独立完成DS18B20温度监测系统、数字电子时钟、十字路通指挥系统等毕业设计题目,且选择嵌入式相关工作的学生大部分均成功地找到工作。较快地完成角色的转变,基本达到了社会对单片机应用技术培养人才的需要。参考文献[1]李广弟.单片机基础(修订版)[M].北京:北京航空航天大学出版社,2001.[2]刘守义.单片机应用技术[M].西安:西安电子科技大学出版社,2002.[3]于复生.任务驱动教学法在机电一体化系统设计教学中的实践与探索[J].电气电子教学学报,2004,(1).[4]陈裕成.单片机原理及应用教学改革探索[J].漳州师范学院学报(自然科学版),2007,(2).

篇(6)

中图分类号:G642 文献标识码:A 文章编号:1674-098X(2014)11(a)-0127-01

随着人民生活水平的提高和相关技术的发展,单片机技术在工业控制领域和消费电子领域等方面得到了广泛的应用。作为高校相关学科的专业基础课,“单片机原理应用”课程也得到了越来越多的重视,本课程的理论性和实践性都很强[1-2]。要使学生真正学好本课程,不仅要让学生深刻理解单片机的相关理论知识,重点在于要让学生学会怎么用好单片机,因此在高校的教学中,必须做到理论教学与实践教学并重,通过实践教学带动和促进理论教学,不断提高学生的动手能力和创新能力[3]。

1 当前实践教学现状

当前的实践教学中存在的问题可以从以下三方面分析。

1.1 试验课时和试验设备不足

以我校电气工程及其自动化专业本科生的培养方案为例,单片机原理与应用理论教学共76课时,其中含有60个理论学时和16个实验学时,另外设有一周单片机原理与应用课程设计。从学时分配上,实验课时占总课时的21.05%,比例偏低。为了在有限的实验学时内完成教学任务,试验指导教师只能安排一些基础性或验证性实验,学生缺乏足够的锻炼,达不到实验教学的最终目的。另外,受实验室中设备数量限制,实践教学中出现“抱大腿”现象,即一部分同学认真做,一部分同学玩的现象。

1.2 实践教学内容缺乏创新性

传统的单片机实验教学内容中基础性、验证性内容多,综合性、设计性实验少。课程设计中选题限于试验箱和试验台资源,题目内容很难跟踪当前技术发展的热点。为了达到实物设计的目的,课程设计中题目偏重于实验台(箱)上能进行的实验项目,限于资源,题目难度总体来说偏低,实践教学过程演变成了对实验课内容的简单综合。且选题陈旧,一题多届,多人一题现象普遍,缺乏综合性、新颖性,难以激发学生学习的兴趣,更无法培养学生的创新能力。

1.3 实践教学考核体系

传统的实践教学的成绩考核包含:课程设计报告,设计过程考核和作品设计考核。由于实践教学内容缺乏创新,容易出现投机取巧的现象,使得考核过程流于形式,难以区分学生在实践教学过程中取得的成果,也就调动学生在实践教学过程中的积极性。

2 实践教学改革内容

传统的单片机原理与应用的实践教学无法达到培养学生创新能力和综合应用能力的要求,需要进行改革。针对这些问题,实践教学改革在以下几个方面展开。

2.1 实验室建设

良好的实验室条件是能够开展实践教学的基础条件。在实验室建设中不再选用试验台或试验箱这些昂贵的试验设备,而是以单片机开发板作为实践教学的平台。单片机开发板价格较低,但资源却非常丰富,可以最大程度上满足实践教学的需要。而且可以随着技术的发展不断更新教学资源,甚至部分学生会自行购买。

2.2 项目驱动式实践教学

实践教学中不再由指导教师给定题目,而是由同学们自选题目,指导教师审查题目。项目的设计既要完全包含本课程的知识点和技能要求,还要与实际相联系。所选项目可以源自日常生活中遇到的问题,也可以是自己感兴趣的课题。所选题目由指导教师审查题目难度及可行性,并给出建议后形成一个小项目。这种选题方法可以最大程度上避免选题陈旧等问题。变抽象为具体,激发学生的学习兴趣。

2.3 实践教学组织

试验资源增加后,在组织实施实践教学中,鼓励单人单组,最多两人一组。利用兴趣引导学习,激发学习的主动性,从而可以最大程度上避免“抱大腿”现象。而且因为试验资源不再局限于实验室,可以更充分的利用利用课余时间。在开设课程设计的学期内完成,参加学期末的课程设计答辩。从思想上不再把单片机课程设计当做某一段时间内需要完成的任务。通过长时间的锻炼可以取得更好的实践锻炼效果。

2.4 开发工具多样化

实践教学中坚持开放工具的多样化,不限定使用仿真器调试。实践教学前期可以使用仿真器调试,锻炼学生的编程与调试能力。到实践教学后期,因为大部分程序已经调试完成,此时引导学生脱离仿真器调试程序,锻炼学生的分析问题和解决此类问题的逻辑思维。

2.5 以知识竞赛引领创新

鼓励以实践教学的作品参加国家级或者省级电子设计类比赛。参加这类比赛以增强动手能力为主要目的,同时也会保证作品的实用性、新颖性和知识的综合性。激发学生之间的竞争意识,促进实践锻炼的教学效果。

2.6 实践教学的考核体系建设

学期末组织课程设计答辩,根据所选题目难度、任务工作量、完成情况、答辩表现、课程设计报告给出最终实践教学的基本成绩。根据参加各类大赛的获奖情况给出创新成绩,这两个成绩按一定比例确定最终成绩,在我校目前实施的考核体系中,竞赛成绩所占比例为30%。增加的答辩环节,既可以鉴别该同学是否真正完成了相应的实践教学锻炼,避免抄袭现象和“抱大腿”现象,还可以锻炼学生相应的逻辑思维能力。

3 实践教学改革的成效

从2012年开始在电气工程及其自动化、自动化、电子信息工程三个专业进行实践教学内容及方法的试点改革,约有1000名学生接受了新的实践教学内容和方法。通过实践教学改革,激发了学生学习的主动性与积极性,培养了学生的创新意识和综合运用知识的能力,提高了学生的动手能力。学生参加电子类大赛的人数和获奖人数以及获奖等级逐年提高,2012年,在山东省大学生电子设计大赛中参赛的8只代表队全部获得山东省一等奖,2013年,在全国大学生电子设计大赛中有两个不同的题目获得全国一等奖,还有2个队伍获得全国二等奖,剩下的9只代表队获得了山东省一等奖。这些数据充分说明学生学习的积极性得到了激发,实践动手能力得到了明显的进步。

参考文献

篇(7)

中图分类号: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).

篇(8)

《单片机原理与应用》课程是一门理论和实验结合非常紧密、突出动手能力的课程。实验教学是其中一个重要环节,既是联系理论教学的桥梁,又是培养学生实践、创新能力的重要手段[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.

篇(9)

中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2015)20-0101-02

单片机由于其结构简单、易于控制及价格低廉等优点,使得其广泛应用在仪器仪表、工业控制和自动化控制等领域中。随着电子技术的飞速发展,企业对单片机应用型人才的需求越来越多,而且越来越看重具有动手能力、团队意识和创新能力的学生。因此,理工科学校的教育工作者和学生越来越重视单片机原理及应用课程的教学成果。然而该课程作为高等工科院校电子、机械和测控等专业重要的专业必修课,是一门综合性、实践性很强的课程。对于工科学生来说,很好地掌握单片机技术,不仅有助于深入地学习专业知识技能,提高自身的整体专业素养,培养动手能力与团队意识,更重要的是能够获得实用的专业技能和创新能力,增强就业竞争力。

面对市场对人才日益严峻的要求,如何培养出适应社会需求的创新型和专业型人才,是教师面临的一项紧迫而艰巨的任务。这不仅仅要求教师提高自身水平和积累工程项目经验,还要求不断反思教学过程,在教学方法上进行改革和探索。

一、单片机教学特点及存在的问题

单片机原理及应用课程教学与其他理论科目教学方式不完全相同,这门课程强调的是专业知识的应用,要求学生能够将基本理论与实际工程相结合,达到解决工程问题的基本能力。因此,在重视理论教学的同时,必须重视实验教学。但是,在具体的教学过程中,不但学生普遍感到难学,授课教师也存在许多困惑,这些都是由于课程特点引起的。

它的主要特点[1]有:(1)概念多,专有名词多,内容抽象,对于初学者来说难以适应,由此会感觉入门较难。(2)编程语言指令多,且需要掌握每条指令的功能及操作数来源。(3)逻辑性和完整性强,各部分知识衔接紧密。(4)课程的图示说明多。(5)综合性强,涉及内容较多,涵盖了模拟电路、数字电路、自动控制系统等诸多基础课程的内容。(6)解决实际问题的能力强。单片机教学的这些特点,使得学生在开始学的时候难以入门,难以了解单片机的整体结构,从而对单片机的学习失去信心,以至于出现学生普遍认为课程难学、教师普遍认为课程难教的局面。

多年的单片机教学经验表明很多学生学完课程之后并没有达到预期的效果,不能将学到的知识应用于实践,或无法将知识点连成知识面进而形成知识体系。另外传统的实验教学以验证性的实验为主,学生在规定的时间内,用统一的模式,按照指导书上规定的步骤做相同的实验。对于包含工程开发的软硬件协同设计难以开展,学生对基础知识的综合应用能力较差,自主设计和创造能力也普遍存在问题。

二、CDIO模式下课程教学改革探索

1.CDIO工程教育模式。CDIO是一种国际化高等工程教育的创新模式,是由麻省理工学院(MIT)、瑞典皇家工学院(Royal Institute of Technology)等四所跨国大学合作开发的一整套工程教育理念和实施体系[2,3]。它以产品研发到产品运行的生命周期为载体,让学生以主动的、实践的、课程之间有机联系的方式学习工程[4-6]。主要包括技术知识与推理、个人和职业能力与态度、人际交往能力,团队合作和交流、企业和社会环境下的构思设计实施运行系统等四个层面,这种模式不仅注重培养学生扎实的专业技术知识,更关注团队协作精神和创新精神的培养,并通过“做中学”和“基于项目的教育和学习”的教学模式培养既有扎实的专业技能,又有良好的团队协作能力和创新能力的国际化工程师。国内外的经验都表明CDIO“做中学”的理念和方法是先进可行的,适合工科教育教学过程各个环节的改革。

2.以项目为导向,改进教学方式和教学内容。教学方式上,将本专业有着丰富科学研究和教学经验的教师组织成一个项目实施团队,建立相对稳定的承担单片机原理及应用课程教学和实践环节的教师队伍。研究CDIO高等工程教育模式的理念和本质,转变观念,改革教学内容、教学方式和教学手段,紧密结合有关科研项目,将CDIO理念和教师在科研中的实践经验和体会融入教学内容、课堂教学和实验教学环节中。项目中每位成员根据自己承担的科研项目,每学年提出一个适合单片机项目化教学的项目,并将学生进行分组,每组4人,每组都包含1~2名兴趣比较浓厚、学习动手能力较强的同学,每个小组选择一个项目,该项目贯穿于单片机教学内容和过程的始终。最后再完成一个综合性强的实践环节。通过这种方法提高学生学习的积极性和主动性、动手实践能力、团队协作能力和创新能力。

3.改革教学模式。在实际的教学中,将提出的适合单片机项目化教学的项目分配给学生小组,让学生以团队的形式完成整个项目的设计,包括方案设计、软件实现、硬件设计以及测试和调试等整个过程。使项目贯穿于单片机原理及应用课程教学内容和过程的始终,学生分组完成,教师提供辅导。选用的项目可分步实现,彼此关联,从小到大,从简到繁,从局部到整体,层层推进,形成一个完整、全面的单片机应用系统的教学项目。在实际的教学改革中,我们依托于“RS232串口通信”、“数控式直流电流源设计”、“智能负载”、“温湿度测量系统”、“数控直流稳压电源”等项目,将以包含能力训练的项目教学方式让学生深入理解专业知识和提升其专业技能。将教学内容相关的知识分解到各个教学项目当中,这样可以增强学生学习单片机课程的兴趣,培养他们的团队意识和创新能力以及提高在严峻就业环境下的竞争力。

4.考核方式的改革。传统的单片机的期末成绩主要由学生的平时成绩和卷面成绩按照一定的比例构成(一般为3∶7),卷面成绩则全部由试卷考试的形式决定。这种传统的考核方式评价不了学生的实践能力和创新能力,也不能完全作为掌握单片机基础知识的判断依据。而CDIO工程教育则要求学生在掌握专业知识的基础上,具备一定的工程实践能力,也符合广大学生的学习目的。

因此,在本次改革中,为了确保考核方式的合理性、公平性和有效性,单片机的成绩将以CDIO工程教育基本理念为指导,与项目结合的形式完成对学生能力的综合评价,并采取教师点评和学生互评等各种方式(如表1)进行。这种以“过程”为基础开展,关注学生知识、技能的学习过程,关注实践环节及工程应用能力,力求知识与能力的协调统一的教学考核,不仅增强了衡量学生掌握知识的依据,而且有利于引导学生注重动手实践能力和自身综合素质的提高。

三、教学改革的实际效果

1.激发了学生的学习兴趣。以项目化方式指导学生学习的教学方式,增强了学生学习单片机的兴趣和热情。工程教学中始终贯穿着项目,学生需要按照项目的任务和要求系统地学习基础知识和应用能力,有助于学生明确学习目标。这种由传统单调的课程教学到灵活的项目教学方式,也极大地提高了学生的学习氛围和兴趣。

2.培养了学生综合运用知识的能力。要完成CDIO项目中的工程任务,必须运用诸如数字电路、模拟电路、自动化控制和单片机技术等多学科的基础知识。学生需要综合运用所学知识来解决项目中遇到的问题,使学生综合运用知识的能力得到培养。通过完成遇到问题到解决问题的过程,学生也加深了对知识的掌握。

3.锻炼了学生的团队协作精神。由于在整个工程项目的学习过程中,学生被分为3~4人一组,在分散学习、查阅资料、讨论及实践活动的过程中,都是以小组的形式进行,每个小组都是一个小团体,全体组员共同参与学习环节中的各项活动。彼此互相配合,广泛交流的过程,锻炼了学生的团队协作精神和团队意识。

4.提高了学生的思维、实践动手能力。CDIO教学模式“做中学”的理念,强调教学与实践的统一。在教学过程中安排的大量项目实践活动,需要学生亲自动手完成项目要求的各个实践任务,并参与到项目开发的始终。参与工程的开发能够发散学生的思维,提高实践动手能力。从项目完成的情况来看,此次改革有效地提高了学生的创新能力和解决问题的能力。

四、结语

经过全体课题组教师的不断努力,“单片机原理及应用”课程教学改革已经取得了初步成效,教学效果得到了显著提高。通过单片机教学改革的实践,结果证明,在CDIO工程教学模式下,采用以项目为驱动的教学方式不仅生动有趣,还能提高学生的创新能力和实践能力。而且理论与实践紧密结合的教学改革,激发了学生学习的兴趣,培养了学生的团队协作能力和团队意识。

参考文献:

[1]李晓林,牛昱光,阎高伟.单片机原理与接口技术[M].第2版.北京:电子工业出版社,2011.

[2]马卫国.基于CDIO的单片机原理及应用课程教学改革探讨[J].中国现代教育装备,2011,(19):70-72.

[3]张翼成,刘美,王涛.CDIO模式下“单片机原理及应用”课程教学改革[J].计算机教育,2012,(32):22.

篇(10)

中图分类号:G642.0 文献标识码:A 文章编号:1007-0079(2014)33-0065-02

“单片机原理与应用”课程是一门很重要的专业基础课,把编程语言知识、模拟电子技术、数字电子技术、电路知识等综合在一起,属于技术性、工程性、实践性很强的一门课程。该课程作为电气工程自动化、自动化、机电一体化等专业最重要的核心课程之一,它是“自动化”高素质复合技能型人才所需自动控制类知识结构的载体之一,占据着相当重要的地位。

然而,传统的“单片机原理与应用”教学一般以学科体系为出发点,注重课程本身的体系结构和前后的逻辑联系,理论性很强,但却忽略了“可学性”,学生缺乏明确的目标,致使学生学得吃力,老师教得辛苦,教学效果不佳。传统的“单片机原理与应用”教学,一般以单片机的结构为主线,按部就班,先讲单片机的硬件结构,再讲指令和软件编程,然后是单片机系统的扩展和各种器件的应用,最后再讲一些实例。按照此种教学结构,学生普遍感到难学。很多书一开始就提出的总线、地址、寄存器等概念,学生往往难以理解;到了后面,如果还是延续以往教材中单片机的七种寻址方式则更抽象,有很多学生直到学完单片机还不能理解寻址方式究竟是什么意思,为什么需要这么多寻址方式。然后是单片机指令、111条指令,如果再不分重点,等到指令全部学完,大部分学生已对单片机望而生畏,开始打退堂鼓了,到了考试时候,老师也愁,题目出的简单还怕学生不会,至于应用能力就更不知道从何谈起了。

因此,对单片机课程进行教学改革是十分必要的。通过对教学理论的深入学习和教学实践的摸索,笔者越来越认同“兴趣是最好的老师”这一看法,而阶段性成果是引导教学、激发学生兴趣的有效办法之一。基于此,论文提出“任务驱动”这一教学模式,主要包括以下内容:

一、改革课程内容体系结构,突出课程特点

单片机是一门实践性很强的课程,然而在以往的教学模式中却表现为抽象性强、理论要求高、记忆内容多的特点,这样就要求对选修课程学生的记忆力、思辩能力和思维灵活性的要求较高,大部分学生难以掌握,显然不符合教学的期望,同单片机应用为王的本质相背离,也不符合教学的特点。单片机又是一门发展很快的学科,大部分教材的教学语言还是采用“汇编语言”,而实际情况是在现实的应用过程中,除了特殊的一些行业外,绝大部分都采用C语言进行开发,汇编的可移植性、复杂性都限制了应用,因此在实际教学中也必须开展改革。另外新技术、新器件不断涌现,而我国现行的相关教材中知识相对陈旧,很多里面的芯片都已经停产。教学内容很少体现单片机知识在相关专业中的实际应用,使得学用脱节――既未能体现“素质教育”的现代教育理念,也没有体现单片机针对各专业所应有的“专业基础性”。因此,内容上必须改革,补充新的知识,调整体系结构。

为了增加学生的积极性,改革后的单片机课程内容采用模块、课题、任务体系结构,将课程划分为多个模块,每一模块由多个课题组成,每一课题由一个或多个任务组成,每一任务由任务目标、任务分析、相关知识和任务实施四个相互连贯的部分组成。

二、改革教学内容组织方式,提升学生主动性和积极性

开展“单片机原理与应用”课程学习方法的研究,为学生提供有针对性的学习指导,激发学生的学习兴趣,培养学生的自学能力,应是教学改革中亟待加强的重点内容之一。

进行教学内容组织方式改革,这好比是从原先的“C语言”到“C++”的转换,从原先的“顺序结构”、流水账的教学方式转换为面向任务的教学模式,实际上是一种随着需求变化自然而然的蜕变。

每次教学均围绕一个任务目标进行各教学环节的组织,以任务目标为主线进行各相关知识点和技能点的讲解。以教师为主导,以学生为中心,边讲边学,边学边练。在实施过程中,教师和学生都思路明确,知道本轮教学的目的是什么,是为什么在服务,学生不再是被动接受教师的填鸭式灌输。在教学过程中,双方一起对任务进行分析,教师教授相关知识,在任务实施阶段开展师生互动,在课内外利用计算机仿真软件和开发的实验平台进行验证,鼓励学生上讲台进行分析和操作。要求学生对课堂教学任务电路和程序进行设计或修改,培养学生单片机应用电路和程序的设计方法,并用提问、作业等形式来检查学习情况。教师对学生存在的疑问进行实时解答,早发现早解决,减少将问题带到学期结束的情况,为后续其他课程的开展提供较好的基础。

这部分的关键在于教师对整体内容的把握、任务的设计和节奏的控制。因为浙江省地处东南沿海地区,民营企业发展良好,笔者所在的专业同周边企业有着长期良好的校企合作,因此很多教学任务设计的实际上是来源于企业的实际需求,因此在任务的设计上很接地气,能体现一般企业甚至行业现阶段与本课程相关的大致水平,应用性非常强,通过对横向项目的提炼和重组,对照教学大纲的要求往往能够设计出若干教学任务,经由系教学会议讨论后可以确定下来。随着新的项目开展,逐步替换一些较老的任务案例,保持有序的更新,这样学生也能了解到目前相关行业的情况,而不会出去两眼一抹黑,特别是某些企业可能就是他们身边较好的企业,能够在心里得到认同,产生共鸣。首先就觉得这门课程对他有用,接下来就能更好地去了解该任务设计中的前因后果,学习如何组织实施。这一过程,自然而然就提升了学生学习的积极性,进而改进学习效果。

三、改革实践性教学设计方式

我们一直强调“单片机原理与应用”课程的实践性强,单片机的实践部分实质上可以表现为两方面:一方面是对单片机编程的实践,另一方面是对单片机相关的硬件设计方面的实践,两者相辅相成,缺一不可。往往很多单片机教学中受限于课时和实验设备,大多只开展前者,而后者的实训十分欠缺。

为此主要采用两种方式。首先,考虑到学生人数众多,为了更多学生受益,引入“Proteus”仿真软件。该软件支持51系列和其他主流单片机,以及相关的单片机接口电路,教师提供主要案例,指导学生开展虚拟实验,构建出虚拟实验平台,有助于学生开展课外的学习,辅助开展实践教学,作为辅助手段可以让学生加强对单片机编程的训练;其次,设计开发“自制单片机综合实验平台”,以往大学采购的单片机教学实验平台基本上模块固化,真正实验的时候基本不需要对硬件原理进行思考,依据实验手册简单地连接几根导线就可以了,实际上对硬件设计的学习帮助作用微乎其微。正是认识到了这一不足,自主开发的实验平台加强了学生对硬件设计能力培养的环节。在具备普通实验平台的实际编程能力培养的基础上,该实验平台的组织上采用了灵活的接口形式,所有模块都是可以拆卸的,为配合单片机课程教学中的“任务驱动”模式,会有不同的模块,这一措施使得实验内容的选择更为合理和丰富,方便开展综合型、创新型实验。这些模块通过统一的接口形式,类似于DCS、PLC等装置的卡件形式,插入到本实验平台中。模块并非都是直接可用,有些模块需要学生依照原理进行组装,有些需要进行焊接,甚至还有一些空白的模块需要学生按照任务的要求,设计硬件方案,选择器件,自行完成功能模块。因此实际在一次实验的开展过程中,不但对单片机编程进行了实训,另外对器件的认知、电路的设计组装等都进行了培训。由于硬件的差异,软件程序也是各有区别,有效避免了从实验手册代码一抄,实验完成这一现象,在这几年的教学实践中通常都能较好地完成。同时鼓励学生在课后自己设计实验,自己做实验,开放式实验教学也取得了较好的效果。

四、改革考核形式,保障教学任务的有效实施

成绩是课程的永恒话题,不论是想自己的能力得到肯定,还是想取得良好的成绩问鼎奖学金还是其他因素,学生对成绩还是比较看重的,因此有些教学如果平时学生不主动,只要拿住考试的指挥棒,学生还是会投入相应的精力,但这种方式往往会使学生的学习目的是去应付考试,甚至作弊。这就需要改革考试方式,避免一考定音。

考核的方式方法和考核的内容将直接影响教学过程的实施,关系到教师如何教和学生如何学。因此,应通过对考核方式方法的改革来促进教学过程的改革。

本课程以往的考核形式相对单一,考题侧重于记忆,例如背几条指令、说几个部件的作用、编几条程序等,导致有的学生单片机考试成绩很好,但却不会实际运用。因此在改革中,注重应用能力的培养,提高平时成绩所占的比例。由于课程是“任务驱动”,整个课程下来已经有好几次任务,一次任务结束后对每位同学完成的结果予以记录和评分,评判依据可以按完成任务的先后顺序、完成的质量及学生表达能力等方面。记录结果由同学签字确认。考虑到时间,可以以组为单位进行实训时,教师还应对每位同学提出相关的问题或进行单独操作,这对主动性差的同学来说能起到很好的促进作用。(平时作业就分散在任务之中)因此平时的成绩也自然而然地给出了,大家对自己平时的成绩也明了。实际上到期末考试前,学生大致能对自己的成绩有一个初步的定位。教学实践表明,最终的成绩同平时的成绩并无太大的变化。通过这一方式的改变,一方面提高了学生对平时学习的重视程度,基本杜绝了平时不努力、考试前临时突击这一现象。最终成绩能较好地体现学生在本课程的学习情况,学习风气得到了有效的提升。

五、结语

针对“单片机原理与应用”课程特点,提出了“任务驱动”这一教学模式,基于此改革课程内容体系结构、教学内容的组织形式,并对课堂教学、实践教学的形式和内容进行了变革,有效调动了学生的学习兴趣,提高了学习的主动性,并在这一过程中学生掌握了实际的知识和技能。通过改革考试形式,在一定程度杜绝了大学课程平时不努力、考前临时突击这一现象,促使学生脚踏实地,对学习成绩的提升起到了一定的作用。

参考文献:

上一篇: 用电安全总结 下一篇: 临床医学研究论文
相关精选
相关期刊