基于AT89C51单片机的最小系统设计.docx

上传人:b****5 文档编号:11822259 上传时间:2023-04-03 格式:DOCX 页数:24 大小:204.24KB
下载 相关 举报
基于AT89C51单片机的最小系统设计.docx_第1页
第1页 / 共24页
基于AT89C51单片机的最小系统设计.docx_第2页
第2页 / 共24页
基于AT89C51单片机的最小系统设计.docx_第3页
第3页 / 共24页
基于AT89C51单片机的最小系统设计.docx_第4页
第4页 / 共24页
基于AT89C51单片机的最小系统设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于AT89C51单片机的最小系统设计.docx

《基于AT89C51单片机的最小系统设计.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的最小系统设计.docx(24页珍藏版)》请在冰豆网上搜索。

基于AT89C51单片机的最小系统设计.docx

基于AT89C51单片机的最小系统设计

基于AT89C51单片机的最小系统设计

组员:

田竹、王维、袁倍明

摘要:

本次实验课题为设计一个基于AT89C51单片机的最小系统。

用P1口设计流水灯,用P2口和P0口分别作段选和位选设计了六位数码管的静动态显示和简易的电子钟,用P3口设计了一个4*4的矩阵键盘,并用蜂鸣器实现了唱歌功能和键盘按下的声响,用62256扩展部RAM,还扩展并实现了LCD1602的静动态显示,最后通过ADC0809和DAC0832分别实现了A/D、D/A转换功能。

一、系统电源

用MC7805集成稳压器将输入电压转为+5V稳压给系统供电。

二、晶振〔12MHZ〕及复位电路

采用12MHz的外部晶振,给系统提供时钟信号。

并采用了按键复位电路。

三、流水灯

功能描述:

让8个led灯循环闪烁

源程序:

流水灯

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVA,#11111110B

LOOP:

MOVP1,A;给P1口送值

LCALLDLY

RLA;循环左移

LJMPLOOP

DLY:

MOVR7,#250;延时子程序

DLY1:

MOVR6,#200

DJNZR6,$

DJNZR7,DLY1

RET

END

四、数码管

功能描述:

数码管动态显示1~6

 

源程序:

ORG0000H

LJMPSTART

ORG0100H

START:

MOVP0,#0

MOVP2,#0F9H

SETBP0.0

LCALLDELAY

CLRP0.0

MOVP2,#0C4H

SETBP0.1

LCALLDELAY

CLRP0.1

MOVP2,#0D0H

SETBP0.2

LCALLDELAY

CLRP0.2

MOVP2,#99H

SETBP0.3

LCALLDELAY

CLRP0.3

MOVP2,#92H

SETBP0.4

LCALLDELAY

CLRP0.4

MOVP2,#82H

SETBP0.5

LCALLDELAY

CLRP0.5

LJMPSTART

DELAY:

MOVR5,#10

D1:

MOVR6,#20

D2:

MOVR7,#248

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

END

五、4*4矩阵键盘和蜂鸣器

功能描述:

通过按键让数码管显示0-F,按键按下时,蜂鸣器响一下。

源程序:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVP0,#0FFH

MOVB,#4

MOVP3,#0F0H;列置0,看行电平

JNBP3.4,L1

JNBP3.5,L2

JNBP3.6,L3

JNBP3.7,L4

AJMPMAIN

L1:

MOVR1,#0

AJMPLL1

L2:

MOVR1,#1

AJMPLL1

L3:

MOVR1,#2

AJMPLL1

L4:

MOVR1,#3

AJMPLL1

LL1:

ACALLDL10MS;消抖

MOVA,P3

XRLA,#0F0H

JZMAIN

MOVP3,#0FH;行置0,看列电平

JNBP3.0,L5

JNBP3.1,L6

JNBP3.2,L7

JNBP3.3,L8

L5:

MOV20H,#0

AJMPKEY

L6:

MOV20H,#1

AJMPKEY

L7:

MOV20H,#2

AJMPKEY

L8:

MOV20H,#3

AJMPKEY

KEY:

MOVA,R1;计算键值并查表赋值

MULAB

ADDA,20H

MOVR2,A

MOVDPTR,#TABLE

MOVA,R2

MOVCA,A+DPTR

MOVP2,A

CALLBEEP_BL

LCALLDELAY

LJMPMAIN

BEEP_BL:

CLRP2.7;蜂鸣器子程序

ACALLDELAY

SETBP2.7

RET

DELAY:

MOVR5,#50;延时

D1:

MOVR6,#20

D2:

MOVR7,#50

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

DL10MS:

MOVR7,#05H

LOOP1:

MOVR6,#0F9H

LOOP2:

NOP

NOP

DJNZR6,LOOP2

DJNZR7,LOOP1

RET

TABLE:

DB0A0H,0F9H,0C4H,0D0H,99H

DB92H,82H,0F8H,80H,90H

DB88H,83H,0A6H,0C1H,86H

DB8EH

END

六、时钟

功能描述:

在数码管上实现时钟功能,并通过矩阵键盘的3个键实现复位,调时,调分。

源程序:

ORG0000H

LJMP1000H

ORG001BH

AJMP0100H

ORG0100H

MOVTH1,#0D8H

MOVTL1,#0F0H

DJNZ69H,TT1

MOV69H,#100

SETB4FH

TT1:

RETI;中断延时

ORG1000H

MOV30H,#1

MOV31H,#2

MOV32H,#0

MOV33H,#0

MOV34H,#0

MOV35H,#0

MOVTMOD,#10H

MOVTH1,#0D8H

MOVTL1,#0F0H

MOVIE,#88H

XS0:

SETBTR1

MOV69H,#100

CLR4FH

XS00:

LJMPKEYKEY;判断按键有无按下

LX1:

CJNEA,#0A0H,LX2

LJMPP100

LX2:

CJNEA,#0F9H,LX3

LJMPP1000

LX3:

CJNEA,#0C4H,XS

LJMPP10000

XS:

MOV40H,#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

LCALLYS1MS

MOVP2,#0FFH

MOVA,#44H

MOV40H,A

MOVP0,40H

MOVA,32H

MOVCA,A+DPTR

MOVP2,A

LCALLYS1MS

MOVP2,#0FFH

MOVA,#48H

MOV40H,A

MOVP0,40H

MOVA,33H

ADDA,#10

MOVCA,A+DPTR

MOVP2,A

LCALLYS1MS

MOVP2,#0FFH

MOVA,#50H

MOV40H,A

MOVP0,40H

MOVA,34H

MOVCA,A+DPTR

MOVP2,A

LCALLYS1MS

MOVP2,#0FFH

MOVA,#60H

MOV40H,A

MOVP0,40H

MOVA,35H

MOVCA,A+DPTR

MOVP2,A

LCALLYS1MS

MOVP2,#0FFH

MOVA,#40H

MOV40H,A

JNB4FH,LLLL1

CLR4FH

LJMPJIA

LLLL1:

LJMPXS00

P100:

MOV30H,#0

MOV31H,#0

MOV32H,#0

MOV33H,#0

MOV34H,#0

MOV35H,#0

JIA:

MOVR1,#14H

MOVA,35H

CJNEA,#9,JIA1

MOV35H,#0

MOVA,34H

CJNEA,#5,JIA10

MOV34H,#0

P10000:

MOVA,33H

CJNEA,#9,JIA100

MOV33H,#0

MOVA,32H

CJNEA,#5,JIA1000

MOV32H,#0

P1000:

MOVA,31H

CJNEA,#9,JIA10000

MOV31H,#0

MOVA,30H

CJNEA,#2,JIA100000

MOV30H,#0

AJMPXS

JIA100000:

INC30H

AJMPXS0

JIA10000:

CJNEA,#3,JIAJIA

MOVA,30H

CJNEA,#02,JIAJIA

MOV30H,#0

MOV31H,#0

AJMPXS0

JIAJIA:

INC31H

AJMPXS0

JIA1000:

INC32H

AJMPXS0

JIA100:

INC33H

AJMPXS0

JIA10:

INC34H

AJMPXS0

JIA1:

INC35H

AJMPXS0

RET

YS1MS:

MOVR6,#9H

YL1:

MOVR7,#19H

DJNZR7,$

DJNZR6,YL1

RET

DL10MS:

MOVR7,#05H

LOOP1:

MOVR6,#0F9H

LOOP2:

NOP

NOP

DJNZR6,LOOP2

DJNZR7,LOOP1

RET

DELAY:

MOVR5,#50

D1:

MOVR6,#20

D2:

MOVR7,#248

DJNZR7,$

DJNZR6,D2

DJNZR5,D1

RET

;-----------矩阵键盘-----------

KEYKEY:

MOVB,#4

MOVP3,#0F0H;列置0,看行电平

JNBP3.4,L1

JNBP3.5,L2

JNBP3.6,L3

JNBP3.7,L4

AJMPXS

L1:

MOVR1,#0

AJMPLL1

L2:

MOVR1,#1

AJMPLL1

L3:

MOVR1,#2

AJMPLL1

L4:

MOVR1,#3

AJMPLL1

LL1:

ACALLDL10MS;消抖

MOVA,P3

XRLA,#0F0H

JZLLL2

MOVP3,#0FH;行置0,看列电平

JNBP3.0,L5

JNBP3.1,L6

JNBP3.2,L7

JNBP3.3,L8

L5:

JNBP3.0,L5

MOV20H,#0

AJMPKEY

L6:

JNBP3.1,L6

MOV20H,#1

AJMPKEY

L7:

JNBP3.2,L7

MOV20H,#2

AJMPKEY

L8:

JNBP3.3,L8

MOV20H,#3

AJMPKEY

LLL2:

LJMPXS

KEY:

MOVA,R1;计算键值并查表赋值

MULAB

ADDA,20H

MOVR2,A

MOVDPTR,#TABLE

MOVA,R2

MOVCA,A+DPTR

;LCALLDELAY

LJMPLX1

TAB:

DB0A0H,0F9H,0C4H,0D0H,099H,092H,082H,0F8H,080H,090H

DB020H,079H,044H,050H,019H,012H,002H,078H,000H,010H

TABLE:

DB0A0H,0F9H,0C4H,0D0H,99H

DB92H,82H,0F8H,80H,90H

DB88H,83H,0A6H,0C1H,86H

DB8EH

END

七、1602液晶显示

功能描述:

在lcd上动态逐字显示两行字符串。

源程序:

RSEQUP2.7

RWEQUP2.6

EEQUP2.5

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

ACALLDEL5MS

ACALLDEL5MS

ACALLDEL5MS

MOVP1,#38H

ACALLENABLE1

ACALLDEL5MS

MOVP1,#38H

ACALLENABLE1

ACALLDEL5MS

MOVP1,38H

ACALLENABLE1

MOVP1,#00000001B

ACALLENABLE

MOVP1,#00111000B

ACALLENABLE

MOVP1,#00001111B

ACALLENABLE

MOVP1,#00000100B

ACALLENABLE

MOVP1,#8FH

ACALLENABLE

MOVDPTR,#TABLE1

ACALLL1

MOVP1,#0CFH

ACALLENABLE

MOVDPTR,#TABLE2

ACALLL2

SJMP$

L1:

MOVR1,#00H

LL1:

MOVA,R1

MOVCA,A+DPTR

MOVP1,A

ACALLDELXXMS

ACALLWRITE_LCD

INCR1

CJNEA,#00H,LL1

RET

L2:

MOVR1,#00H

LL2:

MOVA,R1

MOVCA,A+DPTR

MOVP1,A

ACALLDELXXMS

ACALLWRITE_LCD

INCR1

CJNEA,#00H,LL1

RET

WRITE_LCD:

SETBRS

CLRRW

CLRE

ACALLDELAY

SETBE

RET

ENABLE1:

CLRRS

CLRRW

CLRE

SETBE

RET

ENABLE:

CLRRS

CLRRW

CLRE

ACALLDELAY

SETBE

RET

DELAY:

MOVP1,#0FFH

CLRRS

SETBRW

CLRE

NOP

SETBE

P1.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:

db"UHZNAIT"

table2:

db"*********:

QQ"

END

八、外部RAM扩展

功能描述:

将片数据送到片外RAM储存,再送回片,在数码管中显示。

源程序:

ORG0000H

LJMPMAIN

ORG0100H

MAIN:

MOVP0,#0FFH

MOVA,#0F9H

MOVDPTR,#0001H

MOVXDPTR,A

CLRA

MOVXA,DPTR

MOVP2,A

SJMP$

END

九、AD转换

功能描述:

向ADC0809输入模拟信号电压,经转换后在数码管上显示电压值。

源程序:

LED_0EQU30H

LED_1EQU31H

LED_2EQU32H

ADCEQU35H

CLOCKBITP3.1

STBITP3.0;ALE

OEBITP3.2

EOCBITP3.3

ORG0000H

LJMPSTART

ORG000BH

CPLCLOCK;给0809时钟

RETI

ORG0100H

START:

MOVLED_0,#00H

MOVLED_1,#00H

MOVLED_2,#00H

MOVTMOD,#02H

MOVTH0,#0FEH

MOVTL0,#0FEH

MOVIE,#82H

SETBTR0

WAIT:

CLRST

SETBST

CLRST

JNBEOC,$

SETBOE

MOVADC,P1

CLROE

MOVA,ADC

MOVB,#51

DIVAB

MOVLED_2,A

MOVA,B

MOVB,#5

DIVAB

MOVLED_1,A

MOVA,B

MOVB,#2

MULAB

MOVLED_0,A

LCALLDISP

SJMPWAIT

DISP:

MOVP0,#00H

MOVDPTR,#TABLE

MOVA,LED_0

MOVCA,A+DPTR

SETBP0.2

MOVP2,A

LCALLDELAY

CLRP0.2

MOVA,LED_1

MOVCA,A+DPTR

SETBP0.1

MOVP2,A

LCALLDELAY

CLRP0.1

MOVA,LED_2

MOVCA,A+DPTR

SETBP0.0

ADDA,#80H

MOVP2,A

LCALLDELAY

CLRP0.0

RET

DELAY:

MOVR6,#50

D1:

MOVR7,#15

DJNZR7,$

DJNZR6,D1

RET

TABLE:

DB0A0H,0F9H,0C4H,0D0H,99H

DB92H,82H,0F8H,80H,90H

END

十、DA转换

功能描述:

实现输出方波、三角波、梯形波。

源程序:

1.方波程序

ORG0000H

LJMPLOOP1

ORG0100H;通过上下电平地的变化来输出方波

LOOP1:

CLRP3.6

MOVP2,#00H;向选通地址送低电平地

ACALLDELAY

MOVP2,#0FFH;向选通地址送高电平

ACALLDELAY

LJMPLOOP1

DELAY:

MOVR1,#06H

D2:

MOVR2,#0FFH

D1:

DJNZR2,D1

DJNZR1,D2

RET;延时,通过改变它的大小可以改变占空比

END

2.三角波:

ORG0000H

LJMPSTR1

ORG0100H

STR1:

CLRP3.6;通过上升和下降来产生三角波

MOVR6,#00H;电压随时间上升

STR2:

MOVA,R6

MOVP2,A

INCR6

CJNER6,#0FFH,STR2;电压随时间下降

STR3:

ACALLDELAY

DECR6

MOVA,R6

MOVP2,A

CJNER6,#00H,STR3

AJMPSTR1

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的输出口与DAC0832的RFB脚之间可接电位器来调节准确度。

输出时,可以采用双极性输出电路使输出电压变为正电压

十一、检测电路

编程仿真时,可单步运行看P口及其他相应的存放器有无正确赋值,硬件检测时,最好交给另外的组员仔细检查电路板看有无短接、虚焊等问题,再用万用表进展检测,如没有问题,仿真时从P口开场到功能器件逐步用万用表检查相应的值。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1