南京工业大学51单片机期末考试参考程序

合集下载

单片机期末考试_试题含答案4教学提纲

单片机期末考试_试题含答案4教学提纲

二、简答题(15分,每小题5分)1 • 51系列单片机具有几个中断源,分别是如何定义的?其中哪些中断源可以被定义为高优先级中断,如何定义?2 •各中断源对应的中断服务程序的入口地址是否能任意设定?3•如果想将中断服务程序放置在程序存储区的任意区域,在程序中应该作何种设置?请举例加以说明。

三、参数计算题(16分)已知一单片机系统的外接晶体振荡器的振荡频率为11 . 059MHz,请计算该单片机系统的拍节P、状态S、机器周期所对应的时间是多少?指令周期中的单字节双周期指令的执行时间是多少?四、改错题(共5分,每小题1分)以给出的指令操作码为依据,请判断MCS—5I单片机的下列各条指令的书写格式是否有错误,如有请说明错误原因。

1 • MUL R0R12 • MOV4. MOVC @A+DPTR , A5 - LJMP #1000H(5分,每问1五、寻址方式令)说明MCS— 51单片机的下列各条指令中源操作数的寻址方式(可直接在每条指令后面书写)1 • ANLA,20H2 • ADDC A,#20H3 • JZ rel4• CLRC5 • RRA六、使用简单指令序列完成以下操作(12分)1 •请将片外RAM20H — 25H单元清零2 •请将ROM3000H单元内容送R7七、编程题(18分)已知一MCS — 51单片机系统的片内RAM 20H单元存放了一个8位无符号数7AH,片外扩展RAM的8000H存放了一个8位无符号数86H,试编程完成以上两个单元中的无符号数相加,并将和值送往片外RAM的01H、00H单元中,同时将所编写程序运行完成后的数据和状态添入下表中给出的PSW的有矣位以及寄存器A、DPTR和RAM单元中。

八、判读电路题(14分)下图为MCS — 51单片机系统中混合扩展多片存储器2764、6264芯片部分连线电路图。

试分析电路并回答下列问题:1 •请简单叙述2764芯片的功能、容量、在电路中起什么作用?2 .请简单叙述6264芯片的功能、容量,在电路中起什么作用?3 •请分析各片2764、6264所占用的单片机数据存储空间的地址范围是多少?的任意区域,此时,通过以下方式,可实现对中断服务程序的执行:(4分)ORGO003H (2 分)JMP INTOP列举其他中断跳转的例子也可,但叙述的中断源要与中断地址相对应才可得分,如外中断0对应0003H地址。

南京工业大学单片机期末复习讲义

南京工业大学单片机期末复习讲义
4.电容电压
du u dt
t RC
u VCC VCC e
5.9 号引脚电压
t RC

u VCC e
9 号引脚电压变化曲线图
6.电容和电阻的取值 ①当 t=RC 时,9 号引脚电压约为 0.37×VCC ②通常:电阻选择 10K,电容选择 10uF,此时, 9 号引脚电压保持高电平(>2.8V)时间接近 100ms,可以可靠复位 复位电路思考题: 1.复位电路可否采用大电阻小电容形式? 答:也可以。但该电路抗干扰能力差。 2.如何添加复位键? 答:
AT89S51
地址总线 控制总线 数据总线 0x0fff
0x0000
0xffff
ROM空 间 64K
CPU (MCS51) 地 址 总 线
控制总线 数据总线
4K
RAM空 间 256B
若干个专用寄存器
0xff
内部 设备
0x7f 0x00
外部设备
RAM
1.单片机的内部结构主要组成部分:CPU、ROM、RAM 及其他内部设备 2.单片机的系统设计 系统设计分为硬件设计(图中的外部设备)和软件设计(图中的 ROM 4K 部分) ①硬件设计:设计单片机及外部设备的硬件电路 ②软件设计:用 C 语言或汇编语言编写程序并烧写到 ROM 中去 3.CPU ①CPU 也称为内核 ②内核为 MCS51 的单片机统称为 51 系列单片机 ③AT89S51 和 STC89C52 均同属于 51 系列单片机 ④作用:读取指令、执行指令(该过程永不停息) ⑤CPU 通过对专用寄存器的读写间接控制内部设备 4.指令及指令周期 ①指令:指令是基于 MCS51 核的汇编指令有 111 条,都是用机器语言(二进制代码)来表 示, 其基本单位为字节, 每条指令的长度大约为 1-3 字节。 指令可以用烧写器写到 ROM 中。 ②指令周期 1)每条指令执行时间为 1-2 个机器周期(乘除指令除外) 2)1 个机器周期=12×晶振振荡周期 5.ROM

51单片机期末课程设计

51单片机期末课程设计

51单片机期末课程设计一、课程目标知识目标:1. 理解并掌握51单片机的基本原理和结构组成,包括内部资源、指令系统及编程方法。

2. 学会使用51单片机的开发工具和编程环境,如Keil C及ISP下载线。

3. 掌握51单片机在嵌入式系统中的应用,能够阅读并分析相关电路图。

技能目标:1. 能够独立设计并编写简单的51单片机程序,实现基础的外围设备控制,如LED灯、蜂鸣器等。

2. 能够运用所学的知识解决实际的51单片机编程问题,进行基本的程序调试和故障排查。

3. 通过课程设计项目,培养动手实践能力和团队协作能力。

情感态度价值观目标:1. 培养学生对于电子技术和编程的兴趣,激发其主动探索和创新的热情。

2. 增强学生的工程意识,培养严谨、细致、负责的学习态度和职业素养。

3. 通过课程学习,使学生认识到技术对生活的影响,增强社会责任感和使命感。

本课程针对高年级学生,在已有电子技术和C语言编程基础的前提下,进一步深化对51单片机的理解与应用。

课程性质为理论与实践相结合,强调知识的应用性和实践性。

在教学过程中,注重培养学生的自主学习和问题解决能力,以项目驱动教学,确保学生能够达到预设的学习成果。

通过期末课程设计,巩固所学知识,提高综合运用能力。

二、教学内容本课程教学内容紧密围绕课程目标,结合教材以下章节展开:1. 51单片机原理概述:包括内部结构、工作原理、资源分布等,重点理解时钟电路、复位电路的作用。

- 教材章节:第1章 51单片机基础2. 51单片机指令系统与编程:学习汇编语言编程,掌握常用指令,理解程序执行流程。

- 教材章节:第2章 51单片机指令系统与编程3. 开发工具使用:介绍Keil C集成开发环境和ISP下载线的使用方法,学会创建、编译、下载程序。

- 教材章节:第3章 51单片机开发工具4. 外围设备控制:学习51单片机与LED灯、蜂鸣器、数码管等外围设备的接口与编程控制。

- 教材章节:第4章 51单片机外围设备编程5. 传感器应用:结合实际案例,学习传感器与51单片机的连接和数据处理。

51单片机期末习题及答案

51单片机期末习题及答案

C51单片机习题及答案第一章1-1选择1.计算机中最常用的字符信息编码是(A)A ASCIIB BCD码C 余3码D 循环码2.要MCS-51系统中,若晶振频率屡8MHz,一个机器周期等于(A) μsA 1.5B 3C 1D 0.53.MCS-51的时钟最高频率是( A ).A 12MHzB 6 MHzC 8 MHzD 10 MHz4.以下不是构成的控制器部件(D ):A程序计数器、B指令寄存器、C指令译码器、D存储器5.以下不是构成单片机的部件( D )A微处理器(CPU)、B存储器C接口适配器(I\O接口电路) D 打印机6.下列不是单片机总线是( D )A地址总线 B 控制总线 C 数据总线 D 输出总线7.-49D的二进制补码为.( B )A 11101111B 11101101C 0001000D 111011008.十进制29的二进制表示为原码(C )A 11100010B 10101111C 00011101D 000011119. 十进制0.625转换成二进制数是(A)A 0.101B 0.111C 0.110D 0.10010 选出不是计算机中常作的码制是( D )A原码 B 反码C补码 D ASCII1-2填空1.计算机中常作的码制有原码、反码和补码2.十进制29的二进制表示为000111013.十进制数-29的8位补码表示为.111000114.单片微型机CPU、存储器和I\O接口三部分组成.5.若不使用MCS-51片内存器引脚EA必须接地.6.输入输出设备是计算机与外部世界交换信息的载体.7.十进制数-47用8位二进制补码表示为.110100018.-49D的二进制补码为.111011019.计算机中最常用的字符信息编码是ASCII10.计算机中的数称为机器数,它的实际值叫真值。

1-3判断1.我们所说的计算机实质上是计算机的硬件系统与软件系统的总称。

(√)2.MCS-51上电复位时,SBUF=00H。

51单片机考试复习程序整理

51单片机考试复习程序整理

51单片机考试复习程序整理51单片机整理51单片机基本知识点整理介绍:本人通过最近对51单片机的整理复习,觉得比较重要的事定时器/计数器,中断,再就是A/D,D/A,相信我们把这部分掌握好了,那么我的单片机学习,也就掌握了绝大部分内容,虽然老师教了我们串行通信、键盘、显示但是老师只是告诉了我们最基本的知识点,要想掌握此部分内容,那么我们就需要自己看书,研究这部分程序,相反这份在我们将来从事的工作中也是用的比较广泛的,键盘、液晶显示、串行通信,而同时现在串行通信变得越来越重要了,我们需要把基础打牢固,这样我们就会轻松的应对更多的单片机。

毕竟51单片机只是基础,我们不知道的单片机还有许多。

一、问答题整理(比较重要的类型)1、80C51 ROM空间中,0000H~0023H有什么用途?用户应怎样合理安排?答:0000H~0023H是80C51系统专用单元,其中0000H为CPU复位地址,0003H~0023H是5个中断源中断服务程序入口地址,用户不能安排其他内容。

一般来讲,从0030H以后,用户可自由安排。

2、80C51如何确定和改变当前工作寄存器区?答:80C51是根据程序状态字寄存器PSW中工作寄存器区选择控制位RS1、RS0(PSW.4、PSW.3)来确定和改变当前工作寄存器区:RS1、RS0=00——0区(00H~07H)RS1、RS0=01——1区(08H~0FH)RS1、RS0=10——2区(10H~17H)RS1、RS0=11——3区(18H~1FH)3、简述读外ROM和读写外RAM用到的控制信号。

答:读外ROM的控制线有3条:①ALE:控制锁存低8位地址信号。

②PSEN:控制外ROM输出。

③EA:确定读外ROM。

读写外RAM控制信号分别为:①RD:控制外RAM输出。

②WR:控制外RAM输入。

4、为什么一般情况下,在中断入口地址区间要设置一条跳转指令,转移到中断服务程序的实际入口处?答:由于80C51相邻两个中断入口地址间只有8字节的空间,8个字节只能容纳一个有3~8条指令的极短程序。

南京工业大学程序设计期末考试参考程序

南京工业大学程序设计期末考试参考程序
cout<<"面积为:"<<area<<endl;
}
};
void main()
{
Area area;
double _a,double _b,double _c;
cout<<"请输入三角形的三条边长:"<<endl;
//通过键盘输入边长
cin>>_a>>_b>>_c;//将键入的值传入
if(_a+_b>_c&&_a+_c>_b&&_c+_b>_a)
friend double CalcArea(Triangle &t);
void print();
};
Triangle::Triangle(double _a,double _b,double _c)
{
a=_a;
b=_b;
c=_c;
}
double Triangle::mySqrt(double n)
{
_a=rand()%10+1; //3
char* ic:
Employee(char*,char*);
~Employee();
char* getFirstName();
char* getLastName();
static int getCount();
};
int Employee::count=0;
if(data[i]<min)min=data[i];
}
average=sum/i;
}
void Array::print()

51单片机期末习题及答案

51单片机期末习题及答案

51单片机期末习题及答案首先,让我们一起来回顾一下51单片机的基础知识。

51单片机是一种经典的8位单片机,广泛应用于嵌入式系统和电子设备中。

在期末考试中,我们通常需要回答一些关于51单片机的习题。

本文将为你提供一些常见的51单片机期末习题及答案,希望对你的复习和考试有所帮助。

1. 简述51单片机的体系结构及特点。

51单片机的体系结构是基于哈佛结构,具有8位ALU、内部128字节的RAM和4KB的程序存储器。

其特点包括:具有51指令集,支持高低电平触发的中断服务,具备4个8位I/O端口和一个16位定时器/计数器等。

2. 请简述P0口的输入/输出特点及其寄存器控制。

P0口是51单片机的一个8位I/O端口,同时具有输入和输出的特点。

P0口专用的寄存器是P0、P0CON和P0DIR。

P0寄存器用于控制P0口的输入输出状态,设置特定位为1可以将相应的口设为输出,清零则为输入;P0CON寄存器用于指定P0口的工作模式,比如推挽输出、开漏输出等;P0DIR寄存器则用于指定P0口的方向,1表示输出,0表示输入。

3. 请简述定时器/计数器的工作原理。

51单片机中的定时器/计数器是一个16位的计数器,可以用于延时和计数的应用。

定时器/计数器通常由两个8位的寄存器THx和TLx组成,合起来形成一个16位的寄存器。

定时器的工作原理是通过对计数器进行计数,当计数器溢出时产生中断,从而实现定时功能。

计数器可以根据需要设定初值,并通过对THx和TLx的赋值来进行设置和控制。

4. 请简述51单片机的中断优先级。

51单片机的中断优先级由高到低分为4级,分别是优先级0、1、2和3。

当多个中断同时发生时,具有较高优先级的中断将被优先处理。

5. 简述51单片机的编程模式及程序设计的基本步骤。

51单片机的编程模式是基于汇编语言编写的,程序设计的基本步骤如下:(1)定义变量和常量,包括数据存储器、端口和寄存器等;(2)初始化程序,包括初始化变量、寄存器和定时器等;(3)编写主程序,即具体的功能实现代码;(4)设计中断服务程序,处理中断事件;(5)调试程序,确保程序的正确性和稳定性;(6)下载程序,将程序烧写到单片机中运行。

51单片机期末考试复习题(附答案)

51单片机期末考试复习题(附答案)

单片机原理及应用复习一、填空题1.单片机又称为微控制器,将CPU、存储器、I/O集成到一个芯片上。

2.单片机的RST/VPD引脚为单片机的商店复位或掉电保护端,但单片机振荡器工作时,该引脚上只要出现持续两个机器周期的高电平,就可实现复位操作,是单片机回到初始状态。

̅̅̅̅端保持低电平。

3.单片机只访问外部程序存储器,必须使EA4.单片机程序地址空间中0000H代表复位入口地址、0003H代表外部中断0入口地址、000BH代表定时器/计数器0溢出中断入口地址、0013H代表外部中断1中断入口地址、001BH 代表定时器/计数器1溢出中断入口地址、0023H代表串口中断入口地址。

通常在这些地址中存放一条无条件转移指令。

5.扩展片外数据存储器地址空间与片内数据存储器地址空间可以重叠,是因为访问片内、外使用不同的指令,访问片外采用MOVX指令。

6.单片机应用程序一般放在ROM中,数据一般存放到RAM中。

7.单片机复位后,寄存器PC为0000H、ACC为00H、PSW为00H、SP为07H,此时选择第0组工作寄存器作为通用寄存器。

8.机器指令由操作码和操作数两部分构成。

9.操作数表示参加操作的数本身或操作数所在的地址。

10.单片机特殊寄存器的选址方式只能是直接寻址。

11.可用于寄存器间接寻址的寄存器包括R0、R1、DPTR,这些寄存器起到地址指针的作用。

12.要用传输指令访问单片机片外RAM,它的指令操作助记符是MOVX。

13.指令AJMP的跳转范围是2K,LJMP可在64KB范围内无条件转移。

14.执行PUSH时堆栈指针SP先加1,执行POP堆栈指令是SP后减1,子程序调用LCALL指令隐含2次压栈,子程序返回指令RET隐含2次出栈(弹栈)。

15.绝对调用指令ACALL addr所能调用子程序的范围是2K,LCALL addr指令则是64K。

16.DB、DW、DS伪指令都只能对程序存储器起作用,不能对数据存储器进行初始化。

51单片机期末考试试卷及答案

51单片机期末考试试卷及答案
一、填空题
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、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为1/6us,机器周期为2us。
12、定时器与计数器的工作原理均是对输入脉冲进行计数。(×)
13、SFR中凡是能被8整除的地址,都具有位寻址能力。(√)
14、不能用“sfr16”直接访问定时器/计数器0和1。(√)
15、MCS-51单片机的程序存储器只能用来存放程序的。(×)
16、串口中断标志由硬件清0。(×)
17、特殊功能寄存器的名字,在C51程序中,全部大写。(√)
6、单片机的应用领域:
解:智能化家用电器、办公自动化设备、商业营销设备、工业自动化控制智能化仪表、智能化通信产汽车电子产品品、航空航天系统和国防军事、尖端武器等领域。
7、如何正确使用P3?
解:1.要点:
(1)说明P3口有第一功能和第二功能的使用。
(2)P3口的第二功能各位线的含义。
(3)使用时应先按需要选用第二功能信号,剩下的口线才作第一功能I/O线用。
D、可以通过赋初值的方式确定数组元素的个数
三、判断题
1、在对某一函数进行多次调用时,系统会对相应的自动变量重新分配存储单元。(√)
2、在C语言的复合语句中,只能包含可执行语句。(×)
3、Continue和break都可用来实现循环体的中止。(×)
4、字符常量的长度肯定为1。(√)
5、在MCS-51系统中,一个机器周期等于1.5μs。(×)

51单片机复习题及参考答案答案.doc

51单片机复习题及参考答案答案.doc

R6,#100R7,#5R7,$R6QEL1A.@DPTRDPTR,#0FF2BH A,92HR1 .#27R2,#250R2,$R1QEL2RO,DEL1AJMP INT_T0ORG 0030HSTART:MOVSP,#60HMOV TMOD.#01HMOV TH0.#9EHMOV TL0.#58HMOV R0,#0MOV R1 .#20MOV SCON,#OOHSETB TROSETB ETOSETB EASJMP $INT_T0: MOV TL0.#58HMOV TH0,#9EHDJNZ R1,EXITMOV R1 .#20MOV A,#0B6HMOV SBURAMOV R6,#5DJNZ R6,$MOV A,#02HMOV SBURAEXIT: RETIEND10.每0.331s读一次开关,当开关K=0时在数码管上显示片外7003H单元的数据,K=1时显示片内10H 单元的数据。

用定时器定时。

1、程序文件名有什么规定?将试验箱与计算机联通有哪些操作步骤?连接失败如何处理解:文件名不能用中文,只能用英文字符、下划线及数字作为文件名,其字符总数不能大于8。

打开试验箱电源,然后按一下复位按钮,再按一下试验箱键盘上的“PCDBG”键即可。

若连接失败,重复上面操作,然后点击DVCC工具栏上的“连接”选项。

2、IN6接模拟最,Y4接地址线,写出启动0809进行A/D转换及读入数据的指令解:MOV A,#6MOV DPTR,#0C000HMOVX @DPTR、AMOVDELI: MOVDJNZDJNZMOVX3、欲将8255PA. PB 口设为输入(方式0), PC 口设为输出,写出相关指令。

解:MOVMOVMOVX @DPTR 44、已知0809参考电压为5V,输入的模拟电压为3.5V, 经A/D转换后,对应的数字鼠是多少?解:3.5/5 X 255= 178二B2H5、已知00H〜FFH对应的0832输出模拟量是-5V-+5V,若要输出 2.5V,写出相应指令。

51单片机考试试题带答案(2021年整理精品文档)

51单片机考试试题带答案(2021年整理精品文档)

51单片机考试试题带答案编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(51单片机考试试题带答案)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为51单片机考试试题带答案的全部内容。

单片机原理及应用试卷A一、填空题(每空1分,共20分)1、单片微型计算机由CPU、存储器和 I/O 三部分组成。

2、MCS—51系统中,当PSEN信号有效时,表示从P0口稳定地送出了低8位地址。

3、访问8031片外数据存储器采用的是寄存器间接寻址方式。

4、累加器(A)=80H,执行完指令 ADD A,#83H后,进位位CY= 1 。

5、指令LCALL 37B0H,首地址在2000H,所完成的操作是2003H入栈,37B0H送入PC。

6、51有5个中断源,有2个中断优先级,优先级由软件填写特殊功能寄存器IP加以选择.7、在变址寻址方式中,以A作为变址寄存器,以PC或DPTR作基址寄存器。

8、中断请求信号有电平触发和脉冲触发两种触发方式9、用串行口扩展并行口时,串行接口的工作方式应选为方式0。

10、74LS273通常用来作简单输出接口扩展;而74LS244则常用来作简单输入接口扩展.11、51的并行I/O口信息有读引脚和读锁存器两种读取方法,读-改-写操作是针对并行I/O口内的锁存器进行的.12、A/D转换器的三个重要指标是转换速度、分辨率和转换精度。

二、选择题(从备选答案中选择一个正确答案,并将代号写在括号内.每题1.分,共10分)1、计算机能识别的语言是( C )。

(A)汇编语言 (B)自然语言(C)机器语言(C)高级语言2、MCS—51单片机外扩存储器芯片时,4个I/O口中用作数据总线的是( B )。

《单片机技术应用》期末考试方案A

《单片机技术应用》期末考试方案A

2017-2018-1 《单片机技术应用》期末考试方案A 课程代码:50317405适用班级:信息1631、信息163A出卷人: 审核: 批准:姓名 : 学号: 理论抽签 实践抽签 考试方案分成理论和实践部分考核,最终成绩由理论和实践的平均成绩决定。

一、理论部分考试方案每位同学抽签决定考试的题目,共抽两题,每题15分计算,按学号进行抽签考试,考试时间为20分钟/人,超时按照扣5分/每分钟,最长不超过25分钟。

每个学生在A4空白纸上进行答题,答题纸上依次要求写上班级、姓名、学号、考试的题号。

理论考试题目具体如下:1、4位二进制码和4位BCD 码有什么不同?2、MCS-51单片机中主要总线PROG ALE /、PSEN 、RST 、Vpp EA /的作用。

3、在MCS-51单片机的内部RAM 低128字节空间中,工作寄存区是如何分区的?分几个?4、简述MCS-51单片机中程序状态字PSW 各位的定义名,位编号和功能。

5、机器周期和时钟周期有什么关系?当MHz f osc 12 时,并计算一个机器周期的时间。

6、MCS-51单片机的复位条件是什么?复位后PC 、SP 和P0~P3的值是多少?7、叙述P0~P3各端口特点。

8、说明下列语句的作用a&=~(1<<6)9、说明下列语句的作用a|=(1<<6)10、说明下列语句的作用a^=(1<<6)11、比较下列语句的区别a=1;a= =1;2二、实践部分考核实践部分考核方式:每位学生抽签决定考试题目,每位一题,考试时间为60分钟,考试成绩按70分计算,考试文件存于F:/班级+姓名,按照原理图绘制(14分)、工程文件的正确建立(7分)、程序编译是否通过(21分)、程序运行结果(28分)打分,电子考试试卷刻录光盘,期末上交。

实践部分具体试题如下:1、晶振fosc=6MHZ,要求P1.0口输出120ms 的方波,在P1.0端口接上发光二极管来观测灯的亮灭情况。

mcs51单片机试题及答案

mcs51单片机试题及答案

mcs51单片机试题及答案**MCU51单片机试题及答案**一、单项选择题(每题2分,共20分)1. 8051单片机的程序存储器和数据存储器的地址空间分别是多少?A. 64KB/64KBB. 64KB/128KBC. 128KB/64KBD. 128KB/128KB**答案:C**2. 8051单片机的外部中断INT0和INT1的优先级由哪个寄存器决定?A. TCONB. IEC. IPD. P1**答案:C**3. 8051单片机的定时器/计数器工作在方式1时,其计数器的位数是多少?A. 8位B. 12位C. 16位D. 32位**答案:B**4. 8051单片机的串行通信中,波特率的计算公式是什么?A. 波特率 = 机器周期 / 32B. 波特率 = 机器周期 / 16C. 波特率 = 机器周期 / 64D. 波特率 = 机器周期 / 128**答案:B**5. 8051单片机的P0口作为I/O口使用时,需要外接什么?A. 上拉电阻B. 下拉电阻C. 限流电阻D. 滤波电容**答案:A**6. 8051单片机的定时器/计数器的溢出中断标志是什么?A. TF0B. TF1C. TFD. TR**答案:A**和**B**7. 8051单片机的外部中断触发方式有哪两种?A. 电平触发和边沿触发B. 低电平触发和高电平触发C. 上升沿触发和下降沿触发D. 正边沿触发和负边沿触发**答案:A**8. 8051单片机的P1口作为外部中断输入时,需要外接什么?A. 上拉电阻B. 下拉电阻C. 限流电阻D. 滤波电容**答案:B**9. 8051单片机的定时器/计数器工作在方式2时,其计数器的位数是多少?A. 8位B. 12位C. 8位自动重装载D. 16位**答案:C**10. 8051单片机的串行通信中,若要实现9位数据传输,应使用哪个特殊功能寄存器?A. TMODB. SCONC. PCOND. IE**答案:B**二、填空题(每题2分,共20分)1. 8051单片机的内部RAM共有______字节。

MCS-51单片机期末考试试卷AB卷带答案

MCS-51单片机期末考试试卷AB卷带答案

单片机考试试卷A卷一、选择题(每题1分,共10分)1.8031单片机的( )口的引脚,还具有外中断、串行通信等第二功能。

a)P0 b)P1 c)P2 d)P32.单片机应用程序一般存放在()a)RAM b)ROM c)寄存器 d)CPU3.已知某数的BCD码为0111 0101 0100 0010 则其表示的十进制数值为()a)7542H b)7542 c)75.42H d)75.424.下列指令中不影响标志位CY的指令有()。

a)ADD A,20H b)CLR c)RRC A d)INC A5.CPU主要的组成部部分为()a)运算器、控制器 b)加法器、寄存器c)运算器、寄存器 d)运算器、指令译码器6.INTEL 8051 CPU是()位的单片机a)16 b)4 c)8 d)准167.8031复位后,PC与SP的值为()a )0000H,00H b)0000H,07H c)0003H,07H d)0800H,00H 8.当需要从MCS-51单片机程序存储器取数据时,采用的指令为()。

a)MOV A, @R1 b)MOVC A, @A + DPTRc)MOVX A, @ R0 d)MOVX A, @ DPTR9.8031单片机中既可位寻址又可字节寻址的单元是()a)20H b)30H c)00H d)70H10.下列哪条指令是正确的()a)PUSH R2 b)ADD R0,Ac)MOVX A @DPTR d)MOV @R0,A二、填空题(每空1分,共30分)1.一个完整的微机系统由和两大部分组成。

2.8051 的引脚RST是____(IN脚还是OUT脚),当其端出现____电平时,8051进入复位状态。

8051一直维持这个值,直到RST脚收到____电平,8051才脱离复位状态,进入程序运行状态,从ROM H单元开始取指令并翻译和执行。

3.半导体存储器分成两大类和,其中具有易失性,常用于存储。

《单片机技术应用》期末考试方案AB

《单片机技术应用》期末考试方案AB

2017-2018-1 《单片机技术应用》期末考试方案A 课程代码:50317405适用班级:信息1631、信息163A出卷人: 审核: 批准:姓名 : 学号: 理论抽签 实践抽签 考试方案分成理论和实践部分考核,最终成绩由理论和实践的平均成绩决定。

一、理论部分考试方案每位同学抽签决定考试的题目,共抽两题,每题15分计算,按学号进行抽签考试,考试时间为20分钟/人,超时按照扣5分/每分钟,最长不超过25分钟。

每个学生在A4空白纸上进行答题,答题纸上依次要求写上班级、姓名、学号、考试的题号。

理论考试题目具体如下:1、4位二进制码和4位BCD 码有什么不同?2、MCS-51单片机中主要总线PROG ALE /、PSEN 、RST 、Vpp EA /的作用。

3、在MCS-51单片机的内部RAM 低128字节空间中,工作寄存区是如何分区的?分几个?4、简述MCS-51单片机中程序状态字PSW 各位的定义名,位编号和功能。

5、机器周期和时钟周期有什么关系?当MHz f osc 12 时,并计算一个机器周期的时间。

6、MCS-51单片机的复位条件是什么?复位后PC 、SP 和P0~P3的值是多少?7、叙述P0~P3各端口特点。

8、说明下列语句的作用a&=~(1<<6)9、说明下列语句的作用a|=(1<<6)10、说明下列语句的作用a^=(1<<6)11、比较下列语句的区别a=1;a= =1;2二、实践部分考核实践部分考核方式:每位学生抽签决定考试题目,每位一题,考试时间为60分钟,考试成绩按70分计算,考试文件存于F:/班级+姓名,按照原理图绘制(14分)、工程文件的正确建立(7分)、程序编译是否通过(21分)、程序运行结果(28分)打分,电子考试试卷刻录光盘,期末上交。

实践部分具体试题如下:1、晶振fosc=6MHZ,要求P1.0口输出120ms 的方波,在P1.0端口接上发光二极管来观测灯的亮灭情况。

单片机期末考试

单片机期末考试

汇编语言程序设计步骤一.确定方案和计算方法二.了解应用系统的硬件配置、性能指标三.建立系统数学模型,确定控制算法和操作步骤四.合理分配存储器单元和了解I/O接口地址五. 编制源程序1.按功能设计程序,明确各程序之间的相互关系2. 用流程图表示程序结构和功能3.程序中用注释说明指令在程序中的作用,方便阅读、调试和修改例3-9 设计一个延时10ms的延时子程序,已知单片机使用的晶振为6MHz。

分析:延时时间与两个因素有关:晶振频率和循环次数。

由于晶振采用6MHz,一个机器周期是2μs,用单循环可以实现1ms延时,外循环10次即可达10ms延时。

内循环如何实现1ms延时呢,程序中可先以未知数MT代替,从附录A查每条指令机器周期计算程序的执行时间。

ORG 0020HMOV R0,#0AH ;外循环10次DL2:MOV R1,#MT ;内循环MT次DL1:NOPNOP ;空操作指令DJNZ R1,DL1DJNZ R0,DL2RET内循环DL1到指令DJNZ R1,DL1的计算:(1+1+2)×2μS×MT=1000μSMT=125=7DH7DH代入上面程序的MT,计算总的延时时间:{1+[1+(1+1+2)×125+2]810}×2μS=10062μS=10.062mS若需要延时更长时间,可以采用多重循环。

补充例4 在一个以MCS-51为核心的温度控制器中,温度传感器输出的电压与温度为非线性关系,传感器输出的电压已由A/D转换为10位二进制数。

根据测得的不同温度下的电压值数据构成一个表,表中放温度值y,x为电压值数据。

设测得的电压值x放入R2R3中,根据电压值x,查找对应的温度值y,仍放入R2R3中。

本例的x和y均为双字节无符号数。

程序如下:LTB2:MOV DPTR,#TAB2MOV A,R3CLR CRLC AMOV R3,AXCH A,R2RLC AXCH R2,AADD A,DPL ;(R2R3)+(DPTR)→(DPTR)MOV DPL,AMOV A,DPHADDC A,R2MOV DPH,ACLR AMOVC A,@A+DPTR ;查第一字节MOV R2,A ;第一字节存入R2中CLR AINC DPTRMOVC A,@A+DPTR ;查第二字节MOV R3,A ;第二字节存入R3中RETTAB2:DW……;温度值表补充例6 从50个字节的无序表中查找一个关键字“××”H。

[业务]51单片机期末考试试卷及答案2

[业务]51单片机期末考试试卷及答案2

[业务]51单片机期末考试试卷及答案2一、填空题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、若采用6MHz的晶体振荡器,则MCS-51单片机的振荡周期为1/6us,机器周期为2us。

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

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

7.当MCS-51引脚 ALE 信号有效时,表示从Po口稳定地送出了低8位地址.8.MCS-51的堆栈是软件填写堆栈指针临时在_片内数据存储_器内开辟的区域.9.MCS-51有4组工作寄存器,它们的地址范围是 00H-1FH 。

10.MCS-51片内 20H-2FH 范围内的数据存储器,既可以字节寻址又可以位寻址.11.计算机的系统总线有数据总线、地址总线、控制总线。

12.一个机器周期等于 6个状态周期,振荡脉冲2分频后产生的时钟信号的周期定义为状态周期。

13、单片机的复位操作是_高电平,寄存器IE的值是_EA、ES、ET1、EX1、ET0、EX0_。

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

15、单片机程序的入口地址是0000H ,外部中断1的入口地址是0013H 。

16、片机的内部RAM区中,可以位寻址的地址范围是20H-2FH ,特殊功能寄存器中,可位寻址的地址是能被8整除的地址。

17、eiL C51软件中,工程文件的扩展名是UV2,编译连接后生成可烧写的文件扩展名是HEX。

18、CS-51单片机中,在IP=0x00时,优先级最高的中断是外部中断,最低的是串行口中断。

19、CS—51单片机的P0—P4口均是并行 I,O口,其中的P0口和P2口除了可以进行数据的输入、输出外,通常还用来构建系统的数据总线和地址总线,在P0—P4口中, P0为真正的双向口, P1-P3 为准双向口。

51单片机原理及应用期末考试试题汇总5

51单片机原理及应用期末考试试题汇总5

单片机原理及应用期末考试试题汇总1、单片机是将微处理器、一定容量的 RAM 和ROM以及 I/O 口、定时器等电路集成在一块芯片上而构成的微型计算机。

2、单片机89C51片内集成了 4 KB的FLASH ROM,共有 5 个中断源。

3、两位十六进制数最多可以表示 256 个存储单元。

4、89C51是以下哪个公司的产品?( C )A、INTELB、AMDC、ATMELD、PHILIPS5、在89C51中,只有当EA引脚接高电平时,CPU才访问片内的Flash ROM。

6、是非题:当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片内是否有程序存储器。

T7、是非题:当89C51的EA引脚接高电平时,CPU只能访问片内的4KB空间。

F8、当CPU访问片外的存储器时,其低八位地址由 P0 口提供,高八位地址由 P2 口提供,8位数据由 P0 口提供。

9、在I/O口中, P0 口在接LED时,必须提供上拉电阻, P3 口具有第二功能。

10、是非题:MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的。

F11、是非题:是读端口还是读锁存器是用指令来区别的。

T12、是非题:在89C51的片内RAM区中,位地址和部分字节地址是冲突的。

F13、是非题:中断的矢量地址位于RAM区中。

F14、MCS-51系列单片机是属于( B )体系结构。

A、冯诺依曼B、普林斯顿C、哈佛D、图灵15、89C51具有 64 KB的字节寻址能力。

16、是非题:在89C51中,当CPU访问片内、外ROM区时用MOVC指令,访问片外RAM区时用MOVX 指令,访问片内RAM区时用MOV指令。

T17、在89C51中,片内RAM分为地址为 00H~7FH 的真正RAM区,和地址为80H~FFH的特殊功能寄存器(SFR) 区两个部分。

18、在89C51中,通用寄存器区共分为 4 组,每组 8 个工作寄存器,当CPU 复位时,第 0 组寄存器为当前的工作寄存器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用外部中断0和外部中断1实现:1个七段LED数码管显示值加1和减1#include <REGX51.H>#define LED_SELECT P2#define LED_DATA P0unsigned char code LEDMAP[] =/**< 共阳极显示代码*/{0xc0, 0xf9, 0xa4, 0xb0, 0x99,0x92, 0x82, 0xf8, 0x80, 0x90,};void Delay(unsigned int t);main(void){unsigned char i;LED_SELECT = 0xfe;TCON = 0x05;//*使得IT0和IT1为1*/ LED_DA TA = LEDMAP[0];while(1){ if(IE0){IE0 = 0;//*必须先置零才能工作*/if(i<9){LED_DA TA = LEDMAP[i+1];Delay(20000);//*必须延迟,否则肉眼看不到变化**/i++;}else //*当i=9时*/{LED_DATA = LEDMAP[i-9];Delay(20000);i=0;}}if(IE1){IE1 = 0; //*必须先置零才能工作*/if(i>0){LED_DA TA = LEDMAP[i-1];Delay(20000);i--;}else //*当i=0时*/{LED_DA TA = LEDMAP[i+9];Delay(20000);i=9;}}}}void Delay(unsigned int t){for (t; t>0; t--) ;}实现1位七段LED数码管显示值定时自动加一#include <REGX51.H>#define LED_SELECT P2#define LED_DATA P0unsigned char code LEDMAP[] = /**< 共阳极显示代码*/{0xc0, 0xf9, 0xa4, 0xb0, 0x99,0x92, 0x82, 0xf8, 0x80, 0x90,};void Delay(unsigned int t);main(void){unsigned char i;while(1){for(i = 0; i < 10; i++){LED_SELECT = 0xfe;/**< 关闭7个,保留1个七段码显示器*/LED_DA TA = LEDMAP[i];/**< 送显示代码*/Delay(20000);}}}void Delay(unsigned int t){for (t; t>0; t--) ; 用计数器1的工作方式2实现每数3个脉冲LED亮灭变化#include <REGX51.H>#define LED0 P1_0main(void){TMOD = 0x60;TL0 = 256 - 3;TH0 = 256 - 3;TR1 = 1;IE = 0x88;while(1);}Counter0() interrupt 3{LED0 = !LED0;}用计数器0的工作方式2实现每数5个脉冲LED亮灭变化#include <REGX51.H>#define LED0 P1_0main(void){TMOD = 0x06;TL0 = 256 - 5;TH0 = 256 - 5;TR0 = 1;IE = 0x82;while(1);}Counter0() interrupt 1{LED0 = !LED0;}无源蜂鸣器发出简单的音乐#include <REGX51.H>Unsigned char code Song[] = {5,3,5,3,5,6,5,3,6,5,1,1,2,3,5,3,2,0,3,5,5,5,6,5, 3,5,5,6,5,7,6,5,1,5,3,2,1,2,3,5,5,2,3}; unsigned char code Tone[] = {0,115,102,91,86,77,68,61};#define BUZZER P3_0void Delay(unsigned char t);void main(void){unsigned char i,j;while(1){/** 循环播放Song */for(i = 0; i < 40; i++){for(j = 0; j < 100; j++){BUZZER = 0;Delay(Tone[Song[i]]);BUZZER = 1;Delay(Tone[Song[i]]);//一吸一合才能发生}for(j = 0; j < 100; j++){BUZZER = 1;Delay(250 - Tone[Song[i]]);Delay(250 - Tone[Song[i]]);}}}}void Delay(unsigned char t){for (t; t>0; t--) ;} 七段数码管快速移动显示9#include <REGX51.H>#define LED_SELECT P2#define LED_DA TA P0unsigned char code LEDMAP[] = /**< 共阳极显示代码*/{0xc0, 0xf9, 0xa4, 0xb0, 0x99,0x92, 0x82, 0xf8, 0x80, 0x90,};unsigned char code LED[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, };void Delay(unsigned int t);main(void){unsigned char i;while(1){for(i = 0; i < 8; i++){LED_SELECT =LED[i] ;/**< 关闭7个,保留1个七段码显示器*/LED_DA TA = LEDMAP[9];/**< 送显示代码*/Delay(20);}}}void Delay(unsigned int t){for (t; t>0; t--) ;}定时器实现每隔1秒LED亮灭变化用定时器1工作方式2、定时时间改为0.5秒实现#include <REGX51.H>#define LED0 P1_0main(void){TMOD = 0x20;TL0 = 256-100;TH0 = 256-100;TR1 = 1;IE = 0x88;//*书p158,EA(总开关)为1,ET1(定时中断1)为1。

0x88*//while(1);}Timer1() interrupt 3 //3代表TF1的优先级最高,p159{static unsigned int count_1s = 0;TH0 = 256-100;TL0 = 256-100;count_1s++;if(count_1s >=5000){count_1s =0;LED0 =!LED0;}}TMOD(89H):GATE C//T M1 M0 GA TE C//T M1 M0 默认:0x00其中:C//T:定时计数选择M1-0: 工作方式选择GATE:启动方式设定0:软件启动(常用)1:外部中断启动* 工作方式1: TL0和TH0组成16位的定时器* TCON(88H):TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 默认:0x00其中:IT0(IT1):0: 外部中断0(1)的申请信号为电平触发(低电平有效)1: 外部中断0(1)的申请信号为脉冲触发(下降沿有效)IE0(IE1):有外部中断0(1)申请信号时自动置“1”;调用外部中断0(1)函数后,自动清”0”TR0(TR1):1: 启动定时计数器0(1);0: 关闭定时计数器0(1)TF0(TF1):定时计数器0(1)溢出时自动置“1”;调用定时计数中断0(1)函数后,自动清”0”* IE(0A8H):EA / / ES ET1 EX1 ET0 EX0 默认:0x00其中:EA: 总中断开关(1:开;0:关)ES ET1 EX1 ET0 EX0:4-0号中断开关* 0-4号中断分别为:外部中断0 定时中断0 外部中断1 定时中断1 串行中断其他:- IP(0B8H):/ / / PS PT1 PX1 PT0 PX0默认:0x00其中:0:低优先级;1:高优先级同级别优先顺序:0-4- 中断引脚P3.0-P3.5: RXD TXD INT0 INT1 T0 T1 - 定时器0(1)工作方式1工作原理TL0、TH0 (TL1、TH1)组成16位大存储单元,启动定时计数器0(1)后,大存储单元内容自动加1(定时器每隔1个机器周期加1;计数器每数1个脉冲加1 )当大存储单元溢出时,TF0(TF1)自动置“1”- 定时中断函数调用过程: 需完全理解当定时计数中断0(1)开关打开时,如果TF0(TF1)为“1”,则自动调用定时计数中断0(1)函数,并自动清IE0(IE1)利用定时器实现每隔1秒LED亮灭变化#include <REGX51.H>#define LED0 P1_0main(void){TMOD = 0x01;TL0 = (65536 - 50000)%256;TH0 = (65536 - 50000)/256;TR0 = 1;IE = 0x82;while(1);}/*** 定时中断0的中断函数*/Timer0() interrupt 1{static unsigned char count_1s = 0;TH0 = (65536 - 50000)/256;TL0 = (65536 - 50000)%256;count_1s++;if(count_1s >= 20){count_1s =0;LED0 =!LED0;}} 定时器实现每隔1秒LED亮灭变化改成方式二#include <REGX51.H>#define LED0 P1_0main(void){TMOD = 0x02;//*p176 m1=1 m0=0时是方式二*// TL0 = 256-100;TH0 = 256-100;TR0 = 1;IE = 0x82;while(1);}Timer0() interrupt 1//*方式二依旧用timer0*//{static unsigned int count_1s = 0;//*char 范围到256,而10000超过256,得用int ,为两个字节,共65536,char为一个字节,共256*//TH0 = 256-100;TL0 = 256-100;count_1s++;if(count_1s >= 10000)//* 100*10000*1微秒=1秒*//{count_1s =0;LED0 =!LED0;}}显示12345678#include <REGX51.H>#define LED_SELECT P2#define LED_DATA P0unsigned char code LEDMAP[] =/**< 共阳极显示代码*/{0xc0, 0xf9, 0xa4, 0xb0, 0x99,0x92, 0x82, 0xf8, 0x80, 0x90,};void Delay(unsigned int t);main(void){unsigned char i;while(1){for(i = 0; i < 8; i++){LED_SELECT = 0xff;LED_DA TA = LEDMAP[i+1];LED_SELECT = ~(1 << i);Delay(90);}}}void Delay(unsigned int t){for (t; t>0; t--) ;} 用外部中断实现发光二极管的闪烁(查询法)#include <REGX51.H>#define LED0 P1_0main(void){TCON = 0x01;while(1){if(IE0){IE0 = 0;/**< 对于查询法,需人工清零*/LED0 = ~LED0;}}}TCON(88H):TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 默认:0x00其中:IT0(IT1):0: 外部中断0(1)的申请信号为电平触发(低电平有效)1: 外部中断0(1)的申请信号为脉冲触发(下降沿有效)IE0(IE1):有外部中断0(1)申请信号时自动置“1”;外部中断0(1)函数执行后,自动清”0”外部中断实现发光二极管的闪烁#include <REGX51.H>#define LED0 P1_0main(){TCON = 0x01;/**< 外部中断0设为下降沿触发* */ IE = 0x81;/**< 打开外部中断0* */while(1);}/** 外部中断0的中断函数*/XINT0() interrupt 0/**< 0号中断函数* */{ LED0 = ~LED0;}TCON(88H):TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 默认:0x00其中:IT0(IT1):0: 外部中断0(1)的申请信号为电平触发(低电平有效)1: 外部中断0(1)的申请信号为脉冲触发(下降沿有效)IE0(IE1):有外部中断0(1)申请信号时自动置“1”;调用外部中断0(1)函数后,自动清”0”* IE(0A8H):EA / / ES ET1 EX1 ET0 EX0 默认:0x00其中:EA: 总中断开关(1:开;0:关)ES ET1 EX1 ET0 EX0:4-0号中断开关* 外部中断函数调用过程(需完全理解):当外部中断0(1)开关打开时,如果IE0(IE1)为“1”,则自动调用外部中断0(1)函数,并自动清IE0(IE1)* 0-4号中断分别为:外部中断0 定时中断0 外部中断1 定时中断1 串行中断其他:- IP(0B8H):/ / / PS PT1 PX1 PT0 PX0默认:0x00其中:0:低优先级;1:高优先级同级别优先顺序:0-4- 中断引脚P3.0-P3.5: RXD TXD INT0 INT1 T0 T1 */ 实现1位七段LED数码管显示值定时自动加一#include <REGX51.H>#define LED_SELECT P2#define LED_DA TA P0unsigned char code LEDMAP[] =/**< 共阳极显示代码*/{0xc0, 0xf9, 0xa4, 0xb0, 0x99,0x92, 0x82, 0xf8, 0x80, 0x90,};void Delay(unsigned int t);main(void){unsigned char i;while(1){for(i = 0; i < 10; i++){LED_SELECT = 0xfe;/**< 关闭7个,保留1个七段码显示器*/LED_DA TA = LEDMAP[i];/**< 送显示代码*/Delay(20000);}}}void Delay(unsigned int t){for (t; t>0; t--) ;}光标循环转动(按键控制方向)#include <REGX51.H>#define LED_SELECT P2#define LED_DATA P0#define KEY_PIN P3typedef enum{NULL, KEY_S17, KEY_S18}TYPEDEF_KEY;unsigned char CursorPosition = 0;unsigned char code LEDMAP[] =/**< 共阳极光标显示代码*/ {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, };#define GO_OUT 0xff /**< 熄灭*/ unsigned char code DA TA_ADJ[] =/**< 光标位置转换为显示数据*/ {0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, };unsigned char LEDBuffer[8];/**< 显示缓冲区*/unsigned char code SELECT_ADJ[] =/**< 光标位置转换为数据管位号*/ {7, 7, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, };TYPEDEF_KEY GetKey(void);void Delay(unsigned int t);main(void){unsigned char i = 0;TYPEDEF_KEY key = NULL;bit direction = 0;while(1){LED_SELECT = 0xff;LED_DA TA=LEDMAP[DATA_ADJ[CursorP osition]];LED_SELECT=~(1<<SELECT_ADJ[Cu rsorPosition]);Delay(10000);key = GetKey();if(key == KEY_S17){direction = 1;}if(key == KEY_S18){direction = 0;}/** 光标移动*/if(direction == 1){CursorPosition++;if(CursorPosition > 19){CursorPosition = 0;}}if(direction == 0){ if(CursorPosition == 0){CursorPosition = 19;}else{CursorPosition--;}}}}void Delay(unsigned int t){ for (t; t>0; t--) ; }/**得到按键值*/TYPEDEF_KEY GetKey(void){TYPEDEF_KEY key = NULL;if(~KEY_PIN & 0X08){key = KEY_S18;}else if(~KEY_PIN & 0X04){key = KEY_S17;}else{return(NULL);}while( ~KEY_PIN & 0x0c)//等待键抬起{Delay(1000);}return(key);}按键,在数码管上显示该按键的键值#include <REGX51.H>#define KEYBOARD P1#define LED_SELECT P2#define LED_DATA P0unsigned char code LEDMAP[] =/**< 共阳极显示代码*/{0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};#define GO_OUT 10 /* 熄灭的显示代码*/ unsigned char LEDBuf[8]; /*显示缓冲区*/ unsigned char TestKey(unsigned char outkey); unsigned char GetKey(void);void Delay(unsigned int t);void Display(unsigned char * buf, unsigned char number);main(void){unsigned char key;unsigned char i;/*最低2位7SEGLED显示:00,其余全部熄灭*/LEDBuf[7] = 0;LEDBuf[6] = 0;for(i = 0; i < 6; i++){LEDBuf[i] = GO_OUT;}while(1){key = GetKey();if(key != 0xff){LEDBuf[7] = key % 10; /** 取余*/LEDBuf[6] = key / 10; /** 取商*/}Display(LEDBuf, 8);}}void Delay(unsigned int t){ for (t; t>0; t--) ; }void Display(unsigned char * buf, unsigned char number){unsigned char i;for (i = 0; i < number; i++){LED_SELECT = 0xff;/** 关所有LED (防止出现闪烁现象*/LED_DATA = LEDMAP[*(buf + i)];/**< 送数据的显示代码*/LED_SELECT = ~(1<<i);/**< 显示某1位数码管,其余关闭*/Delay(90);/**< 延时约1ms */}}/**检测是否有键按下*/unsigned char TestKey(unsigned char outkey) {KEYBOARD = outkey;Delay(20);if( ~KEYBOARD & 0x01 ){return(1);}else if( ~KEYBOARD & 0x02 ){return(2);}else if( ~KEYBOARD & 0x04 ){return(3);}else if( ~KEYBOARD & 0x08 ){return(4);}else{return(0);}}/**得到按键值*/unsigned char GetKey(void){unsigned char i;unsigned char outkey;unsigned char keyNO;unsigned char rowNO;if(TestKey(0x0f))/**< 高4位全送0,检测是否有键按下*/ {Display(LEDBuf, 8);/**< 延时16ms,(用于去抖动)*/Display(LEDBuf, 8);if(TestKey(0x0f))/**< 高4位全送0,检测是否有键按下*/ {outkey = 0x80;for(i = 0;i < 4;i++){rowNO = TestKey(~outkey);/**< 高4位送1个0,扫描按键*/if(rowNO){keyNO = i + (rowNO - 1)* 4;/**< 计算按键值*/break;}outkey >>=1;/**< 扫描下一列*/}while(TestKey(0x0f))/**< 等待按键抬起*/{Display(LEDBuf, 8);}return(keyNO);/**< 返回键值*/}}return(0xff);/**< 如果没有按键按下,返回0xff */}电子钟功能(软件延时)#include <REGX51.H>#define LED_SELECT P2#define LED_DATA P0unsigned char code LEDMAP[] =/**< 共阳极显示代码*/{0xc0, 0xf9, 0xa4, 0xb0, 0x99, /**< 0-4 */ 0x92, 0x82, 0xf8, 0x80, 0x90, /**< 5-9 */ 0xbf, 0xff, /**< -, 灭*/};enum {CHAR_DEC = 10, GO_OUT}; unsigned char LEDBuffer[8];/**< 显示缓冲区*/unsigned char Second = 0;unsigned char Minute = 0;unsigned char Hour = 0;unsigned char Count_10ms = 0;void Show(void);void ReflashTime(void);void Delay(unsigned int t);void Display(unsigned char * buf, unsigned char number);main(void){ while(1){Show();Delay(54);/**延时,使每次循环时间约为10ms */ Count_10ms ++;if(Count_10ms > 99){Count_10ms = 0;ReflashTime();}}}/**界面显示*/void Show(void){LEDBuffer[7] = Second % 10;//秒个位送显示缓冲区LEDBuffer[6] = Second / 10;//秒十位送显示缓冲区LEDBuffer[4] = Minute % 10;LEDBuffer[3] = Minute / 10;LEDBuffer[1] = Hour % 10;LEDBuffer[0] = Hour / 10;if(Count_10ms < 50){LEDBuffer[5] = CHAR_DEC;LEDBuffer[2] = CHAR_DEC;}else{LEDBuffer[5] = GO_OUT;LEDBuffer[2] = GO_OUT;}Display(LEDBuffer,8);}/**更新时间*/void ReflashTime(void){Second++;if(Second > 59){Second = 0;Minute ++;if(Minute > 59){Minute = 0;看ram----sp 看rom----pc Hour ++;if(Hour > 23){Hour = 0;}}}}void Delay(unsigned int t){ for (t; t>0; t--) ;}/*动态显示数码管为共阴极*/void Display(unsigned char * buf, unsignedchar number){unsigned char i;for (i = 0; i < number; i++){LED_SELECT = 0xff;/**关所有LED(防止出现闪烁现象)*/LED_DATA = LEDMAP[*(buf + i)];/**< 送数据的显示代码*/LED_SELECT = ~(1<<i);/*显示某1位数码管,其余关闭*/Delay(90); /**< 延时约1ms */}}。

相关文档
最新文档