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.