基于ATC51单片机的最小系统设计
组员:田竹、王维、袁倍明
摘要:
本次实验课题为设计一个基于ATC51单片机的最小系统。用P1口设计流水灯,用P2口和P0口分别作段选和位选设计了六位数码管的静动态显示和简易的电子钟,用
P3口设计了一个4*4的矩阵键盘,并用蜂鸣器实现了唱歌功能和键盘按下的声响,用62256扩展内部RAM,还扩展并实现了LCD1602的静动态显示,最后通过ADC0809和DAC0832分别实现了A/D、D/A转换功能。
一、系统电源
用MC7805集成稳压器将输入电压转为+5V稳压给系统供电。 T U2 +5
二、晶振(12MHZ)及复位电路
采用12MHz的外部晶振,给系统提供时钟信号。并采用了按键复位电路。
GND?|| | 22pF | |?1 |
C3 | XTALX1 |
R4
220K
I | R6 |
GSD
三、流水灯
功能描述:让8个led灯循环闪烁
| R5 | D2 | P10 |
360R | |||
P11 | |||
P12 | |||
+5V卜 | P13 | ||
P14 | |||
| P15 | ||
P16 | |||
P17 | |||
DLY:M0VR7,#250涎时子程序
DLY1:MOVR6,#200
DJNZR6,$
DJNZR7,DLY1
RET
END
四、数码管
功能描述:数码管动态显示 | | ||||
| Q2 | ||||
6LED 源程序: ORG OOOOH
| |||||
LJMPSTART
ORG01 OOH
START:
MOVP0,#()
MOVP2,#0F9H
SETBPO.O
LCALLDELAY
CLRPO.O
MOV P2,#0C4H |
|
SETBPO」
LCALL DELAY
CLR P0.1
MOV P2,#0D0H
SETB P0.2
LCALL DELAY
CLR P0.2
MOV P2,#99H
SETBP0.3
LCALL DELAY
CLR P0.3
MOV P2,#92H
SETBP0.4
LCALL DELAY
CLR P0.4
MOV P2,#82H
SETBP0.5
LCALL DELAY
CLR P0.5
LJMP START
DELAY:MOV R5,#10
DI: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$DJNZ R6,D2
DJNZR5,D1
RET
END
五、4*4矩阵键盘和蜂鸣器
功能描述:通过按键让数码管显示0-F,按键按下时,蜂鸣器响一下。
~~Q]
LSI
Speaker —
GND
源程序:
ORG 0000H
LJMP MAIN
ORG 01 OOH MAIN: MOV P0,#0FFH
MOV B,#4
MOV P3,#0F()H;列置0,看行电平
JNB P3.4,L1
JNB P3.5,L2
JNB P3.6,L3
JNB P3.7,L4
AJMP MAIN
LI: MOVR1,#0
AJMP LL1
L2: MOVR1,#1 AJMP LL1 | |
L4: MOVR1,#3
AJMPLL1
LL1: ACALL DL1OMS;消抖
MOV A,P3
XRL A,#0F0H
JZ MAIN
MOVP3,#OFH;行置0,看列电平
JNB P3.0,L5
JNB P3.1,L6
JNB P3.2,L7
JNB P3.3,L8
L5: MOV 20H,#()
AJMP KEY
L6: MOV20H,#1
AJMP KEY
L7: MOV 20H,#2
AJMP KEY
L8:MOV20H,#3
AJMP KEY
KEY:MOV A,R1;计算键值并查表赋值 |
|
MULAB
ADDA,20H
MOVR2,A
MOVDPTR,#TABLE
MOVA,R2
MOVCA,@A+DPTR
MOVP2,A
CALLBEEP.BL
LCALLDELAY
LJMPMAIN
BEEP_BL:CLR P2.7;蜂鸣器子程序
ACALLDELAY
SETBP2.7
RET
DELAY:MOV R5,#5();延时
DI: MOV R6,#20
D2: MOV R7,#50
DJNZ R7,$
DJNZR6,D2
DJNZ R5,D1
RET
DL10MS:MOVR7,#05H
LOOP1:MOV R6,#0F9H
LOOP2:NOP NOP
DJNZR6,LOOP2
DJNZR7,LOOP1
RET
TABLE:DB0A0H,0F9H,0C4H,0D0H,99H
DB92H,82H,0F8H,80H,90H
DB88H,83H,0A6H,0C 1 H,86H
DB8EH
END
八、TJ
功能描述:在数码管上实现时钟功能,并通过矩阵键盘的3个键实现复位,调
时,调分。
源程序:
ORG0000H
LJMP1000H
ORG001BH
AJMP0100H
ORG0100H
MOVTH1,#()D8H
MOVTL1,#OF()H |
|
DJNZ69H,TT1
MOV69H,#100
SETB4FH
TTkRETI;屮断延时
ORG1000H
MOV30H,#1
MOV31H,#2
MOV32H,#0
MOV33H,#O
MOV34H,#0
MOV35H,#()
MOVTMOD,#10H
MOVTH1,#OD8H
MOVTL1,#()FOH
MOVIE,#88H
XSO:SETB TRI
MOV69H,#100
CLR4FH
XSOO:LJMPKEYKEY;判断按键有无按下LX1: CJNE A,#0 A0H,LX2
LJMPP1OO
LX2: CJNE A,#0F9H,LX3
LJMPP1OOO
LX3: CJNEA,#0C4H,XS
LJMPP1OOOO XS: MOV 40H,#01H
MOVDPTR,#TAB
MOVP0,40H
MOVA,30H
MOVCA,@A+DPTR
MOVP2,A
LCALLYS1MS
MOVP2,#0FFH
MOVA,#42H
MOV40H,A
MOVP0,40H
MOVA,31H
ADDA,# 10
MOVCA,@A+DPTR
MOVP2,A
LCALLYS1 MS
MOVP2,#0FFH
MOVA,#44H
MOV40H,A
MOV P0,40H |
|
MOVA,32H
MOVCA,@A+DPTR
MOVP2,A
LCALLYS1 MS
MOVP2,#()FFH
MOVA,#48H
MOV40H,A
MOVP0,40H
MOVA,33H
ADDA,# 10
MOVCA,@A+DPTR
MOVP2,A
LCALLYS1MS
MOVP2,#0FFH
MOVA,#50H
MOV40H,A
MOV P0,40H
MOV A,34H
MOVC A,@A+DPTR
MOV P2,A
LCALLYS 1 MS
MOV P2,#0FFH MOV A,#60H
MOV40H,A
MOVP0,40H
MOVA,35H
MOVCA,@A+DPTR
MOVP2,A
LCALLYS1MS
MOVP2,#0FFH
MOVA, #40H
MOV40H,A
JNB4FH,LLLL1
CLR4FH
LJMPJIA
LLLL1:LJMPXSOO
P100: MOV30H,#0
MOV31H,#0
MOV32H,#0
MOV33H,#0
MOV 34H,#0
MOV35H,#0
JIA: MOVR1,#14H
MOVA,35H CJNEA,#9,JIA1
MOV35H,#0
MOVA,34H
CJNEA,#5,JIA1O
MOV34H,#0
Pl0000: MOV A,33H
CJNEA,#9,JIA10()
MOV33H,#O
MOVA,32H
CJNEA,#5 JIA 1000
MOV32H,#0
Pl000: MOVA,31H
CJNEA,#9,JIA 10000 MOV31H,#0 MOVA,30H CJNEA,#2,JIA 100000
MOV30H,#0
AJMPXS
JIA 100000:
INC 30H
AJMP XSO
JIA10000:
CJNEA,#3,JIAJIA MOV A,30H
CJNE A,#02,JIAJIA
MOV 3()H,#0
MOV31H,#0
AJMP XSO
JIAJIA:
INC31H
AJMP XSO
JIA1000:INC 32H
AJMPXSO
JIA 100: INC 33H
AJMP XSO
JIA1O: INC 34H
AJMP XSO
JIA1: INC 35H
AJMP XSO
RET
YS1MS:MOV R6,#9H
YL1: | MOVR7,#19H |
|
DJNZR7,$
DJNZR6,YL1 RET
DL10MS:MOVR7,#05H
LOOP1:MOV R6,#0F9H LOOP2:NOP
NOP
DJNZR6,LOOP2
DJNZR7,LOOP1
RET
DELAY: MOV | R5,#50 | |
DI: MOV | R6,#20 | |
D2: MOV | R7,#248 | |
DJNZ | R7,$ | |
DJNZ | R6,D2 | |
DJNZ | R5,D1 | |
RET
;------矩阵键盘--------
KEYKEY:MOV B,#4
MOVP3,#0F0H;列置0,看行电平
JNBP3.4,L1
JNBP3.5,L2
JNB P3.6,L3 JNB P3.7,L4 AJMP XS | |
AJMPLL1
L2:MOVR1,#1
AJMPLL1
L3:MOVR1,#2
AJMPLL1
L4:MOVR1,#3
AJMPLL1
LL1:ACALL DL10MS;消抖
MOVA,P3
XRLA,#()F()H
JZLLL2
MOVP3,#0FH;行置0,看列电平
JNBP3.0,L5
JNBP3.1,L6
JNBP3.2,L7
JNBP3.3,L8
L5:JNBP3.0,L5
MOV20H,#0
AJMPKEY
L6: JNB P3?1,L6 |
|
MOV20H,#1
AJMPKEY
L7:JNBP3.2,L7
MOV20H,#2
AJMPKEY
L&JNB P3.3,L8
MOV20H,#3
AJMPKEY
LLL2:LJMPXS
KEY:MOVA,R1;计算键值并查表赋值
MUL AB
ADD A,20H
MOV R2,A
MOV DPTR,#TABLE
MOVA,R2
MOVC A,@A+DPTR
;LCALL DELAY
LJMPLX1
TAB:
DB 0A0H,0F9H,0C4H,0D0H,099H,092H,082H,0F8H,080H,090H DB020H,079H,044H,050H,019H,012H,002H,078H,000H,01 OH TABLE:DB0A0H,0F9H,0C4H,0D0H,99H
DB 92H,82H,0F8H,80H,90H
DB88H,83H,0A6H,0Cl H,86H DB 8EH
END
七、1602液晶显示
功能描述:在led上动态逐字显示两行字符串。
LCD2 | PO.O/ADO P2X>〃 ? | ||||
LM)16L | U1 | ||||
| |||||
V> Q UJ a | 8588388B | RST | |||
乡孚岁 | |||||
寸s g |
|
|
| ||
IT | .............................................2i_ ..............................................a_ .................................................d | PSEN | |||
ALE | |||||
P2.4/A12
P2.5/A13
P2.6/A14
L | R1 ■10k | P1.0 | P3.0/RXD |
P1.1 | P3.1/TXD | ||
.<TEK > | |||
PI.2 | P3 2/INTD | ||
PI.3 | P3.3/INTT | ||
PI.4 | P3.4/TO | ||
P1.5 | P3.5/T1 | ||
J | PI.6 | P3.6殛 | |
P1.7 | |||
ATC51 | P3.7/RD |
<TBCT>
源程序:
RS EQUP2.7
RW EQU P2.6
EEQUP2.5
ORG 0000H
LJMPMAIN
ORG 01 OOH
MAIN: ACALL DEL5MS
ACALLDEL5MS
ACALL DEL5MS
MOVP1,#38H ACALLENABLE1
ACALL DEL5MS
MOVP1,#38H
ACALL ENABLE 1
ACALL DEL5MS
MOVP1,38H
ACALLENABLE1
MOVPl,#0000000IB
ACALLENABLE
MOVP1,#00111000B
ACALLENABLE
MOVP1,#OOOOH11B
ACALLENABLE
MOVP1,#0000()100B
ACALLENABLE
MOVP1,#8FH
ACALLENABLE
MOVDPTR,#TABLE1
ACALLLI
MOVP1,#OCFH
ACALLENABLE
MOVDPTR,#TABLE2 ACALL L2
SJMP$L1:MOVR1,#()OH LL1:MOVA,R1
MOVCA,@A+DPTR
MOVPl,A
ACALLDELXXMS
ACALLWRITE_LCD
INCR1
CJNEA,#OOH,LL1
RET
L2:MOVR1,#OOH
LL2:MOVA,R1
MOVCA,@A+DPTR
MOVPl,A
ACALLDELXXMS
ACALLWRITE_LCD
INCR1
CJNEA,#O()H,LL1
RET
WRITE.LCD:
SETB RS | |
SETBE
RET
ENABLE1:CLR RS
CLRRW
CLRE
SETBE
RET
ENABLE:CLRRS
CLRRW
CLRE
ACALLDELAY SETBE
RET
DELAY:MOVP1,#OFFH
CLRRS
SETBRW
CLRE
NOP
SETBE
JBPl.7,DELAY
RET
DEL5MS:MOVR7,#125
DEL1:MOVR6,#18
NOP
DEL2:DJNZR6,DEL2
DJNZR7,DEL1
RET
DELXXMS:MOVR7,#250
DEL3:MOVR6,#250
NOP
DEL4:DJNZR6,DEL4
DJNZR7,DEL3
RET
table1: dbHUHZNAIT ”
table2:db" "
END
八、外部RAM扩展
功能描述:将片内数据送到片外RAM储存,再送回片内,在数码管中显示。
源程序:
ORG0000H
LJMPMAIN
ORG01 OOH
MAIN:MOVPO,#OFFH
MOVA,#0F9H
MOVDPTR,#()001H
MOVX@DPTR,A
CLRA
MOVXA,@DPTR
MOVP2,A
SJMP$
END
九、AD转换
功能描述:向ADC0809输入模拟信号电压,经转换后在数码管上显示电压值。
U6 | ?5V | 11 |
> CLK | ||
START
OE
|
| INO | 17 | P10 | |||
TFPH | |||||||
INI | |||||||
~P12 | |||||||
IN2 : | |||||||
~P13 | |||||||
IN3 | |||||||
1FP14 | |||||||
IN4 | |||||||
TFPIS | |||||||
IN5 ; | |||||||
IN6 | 2O~"P1< | ||||||
ADDA | P33 | ||||||
ADDB |
| 12 | |||||
ADDC | |||||||
16 | |||||||
> ALE | |||||||
I GND — ADCO8O9N GND |
| ||||||
源程序: | | ||||||
LED_1EQU 31H
LED_2EQU 32H
ADCEQU 35H
CLOCK BITP3」
STBITP3.();ALE
OEBITP3.2
EOCBIT P3.3
ORG0000H
LJMPSTART
ORG000BH
CPLCLOCK;给0809时钟
RETI
ORG01 OOH
START:
MOVLED_0,#00H
MOVLED_l,#00H
MOVLED_2,#00H
MOVTMOD,#02H
MOV | TH(),#0FEH |
|
MOV | TL0,#0FEH |
WAIT:CLRST
SETBST
CLRST
JNBEOC,$
SETBOE
MOVADC,Pl CLR OE
MOVA,ADC
MOVB,#51 DIV AB MOVLED_2,A MOVA,B MOV B,#5 DIV AB MOVLED_1,AMOV A,B MOV B,#2 MUL AB
MOVLED_0,A LCALL DISP SJMPWAIT
DISP:MOVP0,#()0H MOVDPTR,#TABLE MOV A,LED_0
MOVCA,@A+DPTR SETBP0.2
MOVP2,A LCALL DELAY
CLRP0.2
MOVA,LED_1
MOVCA,@A+DPTR SETB PO.l
CLR PO.l MOV P2,A LCALL DELAY
MOV A,LED_2
MOVCA,@A+DPTR
SETBPO.O
ADDA,#80H
MOVP2,A
LCALLDELAY
CLRPO.O
RET
DELAY: | MOV R6,#50 | MOV | R7,#15 |
D1: | |||
DJNZ | R7,$ | ||
DJNZ | R6,D1 |
RET
TABLE:DB0A0H,0F9H,0C4H,0D0H,99H
DB92H,82H,0F8H,80H,90H
END
十、DA转换
功能描述:实现输出方波、三角波、梯形波。
-12V |
源程序:
1.方波程序
ORG0000H
LJMPLOOP1
ORG0100比通过高低电平地的变化来输出方波
LOOP1:
CLRP3.6
MOVP2,#00H;向选通地址送低电平地
ACALLDELAY
MOVP2,#0FFH;向选通地址送高电平
ACALL DELAY
LJMP LOOP1
DELAY:MOVR1,#()6H
D2:MOVR2,#0FFH
D1:DJNZ R2,D1
DJNZR1,D2
RET;延吋,通过改变它的大小可以改变占空比
END
2.三和波:
ORG0000H
LJMPSTR 1
ORGOIOOH
STRkCLRP3.6 ;通过上升和下降来产生三角波
MOVR6,#00H ;电压随时间上升
STR2:MOVA,R6
MOVP2,A
INCR6
CJNER6,#0FFH,STR2 ;电压随时间下降
STR3:ACALL DELAY
DECR6
MOVA,R6
MOVP2,A
CJNER6,#00H,STR3
AJMPSTR1
END
总结
一、流水灯
流水灯使用接口最好使用PlM, Pl 口没有第二功能也不用作为地址总线,容易控
制。最好加一跳针,以便与其他功能区分开。
二、数码管
焊接时,可将各数码管的段选分别连接起来,连线时,应该贴着板子布线。
pO口做位选时,耍接上拉电阻,增大数码管驱动电流,或采用PNP来进行放大。放
射级接电源,基极接pO口,集电极接位选。P0和P2口使用时和其他功能有重复,最
好用跳针加以控制。
三、矩阵键盘
4*4矩阵键盘的消抖很关键,调用一个10ms的延时,当按键放开时,数码管显示相应
的数字,并伴有蜂铃器的响芦。对键盘行列扫描时,用软件置零比用
硬件置零方便。
!1! |
编程时,用中断定时比一般定时更为精确。由于程序本身存在一定的缺陷,导致
在按键进行控制时,程序会暂停并等待直至按键放开。
五、蜂鸣器
编程时,可在网上查找歌曲编写软件,将歌曲转化为对应的代码,用查表进行实
现唱歌功能。
七、LCD1602
线路有点复杂,需耍认真来进行线路检错,注意其引脚对应的P口不被用于其他
功能而分流,导致液晶不能正常显示。
在其Vee引脚接一电位器进行对比度调节。编程时,注意不要遗漏复位程序。
八、片外RAM
扩展时,可将各个P口用插槽引出,方便使用。编程吋,可通过查看XDATA窗口,看对应的数据有无送到指定的地址。
九、AD转换
ADC0809数据输出的八个引脚2'1到2'8分别接到单片机的P*.7到P*.OU, 注意不耍
接反了。
十、DA转换
可先用LED灯检测DAC0832是否输出的信号是否与编程写的信号一致,若将WR1脚接地,可直接对P口送值,若将WR1脚接P3.6,可用送地址方式赋值。UA741的输岀口与DAC0832的RFB脚Z间可接电位器来调节精确度。输出时,可以采用双极
性输出电路使输出电压变为正电压
十一、检测电路
编程仿真时,可单步运行看P口及其他相应的寄存器有无正确赋值,硬件检测
时,最好交给另外的组员仔细检查电路板看有无短接、虚焊等问题,再用万用表进行
检测,如没有问题,仿真时从P口开始到功能器件逐步用万用表检查相应的值。