单片机课后习题答案(8)

2019-04-21 20:13

36 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。

74LS138 G1 G G2G2Y3 Y2 C Y1 B A Y0 G 74LS 8 373 OE Vcc P2.7 P2.6 P2.5 P2.4~P2.0 5 ALE 8031 8 5 5 5 8 8 A0~A7 CE CE A0~A7 CE A0~A7 A8~A12 A8~A12 A8~A12 6264(1) D0~D7 OE 6264(2) OE D0~D7 8 6264(3) OE D0~D7 8 P0 8 EA PSEN 8 地址空间如下: 第一片:

0000 0000 0000 0000~0001 1111 1111 1111;即0000H~1FFFH; 第二片:

0010 0000 0000 0000~0011 1111 1111 1111;即2000H~3FFFH; 第三片:

0100 0000 0000 0000~0101 1111 1111 1111;即3000H~5FFFH;

15. 试用一片74LS373扩展一个并行输入口,画出硬件连接图,指出相应的控制命令。 答:硬件电路图如下:74LS373的输入端为扩展的输入口,输出端接8051的数据总路线P0口,控制端接高电平,输出允许由片外数据存储器读信号RD和P2.0控制。当片外数据存储器读信号RD和P2.0同为低平时从74LS373中读入输入的数据。

8051 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 + RD P2.0 Q0 Q1 74LS Q2 Q3 373 Q4 Q5 Q6 Q7 OE D0 D1 D2 D3 D4 D5 D6 D7 G +5V

错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。

输入数据的命令如下: MOV DPTR,#0FE00H MOVX A,@DPTR

37

16. 用8255A扩展并行I/O,实现把8个开关的状态通过8个二极管显示出来,画出硬件连接图,用汇编语言和C语言分别编写相应的程序。

答:硬件电路图如下:8051与8255的连接略,设8255的A,B,C和控制控口的地址为7F00H,7F01H,7F02H,7F03H。8255的A口接8个开关,B口接8个发光二极管。

+5V K0 PA0 PA1 PA2 PA3 PA4 系统总线 PA5 PA6 PA7 8255A PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 8051 L0 K7 L7 +5V 程序如下: 汇编程序 ORG 0000H LJMP MAIN ORG 0100H

MAIN:MOV DPTR,#7F03H

MOV A,#90H MOVX @DPTR,A

LOOP:MOV DPTR,#7F00H

MOVX A,@DPTR MOV DPTR,#7F01H MOVX @DPTR,A SJMP LOOP

38

错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。

SJMP $ END

C语言程序: #include #include main() {

unsigned char i; XBYTE[0x7f03]=0x90; while(1) {

i=XBYTE[0x7f00]; XBYTE[0x7f01]=i; } } }

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

该程序放于定时器的中断服务程序中。定时器每10ms中断一次,执行一次中断服务程序。F1和F2标志位用片内RAM的50H和51H单元。 ACALL KS1 JNZ LK1 MOV 50H,#0 ;无键按下,F1的F0标志清0结束 MOV 51H,#0 SJMP OUT

LK1: CJNE 50H,#1,OUT1 ;有键按下检查F1标志是否为1,不为1置1结束。 CJNE 51H,#01,OUT ;再检查F2标志是否为1,为1说明已处理按键则结束。 LK2: MOV R2,#0FEH ;扫描查询键码 MOV R4,#00H LK4: MOV DPTR,#7F00H MOV A,R2 MOVX @DPTR,A INC DPTR INC DPTR

错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。

MOVX A,@DPTR JB ACC.0,LONE MOV A,#00H AJMP LKP LONE: JB ACC.1,LTWO MOV A,#08H AJMP LKP LTWO:JB ACC.2,LTHR MOV A,#10H AJMP LKP LTHR: JB ACC.3,NEXT MOV A,#18H LKP: ADD A,R4 ;求键码放累加大器A, MOV 51H,#1 ;F2标志置1,结束 SJMP OUT

NEXT: INC R4 MOV A,R2 JNB ACC.7,KEND RL A MOV R2,A 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语言编写出定时扫描方式下矩阵键盘的处理程序。

39

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; //定义返回的编码变量

40 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。

//定义行首编码变量 //定义行检测码

uchar m; uchar k; uchar i,j;

if (checkkey()= =0) return(0xff); else

{delay(200); if(checkkey()= =0) return(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. 试编制4?4的键盘扫描程序。

//检测有无键按下,无返回0xff //延时

//检测有无键按下,无返回0xff

//列扫描码,行首码赋初值

//送列扫描码

//检测当前行是否有键按下 //按下,求编码 //等待键位释放 //返回编码 //计算下一行的行首编码 //行检测码左移一位

//列扫描码左移一位,扫描下一列

20. 根据图7.12,编制一个在两个数码管上显示1和2的显示程序。 答:图见书图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。然后重复。


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

下一篇:大学物理综合练习六[KH3D]

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

马上注册会员

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