HI,欢迎来到学术之家,发表咨询:400-888-7501  订阅咨询:400-888-7502  股权代码  102064
0
首页 精品范文 单片机原理与应用

单片机原理与应用

时间:2022-11-16 16:50:27

单片机原理与应用

单片机原理与应用范文1

关键词: 《单片机原理及应用》 课程改革 教学实践

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

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

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

一、改革课程内容

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

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

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

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

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

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

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

三、教学与科研相结合

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

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

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

参考文献:

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

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

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

[4]邹逢兴.创新教学是提升教学质量的永恒动力[J].中国高等教育,2004(22):34-36.

单片机原理与应用范文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);//发送没有成功执行通知

break;

单片机原理与应用范文3

关键词: 《单片机原理与应用》 实验教学改革 创新性实验

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

[4]刘喜双,姚健.单片机课程实践教学改革探索[J].教育探索,2013,8:31-32.

单片机原理与应用范文4

摘 要:本文阐述了理论与实践一体化教学模式在单片机原理与应用课程中的应用,介绍了以万能板为载体设计硬件电路的理论与实践一体化项目教学以及项目实施具体步骤、项目教学过程中的关键点。

关键词 :单片机原理与应用 理实一体化教学模式 项目教学

一、实施以万能板为载体设计单片机硬件电路理实一体化项目教学

传统的理论教学和实践教学是在不同的时间和不同的地点由不同的教师分别进行的。由于教学目标和教学任务不同,教学组织形式分离,因此容易造成理论教学内容和实践教学内容脱节,降低学生学习兴趣,增加教学难度,直接影响到人才培养的质量。

单片机原理与应用是一门实践性很强的应用性课程,在电子产品开发设计中应用非常广泛,并需要硬件电路开发与软件程序设计同时进行。如果只进行理论教学而不进行实践教学,则教学效果不理想;如果只进行实践教学而不进行理论教学,教学效果也不明显,因此学好单片机技术必须是理论、实践“两条腿走路”,缺一不可。理论知识的学习可以通过听课、看书、看视频教程等方式进行,实践技能就必须亲自动手操作。

为了能更好地培养现代生产企业需求的单片机技术人才,根据笔者学院多年来对用人单位的跟踪反馈,以及多种教学模式的比较、实践,笔者主张在单片机原理与应用课程中实施理论与实践一体化教学模式,即把理论与实践结合起来,理论融入到实践中,学一个知识点、做一次产品、编一次程序、总结一次学习成果,真正做到“边学边做”。

在项目教学环节采用万能板设计与制作单片机产品,这种项目教学方法,不仅能锻炼学生的焊接技术,同时还能提高学生识读单片机硬件电路图的能力,更重要的是能让学生掌握单片机开发的基本步骤,提高软硬件的编程与设计能力,为日后开发设计电子产品打下坚实的基础。

二、实施单片机理实一体化教学的项目设计

为了实现统筹单片机原理与应用课程的知识目标和能力目标,笔者将整个课程重新整合为由易到难的具有连贯性的教学项目。每个教学项目包含了必需的理论知识和岗位能力需要的实践技能,以任务驱动教学,把理论知识和实践技能渗透到教学项目的每个环节中。按照这个教学思路,设计了三个教学项目,项目中包含了三个硬件电路和100个程序范例。

1.项目一:单片机最小系统硬件电路设计与制作

单片机最小系统,是指满足单片机的工作条件,可以正常工作的单片机系统。

该项目的学习目的是掌握单片机入门基础知识和单片机的引脚功能,掌握单片机延时程序的多种编写方法,掌握单片机开发的基本步骤和关键环节,掌握单片机简单程序编辑、编译、在线下载等基本步骤。掌握单片机开发软件Keil uVision4和ISP在线编程软件progisp的使用方法。

2.项目二:基于单片机控制的十六路LED霓虹灯设计与制作

霓虹灯广泛应用于商店广告牌、城市美化等场所,采用单片机控制的霓虹灯,显示花样随程序的改变而改变,样式千变万化,深受商家和居民的喜爱。

该项目的学习目的是掌握单片机P0、P1、P2、P3口作为输入输出口的使用方法,掌握单片机键盘的工作原理及使用方法,掌握单片机C语言源程序的结构特点、标志符与关键子、数据类型与运算符、C语言的语句、数组、指针、函数等用法。

3.项目三:基于单片机控制的红外二极管感应计数报警器

红外二极管感应计数报警器可以实现当用手经过红外发射管和红外接收管时,蜂鸣器发声、二位数码管数字加1的功能,其灵敏度非常高。该电路设计思路来源于企业商品自动计数器的应用实例,当有商品从传送带上经过感应器前,计数器加1,并发出提示声。该电路在现实生活中应用广泛,可以作为单片机设计人员的基本电路模块。

该项目的学习目的是掌握单片机的定时器、计数器、中断及接口技术,掌握LED数码管的工作原理和接口电路,能综合运用模拟电路、数字电路、传感器等基础知识设计与制作比较复杂的作品。

三、组织实施单片机理实一体化教学的关键点

1.前期准备是组织教学的起点

在教学准备阶段,推荐购买单片机制作常用工具和用万能板设计的单片机学习套件。

2.课堂管理是组织教学的难点

由于学生的学习动力、接受能力差异较大,教师要有针对性地将学习动力、接受能力较强的学生与学习动力、接受能力较弱的学生组成一个小组,同时指定一个小组长,协助教师进行课堂管理。

3.教师现场技术指导是组织教学的重点

当学生进行实践操作的时候,教师一定要巡视,及时解决学生遇到的困难,批评教育个别不遵守纪律的学生,要求其加强组织性和纪律性。

4.项目报告是组织教学的落脚点

单片机原理与应用范文5

关键词:非电类专业;单片机原理与应用;教学改革

中图分类号:G642.0;U676.2 文献标志码:A 文章编号:1674-9324(2016)41-0083-02

一、引言

单片机以其小巧、功能强大、低功耗等优点,已被广泛应用于工业自动化过程中的数据及信息处理和各种智能化仪器仪表中。工科院校中的绝大多数专业都开设了“单片机原理与应用”的课程,该课程需要较好的电子电路课程知识作为基础,通常非电类专业往往电子电路课程学得就比较少,而单片机课程中的各种芯片又往往都是电子集成度高内部结构复杂。非电类专业该课程只是作为专业基础,教学课时设置通常也都比较短,在课时较短、学生电子电路基础比较弱的条件下,是否能把“单片机原理与应用”这样一门具有技术性、应用性很强的课讲透讲好,让学生真正学懂能用,直接严重影响到学生后续专业课的学习。我们在轮机管理工程这个非电类专业教授该课程多年,在该课程的教学过程中我们经历过困惑,经过对该课程教学方法的不断思考和探索,我们认为一定要立足于专业特点对该课程的教学过程进行改革。

二、单片机课程传统教学模式的问题

该课程在以往传统的教学方式中总是选用一本通用的教材,课堂以老师顺序讲解教材内容为主,而内容都是从单片机的硬件结构开始的,以内部的电路联系为主线,介绍各部分的电路逻辑关系。单片机因为高集成度内部结构复杂,内部结构既看不到,更无法让学生感受到内部各个模块间的关系,一切都听老师讲,抽象难懂难于记忆。所以很多学生从课程刚开始就觉得犯晕,在课堂上不知老师所云为何事,如听天书一般。教学的结果往往是尽管老师讲得很辛苦,学生多数还是一片茫然没有兴趣,甚至很痛苦,使得课程后面的内容难于继续,课程的教学难有成效。

三、教学内容和方法的改革

(一)根据专业优化教学大纲内容

首先一定要十分清楚“单片机原理与应用”课程在各种不同专业中的作用,对课程进行准确的定位,从而对教学内容重新审定,体现出不同专业的侧重点[1-2]。如我们在思考该课程在轮机管理专业的教学改革时,征求了在船上具有丰富经验的轮机员和专业课老师的意见,定位该课程在轮管专业中不是研究和开发计算机技术为目标,重点是理解计算机技术在船舶机舱各个自动控制模块中的应用。为此我们大幅度简化了许多芯片内部复杂的电路结构原理的教学,把重点放在芯片的外部特性和应用要求上,增强实际训练,让学生在实际训练中理解信号在各个芯片间传递的关系,为学生在专业课学习中理解机舱中各个参数自动控制系统的构成原理奠定基础。

(二)以项目为导向激发兴趣

在以往教学中,大都注重课程理论的连续和完整性。学时少又要讲许多电路分析,非电类学生就如听天书了。为此我们对教学内容进行规划调整,将许多章节的内容都做成不同的项目,按专业安排项目具体内容。课堂上我们先提出项目要求,引发学生思考想办法。然后我们再提出单片机内部相应模块的功能与课堂所提项目要求的对应关系,进一步介绍模块的应用特性,讲明如何应用单片机内相应模块来实现项目要求。我们还把每个项目都做成相应的仿真实验,通过课件课堂演示结果直观[3],让学生如参与其中,增加课堂互动,激发了学生兴趣。我们放弃模块内部详细线路原理的讲述,只是以实现项目目标为导向引入课程知识点内容,让学生在项目目标的实现方法分析中学习了知识点的应用,这对于单片机课程只是应用型的专业已足够,让学生清晰有效地学习知识点。

如课程开篇,我们就以船舶控制中一个极其简单的项目为例子,如下图1中直流电机运行控制中,引导学生分析直流电机是否工作取决于线圈KM是否有电流,而KM是否有电流又取决于P1.0电平的高低,通过作好的课件演示P1.0的电平高低可由单片机芯片加上简单输出命令就可实现,直观的电机运行画面让学生感受到单片机芯片可用来控制各种设备的运行,进而介绍单片机的作用及该课程在专业中的应用情况。

(三)强化实践环节制定合适的实验内容

强化实践环节在教学中的比重。单片机实验室通常都配专用实验箱,实验箱中有产家配套的一些验证性的实验,并有相应电路和程序清单,直接采用实验箱的实验是没有成效的,因为很多学生就是直接调用产家固化在ROM中的程序来运行,结果很快一切正确,但其实自己什么也不知道。为此我们不用产家配套的实验,自编了各个模块的实验内容。每个实验我们只提要实现的目标,让学生在预习报告中分析写出要利用单片机系统中的哪部份结构,分析实现目标的方案。对于非电类的专业,我们在设计实验内容时让学生掌握单片机系统模块功能的应用为主导,精心设计项目内容,使得要实现的项目目标所需编程简单,有的甚至只要几条指令就可实现目标。这样的实验课有效地帮助了学生对单片机应用的理解。

(四)应用Proteus仿真软件

Proteus是一种功能强大的电路分析与实物仿真软件,可模拟众多的电子元件和单片机系列,能模拟设计电路的运行[4-5]。在实践教学中,我们既用实验箱的实际元器件进行实验,同时也教学生应用Proteus仿真软件,有的实验可能学生在课时内完不成,一个实验室一般都面对许多专业几乎排满,要做到实验室开放让学生可随时来实际上是有难度的,学生在自己电脑安装Proteus软件,随时可进行实验项目的仿真,如同实验室就在身边,我们用于上课的仿真实验课件也都可以提供给学生,让学生自己可以很方便地自己做一些应用设计的仿真实验,这对于我们加强实训环节起到起到了很重要的作用,通过应用让学生真正领悟所学内容。

四、总结

对于非电类专业的“单片机原理与应用”课程我们根据专业情况精心制定合理的教学大纲,以应用为教学重点,教学内容采用以项目为导向,以直观的实验仿真作为课堂教学的重要辅助并加强实训环节。该课程在我校轮机管理这个非电专业的教学中,我们通过近几年的这些改革收到了一定的成效。教学质量教学方法是我们永恒的话题,为此我们愿意不断努力不断探索。

参考文献:

[1]杨保亮.应用型人才培养体系下单片机教学的改革探索[J].教育教学论坛,2014,(4):18-19.

[2]曹建树,等,应用型工科院校单片机教学改革与实践[J].实验室研究与探索,2012,(3):40-42.

[3]许超,等,基于Proteus和Keil的单片机课程教学改革[J].辽宁大学学报,2011,(1):25-27.

[4]郭增富.轻松学Proteus[M].北京:中国电力出版社,2015:6-40.

[5]徐爱钧.基于Proteus虚拟仿真[M].北京:电子工业出版社,2014:50-62.

Teaching Reform and Practice of "Single Chip Microcomputer Principle and Application" Course for Non Electric Major

HUANG Yu-yan

(Marine Engineering Schoolof Jimei University,Xiamen,Fujian 361021,China)

单片机原理与应用范文6

【关键词】单片机;实验;教学改革

《单片机原理及应用》是医学影像专业的一门重要专业课,此专业开设关于X线机、CT、磁共振等医疗设备的课程,这些医疗设备均应用了单片机。医学影像专业的学生学好用好单片机,既可以帮助学生理解和学习医疗设备的结构、原理及工作特点,又贴近学生的专业特点及就业方向,从而可以很好的提高学生的就业竞争力[1]。

但是,《单片机原理及应用》这门课程综合性强,既要学习单片机的硬件组成和功能,又要学习与硬件型号配套的软件编程,加之汇编语言属于低级语言,和硬件的配置情况有关,内容抽象,学起来艰涩难懂[2]。良好的实验教学可以帮助学生理解课程内容,掌握核心知识,从而提高学生的学习积极性和学习效率。目前,关于单片机实验教学的研究很多,但大都是工科院校针对本校各工科专业进行的研究,针对医学影像专业的研究很少[3-9],所以任课教师和实验师从医学影像专业单片机实验教学存在的问题入手,着眼实际运用,对医学影像专业的单片机实验教学进行改革探索。

一、实验教学现状及原因

目前医学影像专业的单片机实验教学普遍现状是使用工科专业的教材和仪器,实验项目也与工科专业相似。对于医学影像专业的学生来说,单片机的学习本身就比较困难,如果不考虑此专业与工科专业的差别实施相同的教学方法和实验方案,其结果就是大部分学生没有学习的兴趣,学过之后既不会编制应用程序,也不会设计应用系统。究其原因,主要表现在以下四个方面。

1.实验教学方法滞后,不利于激发学生的实验兴趣

按照传统的实验教学方法,学生在学完简单的汇编指令后开始上实验课。实验的内容、步骤以及实验电路和仪器等都提前安排好,学生只要按照实验指导书的安排就能顺利完成实验。这样的实验课缺乏设计性和自选性,学生的实验结果和实验报告基本相同,这就在很大程度上抑制了学生的主观能动性,不利于激发学生的实验兴趣,致使实验课成为形式课。此外,传统的实验教学中,教师布置好实验任务后往往只看学生的实验结果,对学生实验过程中出现的问题关注不足,这样容易使问题被忽视,还容易使部分同学抄袭其他同学的实验,这些均不利于激发学生的实验兴趣。

2.实验项目内容设置不合理,不利于培养学生的实验积极性

传统的实验教学中,实验项目都是从实验仪器配带的实验项目中选取。这些实验项目虽然可以紧扣理论知识,但各个实验项目独立性强,几乎没有考虑知识的前后贯穿和最后应用系统的设计,这容易使学生学了后面的忘了前面的,自己设计简单的应用系统更是无从下手,非常不利于培养学生的实验积极性。

3.实验环境受限,不利于实施实验前指导,实验后答疑的教学全过程

在实验教学中,教师可以在实验的过程中给学生指导,但实验课的时间非常有限,实验前指导和实验后答疑的另外两个实验教学过程几乎缺失。实验课前学生拿到实验项目后至实验开始实施的这段时间里,学生几乎得不到老师的实验指导,学生做完实验后出现的疑问也得不到及时解答,这会使学生刚刚激发的学习兴趣又没有了。

4.实验考核方式落后,不利于树立学生的正确学习导向

目前单片机实验课的成绩大多取决于实验报告,由此学生往往对实验过程草草了事,而对实验报告很认真,并互相抄袭,这对实验成绩的评定造成了很大的困难。此外,课程的期终考试多为闭卷形式,考察的知识点多为记忆性的,对于学生分析问题、解决问题的能力很难考察。这种考核方式使学生只加强原理知识的死记硬背,对实验技能的培养不重视,从而树立了错误的学习导向。

二、实验教学改革的目标

单片机实验教学改革的目标就是要改变传统单片机实验教学的各种弊端,探索构建新的单片机实验教学模式,从而激发学生的实验兴趣,培养学生的实验积极性,提高学生的主观能动性和创造性,进而引导学生树立正确的学习导向。

三、实验教学改革的探索与实践

针对传统单片机实验教学的弊端,拟对医学影像专业的单片机实验课进行以下改革:

1.改进实验教学方法,激发学生的实验兴趣

在学生熟悉了实验环境后,摒弃原来学生照实验指导书做实验的实验教学方法,在具体实验项目实施前一周,给学生实验项目和实验目的及思考题,具体的实验步骤、实验程序以及电路设计均由学生自己完成。这期间老师给予适当的指导,并鼓励团队协作,由2至5名同学组建一个实验小组,共同进行实验的设计和实施。在上实验课时,老师随时关注实验过程并及时与同学交流,而不仅仅看实验结果,由此激发学生的实验兴趣。

2.设计合理的实验项目,培养学生的实验积极性和主观能动性

根据医学影像专业学生的特点以及学时安排,重新设计实验项目。新实验项目不仅紧扣理论知识,还注意知识的前后贯通和实验项目的前后联系。所有的实验项目均围绕十字路通信号灯系统进行设计,学生在由浅入深的实验过程中可以自己一步步完成一个十字路通信号灯系统,这不仅可以达到复习理论知识的目的,还可以引导学生自己完成一个应用系统的设计,由此培养学生的实验积极性和主观能动性。

3.创造环境,认真实施实验前指导、实验后答疑的教学全过程,保护学生的学习兴趣

根据学生的实际情况和要求,在每次实验课前安排三到五次的实验前指导,指导学生在进入实验室之前自己完成实验电路及实验程序的设计。实验课上指导老师密切观察学生的实验过程,对出现的情况及时解决,由此督促学生认真做实验。实验课后安排一次答疑时间,对学生实验课上产生的疑问进行解答,由此来保护学生的学习兴趣。

4.改变考核方式,引导学生树立正确的学习导向

改变传统实验的考核方式,把每次实验的全过程作为实验的主要考核依据,实验报告只做辅助参考,由此得出实验的平时成绩。最后一次综合实验课老师不给任何指导,完全由学生完成,作为实验的期终成绩。本课程的最终成绩由期终闭卷考试成绩和实验平时成绩及实验期终成绩组成,由此改变学生只加强原理知识的死记硬背,对实验技能培养不重视的情况,从而引导学生树立正确的学习导向。

以上措施在医学影像专业实施两年来,取得良好效果,学生不但实验的积极性提高了,理论知识掌握的也扎实了,而且学期末大多数同学能灵活运用所学知识自己完成综合应用设计实验项目。

四、总结

本文针对当前医学影像专业单片机实验教学的现状,从实验项目、教学方法、教学环境、考核方式等方面对单片机的实验教学改革进行了探索和实践。近两年的实践效果表明,新的单片机实验教学模式,不仅提高了学生的实验兴趣和积极性,还加强了学生对理论知识的理解和灵活应用,为学生将来的学习打下了良好的基础。

参考文献

[1]韩丰谈.医学影像设备学[M].北京:人民卫生出版社,2006.

[2]张富贵,黄海松等.单片机设计性实验与工程实践能力的培养[J].实验技术与管理,2011,28(2):135-138.

[3]唐炜.基于“项目驱动”的单片机类课程实践教学改革[J].实验室研究与探索,2010,29(5):130-134.

[4]宋蕴璞,周文泳,徐鸣谦等.高校单片机教学实验设备与方式探索[J].实验室研究与探索,2009,28(11):6-8.

[5]倪志莲.单片机课程的实验教学改革[J].实验室研究与探索,2006,25(7):843-844.

[6]郝凤涛,祝名钰.采用应用型题目提高课程设计实验教学效果[J].实验室研究与探索,2005,24:224-226.

[7]张晴,刘为.单片机实验教学改革[J].实验室研究与探索,2003,22(4):27-29.

[8]廖平.单片机实验教学的改革[J].实验室研究与探索,2004,23(7):36-38.

[9]张慧.医修专业《单片机原理与控制技术》课程改革探索[J].辽宁师专学报,2010,12(4):23-25.

[10]张文昭,李艳芳等.任务驱动法和项目教学法整合在单片机课程中的实践[J].湖南科技学院学报,2010,31(12):99-101.

[11]曹建树,薛龙,万力培等.单片机创新实践教学改革与实验室建设[J].实验室研究与探索,2005,24(9):4-6.

[12]张静,王英健.工科院校“单片机原理及应用”课程教学新模式探究[J].中国电力教育,2011,3:194-195.

单片机原理与应用范文7

关键词:单片机;课程;教学改革

《单片机原理与接口技术》课程涉及的知识点多,对技能要求全面,使得学习者备感困难。同时,由于高职学生的知识接受能力弱,传统教学方式必然造成学生听不懂,跟不上,进而厌学。面对以上问题,本文试图就高职特色的《单片机原理与接口技术》课程教学改革作一探索。

《单片机原理与接口技术》课程的特点

单片微型计算机因其具有集成度高、运算速度快、体积小、运行可靠、价格低等特点而在过程控制、数据采集、机电一体化产品、家用电器、智能化仪表和网络技术中得到大量使用。国内高校、中专、高级技工学校都相继在计算机工程、软件工程、工业自动控制、机械电子工程、精密仪器、电工电力电子、电子工程等专业开设了《单片机原理与接口技术》课程。越来越多的企业也把掌握单片机技术作为招聘技术人员的标准之一。

高职院校中,由于学制限制,学时少,不少院校和专业将《单片机原理与接口技术》课程也作为对非计算机专业学生进行现代计算机技术的第二次认识和启蒙教育,因此该课程显得更为重要。学生一般都要进行计算机应用基础的学习,完成对计算机的初步认识和基本操作的学习。如果学生缺乏相关的硬件训练,将对计算机应用的理解和学习造成障碍。《单片机原理与接口技术》课程集成了计算机组成原理、微机原理、汇编语言等课程的相关内容,并且包含单片机技术本身的知识体系。单片机“麻雀虽小,五脏俱全”。为了弄清单片机的一个概念,往往要牵扯到更多的新概念。因此在学习单片机原理与接口技术的过程中,很多学生感到困惑和吃力。

根据学生特点和课程特点,教学中应注意的几个问题

《单片机原理与接口技术》教学中必须强化基础、注重应用,进行模块化教学。同时要把握好教学与培训、理论与实践两个方面的关系。教学与培训是有区分的:教学是强调系统的基础知识,培养学生进一步学习的能力;培训则是对有一定基础的学生进行短期强化训练,尽快上手,进入角色。教学必须由易到难,符合认知规律。教学内容既要有一定的先进性又必须相对稳定。单片机基础知识相对稳定,而接口芯片的发展则可以用日新月异来形容。单片机作为一门技术,《单片机原理与接口技术》课程必然是以实验为主的课程。

教学中应先给学生一个总体的知识框架和学习脉络,让学生在任何时候对基本知识的把握都是清晰和完整的。学习单片机是一个渐进的过程,往往学习一遍难以完全掌握,而且这门技术也在不断发展,因此要培养学生的自学能力。教学中要讲清、讲透单片机硬件结构。根据教学要求和学生实际,对接口技术及接口芯片的讲解和使用可简可繁、可多可少。有条件的情况下,相关专业应开设专门的《单片机原理与接口技术》实践技能培训课程。一般专业也要充实实验教学,开足基础实验,作为理论教学的有力补充,以加深学生对基础知识的理解和基本技能的训练。

探索有高职特色的《单片机原理与接口技术》课程教学方法

“教、学、做合一”教学法在单片机课教学中,要充分发挥教与学的积极性,努力走“实践―理论―再实践”之路。强调在做中教,在做中学。通过理论教学以及实验和实训的有机配合完成教学目标。

3P教学法3P的概念是指原理(Principle)、实践(Practice)和产品(Product)的三者合一,是“教、学、做合一”的具体应用,将理论学习、实践应用、产品制作有机地结合为一体,以理论教学为基础,以实践训练为重点,以掌握知识和技能、制作产品为教学目标,较好地体现“学用一致,知能并举”的教育思想。在单片机教学中,这种教学法是非常值得提倡,并取得显著成效的一种方法。

案例教学法教师可在上课前让学生预习教师准备的实例材料,形成一定的看法,做好实例讨论的课前准备;在课堂中,针对实例出现的问题,教师组织全班讨论,由学生找出解决的方法,做出辨析;最后教师作简短的点评或补充性、提高性的总结。

上好每一堂课,注重教学设计

要提倡学生参与教学。这就要求教师在备课时不仅准备专业技术内容,更要研究教法,即如何利用“项目”、“实例”、“问题”等手段来激发学生的兴趣,提高学生参与程度,这也是课程设计的重要内容。教学设计有以下几种方法:(1)根据课程教学内容划分教学单元,按照一体化原则进行设计。(2)确定每个单元课程目标,包括知识目标和能力目标。(3)选定每个单元课程单项实训项目,以实例贯彻单元教学之中。(4)确定演示、实验、实训、实习等内容。(5)引入案例,问题驱动,操作演示,展开知识,讨论问题,总结提高。(6)板书演示,示范操作。(7)自查课程目标、层次、进度、信息量等。

参考文献:

[1]张华.课程与教学论[M].上海:上海教育出版社,2001.

[2]门振华.职业技术教育概论[M].重庆:重庆大学出版社,1988.

单片机原理与应用范文8

摘 要:单片机原理与应用是中、高级技工院校工科电类专业的一门重要的专业课程。由于该课程具有一定的理论难度与深度,因此在教学中必须根据技校生的认知状况,采用模块教学法使学生在较短的时间内掌握单片机原理及接口技术,熟悉其应用系统的开发技术。

关键词 :模块 单片机 教学

随着大规模、超大规模集成电路技术的发展和计算机微型化的需要,人们把微型计算机的基本功能部件集成在一个半导体芯片上,使得一块集成电路芯片就能构成一个完整的微型计算机,简称单片机。由于单片机的硬件、软件系统及I/O接口控制能力等方面都有独到之处,具有较强而有效的功能,因此它的应用极其广泛。也正因为此,如今的各中、高级技工院校的计算机应用、自动控制、电气电子、机械等工科专业,都将单片机原理与应用作为各自专业的一门重要课程。但由于该课程涉及数字电路、C语言程序设计、可编程控制器技术等多门专业课程的内容,因此具有一定的理论难度与深度,加之技工院校的学时较短,实训课时更是很难得到保证,结果导致教学效果不佳。为此,在单片机原理与应用的课程教学中引入模块法,可以使学生在较短时间内系统掌握单片机原理及接口技术,掌握单片机的程序设计方法,熟悉单片机应用系统的开发技术。

一、模块教学法的内涵

模块教学法是近几年来新引进技工院校的教学模式。它是指在教学过程中,围绕不同层次学生的培养目标,将教学内容设定为“阶梯状”教学模块,教师在不同的教学模块,灵活运用案例教学法、讨论式教学法、情景教学法等先进教法与学法,特别是在专业课程教学上强调“教师边讲解边演示,学生边操作边理解”的动手动脑相结合的“双边教学法”,从而实现预期的教学目标。其与传统教学方法最大的区别在于以素质为核心、以能力为本位,重在知识和技能的实际灵活应用。

二、模块教学法在技工院校单片机教学中应用的意义

1.降低了教学难度

在以往的单片机教学过程中,按照传统教材的教学模式,学生先学难懂的硬件结构原理,再学枯燥的汇编指令,然后又开始了脱离实验的纯软件编程的学习,等开始学习单片机接口技术时,不少学生对前面的内容早已忘得一干二净。这种传统教学模式在很大程度上导致学生感到单片机“原理难学、指令难记、接口难用”。而采用模块教学法,将教学内容根据学生的学情以及今后就业的需要,重组、整合,让学生“边学理论、边实践,学一样、会一样”,有效地降低了教学难度,激发了学生的学习兴趣。

2.锻炼了教师队伍

单片机技术是一门实践性很强的软硬件结合的技术。无论是程序设计方法,还是硬件结构,都必须通过大量的实践才能理解、掌握,同时单片机技术的更新换代又极快,这就对教师的能力提出了全面的更高的要求。采用模块教学法,可以使教师在教学过程中不断地既教又学,真正实现了“教学相长”的目的,从而使普通教师达到“双师型”教师的标准。

三、模块教学法在技工院校单片机教学中的应用

1.明确教学内容

开发模块课程的关键点是确定教学内容。针对技校生的知识掌握现状以及相关课程的学习情况,笔者与同事对一些学生不容易学习理解和老师不好教的内容作了调整;同时考虑到虽然现在单片机新产品层出不穷,但51系列单片机以其高性价比受到广大用户和厂家的推崇,所以教学内容仍以51系列单片机为典型机型来组织内容。考虑到学生今后的发展,还添加了大量带有工程性质的应用实例和其他一些新型的接口器件,以跟上单片机应用开发技术的潮流。

2.合理划分模块

我们以培养技校生职业能力为目标,从实用的角度出发,将单片微型计算机基础知识、51系列单片机的硬件结构、51系列单片机的指令系统、汇编语言程序设计、51系列单片机的内部功能单元、51系列单片机接口应用实例组合成基础模块;将51系列单片机系统的扩展、输入/输出通道及接口技术、单片机应用系统开发技术、单片机C51语言程序设计基础组合成提高模块,充分突出单片机应用系统以及接口技术方面的知识点。同时,为了突出技校生的能力培养,我们又设置了基本实验模块与应用实验模块,其中基本实验模块包括了中断实验、定时器实验、8279显示接口实验、LCD显示实验等内容,而应用实验模块包括了一锁多功能按键识别技术、动态数码显示技术、点阵式LED简单图形显示技术、霓虹灯控制、继电器控制等内容。这样就通过从易到难,循序渐进的教学过程,使学生受到从硬件设计到软件编程的完整训练,从而尽快掌握单片机应用系统的开发技术。

单片机原理与应用范文9

1课程教学内容探索

专业知识体系由知识领域、知识单元和知识点三个层次组成,专业知识体系分成学科基础知识体系和专业方向知识体系。电子信息类学科基础知识体系由电路与电子学知识领域、信号系统与控制知识体系、计算机知识领域和电磁场知识领域四个基本知识领域构成[1]。传统的微机原理课程作为计算机知识领域的专业基础课,与计算机文化基础、C语言、电路分析、模拟电子技术、数字电子技术等先导课程联系紧密,同时又是单片机原理与应用、嵌入式系统与应用、DSP原理与应用、现代计算机体系结构、计算机网络与通信等后续课程的理论基础。该课程在上述学科前三个基础知识领域与电子信息类各专业方向知识体系之间起到承上启下的作用。

随着集成电路技术的迅猛发展,微处理器的发展也日新月异,其芯片集成度越来越高,内部结构越来越复杂,处理能力越来越强,已进入64位的微处理器时代。对于刚刚进入高校的本科生,如果直接学习32位、甚至64位的微机系统原理,需要掌握的相关背景知识太多,容易陷入技术的泥潭中[2]。而传统的微机原理介绍的16位的微处理器8086/8088及其相应的配套接口芯片早已退出应用舞台,造成知识点与实际应用存在较大的脱节,让学生产生学习这门课程没有用的错觉。虽然微机原理理论更系统,而单片机应用性更强,但这两门课程在内容上(原理与接口应用等)和形式上(指令系统和汇编程序设计等)具有较大的交叉,独立设课将不可避免地出现知识点的重复和各自重点的缺失。此外,尽管微机原理课程偏重于系统理论,但也是一门实践性很强的课程,需要通过实验实践来加深对系统理论的理解,以8086/8088为核心的实验平台缺乏实际应用背景,在学时较少的情况下实验教学效果较差,如果采用广泛使用的51系列单片机来合理地设计实验课程内容,实验将具有更强的实际应用背景,可以更有效地与系统理论知识协调互补,提升学生的学习兴趣,并引导学生进行课外动手实践制作,可更好地增强学生的实践能力和创新精神。为此,我校电子信息类专业将这两门课程合二为一,安排45学时的理论教学和20学时的实验教学。

由于各领域的应用需求不同,微型计算机系统形成了以PC机为代表的通用微型计算机系统和以单片机、ARM,DSP,SOC,SOPC等为代表的嵌入式计算机系统这两大分支。尽管这两大分支系统在外形上具有很大差异,但由于“本是同根生”,它们都是由基本的冯•诺依曼结构计算机工作原理演变而来,存在很多共同的知识点。因此,课堂教学应首先介绍计算机的基本原理:对数制与编码、计算机的基本组成逻辑电路、存储器等基础知识简要回顾,做好课程与数字电子技术课程内容的衔接;明确计算机系统在硬件结构组成上以运算器和控制器为中心引出系统总线配备存储器和输入输出设备,以指令系统作为软件基础明确计算机是按照给定程序,逐条执行指令从而实现特定功能,明确程序设计语言中的机器语言、汇编语言和高级语言这三大类型语言各自的特点和相互关系;硬件系统和软件系统有机组合在一起才能构成完整的微机系统,以计算机执行访问存储器或I/O设备程序过程举例说明微型计算机的基本工作过程和原理;从中断基本概念出发明确中断系统功能和中断处理过程,介绍中断程序的一般设计方法,从而明确计算机中断系统的原理。由于51系列单片机“麻雀虽小五脏俱全”,一个芯片包含了计算机结构中运算器、控制器、存储器和输入/输出5个组成单元,其知识相对简单,容易理解和掌握,而且有广泛的应用背景,比较容易进行各种系统设计实验,因此,学习计算机的基本工作原理后,可着重讲授51系列单片机原理及应用。通过对51系列单片机内部电路结构和工作原理的学习,辅以电源电路、复位电路和时钟电路建立单片机最小系统作为硬件平台;在软件基础方面,理解和掌握80C51指令系统中的寻址方式和指令的分类,掌握各条指令有序组合在一起实现特定功能的汇编程序设计方法,从而更深入地理解和掌握单片机的硬件结构,再偱序渐进地引导学生采用高级语言进行程序设计,实现与C语言课程内容的衔接;通过内部主要功能单元(定时/计数器、UART串行接口和中断系统)结构和编程应用、单片机系统扩展和接口的编程应用的学习,从软硬两方面综合实现单片机的实际应用。在学时允许的条件下,最后简要介绍微型计算机系统的原理与应用,加深计算机系统工作原理的理解,为后续课程学习奠定理论基础。

教学是教师的教和学生的学所组成的一种人类特有的人才培养活动。站上讲台,教师要明确教什么,帮助学生建立学科相关课程的体系结构,让学生明确所学课程在学科体系中的地位和作用,明确能够学什么。以上介绍可明确我校电子信息专业微机原理与接口技术课程改革后“教什么与学什么”的问题。

2课程教学方法探索

通过对课程教学内容的探索,课程重点讲授微型计算机系统架构及其基本工作原理、单片机工作原理和实际开发应用两部分内容,课程具有较强的理论性和应用性,课程内容比较抽象,如何提高课程教学效果,需要深入探索“怎么教与怎么学”的问题。

2.1 课堂授课方式探索

随着现代化多媒体教学方式的普及,传统的纯板书教学方式逐步被多媒体投影教学方式取代。这种 现代化的教学方式在声形结合、图文并茂地给学生带来不同的学习体验的同时,也显现出一定的弊端。通常情况下,教师在控制台讲解投影屏上的教学内容时,学生听到的讲解声音和看到的课程内容处于脱离状态,视觉和听觉难以集中[3]。此外,由于多媒体教学没有教师板书环节,课堂教学信息量增大,学生对课程内容思考时间变短,同时长时间盯着投影屏接受大量信息容易造成视觉疲劳,导致教学效果不佳,不具有传统板书教学方式中学生的视觉和听觉集中在教师板书区域,能够跟随教师板书节奏边听边理解的优点。因此,我们针对具体教学内容采用传统板书与现代化多媒体相结合的方式授课,不仅给学生带来图文并茂的学习体验,同时对于重点和难点知识,采用板书形式循序渐进地引导学生一起互动式理解并掌握,提高教学效果。例如:通过举例方式讲解汇编语言程序设计基本方法,通过课件显示例题题目内容可节省传统板书书写时间,对设计题目分析时,通过课件以动画的形式生动地展示程序流程图,以流程图为依据进一步采用传统板书的方式引导学生一起在黑板上依次书写一条条的指令,完成程序设计,然后将备课时在计算机上编辑好的程序源代码用仿真软件运行并通过投影仪展示程序运行过程。

由于该课程在学科专业体系中承上启下,课程内容与数字电子技术息息相关,在授课过程中要注重相关课程的衔接。例如:讲授总线概念时,可联系数字电子技术课程中讲授的三态门采用分时工作的工作方式,主要应用在计算机总线中;讲授存储器扩展时,联系数字电子技术课程中讲授的半导体存储器的相关概念;讲授定时/计算器时,联系数字电子技术课程中讲授的时序逻辑电路计算器的工作原理;讲授计算机中有符号数采用补码形式可将符号位直接参与运算,结果仍为补码形式表示时,可进一步拓展到数字系统中有符号表示和运算均采用补码形式。此外,课程内容自成体系,需注重课程前后知识点的连贯衔接,在授课过程中,只要讲授的新知识点与前面学习的知识点相关,我们就引导学生翻到教材学过的相关知识点位置,将前后知识点有机结合起来,帮助学生形成完整的课程体系。

由于课程部分内容较为抽象、难以理解,在讲授相关内容时,还可采用比喻的方法用日常生活中相似的事例进行类比,将抽象内容形象化、生动化,让学生更好地理解和掌握。例如:讲授中断处理过程可以用事例“正常讲课过程中出现学生提出疑问并解答完毕回归正常讲课”作类比。“教师正常授课”类似于“执行主程序”,“学生举手”类似于“中断请求”,“教师请学生提出疑问”类似于“中断响应”,“学生提出疑问以及教师解答”类似于“中断处理”,“回到正常授课”类似于“中断返回”,此外,“学生提出疑问前的授课进度和内容”类似于“中断的断点”,学生通过这样的类比可以更好地理解和掌握中断的相关概念。讲授“MOV”传送指令时,可用学生在课堂上抄作业进行类比。讲授空操作指令“NOP”时,可拿学生在课堂上打瞌睡作类比,类比过程引来了学生哄堂大笑,活跃课堂气氛的同时,也提醒部分学生要遵守课堂纪律,不要在课堂上虚度光阴。

2.2 注重实验实践环节

本课程是实践性和应用性非常强的专业基础课,仅仅通过课堂教学来学习掌握基本系统概念、工作原理、设计原则和方法是远远不够的,尤其在当今大力提倡以培养创新能力为核心的素质教育中,为满足经济社会发展对高素质创新型人才的需要,必须将理论和实践紧密结合起来,用理论指导实践,用实践强化理论。因此,教学双方都要注重实验实践教学环节,正确合理地设计实验课程内容,并采用探究式教学方法,以教师为主导、学生为主体,调动学生的积极性,挖掘学生的学习潜力,变被动接收为主动探求,“做中学,学中做”,做到学以致用、活学活用。

实验课程采用层次化的实验实践内容体系,分成基础实验、系统综合实验和课程设计实践三个层次。基础实验内容包括:软件开发环境和简单程序设计,I/O口输入、输出实验,中断、定时器实验;异步串行通信实验,D/A和A/D接口实验等。通过基础实验逐步掌握单片机的定时/计数器、中断、串行通信、系统扩展、接口技术等功能,在实验过程中偱序渐进地引导学生采用C语言进行程序设计。以简易数字时钟设计为题进行系统综合实验训练,让学生将基础实验中掌握的单片机各功能模块组成完整系统,建立单片机系统整体概念,学会站在系统的高度分析和解决问题,初步具备单片机系统的设计和实现能力。通过以上两个层次的训练后,学生有了一定的理论基础以及实践能力,则进入课程设计实践环节。学生通过课外时间自行选择课题,独立完成相关软件和硬件的设计,要求设计实物系统测试验收,训练学生自主解决问题的能力和创新能力。

由于实验项目设计来自实际应用课题,使得实验课程更接近实际应用。设计性、综合性实验占85%,要求根据任务,做好预习,根据参考方案或自行设计硬件电路,编写相应的程序。每位学生独立完成软硬件的调试,做好实验记录并由指导教师检查后签字确认。每个实验结束后,要求学生提交完整的实验报告,包括程序清单、电路原理图、测试记录、结果分析等。

3课程教学目标探索

将传统的微机原理与接口技术和单片机原理与应用课程合二为一后,为了能够实现为后续课程学习奠定较强的微机系统理论基础并掌握单片机系统原理和具备单片机实际应用开发能力的教学目标,我们还需要进一步探讨教学过程中“教到什么程度与学到什么程度”的问题。

微机系统理论基础是原理性的,传统的微机原理课程基于8/16位微处理器展开,而由于技术不断发展,当代微处理器已进入64位的时代,教学内容与实际应用之间存在巨大的脱节。尽管技术在不断变换,但是从计算机面世以来,基本原理没有发生太大的改变,从冯•诺依曼结构提出到现在已有几十年,即使技术工艺有了翻天覆地的变化,但体系结构没有发生本质改变[4]。因此,课程抛开具体的微处理器型号,把握通用微型计算机系统和嵌入式计算机系统这两大分支的共性,以共性为基础建立微型 计算机系统软硬件体系架构,并了解微型计算机技术的发展趋势,为后续课程的学习奠定理论基础。然后学习比较容易入手的单片机原理及应用的相关内容:一方面,通过理论教学与实践教学相结合,掌握51系列单片机应用系统的软硬件设计及调试方法,掌握单片机开发工具的使用方法,锻炼和提高学生的工程实践能力,为新型单片机的学习和应用打下基础;另一方面,通过具体型号的单片机内部结构、工作原理和应用开发的学习,夯实微型计算机系统软硬件体系架构的理解,掌握微型计算机系统学习的一般方法,用于后续课程的学习。

此外,随着编译技术的进步,现代计算机系统中的软件大多采用高级语言编写,仅少量引导代码采用汇编语言编写[5]。因此,在课程中,对于51单片机指令系统和汇编语言程序设计的教学只需要服务于帮助学生更深入地理解和掌握单片机的硬件结构和高级语言程序的相关原理就足够了,之后,引导学生转入高级语言的学习,从而在软件编程时做到得心应手,能够编写出高效的软件程序。

单片机原理与应用范文10

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

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

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

一、引言

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

二、现状和存在的问题

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

项目4:机器人触觉导航

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

项目3:机器人的安装

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(三)教材建设的成果

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

六、总结

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

参考文献:

单片机原理与应用范文11

关键词:高等院校;微机原理;单片机;教学改革

中图分类号:G642.423 文献标识码:A 文章编号:2095-1302(2012)07-0074-03

0 引 言

微机原理及应用和单片机原理及应用是现今大多数院校自动化、电气自动化等信息工程类专业的重要课程。微机原理偏向于原理性的介绍,涉及的实验比较简单;而单片机则更偏向于应用性,涉及的实验较多。这两门课程的实验过程及使用的芯片及编程的的方式非常类似。大多数院校选择先开设微机原理的课程,在随后的一个学期开设单片机的课程。这样的选择在逻辑上没有错误,可毕竟这两门课程有很大的相似之处,但又有各自的特点。微机原理和单片机的内容既相关又有明显的区别,前后开课会使得学生可能产生忘了前面、记不住后面的感觉,同时两门课的相似点又使得学生区分不清,对内容产生混淆。而实验的环节,用的实验箱不同,虽然芯片不同,学生也仅仅为做而做。在实际教学中,会经常碰到学生提出“微机原理的汇编语言编程要分段(segment),而单片机的汇编语言编程为何不分段”、“微机原理课里的标志寄存器有16位,为什么单片机里才有8位”等问题。此外,这两门课一般都由同一位教师讲授,教师备课时不由得对比着备课,在教学中自然把两门课相关知识点进行描述或比较,使得单一门课程的教学时间无形中被占用。对此,以笔者实际的教学经验,现对这两门课程的教学改革进行一些探讨。

1 课程改革思路

微机原理及应用课程主要是帮助学生理解计算机的原理和结构,通过学习,使学生熟悉一款比较经典的CPU和以该CPU为中心的总线、存储器存储过程等数据处理以及用汇编语言编写程序的方法;同时,还涉及了诸如8255、8259A等一些芯片的运用及接口编程知识,微机原理及应用偏向于原理性的阐述。而单片机原理及应用课程主要是针对某类型已经非常成熟的单片机型号,帮助学生学会如何使用单片微型机以及针对实现不同的功能进行编程的知识,该课程更偏向于应用。

这两门课程的内容既有很大交叉,又有各自的特点:微机原理及应用理论更系统,单片机应用性更强。独立开设两门课程,不可避免地会出现知识点的重复和各自重点的缺失。由此,针对这两门课程授课过程中的不足,笔者有了对这两门课程进行改革的想法。即:同步开课,结合实际教授理论内容,合理分配实验学时等。

2 教学方面

2.1 教学内容

在理论教学方面,笔者对微机原理和单片机的教学内容进行了整合。微机原理基于冯·诺依曼结构,这种理论更易于学生了解计算机体系和计算机系统的工作方式;单片机本质上也是计算机系统,只是性能弱,功能单一。因此,在理论讲课过程中,应该以微机原理为主,同时针对微机原理和单片机的明显不同,比如同是45H,在微机原理中是立即数,在单片机中是存储的地址等,在这方面加以重点讲解。微机原理的内容较多,涉及面广,如果对知识点面面俱到,不仅时间不够,而且学生的学习积极性肯定不高。单片机原理课程主要基于80C51单片机进行讲解,并介绍单片机的特点、在片资源、汇编语言编程、片内接口及中断、通信及A/D、D/A转换等。在这当中,肯定会遇到一些和微机原理相冲突的地方,不论讲解与否,势必会影响到后续课程讲授的连贯和流畅,因此,必须要对相关内容进行取舍。

单片机原理与应用范文12

关键词:虚拟教学环境,可视化教学资源,学习互动平台

《单片机原理与应用》课程是电子信息类专业课程,包含了单片机硬件、软件编程、串行通信及接口技术。要学好《单片机原理与应用》这门课程,需要学生有扎实的电子电路分析、C语言编程及传感器应用基础,并且需要学生有很强的动手操作能力及分析能力。为了让学生更有效更深入学习《单片机原理与应用》课程,授课教师需要对教学方式进行改革,在课堂教学中根据实际需求实施信息化教学手段。下面以《单片机原理与应用》课程为例,结合职业教育的特点和课程标准要求对新教学模式作如下探讨:

1充分利用虚拟教学环境提高学习效率

《单片机原理与应用》课程在很多教材中都用汇编语言来实现程序设计,教师也把很多时间花在汇编指令的讲解上。汇编语言有着语言简洁、运行速度快、效率高等优点,但是同时单片机汇编程序编写和调试复杂、不可移植、开发效率低的缺点。目前,企业公司在单片机开发项目上大部分使用C语言编程,C语言在功能、结构、可读性和调试维护方面上明显优于汇编语言。为了将课堂内容更好的和企业项目融合,让学生能更快的适应企业,单片机教学引入C语言教学。单片机教学采用C语言编程,就要介绍Keil软件,它提供丰富的库函数和功能强大的集成开发调试工具,还可以看编译生成后的编译代码,生成的汇编代码很紧凑,非常容易理解,体现了高级语言的优势,学生只要有C语言基础、对单片机硬件了解就可以进行项目设计开发。如果要求学生完成整个开发过程,首先需要进行硬件电路设计,然后要按照电路要求购置元器件、焊接电路,最后进行调试,调试过程中还要求许多辅助的仪器设备。虽然Keil也可以进行硬件仿真和纯软件仿真,但是Keil是没有单片机电路的,所以无法实现器件的工作状态。因此,在这里介绍一种与Keil配合使用的仿真软件Proteus。它是是目前比较好用的单片机及器件的仿真工具,提供了大量的仿真元器件和设备(包括各种单片机芯片),有各种调试工具、虚拟仪器、显示设备,学生利用这些工具可以很快设计出各类电路。在单片机教学过程中,可以根据课程项目要求,将项目任务布置给学生,学生在Keil软件中按照要求进行程序设计,然后在Pro-teus仿真软件中进行硬件电路设计,最后验证程序能够在硬件中实现其要求的控制功能,只需要将在Keil软件中设计的程序生成的Hex文件加载到Proteus软件搭建的硬件仿真电路中去,然后执行,就可以观察到仿真的现象。Keil和Proteus软件结合建立单片机学习的虚拟教学环境,充分利用各自的仿真优势,让学生在项目开发过程中让软件调试和硬件设计更加便捷高效,降低开发成本,提高学习效率。

2建立可视化、颗粒化的教学资源,让学生能够自主学习

《单片机原理与应用》课程采用项目化教学,将实际工程案例贯穿项目中应用到课堂教学中去,教师会根据项目所需掌握的知识点先进行讲解,然后让学生自主学习完成项目。项目化教学在实际操作过程中,可以将一个项目的知识点碎片化、颗粒化。通常学生对于枯燥的文字学习兴趣不大,如果没有老师针对性讲解,有些学生理解这些小知识点也很困难,所以需要对这些颗粒化的知识点进行可视化资源库建设。针对操作性强的重复性的知识点,如Keil软件的安装与开发环境的使用,Proteus的使用以及文件烧录的过程;可以将操作过程录制成微视频或者制作成动画,配以简练易懂的语言进行讲解,制作成二微码链接放在项目任务书中;对于理论性知识的讲解,如单片机最小系统、定时器/计数器、外部中断、串口通信等,要将讲解内容更加细化,配以图片、视频、动画及教师讲授,让整个课堂更直观,更生动;对于项目实施内容部分,可以将整个过程以项目任务书形式发放给学生,任务书内容包括学生需要掌握的知识点,需要完成的任务等。所有这些可以制作成教学资源库放在开放的学习网站上供学生自主学习,提高课堂学习质量。

3建立互动平台,反馈学习效果

教师在课堂上了解学生学习情况是片面的,教师认为简单的知识点,学生可能掌握的不好;教师认为学生难掌握的知识点是否具有普遍性;学生是否全部掌握了所有的知识点,还是部分学生掌握了所有的知识点,大部分学生掌握了哪些知识点。对于类似这些问题,教师可以借助互动平台,搜集学生反馈的信息,研究学生反馈的内容,可以帮助教师更有针对性地设计教学内容,提高教学质量。

4改进考核环节,旨在提高学生学习兴趣

教学的宗旨在于提高学生的学习兴趣,能够让学生自主学习。单片机开发项目种类繁多,教师不可能将所有知识讲完,学生在学习的过程中,要掌握单片机开发的流程,有单片机开发的思维,有学习单片机的兴趣,学习的目的就达到了。传统的考核环节给大部分学生增加了学习的压力,并且陷入填鸭及死记硬背的怪圈。结合新的教学方法和单片机课程的特点,考核环节以项目化考核为主,将一个项目的实施分工细致,如项目设计步骤、项目操作步骤、项目调试步骤、项目总结等,每步给相应的分数,并且根据完成的质量来考核。结束语《单片机原理与应用》课程采用KeilC51+Proteus虚拟教学平台,利用丰富的教学资源,有活跃的互动平台和人性化的考核方式,学生在这样灵活的教学方式中,提高了学习兴趣,课堂变得活跃有趣,成为真正学习交流的地方。

作者:李一平 单位:武汉铁路职业技术学院

参考文献

[1]许超,吴新杰,张丹.基于Proteus和Keil的单片机课程教学改革[J].辽宁大学学报:自然科学版,2011,38(1):27-29.

[2]曾成,伍萍辉.基于虚拟硬件环境的单片机原理与应用试验开发[J].实验技术与管理,2011,28(2):91-93.