单片机C51程序设计课后习题答案(复习专用)(10)

2019-08-31 14:00

SJMP LK4

KEND:SJMP OUT ;扫描完结束 KS1: MOV DPTR,#7F00H ;检查有无按键 MOV A,#00H MOVX @DPTR,A INC DPTR INC DPTR

MOVX A,@DPTR CPL A ANL A,#0FH RET OUT1:MOV 50H,#1 OUT: 18.

用C语言编写出定时扫描方式下矩阵键盘的处理程序。

F1和F2标志已在主函数前定义。

//************检测有无键按下函数************

uchar checkkey() //检测有无键按下函数,有返回0xff,无返回0

{uchar i;

XBYTE[0x7f00]=0x00; i=XBYTE[0x7f02]; i=i&0x0f;

if (i= =0x0f) return(0); else return(0xff); }

//************键盘扫描函数************

uchar keyscan()//键盘扫描函数,如果有键按下,则返回该键的编码,如果无键按下,则返回0xff {uchar scancode; //定义列扫描码变量

uchar codevalue; //定义返回的编码变量

uchar m; //定义行首编码变量

uchar k; //定义行检测码 uchar i,j;

if (checkkey()= =0) return(0xff); //检测有无键按下,无返回0xff else

{delay(200); //延时 if(checkkey()= =0) return(0xff); //检测有无键按下,无返回0xff

else {

scancode=0xfe;m=0x00; //列扫描码,行首码赋初值

for (i=0;i<8;i++) {k=0x01;

XBYTE[0x7f00]=scancode; //送列扫描码 for (j=0;j<4;j++)

{if ((XBYTE[0x7f02]&k)= =0) //检测当前行是否有键按下 {codevalue=m+j; //按下,求编码 while(checkkey()! =0); //等待键位释放 return(codevalue); //返回编码 m=m+8; //计算下一行的行首编码

}

else k=k<<1; //行检测码左移一位 }

scancode=scancode<<1; //列扫描码左移一位,扫描下一列 }

} } } 19. 20.

根据图7.12,编制一个在两个数码管上显示1和2的显示程序。 试编制4?4的键盘扫描程序。

答:图见书图7.12 程序:

MOV P1,#11100001B ;在第一个数码管显示1 MOV P1,#11010010B ;在第二个数码管显示2

21. 根据图7.13,用汇编语言编制一个在8个数码管上轮流显示1~8的程序。

答:图见书图7.13

程序如下:显示子程序DISPLAY见书P183,在字段码表最后放不显示的编码00H,显示缓冲区50H~57H;显示效果:在第一个数码管上显示1后,第一个数码管不显示,然后在第二个数码管上显示2,依此类推,直到在第八个上显示8。然后重复。

MOV R1,#50H MOV R4,#08H

MOV A,#10H

LOOP:

MOV @R1,A ;初始化为全部不显示。 INC R1 DJNZ R4,LOOP

START: MOV R2,#01H MOV R4,#08H

MOV R1,#50H

LOOP2: MOV A,R2 MOV @R1,A MOV R5,#0FFH LOOP1: LCALL DISPLAY DJNZ R5,LOOP1 INC R1 INC R2 DJNZ R4,LOOP2 SJMP START END

第八章

1. 简述逐次逼近型A/D转换器的工作过程。

答:逐次逼近型A/D转换器由比较器、D/A转换器、寄存器及控制电路组成。与计数型相同,也要进行比较以得到转换的数字量,但逐次逼近型A/D转换器是用一个寄存器从高位到低位依次开始逐位试探比较的。转换过程如下:开始时寄存器各位清0,转换时,先将最高位置1,送D/A转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的数字量。一个n位的逐次逼近型A/D转换器转换只需要比较n次,转换时间只取决于位数和时钟周期。逐次逼近型A/D转换器转换速度快,在实际中被广泛使用。

2. 简述ADC0809的工作过程。 答:ADC0809的工作过程如下:

(1) 输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器译码从8路模拟通道中选通一路模拟量送到比较器。

(2) 送START一高脉冲,START的上升沿使逐次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。

(3) 当转换结束时,转换的结果送入到输出三态锁存器中,并使EOC信号回到高电平,通知CPU已转换结束。

(4) 当CPU执行一读数据指令时,使OE为高电平,则从输出端D0~D1读出数据。

3. 设计8路模拟量输入的巡回检测系统,使用查询的方法采样数据,采样的数据存放在片内RAM的8个单元中,分别用汇编语言和C语言编程实现。

答:硬件线路如下:

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 ALE 8051 WR P2.7 RD P1.0 分 频 器 D0 D1 D2 D3 D4 D5 D6 D7 ADDA ADDB ADDC CLK ALE START OE EOC IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7 VREF+ VREF- ADC0809 +5V GND + + 只把EOC信号改成连接到单片机P1.0上,其余与中断方式相同。 汇编语言编程: ADC: LOOP:

#include

ORG 0100H MOV R0,#30H ;设立数据存储区指针 MOV R2,#08H ;设置8路采样计数值 MOV DPTR,#0000H ;送入口地址并指向IN0

MOVX @DPTR,A ;启动A/D转换,A的值无意义 JNB P1.0,$ MOVX A,@DPTR ;读取转换后的数字量 MOV @R0,A ;存入片内RAM单元 INC DPTR ;指向下一模拟通道

INC R0 ;指向下一个数据存储单元 DJNZ R2,LOOP ;8路未转换完,则继续 RET ;返回

C语言编程:


单片机C51程序设计课后习题答案(复习专用)(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:外国近现代建筑史试题库 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: