




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理与应用电子科技出版社主编:苏珊高如新谭兴国第一章习题答案1 .什么叫单片机?它有哪些主要特点?单片机是将中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)、中断系统、定时/计数器、I/O口等主要计算机部件集成在一片集成电路芯片上的单片微型计算机(SingleChipMicrocomputer)的简称。具有体积小、功耗低、价格便宜、控制功能强等特点。2 .请简述单片机的技术发展历史,单片机的主要技术发展方向是什么?单片机技术发展经历了单芯片微机形成阶段、性能完善提高阶段和微控制器化阶段三个主要阶段。目前单片机主要技术发展方向是:大容量高性能化、小容量低价格化、外围电路内装
2、化、多品种化以及I/O接口功能的增强、功耗降低等。3 .单片机主要用在哪些方面?由于单片机体积小、功耗低、价格便宜,广泛应用于仪器仪表、家用电器、医用设备、航空航天专用设备的智能化管理及过程控制等领域;又由于单片机具有较强的实时数据处理能力和控制功能,可以使系统保持在最佳工作状态,提高系统的工作效率和产品质量,所以在工业控测控、航空航天、尖端武器等各种实时控制系统中,都作为控制器件使用。第二章习题参考答案1.单片机系统复位后,PC值为(0000H)2 .MCS-51单片机中,一个机器周期=(6)状态周期=(12)振荡周期。当主频为12MHz时,一个机器周期为(1s)3 .PSW中RS1RS0=
3、01时,寄存器R2的地址为(10H)PSW中RS1RS0=10时,寄存器R2的地址为(12H二4 .MCS-51单片机的EA=0,程序存储器访问的是(片外ROM)5 .MCS-51单片机上有(4)个独立的存储空间。6 .MCS-51系列单片机在片内集成了哪些主要逻辑功能部件?答:有微处理器CPU、程序存储器、数据存储器、定时/计数器、中断源、弁行I/O端口等功能部件组成。DPTR有哪些特1的功能,始终7 .程序计数器(PC)作为不可寻址寄存器,它有哪些特点?数据地址指针点?答:PC是一个16位的特殊功能寄存器,又称程序指针,它具有自动加指向下一条指令的首地址,以保证程序按顺序执行;DPTR是一
4、个16位的专用地址指针寄存器。作间址寄存器使用,用来存储外接64KB的数据存储器和I/O端口,DPTR也可以拆成两个独立8位的寄存器,即DPH(高8位字节)和DPL(低8位字节),分别占据83H和82H两个地址。8 .MCS-51单片机片内256B的数据存储器可分为几个区?分别作什么用?答:00H1FH共32个单元通常作为工作寄存器区,20H2FH可用位寻址区,可直接进行位操作,30H7FH共80个单元为用户RAM区,作堆栈或数据缓冲器用,80HFFH为特殊功能寄存器区。9 .开机复位后,CPU使用的是哪组工作寄存器?它们的地址是什么?CPU如何确定和改变当前工作寄存器组?答:开机复位后,由于
5、PSW复位值是00H,CPU使用的是0区的工作寄存器R0R7,它们的地址是0007H,可以通过改变PSW的RS1RS0两个位的值确定和改变当前工作寄存器组。10 堆栈有哪些功能?堆栈指针(SP)的作用是什么?在程序设计时,为什么还要对SP重新赋值答:堆栈是一个特殊的存储区,用来暂存数据和地址。堆栈指针SP是用来管理堆栈的它指示出堆栈顶部在片内RAM中的位置。系统复位后,SP初始化为07H,使得堆栈实际上从08H单元开始。由于08H1FH单元分属于工作寄存器13区,20H2FH为位寻址区,若程序中要用到这些区,应把SP值改为30H或更大的值。11 MCS-51的SFR占用了什么空间?其寻址方式如
6、何?答:MCS-51的SFR占用了片内数据存储器的空间,地址范围为80HFFH。其寻址方式为直接寻址。12 程序状态寄存器PSW的作用是什么?常用状态位有哪些?它们的作用各是什么?答:PSW是一个8位的特殊功能寄存器。用于存放程序运行中的各种状态信息。常用状态位及其作用:(1) 进位标志位Cy。在进行加或减运算时,如果操作结果最高位有进位或借位,Cy由硬件置“1”,否则清“0”。(2) 辅助进位标志位Ac。在进行加或减运算时,如果低四位数向高位有进位或借位,硬件会自动将Ac置“l”,否则清“0”。(3) 工作寄存器区指针RSlRS0。用于选择CPU当前工作寄存器的工作区。可由用户用软件来改变R
7、SlRS0的组合,以切换当前选用的寄存器的工作区。(4) 溢出标志位OV。当进行算术运算时,如果产生溢出,则由硬件将OV位置“l”,否则清“0”。(5)奇偶标志位P。该位始终跟踪累加器A中含“1”个数的奇偶性。如果A中有奇数个“1”,则P置“l”,否则置“0”。13 MCS-51单片机复位条件是什么?常用复位电路有哪些?答:复位条件是在单片机的RST引脚输入持续至少两个机器周期高电平。MCS-51单片机通常采用上电复位和上电+按钮电平复位两种方式。第三章习题参考答案1. 选择题:1 )可以实现片外数据存储器访问的指令是(A)。A MOVXB. MOV2)下列指令中,可以实现将累加器C. NOP
8、A 的第 0 位置D. DIV1 (其它位不变)的指令是(的指令是(B )。AMOVA,#01HB.SETBACC.0C.ANLA,#0FFHD.SETBACC3 )MOVXADPTR指令中,源操作数的寻址方式是(B)A.寄存器寻址B.寄存器间接寻址C.直接寻址D.立即寻址4 )LCALL指令操作码地址是2000H,执行完子程序返回指令后,PC=(D)。D. 2003HD. MOVA2000HB.2001HC.2002H5 )对程序存储器的读操作,只能使用(B)AMOVXB.MOVCC.PUSH6 )执行下面指令后,30H内容是(C)MOVR1,#30HMOV40H,#0E0HMOVR1,40
9、HA40HB.30HC.0E0HD.FFH7 )下列指令格式正确的是(D)。A DEL : XCHA , 30HB. MOV : INC AC. 2AB : MOV A , #20H8 )当执行指令( A )后,累加器D. ABC : MOV 23H , AA 的内容为 00H 。A ANL A , #00HC. XRL A , #00HB. ORL A , #00HD. 以上都不对2比较下面各组指令,并在指令后添加注释(1) MOVA,20H;20H内容送累加器AMOVC,20H;位地址20H内容送位累加器C(2) MOVA,20H;20H内容送累加器AMOVR1 ,#20H ; 20H 送
10、累加器AMOVA,R1;20H指向地址的内容累加器A(3) 3)CJNEA,R1,L1;比较A和R1指向地址的内容,若相等程序顺序运行,不相等则转L1处DJNZR2,L1;R2内容减1,不等于0转L1处,等于0则顺序运行3判断下列指令是否正确,并改正错误(1) .SUBB30H,#12H该指令错误,带进位减法指令目的操作数必须是A,要将立即数12H和30H内容相加,MOVA,30HSUBBA,#12H(2) .MOVA,2000H该指令错误,MOV为内部数据传送指令,范围只是在内部数据存储器和累加器传送,地址不超过FFH。要将外部2000H送累加器可改为MOVDPTR,2000HMOVXA,D
11、PTR(3) .ADDR0,0A3H该指令错误,要将A3H内容和R0内容相加,可改为:MOVA,R0ADDA,0A3H(4) .CJNE20H,#20H,L1该指令错误,CJNE第一操作数可以是A、寄存器Rn或Ri可改为:MOVR1,20HCJNER1,#20H,L1(5) .RLCA该指令正确4设R0的内容为32H,A的内容为48H,而片内RAM32H单元的内容为80H,40H单元的内容为08H。请指出在执行下列程序段后,上述各单元的内容变化。MOVA,R0;R0指向地址32H内容送A,即(A)=80HMOVR0,40H;32H(40H),即(32H)=(40H)=08HMOV40H,A;4
12、0H(A),即(40H)=(A)=80HMOVR0,#35H;R0-35H,(R0)=35H5根据要求要求写出相应的指令。1 ).将R0的内容送R1MOVA,R0MOVR1,A2 )将30H内容送20H。MOV20H,30H3 )将立即数30H送R0HMOVR0,#30H5 )将R0的内容送以R1中内容为地址的存储单元。MOVA,R0MOVR1,A6 )将内部RAM30H内容送外部20H单元。MOVA,30MOVR1,#20HMOVXR1,A7 )将外部RAM3000H内容送内部30H单元。MOVDPTR,#3000HMOVXA,DPTRMOV30H,A8 )将ROM2000H内容送R1。MO
13、VDPTR,#3000HMOVCA,A+DPTRMOVR1,A9 )将ROM2000H内容送内部30H单元。MOVDPTR,#2000HMOVCA,A+DPTRMOV20H,A10 )将ROM2000H内容送外部20H单元。MOVDPTR,#2000HMOVCA,A+DPTRMOVR1,#20HMOVXR1,A6 .编程将片外数据存储器地址为40H60H区域的数据块,全部搬移到片内RAM的同地址区域,并将原数据区全部填为FFH。MOVR0,#40HMOVR1,#33LOOP:MOVXA,R0MOVR0,AMOVA,#0FFHMOVXR0,AINCR0DJNZR1,LOOPRET7 .编程找出片
14、外2000H200FH数据区中的最小值,结果存放于R2中。MOVDPTR,#2000HMOVR7,#0FHMOVXA,DPTRMOVBLOOP:INCDPTRMOVXA,DPTRCJNEA,B,LOOP1LOOP1:JNCLOOP2MOVB,ALOOP2:DJNZR7,LOOPMOVR7,BRET第四章习题参考答案1 .是在外部RAM中的xdata区定义了无符号字符型的字变量OUTX2,它的地址是(1002H)。2 .(1)编程容易;(2)容易实现复杂的数值计算;(3)容易阅读、调试、维护程序;(4)容易实现模块化开发;(5)程序可移植性好。3.bit,data,idata,pdata,cod
15、e,xdata,sbit,sfr,sfr164. bit和sbit都是C51扩展的变量类型。bit是位变量,编译器在编译过程中分配地址。除非指定,否则这个地址是随机分配的。这个地址是整个可寻址空间,也就是内部RAM、外扩RAM和ROM。sbit是对应可位寻址空间的一个位,包括可位寻址区:20H2FH和特殊功能寄存器区。一旦用了形如sbixxx=REGE八6的定义,这个sbit量就确定地址了。bit和sbit的最大区别在于,bit是定义一个变量;sbit经常用在寄存器中的,方便对寄存器的某位进行操作。5. (1)使用C51运行库中的预定义宏;(2)通过指针访问;(3)使用C51扩展关键字_at_
16、。6. (1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。( 2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。( 3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。( 4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。( 5)C5
17、1编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加usingm修饰符的,开始时还要将R0R1入栈,结束时出栈。如中断函数加usingm修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。( 6)C51编译器从绝对地址8n+3处产生一个中断向量,其中n为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。( 7)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。7. 有small,compact和large三种存
18、储器模式。Small存储器模式参数及局部变量放入可直接寻址的内部存储器(最大128B,默认存储器类型为data)compact存储器模式参数及局部变量放入分页外部数据存储器(最大256B,默认存储器类型为pdata)large存储器模式参数及局部变量直接放入外部数据存储器(最大64KB,默认存储器类型为xdata)8. #include<reg51.h>main()inti;unsignedcharxdata*p=0x2000;/*指针指向2000H单元*/for(i=0;i<256;i+)/*清零2000H-20FFH单元*/*p=0;p+;9. (1)unsignedch
19、arcodedis_code10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;10. unsignedchardataTL0_L_at_0x30;unsignedchardataTH0_H_at_0x31;11. unsignedcharidatadata_buf20;12. unsignedcharxdatadata_array100;13. unsignedcharbdatastatus;sbitflag_lamp1=statusA0;sbitflag_lamp2=statusA1;sbitflag_machine1=statusA2
20、;sbitflag_machine2=statusA3;sbitflag_port1=statusA4;sbitflag_port2=statusA5;sbitflag_calcu1=statusA6;sbitflag_calcu2=statusA7;第五章习题参考答案1. MCS-51单片机有5_个中断源,2个中断优先级。优先级由软件填写特殊功能寄存器IP加以选择。2. 外部中断请求标志位是IE0矛口IX3. 8051单片机响应中断后,产生长调用指令LCALL,执行该指令的过程包括:首先把当前PC的内容压入堆栈,对断点保护,然后把长调用指令的16位地址送PC.,使程序转向执行中_断入口地址区
21、。4.8051单片机的IP寄存器功能是设置中断优先级5.用指令完成下列要求。.INT1、T0开中断,其余禁止中断;MOVIE,#86H.全部开中断MOVIE,#FFH.INT0、T0开中断,其余保持不变;SETBEASETBEX0.INT1、串行口为高优先级,其余为低优先级;MOVIP,#85H5.子程序和中断程序有何异同,为什么子程序返回指令RET和中断返回指令RETI不能相互替代?答:中断类似于子程序设计中的调用子程序,但它们有着本质的区别。调用子程序是程序员事先安排好的,而中断是由一些特殊事件触发的,是随机的。RET功能是恢复堆栈中PC的值,从调用指令的下一条指令开始运行程序,不影响标志
22、位。RETI除了具有RET指令功能外,还清除内部相应的中断状态触发器,因此中断服务程序必须以RETI为指令结束。CPU执行RETI指令后至少再执行一条指令,才能响应新的中断请求,因此不能互换。1.外部中断有几种中断触发方式?对跳变触发和电平触发信号有什么要求?如何设置?答:外部中断有低电平触发和边沿触发两种触发方式。低电平触发时,施加在相应引脚上的低电平在中断返回前必须撤消,否则将再次申请中断造成出错。即施加在INTi引脚上的低电平持续时间应大于一个机器周期,且小于中断服务程序的执行时间。在边沿触发方式中,为了保证CPU在两个机器周期内能够检测到由高至低跳变的电平,输入的高电平和低电平的持续时
23、间至少要保持12个振荡周期(即一个机器周期的时间)。通过TCON寄存器的IT1和IT0来设置。ITi设置为“0”时,相应的外部中断为低电平触发方式;设置为“1”时,相应的外部中断为边沿触发方式,7 .为何要在程序的首地址安排一条跳转到主程序的指令?在响应中断的过程中为什么要保护现场?应如何保护?答:因为程序的首地址与外中断0的入口地址之间只相差3各单元,放不下完整的主程序,一般将主程序放到0030H以后的单元,故要安排一条跳转到主程序的指令。主程序中通常用到PSW、工作寄存器和特殊功能寄存器等。如果在中断服务程序中要用这些寄存器,会造成这些现场寄存器中数据的混乱,在中断服务前应将它们的内容保护
24、起来称保护现场。通常利用堆栈操作来保护现场。8 .利用INT0做一个计数器。当INT0有脉冲时,A的内容加1。弁且当A的内容大于或等于100时将P1.0置位。ORG0000HLJMPMIN0ORG0003HLJMPINTB0ORG0030HMIN0:MOVSP,#30H;主程序SETBIT0SETBEX0SETBEAMOVA,#00MIN1:NOPLJMPMIN1ORG0100HINTB0:PUSHPSW;INT0的中断服务程序ADDA,#01CJNE A#100INTB1LJMPINTB2INTB1:JCINTB3INTB2:SETBP1.0INTB3:POPPSWRETIEND第六章习题答
25、案1 .当定时器T0工作在方式3时,要占用定时器T1直工F1和TR1两个控制位。2 .在定时器工作在方式1下,计数器的计数器的宽度为6位,若fosc=12MHz,最大定时时间为13,若fosc=6MHz,则最大定时时间为23 .定时时间与定时器的工作方式、计数初值及晶振频率有关。4 .MCS-51的定时器/计数器作计数器使用时,计数脉冲由外部信号通过引脚,P3.4和P3.5提供。5 .MCS-51的定时器/计数器T0门控信号GATE设置为1时,只有INT0引脚为高电平且由软件使TR0置1时,才能启动定时器工作。6 .MCS-51系列单片机内部设有几个定时器/计数器?它们是由哪些专用寄存器组成?
26、有哪几种工作方式?简述各种工作方式的功能特点。MCS-51单片机内部设有两个16位定时器/计数器T0和T1o分别有的8位计数器TH0、TL0和TH1、TL1组成,各有4种工作方式。方式0是一个13位的定时器/计数器。只用了16位寄存器中的高8位(THi)和低5位(TLi的D4D0位),TLi的高3位未用。方式1为16位定时器/计数器方式,由THi的8位和TLi的8位构成16位加1计数器,当16位计数满溢出时,溢出标志位TFi置“1”。方式2为8位自动重装计数器。仅TLi作为计数器,而THi的值在计数中不变。TLi溢出时,THi中的值自动装入TLi中。方式3只适用定时器/计数器T0oT0在该方式
27、下被拆成两个独立的8位计数器TH0和TL0,TL0可作8位的定时器或计数器用,而TH0借用T1的控制位和溢出标志位TR1和TF1,只可用作简单的定时器使用。该方式下T1可用作串行口波特率发生器。7 .MCS-51系列单片机定时器/计数器作定时器或计数器使用时,其计数脉冲分别由谁提供?作定时器使用时,其实质是在单片机内部对机器周期进行计数,计数脉冲输入信号由内部时钟提供,每一个机器周期计数器自动加1。作计数器使用时,其实质是对外部事件进行计数,计数脉冲来自相应的外部输入引脚T1或T0,当外部输入脉冲信号由1至0的跳变时,计数器自动加1。8 .采用程序查询方式,由T1产生一个50Hz的方波,从P1
28、.1输出,fosc=12MHz。解:方波周期T=1/50=0.02s=20ms,用T1定时10ms,计数初值为:16-362-10X10X12X10/12=65536-10000=55536=D8F0H源程序如下:ORG0000HLJMPT1BUSORG0030HT1BUS:MOVTMOD,#10H;T1方式1,定时模式SETBTRl;启动T1LOOPMOV TH1 , #0D8H;送T1计数初值MOV TL1LOOP1: JNB TF1CLR TF1CPL P1.1SJMP LOOPEND,#0F0H,LOOP1 ; T1没有溢出等待;产生溢出清标志位;P1.1取反输出;循环第七章习题答案1
29、 .选择题(1) MCS-51系列单片机的串行口是( B )。A.单工B.全双工C.半双工(2)表示串行数据传输速率的指标是(D )。A. USARTB.UART C.字符帧(3)串行口的控制寄存器是( C )。D.并行口D.波特率A. PCONB.SMOD C.SCON(4)当设置串行口工作于方式2时,采用(D.SBUFA )指令。A.MOV SCON , C. MOV PCON , (5)当串行口工作于方式#80HB. MOV#80HD. MOV0时,其波特率(SCON , #10HPCON , #10H C )。A.取决于定时器1的溢出率B.取决于C.取决于时钟频率D.取决于PCON的(
30、6)当串行口工作于方式1时,其波特率(DA.取决于定时器1的溢出率B.取决于C.取决于时钟频率D.取决于PCON的(7)串行口的发送数据和接收数据端为(AA.TXD和RXDB.TI和C.TB8(8)串行口是单片机的(RI和A)。A.内部资源B.外部资源PCON 的 SMODSMOD和定时器 1的溢出率 )。PCON 的 SMODSMOD和定时器 1的溢出率 )。RB8 D.RENC.输入设备D.输出设备简答题1.串行口有几下JLC4-f工作方式?有几种帧格式?-r什十卡各工作方式的波特率如何确定竹台匕2_猫多sM0sM111卜力队切肥G上TAd士/.口.口3收付中00力式0十十18伙恒少传也奇
31、汗布dnPti1ar'T、fosc/120l力Al10MUARIff1011方式2方式311位UART11位UARTosc口交(/64、。sc/321定时器控制)2 .何谓波特率、溢出率?如何计算和设置MCS-51系列单片机串行通信的波特率?波特率是串行数据传输中,串行口每秒钟发送(或接收)的二进制位数称为波特率,单位是b/s(位/秒)。溢出率是指定时器T1作为波特率发生器使用时的溢出频率,其大小为溢出周期之倒数在方式0时,每个机器周期发送或接收一位数据,因此波特率固定为振荡频率的l/12,且不受SMOD位的控制。方式2的波特率要受PCON中SMOD位的控制,波特率=fosc/(64/
32、2SMOD),当SMOD设置为“0”时,波特率等于fosc/64,若SMOD设置为“1”时,则波特率等fosc/32。方式1或方式3时,其波特率由定时器/计数器T1的溢出率与SMOD位共同控制。其波特率可表示为:波特率=T1的溢出率/(32/2SMOD)3 .为什么T1用作串行口波特率发生器时,常选用操作方式2?定时器T1工作于方式2是8位的自动重装方式,这样就避免了由于软件装载引起的误差,故通常将T1设置为方式2,作为波特率发生器。4 .串行口控制寄存器SCON中TB8、RB8起什么作用?在什么方式下使用?TB8和RB8:方式2和方式3时发送和接受的第9位数据。在双机通信中可以作为奇偶校验位
33、,在多机通信中,可作为地址和数据的区别第八章习题答案1 .地址译码方法包括线选法和译码法。其中译码法又分为部分地址译码法和全地址译码法。全地址译码法是将各扩展芯片上的地址线均接到单片机系统对应的地址总线上,剩余的全部地址线全部连接到译码器上,各芯片的片选信号由译码电路产生,因此得到的每个选中单元的地址都是唯一的。而部分译码法是将部分剩余高位地址线通过译码的方式生成外设地址,所以地址可能不唯一。2 .不会。这是因为访问外部程序存储器使用MOVC指令,而访问外部数据存储器和IO采用MOVX指令,两者对应的时序和控制信号是不同的,总线不会冲突。3.电路如下所示O6264(1)地址范围:0000H1F
34、FFH;6264(2)地址范围:2000H3FFFH;2764(1)地址范围:0000H1FFFH;2764(2)地址范围:2000H3FFFH;4.8255IO口有三种工作方式基本输入/输出、选通输入/输出、双向选通输入输出方式。其中通过其控制寄存器设定。8155A有四种IO工作方式,包含基本IO和选通IO等组合,也需通过其控制寄存器进行配置。5 .设8255控制寄存器地址为XXH,则A口工作与方式2,则B口只能工作与方式0。8255初始化程序:MOVA,#11000010BMOVDPTR,#XXHMOVXDPTR,A6 .单片机晶振频率为12Mhz,将其24分频,工作频率为500K,要获得
35、10ms定时,需要对该信号计数5000次。对应十六进制数1388H,设只需要进行单次10ms计数,则定时计数器M2M1=00,设控制口地址为C0005H。则初始化程序为:MOVDPTR,#0C000HMOVA,#00000101BMOVDPTR,AMOVDPTR,#0C004HMOVA,#88HMOVDPTR,AMOVA,#13HINCDPTRMOVDPTR,AMOVA,#11000101B则定时器低位寄存器为88H,高位为C000H,则定时计数器低位地址为13H。C0004H,定时计数器高位地址为;8155IO工作方式3,A输出,;装入初值低8位;装入初值高8位;启动定时器B输入C51参考程
36、序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar keyscan();void delay(uint x);3.参考电路图如下:uchar HSM,LJC;uchar tmp,keyvalue;9.1节第一部分。判断键是否释放第九章参考答案1 .参看9.1节第二部分(二)矩阵式键盘。2 .分为软件消抖和硬件消抖两种方法。去抖方法参看方法:计算键值以后,再以延时和扫描/*函数名称:main()函数功能:主函数,键值处理*/voidmain()while(1)tmp=keyscan(
37、);switch(tmp)case0x11:P0=0x3f;/0break;case0x21:P0=0x06;/1break;case0x41:P0=0x5b;/2break;case0x81:P0=0x4f;/3break;case0x12:P0=0x66;/4break;case0x22:P0=0x6d;/5break;case0x42:P0=0x7d;/6break;case0x82:P0=0x07;/7break;case0x14:P0=0x7f;/8break;case0x24:P0=0x6f;/9break;case0x44:P0=0x77;/Abreak;case0x84:P0=
38、0x7c;/Bbreak;case0x18:P0=0x39;/Cbreak;case0x28:P0=0x5e;/Dbreak;case0x48:P0=0x79;/Ebreak;case0x88:P0=0x71;/Fbreak;default:P0=0x00;delay(100);/*函数名称:voiddelay(uintx)函数功能:延时xms,振荡器频率为f=12MHz*/voiddelay(uintx)ucharj,k;for(;x>0;x-)for(j=4;j>0;j-)for(k=250;k>0;k-);/*函数名称:voidkeyscan()函数功能:键盘扫描及按键
39、处理*/ucharkeyscan()P1=0xf0;LJC=P1&0xf0;/ 行扫描全为低电平,列线全为高电平/ 第一次读列检测状态if(LJC!=0xf0)delay(10);LJC=P1&0xf0;if(LJC!=0xf0)/若有键盘被按下,则延时/第二次读取列检测状态:/若有闭合键,则逐行扫描10ms0xe0、0xd0、0xb0、0x70HSM=0xfe;/扫描码分别为0xfe、0xfd、0xfb、0xf7while(HSM&0x10)!=0)/若扫描码为0xef,则结束扫描P1=HSM;/输出行扫描码LJC=P1&0xf0;/读列检测数据:0xe0、0
40、xd0、0xb0、0x70if(LJC!=0xf0)/如果有按键闭合keyvalue=(HSM)+(LJC|0x0f);/计算键盘值return(keyvalue);/返回键值/ 行扫描左移 1 位,准备扫描下一行elseHSM=(HSM<<1)|0x01;return(0x00);汇编语言参考程序:ORG00HLJMPMAINMAIN:LCALLKEYJUDGELCALLKEYSCANLCALLDISPLJMPMAINKEYJUDGE:MOVP3,#0F0HMOVA,P3XRLA,#0F0HJNZDELAYLJMPMAINDELAY:MOVR4,#08HLOOP1:MOVR5,#
41、0FAHLOOP2:DJNZR5,LOOP2DJNZR4,LOOP1MOVP3,#0F0HMOVA,P3XRLA,#0F0HJZMAINRETKEYSCAN:MOVR0,#00HMOVR1,#00HMOVR2,#0FEHMOVR3,#04HKEY:MOVP3,R2KEY0:JBP3.4,KEY1MOVR1,#00HLJMPNUMKEY1:JBP3.5,KEY2MOVR1,#04HLJMPNUMKEY2:JBP3.6,KEY3MOVR1,#08HLJMPNUMKEY3:JBP3.7,NEXTMOVR1,#0CHLJMPNUMNEXT:INCR0MOVA,R2RLAMOVR2,ADJNZR3,KE
42、YLJMPNUMNUM:MOVA,R0ADDA,R1MOVDPTR,#TABMOVCA,A+DPTRMOVR6,ARETDISP:MOVP0,R6LCALLDELAY1RETDELAY1:MOVR4,#0FHLOOP10:MOVR5,#0FAHLOOP20:DJNZR5,LOOP20DJNZR4,LOOP10RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71HEND4 .静态显示:静态显示方式要求每位LED显示器的公共端(COM)必须接地(共阴极),或接高电平(共阳极)。而每位LED显示器都由一个具有
43、锁存功能的8位端口去控制。动态显示:把所有显示器的同名字段互相连接在一起,弁把它们连到字形口上。为了防止各个显示器同时显示出相同的字符,每个显示器的公共端(COM)还要受另一组信号控制,即把它们接到字位口上。这样对于一组LED数码显示器需要有两种信号控制:一组是字形口输出的字形码,用来控制显示内容;另一组是字位口输出的字位码,用来控制将字符显示在第几位显示器上。在这两组信号的控制下使各个显示器依次从左至右轮流点亮一遍,过一段时间再轮流点亮一遍,如此不断重复。虽然在任意时刻只有一位显示器被点亮,但由于显示器具有余辉效应,而人眼又具有视觉惰性,所以看起来与全部显示器持续点亮效果完全一样。字形码:为
44、了将数字或字符在LED显示器上输出,把数字或字符在LED显示器上显示时所对应的发光二级管状态按照一定顺序进行编码,称为字形码。LED显示器的字形码分为共阳LED编码和共阴LED编码。5 .电路图参考图9-10.C51参考程序:#include<reg51.h>#defineucharunsignedcharunsignedcharcodetable=0x0c0,0x0f9,0x0a4,0x0b0,0x99,0x92,0x82,0x0f8,0x80,0x92;Ucharsec,mSec;Voidmain()UcharshowData;Sec=0;mSec=0;TMOD=0x10;T1
45、模式1,定时TH1=0xd8;/T1计数初值TL1=0x0f0;EA=1;/CPU、T1开中断ET1=1;TR1=1;/启动T1While(1)If(sec%2=0)showData=2;Display(showData);showData=0;Display(showData);showData=1;Display(showData);showData=6;Display(showData);ElseshowData=2;Display(showData);showData=0;Display(showData);showData=4;Display(showData);showData=9
46、;Display(showData);Voiddisplay(unsignedcharindx)unsignedchartemp=tableindx;SBUF=temp;While(!TI)TI=0;voidtimer1()interrupt3TH1=0x0d8;/T1计数初值TH1=0x0f0;mSec+;If(mSec=100)Sec+;mSec=0;汇编语言程序ORG00HLJMPMAINORG001BHLJMPINT1ORG0030HMAIN:MOVTMOD,#01H;选T1方式1,晶振12MHZ,定时50msMOVTH1,#3CH;赋初值高8位MOVTL1,#0B0H;赋初值低8位S
47、ETBTR1;启动T1定时SETBET1;开T1中断允许MOVR0,#00HSETBEA;开总中断允许DIS:MOVA,#2ACALLDSPLYMOVA,#0ACALLDSPLYMOVA,#1ACALLDSPLYMOVA,#6ACALLDSPLYCJNER0,#14H,DISDIS1:MOVR0,#0MOVA,#2ACALLDSPLYMOVA,#0ACALLDSPLYMOVA,#4ACALLDSPLYMOVA,#9ACALLDSPLYCJNER0,#14H,DIS1MOVR0,#0AJMPDISDSPLY:MOVDPTR,#TABLEMOVCA,A+DPTRMOVSBUF,AJNBTI,$CL
48、RTIRETINT1:MOVTH1,#3CH;赋初值高8位MOVTL1,#0B0H;赋初值低8位INCR0RETITABLE:DB0C0H,0F9H,0A4HDB0B0H,99H,92HDB82H,0F8H,80H,90HEND6.电路图参考图9-6和图9-20。图9-6对应汇编程序实现把键值存放到A中,调用键扫描后程序后,只需要把A中内容用传送指令MOV40H,A指令即可把键值存储40H单元。至于题目中要求2秒钟扫描一次键盘,需要2秒钟定时,可以把题目5中的1秒钟定时中断服务程序作如下修改即可:C51参考程序:voidtimer1()interrupt3TH1=0x0d8;/T1计数初值TH
49、1=0x0f0;mSec+;If(mSec=200)Sec+;Key=keyscan();在主程序中等待key的改变,根据不同的key值作出相应的输出。汇编语言参考程序:ORG00HLJMPMAINORG001BHLJMPINT1ORG0030HMAIN :MOVTMOD , #01H;选 T1方式 1 ,晶振 12MHZ ,定时 50msMOVTH1 , #3CH ;赋初值高 8 位MOVTL1,#0B0H;赋初值低8位SETBTR1;启动T1定时SETBET1;开T1中断允许MOVR0,#00HMOVR1,#40HSETBEA;开总中断允许SCANKEY:CJNER0,#3CH,SCANK
50、EY;3秒钟扫描一次键盘MOVR0,#00HLCALLKEY1;KEY1为按键扫描子程序,键值存放A中MOVR1,AINCR140H单元开始存键值CJNER1,#7FH,SCANKEY;若地址超过7FH,重新MOVR1,#40HAJMPSCANKEYINT1:MOVTH1,#3CH;赋初值高8位MOVTL1,#0B0H;赋初值低8位INCR0RETI第十章习题答案1.启动AD转换器的方法,在芯片选中的情况下,在START端口施加200ns以上的正脉冲即可启动ADC0809。单片机可通过查询EOC信号判断ad转换是否完成。可通过定时/查询/中断的方式读取AD转换的结果。©Tb ?被StUS itr *TO n wSL Xntl 猊 Imi墟口 IDMDI73ACDS320 2并pXFFy 前 Tmii 泡 Xntt皿EA参考电路图2.双缓冲方式是指DAC0832内部两个寄存器均处于受控状态的工作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南测绘职业学院《社会体育运动技能与指导(瑜伽)》2023-2024学年第二学期期末试卷
- 广西财经学院《流域管理学》2023-2024学年第一学期期末试卷
- 吉安职业技术学院《群落生态学》2023-2024学年第二学期期末试卷
- 重庆城市科技学院《安全行为学》2023-2024学年第二学期期末试卷
- 新疆农业大学《医学影像诊断学1》2023-2024学年第二学期期末试卷
- 海南大学《中国古文名篇导读》2023-2024学年第二学期期末试卷
- 安阳幼儿师范高等专科学校《学位论文选题与设计》2023-2024学年第二学期期末试卷
- 公章申请流程
- 抽排水施工方案
- 2025年乡村医生岗位理论知识考试模拟试题及答案(共100题)
- 互通立交的安全性评价要点与案例介绍
- 居住区规划设计讲解及案例分析课件
- 湖北省鄂州市基层诊所医疗机构卫生院社区卫生服务中心村卫生室地址信息
- Revit软件基础入门课件(很详细)
- 申论详解(PPT课件)
- 新人教版四年级数学下册总复习专题一《四则运算及运算定律》课件
- 第8课《时间的脚印》课件(25张PPT)-部编版语文八年级下册
- 北师大版小学数学六年级下册《可爱的小猫》公开课优质课优秀教学设计(经典完美)
- Q∕GDW 12175-2021 单相智能物联电能表技术规范
- 石油产品化验室分析规程
- 同一直线上的二力合成导学案
评论
0/150
提交评论