4x4键盘键号显示实验微型计算机课程设计,单片机原理与应用考试大纲

单片机原理与应用考试大纲

发表时间:2006-10-28 14:43:12

目录/提纲:……

一、考核知识点:

二、考核要求:

一、考核知识点:

二、考核要求:

一、考核知识点:

二、考核要求:

一、考核知识点:

二、考核要求:

一、考核知识点:

二、考核要求:

一、考核知识点:

二、考核要求:

一、考核知识点:

二、考核要求:

一、考核知识点:

二、考核要求:

一、考核知识点:

二、考核要求:

一、考核知识点:

二、考核要求:

一、考试考核要求

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

三、理论考试说明

四、考试考核要求层次

一、实验目的:

二、实验器材:

三、实验要求:

四、实验原理:

五、实验步骤:

六、实验分析与总结

七、思考与练习

二、选择题

三、判断题

四、简答题

(一)提供leda51演示asc16字符的简单点阵显示

(二)ledhz51两个示例程序

三、理论考试说明

四、考试考核要求层次

一、实验目的:

二、实验器材:

三、实验要求:

四、实验原理:

五、实验步骤:

六、实验分析与总结

七、思考与练习

二、选择题

三、判断题

四、简答题

(一)提供leda51演示asc16字符的简单点阵显示

(二)ledhz51两个示例程序

……

第一章 微型计算机基础

一、 考核知识点:

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的接口方法。

9 a/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.掌握数码管显示电

……(新文秘网http://www.wm114.cn省略8450字,正式会员可完整阅读)……

(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.7 1 1 1 0

p1.6 1 1 0 1

p1.5 1 0 1 1

p1.4 0 1 1 1

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

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

键盘扫描程序:

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

scan: mov p1,#0fh

mov a,p1

anl a,#0fh

cjne a,#0fh,next1

sjmp next3

next1: acall d20ms

mov a,#0efh

next2: mov r1,a

mov p1,a

mov a,p1

anl a,#0fh

cjne a,#0fh,kcode;

mov a,r1

setb c

rlc a

jc next2

next3: mov r0,#00h

ret

kcode: mov b,#0fbh

next4: rrc a

inc b

jc next4

mov a,r1

swap a

next5: rrc a

inc b

inc b

inc b

inc b

jc next5

next6: mov a,p1

anl a,#0fh

cjne a,#0fh,next6

mov r0,#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.7 1 1 1 0

p1.6 1 1 0 1

p1.5 1 0 1 1

p1.4 0 1 1 1

在每组行输出时读取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口

org 0000h

ajmp main

org 0030h

main:

mov dptr,#tab ;将表头放入dptr

lcall key ;调用键盘扫描程序

movc a,@a+dptr ;查表后将键值送入acc

mov p0,a ;将acc值送入p0口

clr p2.1 ;开显示

ljmp main ;返回反复循环显示

key:

lcall ks ;调用检测按键子程序

jnz k1 ;有键按下继续

lcall delay2 ;无键按调用延时去抖

ajmp key ;返回继续检测按键

k1: lcall delay2

lcall delay2 ;有键按下延时去抖动

lcall ks ;再调用检测按键程序

jnz k2 ;确认有按下进行下一步

ajmp key ;无键按下返回继续检测

k2: mov r2,#0efh ;将扫描值送入 r2暂存

mov r4,#00h ;将第一列值送入r4暂存

k3: mov p1,r2 ;将r2的值送入p1口

l6: jb p1.0,l1 ;p1.0等于1跳转到l1

mov a,#00h ;将第一行值送入acc

ajmp lk ;跳转到键值处理程序

l1: jb p1.1,l2 ;p1.1等于1跳转到l2

mov a,#04h ;将第二行的行值送入acc

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

l2: jb p1.2,l3 ;p1.2等于1跳转到l3

mov a,#08h ;将第三行的行值送入acc

ajmp lk ;跳转到键值处理程序

l3: jb p1.3,next ;p1.3等于1跳转到next处

mov a,#0ch ;将第四行的行值送入acc

lk: add a,r4 ;行值与列值相加后的键值送入a

push acc ;将a中的值送入堆栈暂存

k4: lcall delay2 ;调用延时去抖动程序

lcall ks ;调用按键检测程序

jnz k4 ;按键没有松开继续返回检测

pop acc ;将堆栈的值送入acc

ret

next:

inc r4 ;将列值加一

mov a,r2 ;将r2的值送入a

jnb acc.7,key ;扫描完至key处进行下一扫描

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

mov r2,a ;将acc的值送入r2暂存

ajmp k3 ;跳转到k3继续

ks: mov p1,#0fh ;将p1口高四位置0低四位值1

mov a,p1 ;读p1口

xrl a,#0fh ;将a中的值与a中的值相异或

ret ;子程序返回

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

mov r5,#08h

l7: mov r6,#0fah

l8: djnz r6,l8

djnz r5,l7

ret

tab:

db 28h,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做四根行线。

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

以下是源程序:

keybuf equ 30h

org 00h

start: mov keybuf,#2

mov p2,#00001111b

wait:

mov p1,#0ffh

clr p1.4

mov a,p1

anl a,#0fh

xrl a,#0fh

jz nokey1

lcall dely10ms

mov a,p1

anl a,#0fh

xrl a,#0fh

jz nokey1

mov a,p1

anl a,#0fh

cjne a,#0eh,nk1

mov keybuf,#0

ljmp dk1

nk1: cjne a,#0dh,nk2

mov keybuf,#1

ljmp dk1

nk2: cjne a,#0bh,nk3

mov keybuf,#2

ljmp dk1

nk3: cjne a,#07h,nk4

mov keybuf,#3

ljmp dk1

nk4: nop

dk1:

mov a,keybuf

mov dptr,#table

movc a,@a+dptr

mov p0,a

dk1a: mov a,p1

anl a,#0fh

xrl a,#0fh

jnz dk1a

nokey1:

mov p1,#0ffh

clr p1.5

mov a,p1

anl a,#0fh

xrl a,#0fh

jz nokey2

lcall dely10ms

mov a,p1

anl a,#0fh

xrl a,#0fh

jz nokey2

mov a,p1

anl a,#0fh

cjne a,#0eh,nk5

mov keybuf,#4

ljmp dk2

nk5: cjne a,#0dh,nk6

mov keybuf,#5

ljmp dk2

nk6: cjne a,#0bh,nk7

mov keybuf,#6

ljmp dk2

nk7: cjne a,#07h,nk8

mov keybuf,#7

ljmp dk2

nk8: nop

dk2:

mov a,keybuf

mov dptr,#table

movc a,@a+dptr

mov p0,a

dk2a: mov a,p1

anl a,#0fh

xrl a,#0fh

jnz dk2a

nokey2:

mov p1,#0ffh

clr p1.6

mov a,p1

anl a,#0fh

xrl a,#0fh

jz nokey3

lcall dely10ms

mov a,p1

anl a,#0fh

xrl a,#0fh

jz nokey3

mov a,p1

anl a,#0fh

cjne a,#0eh,nk9

mov keybuf,#8

ljmp dk3

nk9: cjne a,#0dh,nk10

mov keybuf,#9

ljmp dk3

nk10: cjne a,#0bh,nk11

mov keybuf,#10

ljmp dk3

nk11: cjne a,#07h,nk12

mov keybuf,#11

ljmp dk3

nk12: nop

dk3:

mov a,keybuf

mov dptr,#table

movc a,@a+dptr

mov p0,a

dk3a: mov a,p1

anl a,#0fh

xrl a,#0fh

jnz dk3a

nokey3:

mov p1,#0ffh

clr p1.7

mov a,p1

anl a,#0fh

xrl a,#0fh

jz nokey4

lcall dely10ms

mov a,p1

anl a,#0fh

xrl a,#0fh

jz nokey4

mov a,p1

anl a,#0fh

cjne a,#0eh,nk13

mov keybuf,#12

ljmp dk4

nk13: cjne a,#0dh,nk14

mov keybuf,#13

ljmp dk4

nk14: cjne a,#0bh,nk15

mov keybuf,#14

ljmp dk4

nk15: cjne a,#07h,nk16

mov keybuf,#15

ljmp dk4

nk16: nop

dk4:

mov a,keybuf

mov dptr,#table

movc a,@a+dptr

mov p0,a

dk4a: mov a,p1

anl a,#0fh

xrl a,#0fh

jnz dk4a

nokey4:

ljmp wait

dely10ms:

mov r6,#10

d1: mov r7,#248

djnz r7,$

djnz r6,d1

ret

table: db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h,080h,090h ;0-9

db 088h,083h,0c6h,0a1h,086h,08eh,089h,0cfh,0c7h,0c8h ;a,b,c,d,e,f,h,i,l,n,

end

; p3.1 数据采集控制

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

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

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

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

; 此程序仅供参考

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

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

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

org 100h

ljmp star

star: mov p1,#0ffh

setb p3.1 数据读入标志

mov r0,#100 ,循环工作次数

loop:jb p3.1, $ p3.1低电平时,采集p1口数据开关量 处理显示阶段不再应答p3.1

mov a,p1

push acc

anl a,#0fh 取个位数值

mov r1,a 个位数值保存到r1

pop acc

anl a,#0f0h

swap a 高4位转成字节信息

mov r2,a 十位数值保存到r2

mov dptr,#tabled

mov a,r1

movc a,@a+dptr

mov p0,a

clr p2.6 个位显示

acall delay500ms

setb p2.6

mov a,r2

movc a,@a+dptr

mov p0,a

clr p2.7 十位显示

acall delay500ms

setb p2.7

djnz r0,loop

delay500ms: 延时500毫秒子程略

ret

tabled: db 0c0h,0f9h,0a4h,0b0h,99h, 92h, 82h,0f8h

db 80h, 90h, 88h, 83h, 0c6h,0a1h,86h,8eh

end

#include

typedef unsigned char byte ;

byte code tabled[16]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92, 0x82,0x0f8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e} ;

byte datled ;

sbit p26=p2^6 ;

sbit p27=p2^7 ;

sbit p31=p3^1 ;

int time ;

void timedelay(dtime)

int dtime ;

{

int i ;

for(i=0 ;i<=dtime ;i++) ;

}

void main()

{

int temp ;

p26=1 ;

p27=1 ;

p31=1 ;

p1=0xff ;

time=1000 ;

while(1) {

while (p31==0) {

datled=p1 ;

temp=datled & 0x0f ;

p0=tabled[temp] ;

p26=0 ;

timedelay(time) ;

p26=1 ;

temp=datled >> 4 ;

p0=tabled[temp] ;

p27=0 ;

timedelay(time) ;

p27=1 ;

}

}

}

1. 实验任务

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

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.汇编源程序

org 00h

start: nop

mov r3,#3

lop2: mov r4,#8

mov r2,#0

lop1: mov p1,#0ffh

mov dptr,#taba

mov a,r2

movc a,@a+dptr

mov p3,a

inc r2

lcall delay

djnz r4,lop1

djnz r3,lop2

mov r3,#3

lop4: mov r4,#8

mov r2,#7

lop3: mov p1,#0ffh

mov dptr,#taba

mov a,r2

movc a,@a+dptr

mov p3,a

dec r2

lcall delay

djnz r4,lop3

djnz r3,lop4

mov r3,#3

lop6: mov r4,#8

mov r2,#0

lop5: mov p3,#00h

mov dptr,#tabb

mov a,r2

movc a,@a+dptr

mov p1,a

inc r2

lcall delay

djnz r4,lop5

djnz r3,lop6

mov r3,#3

lop8: mov r4,#8

mov r2,#7

lop7: mov p3,#00h

mov dptr,#tabb

mov a,r2

movc a,@a+dptr

mov p1,a

dec r2

lcall delay

djnz r4,lop7

djnz r3,lop8

ljmp start

delay: mov r5,#10

d2: mov r6,#20

d1: mov r7,#248

djnz r7,$

djnz r6,d1

djnz r5,d2

ret

taba: db 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,07fh

tabb: db 01h,02h,04h,08h,10h,20h,40h,80h

end

6. c语言源程序

#include

unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delay(void)

{

unsigned char i,j;

for(i=10;i>0;i--)

for(j=248;j>0;j--);

}

void delay1(void)

{

unsigned char i,j,k;

for(k=10;k>0;k--)

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

void main(void)

{

unsigned char i,j;

while(1)

{

for(j=0;j<3;j++)//from left to right 3 time

{

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

{

p3=taba[i];

p1=0xff;

delay1();

}

}

for(j=0;j<3;j++)//from right to left 3 time

{

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

{

p3=taba[7-i];

p1=0xff;

delay1();

}

}

for(j=0;j<3;j++)//from top to bottom 3 time

{

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

{

p3=0x00;

p1=tabb[7-i];

delay1();

}

}

for(j=0;j<3;j++)//from bottom to top 3 time

{

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

{

p3=0x00;

p1=tabb[i];

delay1();

}

}

}

}

led点阵显示实验

一.实验要求

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

二.实验目的

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

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

三.实验电路及连线

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

fig 22-0 wtd3088 led分布

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

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

fig 22-1 led模块及列扫描电路

fig 22-2 行扫描电路

fig 22-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 ××

;××××××××××××××××××××××××××××××××××××××××××××××××××××

csled equ 8000h

csr1 equ csled ;行1 273

csr2 equ csled+1h ;行2 273

csc1 equ csled+2h ;列1 374

csc2 equ csled+3h ;列2 374

org 0000h

mov sp,#60h

init: mov a,#0h ;关闭行

mov dptr,#csr1

movx @dptr,a

mov dptr,#csr2

movx @dptr,a

mov a,#0ffh ;关闭列

mov dptr,#csc1

movx @dptr,a

mov dptr,#csc2

movx @dptr,a

d: mov r5,#00h

mov r4,#01h ;每次为单行扫描

disp:

mov a,r5

mov dptr,#asce ;此处设定所要显示的字符

movc a,@a+dptr

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

mov dptr,#csc2

movx @dptr,a

mov dptr,#csr1

mov a,r4

movx @dptr,a

rl acc

mov r4,acc

inc r5

lcall delay

cjne r5,#8h,disp

mov a,#0h

movx @dptr,a

mov r5,#08h

mov r4,#01h

disp2:

mov a,r5

mov dptr,#asce

movc a,@a+dptr

cpl acc

mov dptr,#csc2

movx @dptr,a

mov dptr,#csr2

mov a,r4

movx @dptr,a

rl acc

mov r4,acc

inc r5

lcall delay

cjne r5,#10h,disp2

mov a,#0h

movx @dptr,a

sjmp d

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

delay: mov r7,#1h

dl1: mov r6,#00h

dl2: djnz r6,dl2

djnz r7,dl1

ret

;×××××××× 字符点阵字库 ××××××××××××××*

; asc16 字符编码排列

; 0

; 1

; |

; |

; 14

; 15

; 高位 d7--d0

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

asca:db 00h,00h,10h,38h,6ch,0c6h,0c6h,0feh

db 0c6h,0c6h,0c6h,0c6h,00h,00h,00h,00h

asce:db 00h,00h,0feh,66h,62h,68h,78h,68h

db 60h,62h,66h,0feh,00h,00h,00h,00h

ascd:db 00h,00h,0f8h,6ch,66h,66h,66h,66h

db 66h,66h,6ch,0f8h,00h,00h,00h,00h

asck:db 00h,00h,0e6h,66h,66h,6ch,78h,78h

db 6ch,66h,66h,0e6h,00h,00h,00h,00h

;××××××××××××××××××××××××××××××××××××××××××××××××××××

end

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

;××××××××*led 点阵显示示例程序××××××××××××××××××××××*

;×× 该程序显示 hz16字符 ××

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

;×× 该程序针对t598实验机的模块14 ××

;××××××××××××××××××××××××××××××××××××××××××××××××××××

csled equ 8000h

csr1 equ csled ;行1 273

csr2 equ csled+1h ;行2 273

csc1 equ csled+2h ;列1 374

csc2 equ csled+3h ;列2 374

org 0000h

mov sp,#60h

init: mov a,#0h ;关闭led显示

mov dptr,#csr1

movx @dptr,a

mov dptr,#csr2

movx @dptr,a

mov a,#0ffh ;关闭led显示

mov dptr,#csc1

movx @dptr,a

mov dptr,#csc2

movx @dptr,a

d: mov r5,#00h

mov r4,#01h

disp:

mov a,r5

rl acc

mov dptr,#hzai

movc a,@a+dptr

cpl acc

mov dptr,#csc2

movx @dptr,a

mov a,r5

rl acc

inc acc

mov dptr,#hzai

movc a,@a+dptr

cpl acc

mov dptr,#csc1

movx @dptr,a

mov dptr,#csr1

mov a,r4

movx @dptr,a

rl acc

mov r4,acc

inc r5

lcall delay

cjne r5,#8h,disp

mov a,#0h

movx @dptr,a

mov r5,#08h

mov r4,#01h

disp2:

mov a,r5

rl acc

mov dptr,#hzai

movc a,@a+dptr

cpl acc

mov dptr,#csc2

movx @dptr,a

mov a,r5

rl acc

inc acc

mov dptr,#hzai

movc a,@a+dptr

cpl acc

mov dptr,#csc1

movx @dptr,a

mov dptr,#csr2

……(未完,全文共91254字,当前只显示21968字,请阅读下面提示信息。收藏《单片机原理与应用考试大纲》)

你可能感兴趣的:(4x4键盘键号显示实验微型计算机课程设计,单片机原理与应用考试大纲)