单片机习题参考答案 下载本文

END

2.试用中断技术设计一个秒产生电路,用于控制P1.0口的发光二极管LED闪亮,其闪烁频率为5Hz,设fosc=6MHz。

分析:利用定时/计数器产生5HZ时序信号。 5HZ频率的周期是:1/5hz=0.2s

1/2周期是:0.1s

当时钟频率是:fosc=6MHz时,机器周期为2微秒。

所以:0.1s = x .2微秒 ,x = 0.1s/2微秒 = 0.05乘以10的6 次方=50000 解:

定时器T0工作以方式1。

时间常数的初值是:65536-50000=15536 15536= 3CB0H TL0=0B0H TH0=3CH 程序清单:

ORG 0000H

LJMP MAIN

ORG 000BH;T0 LJMP TT0 ORG 0100H MAIN:

MOV SP,#30H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 SETB TR0 SJMP $ TT0:

MOV TH0,#3CH MOV TL0,#0B0H

CPL P1.0 RETI

END

3.完善6.1.1动态显示控制LED显示器的设计,编写程序使其能够输出显示年字符“2006”。

分析:由于显示的是固定的字符,所以直接选择字符的编码输出即可。

解:

ORG 0000H LJMP START ORG 0100H MOV A,#0FFH

;使4个LED均不亮

;‘6’的七段字形码输出

; 11111110B、LED0显示字符6

START:

MOV P3,A LP0: MOV P1,#7DH MOV P3,#0FEH

25

LCALL DELAY10MS MOV MOV ACALL MOV

P1,#3FH P3,#0F9H DELAY10MS P1,#05BH

;延时10MS

;‘8’的七段字形码输出

;11111001B、LED2、LED1显示字符0 ;延时10MS

;‘2’的七段字形码输出

;11110111B、LED2、LED1显示字符2 ;延时10MS ;重复

MOV P3,#0F7H ACALL DELAY10MS

LP0

AJMP DELAY10MS: LOOP0:

MOV R7,#5 MOV R6,#212 DJNZ R6,$ DJNZ R6,$ DJNZ R6,$ DJNZ R6,$

DJNZ R7,LOOP0

;2VS

RET END

4.试设计使用8751单片机外接8个七段LED显示器和8个BCD码拨盘的电路。并编写程序能够依次读入8个BCD码拨盘数据后存入片内30H~37H单元中,然后依次送LED显示器输出显示。

分析:

1、8个LED数码显示字段,由P1口输出。 2、8个位控制由P3口输出。

3、8个BCD码拨盘由P2口输入,8421分别接P2.3、P2.2、P2.1、P2.0。

4、8个拨盘的公共端分别为,A1~A8,由P0口控制位选通,分别对应P0.0~P0.7。 解1:

编程读入1#~8#BCD拨盘置入的数据,并将读入的数据存入片内RAM的30H~37H单元中。

输入子程序RDIN: RDIN: MOV MOV MOV RDIN10: MOV MOV MOV CPL

MOV INC

R7,#08H R0,#30H A,#0FEH R2,A P0,A A,P2 A

;读入次数计数

;片内RAM的首址送R0 ;选通1#拨盘, ;暂存R2中 ;输出位选控制信号 ;读入拨盘数据

;取反使之为高电平有效 ;存入片内RAM

;指向下一个RAM单元 ;指向下一个拨盘

@R0,A R0 A,R2 A

MOV RL

DJNZ R7,RDIN10 ;8个拨盘未读完转 RET ;读完返主

解2:

26

显示子程序DISPLAY:

数码管显示的数据存放在内存单元30H~37H中,每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。显示时,先取出30H~37H某一地址中的数据,然后查得对应的显示用段码从P1口输出。P3口将对应的数码管选中,就能显示该地址单元的数据值。

DISPLAY:MOV R0,#30H MOV R3,#0FEH MOV A,R3 LD10: MOV P3,A MOV

A,@R0

MOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,A ACALL DL1MS INC R0

MOV A,R3

JB ACC.7,LD20 RL A MOV R3,A AJMP LD10 LD20: RET

TAB: DB 0C0H DB 0F9H DB 0A4H DB 0B0H DB 99H DB 92H DB 82H DB 0F8H DB 80H DB 90H DB 88H

DB

0FFH

DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: DJNZ

R7,DL2

DJNZ R6,DL1

RET

解3:

主程序MAIN:

ORG 0000H LJMP MAIN ORG 0100H

27

;建立显示缓冲区首址 ;从右数第一位显示 ;描字放入A ;从P3口输出 ;取显示数据到A

;取段码表地址 ;查显示数据对应段码 ; 码放P1口 ;延时1ms

;指向下一地址

;ACC.7=0一次显示结束 ;A中数据循环左移 ;将位控码送R3保存 ;继续扫描 ;字形代码表0 ;字形代码表1 ;字形代码表2 ;字形代码表3 ;形代码表4 ;字形代码表5 ;字形代码表6 ;字形代码表7 ;字形代码表8 ;字形代码表9 ;字形代码表A ;

;1ms延时程序

MAIN:

LCALL RDIN LCALL DISPLAY END

说明:本程序进行了软件调试,若实际应用还需与硬件调试。

5.仿造6.2.1音乐门铃的电路,设计一个音乐盒,当打开音乐盒盖时,自动播放“祝你生日快乐”的乐曲。

解:对教材中120页的程序进行硬件联机调试,获得成功之后,将?祝你生日快乐?的相应初值替换原来乐曲的初值即可。

;时钟频率12mhz,产生?小星星?乐曲。

ORG 8000H LJMP MAIN ORG 800BH LJMP TT0 ORG 801BH LJMP TT1 ORG 8100H

MAIN:

MOV TMOD,#11H MOV DPTR,#TAB MOV IE,#8AH MOV TCON,#50H MOV R6,#00H

NEXT:

MOV R7,#00H MOV TH1,#3CH MOV TL1,#0B0H MOV A,R6

MOVC A,@A+DPTR JZ TOEND

MOV TH0,#0FEH MOV TL0,A CJNE R7,#08,$ INC R6 SJMP NEXT

TOEND:

CLR TR0 SJMP $

TT1:

INC R7 RETI

TT0:

CPL P3.4

28

;T0 ;T1 ;

;T1,T0方式1

;10001010BCPU允许中断,T0,T1允许中断。 ;TR0=1,TR1=1.