资源描述
基于AT89C51单片机最小系统设计
成员:田竹、王维、袁倍明
摘要:
本次实验课题为设计一种基于AT89C51单片机最小系统。用P1口设计流水灯,用P2口和P0口分别作段选和位选设计了六位数码管静动态显示和简易电子钟,用P3口设计了一种4*4矩阵键盘,并用蜂鸣器实现了唱歌功能和键盘按下声响,用62256扩展内部RAM,还扩展并实现了LCD1602静动态显示,最后通过ADC0809和 DAC0832分别实现了A/D、D/A转换功能。
一、系统电源
用MC7805集成稳压器将输入电压转为+5V稳压给系统供电。
二、晶振(12MHZ)及复位电路
采用12MHz外部晶振,给系统提供时钟信号。并采用了按键复位电路。
三、流水灯
功能描述:让8个led灯循环闪烁
源程序:
流水灯
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV A,#11111110B
LOOP:MOV P1,A;给P1口送值
LCALL DLY
RL A ;循环左移
LJMP LOOP
DLY:MOV R7,#250 ;延时子程序
DLY1:MOV R6,#200
DJNZ R6,$
DJNZ R7,DLY1
RET
END
四、 数码管
功能描述:数码管动态显示1~6
源程序:
ORG 0000H
LJMP START
ORG 0100H
START:
MOV P0,#0
MOV P2,#0F9H
SETB P0.0
LCALL DELAY
CLR P0.0
MOV P2,#0C4H
SETB P0.1
LCALL DELAY
CLR P0.1
MOV P2,#0D0H
SETB P0.2
LCALL DELAY
CLR P0.2
MOV P2,#99H
SETB P0.3
LCALL DELAY
CLR P0.3
MOV P2,#92H
SETB P0.4
LCALL DELAY
CLR P0.4
MOV P2,#82H
SETB P0.5
LCALL DELAY
CLR P0.5
LJMP START
DELAY:MOV R5,#10
D1:MOV R6,#20
D2:MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
五、 4*4矩阵键盘和蜂鸣器
功能描述:通过按键让数码管显示0-F,按键按下时,蜂鸣器响一下。
源程序:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV P0,#0FFH
MOV B,#4
MOV P3,#0F0H;列置0,看行电平
JNB P3.4,L1
JNB P3.5,L2
JNB P3.6,L3
JNB P3.7,L4
AJMP MAIN
L1: MOV R1,#0
AJMP LL1
L2: MOV R1,#1
AJMP LL1
L3: MOV R1,#2
AJMP LL1
L4: MOV R1,#3
AJMP LL1
LL1:ACALL DL10MS;消抖
MOV A,P3
XRL A,#0F0H
JZ MAIN
MOV P3,#0FH;行置0,看列电平
JNB P3.0,L5
JNB P3.1,L6
JNB P3.2,L7
JNB P3.3,L8
L5:MOV 20H,#0
AJMP KEY
L6:MOV 20H,#1
AJMP KEY
L7:MOV 20H,#2
AJMP KEY
L8:MOV 20H,#3
AJMP KEY
KEY:MOV A,R1;计算键值并查表赋值
MUL AB
ADD A,20H
MOV R2,A
MOV DPTR,#TABLE
MOV A,R2
MOVC A,@A+DPTR
MOV P2,A
CALL BEEP_BL
LCALL DELAY
LJMP MAIN
BEEP_BL:CLR P2.7;蜂鸣器子程序
ACALL DELAY
SETB P2.7
RET
DELAY:MOV R5,#50;延时
D1:MOV R6,#20
D2:MOV R7,#50
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
DL10MS:MOV R7,#05H
LOOP1:MOV R6,#0F9H
LOOP2:NOP
NOP
DJNZ R6,LOOP2
DJNZ R7,LOOP1
RET
TABLE:DB 0A0H,0F9H,0C4H,0D0H,99H
DB 92H,82H,0F8H,80H,90H
DB 88H,83H,0A6H,0C1H,86H
DB 8EH
END
六、 时钟
功能描述:在数码管上实现时钟功能,并通过矩阵键盘3个键实现复位,调时,调分。
源程序:
ORG 0000H
LJMP 1000H
ORG 001BH
AJMP 0100H
ORG 0100H
MOV TH1,#0D8H
MOV TL1,#0F0H
DJNZ 69H,TT1
MOV 69H,#100
SETB 4FH
TT1:RETI;中断延时
ORG 1000H
MOV 30H,#1
MOV 31H,#2
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV 35H,#0
MOV TMOD,#10H
MOV TH1,#0D8H
MOV TL1,#0F0H
MOV IE,#88H
XS0:SETB TR1
MOV 69H,#100
CLR 4FH
XS00:LJMP KEYKEY;判断按键有无按下
LX1: CJNE A,#0A0H,LX2
LJMP P100
LX2: CJNE A,#0F9H,LX3
LJMP P1000
LX3: CJNE A,#0C4H,XS
LJMP P10000
XS: MOV 40H,#01H
MOV DPTR,#TAB
MOV P0,40H
MOV A,30H
MOVC A,@A+DPTR
MOV P2,A
LCALL YS1MS
MOV P2,#0FFH
MOV A,#42H
MOV 40H,A
MOV P0,40H
MOV A,31H
ADD A,#10
MOVC A,@A+DPTR
MOV P2,A
LCALL YS1MS
MOV P2,#0FFH
MOV A,#44H
MOV 40H,A
MOV P0,40H
MOV A,32H
MOVC A,@A+DPTR
MOV P2,A
LCALL YS1MS
MOV P2,#0FFH
MOV A,#48H
MOV 40H,A
MOV P0,40H
MOV A,33H
ADD A,#10
MOVC A,@A+DPTR
MOV P2,A
LCALL YS1MS
MOV P2,#0FFH
MOV A,#50H
MOV 40H,A
MOV P0,40H
MOV A,34H
MOVC A,@A+DPTR
MOV P2,A
LCALL YS1MS
MOV P2,#0FFH
MOV A,#60H
MOV 40H,A
MOV P0,40H
MOV A,35H
MOVC A,@A+DPTR
MOV P2,A
LCALL YS1MS
MOV P2,#0FFH
MOV A,#40H
MOV 40H,A
JNB 4FH,LLLL1
CLR 4FH
LJMP JIA
LLLL1:LJMP XS00
P100: MOV 30H,#0
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV 35H,#0
JIA: MOV R1,#14H
MOV A,35H
CJNE A,#9,JIA1
MOV 35H,#0
MOV A,34H
CJNE A,#5,JIA10
MOV 34H,#0
P10000:MOV A,33H
CJNE A,#9,JIA100
MOV 33H,#0
MOV A,32H
CJNE A,#5,JIA1000
MOV 32H,#0
P1000: MOV A,31H
CJNE A,#9,JIA10000
MOV 31H,#0
MOV A,30H
CJNE A,#2,JIA100000
MOV 30H,#0
AJMP XS
JIA100000:
INC 30H
AJMP XS0
JIA10000:
CJNE A,#3,JIAJIA
MOV A,30H
CJNE A,#02,JIAJIA
MOV 30H,#0
MOV 31H,#0
AJMP XS0
JIAJIA:
INC 31H
AJMP XS0
JIA1000:INC 32H
AJMP XS0
JIA100:INC 33H
AJMP XS0
JIA10: INC 34H
AJMP XS0
JIA1: INC 35H
AJMP XS0
RET
YS1MS: MOV R6,#9H
YL1: MOV R7,#19H
DJNZ R7,$
DJNZ R6,YL1
RET
DL10MS:MOV R7,#05H
LOOP1:MOV R6,#0F9H
LOOP2:NOP
NOP
DJNZ R6,LOOP2
DJNZ R7,LOOP1
RET
DELAY:MOV R5,#50
D1:MOV R6,#20
D2:MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
;-----------矩阵键盘-----------
KEYKEY: MOV B,#4
MOV P3,#0F0H;列置0,看行电平
JNB P3.4,L1
JNB P3.5,L2
JNB P3.6,L3
JNB P3.7,L4
AJMP XS
L1: MOV R1,#0
AJMP LL1
L2: MOV R1,#1
AJMP LL1
L3: MOV R1,#2
AJMP LL1
L4: MOV R1,#3
AJMP LL1
LL1:ACALL DL10MS;消抖
MOV A,P3
XRL A,#0F0H
JZ LLL2
MOV P3,#0FH;行置0,看列电平
JNB P3.0,L5
JNB P3.1,L6
JNB P3.2,L7
JNB P3.3,L8
L5:JNB P3.0,L5
MOV 20H,#0
AJMP KEY
L6:JNB P3.1,L6
MOV 20H,#1
AJMP KEY
L7:JNB P3.2,L7
MOV 20H,#2
AJMP KEY
L8:JNB P3.3,L8
MOV 20H,#3
AJMP KEY
LLL2:LJMP XS
KEY:MOV A,R1;计算键值并查表赋值
MUL AB
ADD A,20H
MOV R2,A
MOV DPTR,#TABLE
MOV A,R2
MOVC A,@A+DPTR
;LCALL DELAY
LJMP LX1
TAB:
DB 0A0H,0F9H,0C4H,0D0H,099H,092H,082H,0F8H,080H,090H
DB 020H,079H,044H,050H,019H,012H,002H,078H,000H,010H
TABLE:DB 0A0H,0F9H,0C4H,0D0H,99H
DB 92H,82H,0F8H,80H,90H
DB 88H,83H,0A6H,0C1H,86H
DB 8EH
END
七、1602液晶显示
功能描述:在lcd上动态逐字显示两行字符串。
源程序:
RS EQU P2.7
RW EQU P2.6
E EQU P2.5
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:ACALL DEL5MS
ACALL DEL5MS
ACALL DEL5MS
MOV P1,#38H
ACALL ENABLE1
ACALL DEL5MS
MOV P1,#38H
ACALL ENABLE1
ACALL DEL5MS
MOV P1,38H
ACALL ENABLE1
MOV P1,#00000001B
ACALL ENABLE
MOV P1,#00111000B
ACALL ENABLE
MOV P1,#00001111B
ACALL ENABLE
MOV P1,#00000100B
ACALL ENABLE
MOV P1,#8FH
ACALL ENABLE
MOV DPTR,#TABLE1
ACALL L1
MOV P1,#0CFH
ACALL ENABLE
MOV DPTR,#TABLE2
ACALL L2
SJMP $
L1:MOV R1,#00H
LL1:MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
ACALL DELXXMS
ACALL WRITE_LCD
INC R1
CJNE A,#00H,LL1
RET
L2:MOV R1,#00H
LL2:MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
ACALL DELXXMS
ACALL WRITE_LCD
INC R1
CJNE A,#00H,LL1
RET
WRITE_LCD:
SETB RS
CLR RW
CLR E
ACALL DELAY
SETB E
RET
ENABLE1:CLR RS
CLR RW
CLR E
SETB E
RET
ENABLE:CLR RS
CLR RW
CLR E
ACALL DELAY
SETB E
RET
DELAY:MOV P1,#0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7,DELAY
RET
DEL5MS:MOV R7,#125
DEL1:MOV R6,#18
NOP
DEL2:DJNZ R6,DEL2
DJNZ R7,DEL1
RET
DELXXMS:MOV R7,#250
DEL3:MOV R6,#250
NOP
DEL4:DJNZ R6,DEL4
DJNZ R7,DEL3
RET
table1:db"UHZ NAIT "
table2:db"*********:QQ "
END
八、外部RAM扩展
功能描述:将片内数据送到片外RAM储存,再送回片内,在数码管中显示。
源程序:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOV P0,#0FFH
MOV A,#0F9H
MOV DPTR,#0001H
MOVX @DPTR,A
CLR A
MOVX A,@DPTR
MOV P2,A
SJMP $
END
九、AD转换
功能描述:向ADC0809输入模仿信号电压,经转换后在数码管上显示电压值。
源程序:
LED_0 EQU 30H
LED_1 EQU 31H
LED_2 EQU 32H
ADC EQU 35H
CLOCK BIT P3.1
ST BIT P3.0;ALE
OE BIT P3.2
EOC BIT P3.3
ORG 0000H
LJMP START
ORG 000BH
CPL CLOCK;给0809时钟
RETI
ORG 0100H
START:
MOV LED_0,#00H
MOV LED_1,#00H
MOV LED_2,#00H
MOV TMOD,#02H
MOV TH0,#0FEH
MOV TL0,#0FEH
MOV IE,#82H
SETB TR0
WAIT:CLR ST
SETB ST
CLR ST
JNB EOC,$
SETB OE
MOV ADC,P1
CLR OE
MOV A,ADC
MOV B,#51
DIV AB
MOV LED_2,A
MOV A,B
MOV B,#5
DIV AB
MOV LED_1,A
MOV A,B
MOV B,#2
MUL AB
MOV LED_0,A
LCALL DISP
SJMP WAIT
DISP:MOV P0,#00H
MOV DPTR,#TABLE
MOV A,LED_0
MOVC A,@A+DPTR
SETB P0.2
MOV P2,A
LCALL DELAY
CLR P0.2
MOV A,LED_1
MOVC A,@A+DPTR
SETB P0.1
MOV P2,A
LCALL DELAY
CLR P0.1
MOV A,LED_2
MOVC A,@A+DPTR
SETB P0.0
ADD A,#80H
MOV P2,A
LCALL DELAY
CLR P0.0
RET
DELAY: MOV R6,#50
D1: MOV R7,#15
DJNZ R7,$
DJNZ R6,D1
RET
TABLE:DB 0A0H,0F9H,0C4H,0D0H,99H
DB 92H,82H,0F8H,80H,90H
END
十、DA转换
功能描述:实现输出方波、三角波、梯形波。
源程序:
1.方波程序
ORG 0000H
LJMP LOOP1
ORG 0100H;通过高低电平地变化来输出方波
LOOP1:
CLR P3.6
MOV P2,#00H;向选通地址送低电平地
ACALL DELAY
MOV P2,#0FFH;向选通地址送高电平
ACALL DELAY
LJMP LOOP1
DELAY:MOV R1,#06H
D2:MOV R2,#0FFH
D1:DJNZ R2,D1
DJNZ R1,D2
RET;延时,通过变化它大小可以变化占空比
END
2.三角波:
ORG 0000H
LJMP STR1
ORG 0100H
STR1:CLR P3.6 ;通过上升和下降来产生三角波
MOV R6,#00H ;电压随时间上升
STR2:MOV A,R6
MOV P2,A
INC R6
CJNE R6,#0FFH,STR2 ;电压随时间下降
STR3:ACALL DELAY
DEC R6
MOV A,R6
MOV P2,A
CJNE R6,#00H,STR3
AJMP STR1
END
总结
一、流水灯
流水灯使用接口最佳使用P1口,P1口没有第二功能也不用作为地址总线,容易控制。最佳加一跳针,以便与其她功能区别开。
二、数码管
焊接时,可将各数码管段选分别连接起来,连线时,应当贴着板子布线。
p0口做位选时,要接上拉电阻,增大数码管驱动电流,或采用PNP来进行放大。放射级接电源,基极接p0口,集电极接位选。P0和P2口使用时和其她功能有重复,最佳用跳针加以控制。
三、矩阵键盘
4*4矩阵键盘消抖很核心,调用一种10ms延时,当按键放开时,数码管显示相应数字,并伴有蜂铃器响声。对键盘行列扫描时,用软件置零比用硬件置零以便。
四、电子钟
编程时,用中断定期比普通定期更为精准。由于程序自身存在一定缺陷,导致在按键进行控制时,程序会暂停并等待直至按键放开。
五、蜂鸣器
编程时,可在网上查找歌曲编写软件,将歌曲转化为相应代码,用查表进行实现唱歌功能。
七、 LCD1602
线路有点复杂,需要认真来进行线路检错,注意其引脚相应P口不被用于其她功能而分流,导致液晶不能正常显示。
在其Vee引脚接一电位器进行对比度调节。编程时,注意不要漏掉复位程序。
八、片外RAM
扩展时,可将各个P口用插槽引出,以便使用。编程时,可通过查看XDATA窗口,看相应数据有无送到指定地址。
九、AD转换
ADC0809数据输出八个引脚2-1到2-8分别接到单片机P*.7到P*.0口,
注意不要接反了。
十、DA转换
可先用LED灯检测DAC0832与否输出信号与否与编程写信号一致,若将WR1脚接地,可直接对P口送值,若将WR1脚接P3.6,可用送地址方式赋值。UA741输出口与DAC0832RFB脚之间可接电位器来调节精准度。输出时,可以采用双极性输出电路使输出电压变为正电压
十一、检测电路
编程仿真时,可单步运营看P口及其她相应寄存器有无对的赋值,硬件检测时,最佳交给此外成员仔细检查电路板看有无短接、虚焊等问题,再用万用表进行检测,如没有问题,仿真时从P口开始到功能器件逐渐用万用表检查相应值。
展开阅读全文