单片机课程设计.docx

上传人:b****7 文档编号:9427275 上传时间:2023-02-04 格式:DOCX 页数:33 大小:610.86KB
下载 相关 举报
单片机课程设计.docx_第1页
第1页 / 共33页
单片机课程设计.docx_第2页
第2页 / 共33页
单片机课程设计.docx_第3页
第3页 / 共33页
单片机课程设计.docx_第4页
第4页 / 共33页
单片机课程设计.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

单片机课程设计.docx

《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(33页珍藏版)》请在冰豆网上搜索。

单片机课程设计.docx

单片机课程设计

单片机课程设计

题目

院别

专业班级

设计人

学号

指导教师

成绩

一、设计要求

在单片机的智能仪器仪表,数据采集以及实时控制系统中,被控制对象往往是一些连续变化的模拟量,例如温度、压力、形变、位移、流量等。

这些非电的模拟量必须通过传感器转换成模拟量,再转换成数字量后,才能输入到计算机加工处理。

有时还要求处理结果转换成模拟量以实现对被控对象的控制并要求通过键盘置数、显示、打印等

二、系统原理总体框图

图1系统总体结构框图

系统工作原理:

主机AT89C51借助于程序可启动A/D转换器(TLC549)进行转换工作,通过DS18B20对系统周围温度进行检测,对采样的数据进行修正(或不修正),将结果存入24C02(256*8)中,同时可将此数据送显示缓冲区,经LED显示,并送D/A转换器输出,经标准打印机的接口(DB25)记录实测结果。

三、系统硬件设计

(1)显示键盘电路:

由a和b组成

a显示电路:

P0口、P2口低4位和4位共阳极LED显示器,4只9015三极管构成

b键盘电路:

P2口低4位与P1口高3位组成4*3矩阵结构形式的12个键组成,其中10个数字键,2个功能键。

显示电路工作原理:

P0口送七段码字形,根据电路图中D0对应七段码中a段,D6对应七段码中g段及共阳极“0”电平点亮的原则,得符合本电路的共阳极七段码见表1。

 

表一七段码字形表

字形

七段码

字形

七段码

0

0C0H

9

90H

1

0F9H

A

88H

2

0A4H

B

83H

3

0B0H

C

0C6H

4

99H

D

0A1H

5

92H

E

86H

6

82H

F

8EH

7

0F8H

P

8CH

8

80H

图2键盘显示电路

位选择由P2~P2.3经9015后分别对应千位、百位、十位、个位,根据共阳极原理,位选信号经9015驱动后从VCC送入显示阳极,因此得位选择码,千位对应位选码为0EH,百位对应位选码为0DH,十位对应位选码为0BH,个位对应位选码为07H,由千位到个位分别送出千位字形,千位位选0EH,百位字形,百位位选0DH,十位字形,十位位选0BH,个位字形,个位位选07H,即由千位到个位逐位显示,由于人眼的惰性,我们观察到四位同时显示。

键盘电路:

在键盘扫描电路中,P2.0、P2.1、P2.2、P2.3用作控制键盘扫描的行线,是输出口,P1.5、P1.6、P1.7用作控制键的列线,是输入口。

其扫描过程为,P2.0~P2.3四线中先送P2.3线为0,其余位送全1(07H),读P1口。

若由键按下,则P1.5~P1.7中必有一线为0,再分别送0BH、0DH、0EH和读P1口值,达到扫描键盘的作用。

闭合键的键值的确定是根据该键所在的行、列值确定。

如图2显示键盘电路图所示。

(2)DS18B20,,24C02电路

选用精度高,廉价的数字温度传感器BS18B20作为测量系统的环境温度,又选用24C02串行E2PROM来记录A/D转换器的转换结果及环境温度变化值。

系统中由DS18B20与P1口低三位构成高精度数字传感器接口电路,DS18B20最小分辨率可达0.06250C,具有线性度高等特点。

24C02(256x8)与P1.2低3位实现外扩E2PROM功能。

具体电路见图3。

图3单片机与DS18B20、24C02接口电路

(3)A/D、D/A转换器电路A/D、D/A转换器电路见图4.由P1口低3位和串行A/D转换器TLC549实现8位A/D转换器功能,当在TLC549的CS端加上低电平后A/D转换器被启动,此时在CLK上必须送入移位脉冲,将SDA上的转换结果经过C进位送入累加器A中。

DAC0832由8位数据输入寄存器,8位DAC寄存器和8位D/A转换器三部分组成。

它是电流输出型的,即将输入的数字量转换成模拟电流量输出。

IOUT1和IOUT2的和是常数,他们的值随DAC寄存器的内容呈线性变化。

但是,在单片机的应用系统中,往往需要电压信号输出,为此将电流在经过运算放大器LM2904,即可得到转换电压输出。

本系统采用单缓冲方式连接,P0口送8位数据,P3.6作为选通信号。

图4A/D、D/A转换器电路

(4)并行输出打印电路和串行输出RS-232电路

单片机应用系统中经常选用打印机来记录系统中数据等,本系统选用标准并口打印口输出,用P0口输出并行数据,P3.7作为打印口的选通信号,当AT89C51向打印口输出选通信号STROBE时,数据就输出到打印机,并启动打印机的机械装置进行打印工作,当打印时,其状态输出线BUSY呈高电平,空闲时送出低电平,P2.4引脚连到打印口BUSY信号,供CPU查询用。

如图8串行输出RS-232,并行输出标准打印口电路图5所示

图5并行输出打印电路和串行输出RS-232电路

8位A/D、D/A转换系统总体逻辑图见图6

图6-408位A/D、D/A转换系统总体逻辑图

四、系统软件设计

系统软件设计采用模块化结构,整个程序由主程序,显示键盘扫描,测温E2PROM存取A/D,D/A转换,RS-232通信,打印口等程序模块组成。

在AT89C51单片机系统中由于CPU内部含有4kb的快擦写可编程只读存储器可作为监控程序使用单元,系统外扩24C02E2PROM作为存取随机采集数据的存储单元。

系统试用地址单元分配如下:

(1)显示缓冲区设在片内RAM的61H、62H、63H、64H单元中。

(2)键盘扫描代码设在片内RAM的40H、41H、42H、43H单元中。

(3)键值代码设在片内RAM的44H-4FH中。

由于键盘较少,安排命令键有困难,我们采用数字代码与命令执行键(#),退出命令执行键(*)组合而成。

具体方法是:

取低二位数值作为命令键不同的键值,再按下#后程序转入命令键处理,完成(63H)x16+(62H)操作得到各命令键,并作出如下定义:

(1)12H对应A/D,D/A转换功能;21H对应打印功能。

(2)31H对应串行通信功能;41H对应测温功能。

表2键盘值对应的8位代码

键值

8位代码

键值

8位代码

0

4EH

6

8BH

1

27H

7

2DH

2

47H

8

4DH

3

87H

9

8DH

4

2BH

A/*

2EH(退出命令执行键/数字键A)

5

4BH

B/#

8EH(命令执行键/数字键B)

(1)主程序图6-41是主程序的流程图所示

图6-41主程序的流程图

主程序

ORG0000H

AJMPMAIN

ORG0023H

ORG0100H

MAIN:

MOV40H,#07H;键行扫描码赋予40H—43H

MOV41H,#0BH

MOV42H,#0DH

MOV43H,#0EH

MOV44H,#4EH;键值码赋予44H—4FH

MOV45H,#27H

MOV46H,#47H

MOV47H,#87H

MOV48H,#2BH

MOV49H,#4BH

MOV4AH,#8BH

MOV4BH,#2DH

MOV4CH,#4DH

MOV4DH,#8DH

MOV4EH,#2EH

MOV4FH,#8EH

MOV60H,#00H

MAIN0:

MOVSP,#68H;设置SP指针

MOVR0,#61H

ML0:

MOVA,#00H;显示缓冲区清零

MOV@R0,A

INCR0

CJNER0,#65H,ML0

ML1:

MOVR0,#64H

MOVR3,#00H

ML2:

ACALLDISPLAY;调用显示子程序

ACALLKEY1;调用键盘扫描子程序

CJNEA,#0BH,ML6;不是命令执行键转数字键处理

MOVA,63H;是,进行命令键处理

SWAPA;形成命令字

ANLA,#0F0H

MOVB,A

MOVA,62H

ADDA,B

CJNEA,#12H,ML3;不是A/D、D/A命令转到ML3

AJMPADC;执行A/D、D/A子程序

ML3:

CJNEA,#21H,ML4;不是打印命令转到ML4

ML4:

CJNEA,#31H,ML5;不是串口命令转到ML5

ML5:

CJNEA,#41H,ML6;不是测温命令转到数字键出理

AJMPB20;执行测温子程序

ML6:

AJMPML2;"#"是数字键B,转显示程序

2)键盘显示功能程序

(1)本程序段使用显示缓冲区为内部RAM中的64H(千位)、63H(百位)、62H(十位)、61H(个位)。

程序流程框图见图6-42。

图6-42显示程序流程图

显示子程序:

DISPLAY:

MOVDPTR,#NUMTAB;取七段码首地址

SETBC

MOVR7,#0FEH;位选择置处置(从千位开始)

MOVR0,#64H;显示缓冲区首地址送R0

MOVR4,#04H;设循环次数(4位)

SHOW:

MOVA,@R0;取显示缓冲区要显示的数值

MOVCA,@A+DPTR;查七段表,取七段码

MOVP0,A;送字形码到P0口

MOVA,R7;送数位到P2口

MOVP2,A

DELAY:

MOVR5,#0FFH;延时

DELAY1:

DJNZR5,DELAY1

DECR0

MOVA,R7;修改显示值

RLCA

MOVR7,A

DJNZR4,SHOW

RET

NUMTAB:

DB0C0H,0F9H,0A4H,0B0H,99H;七段码字形表

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

DB88H,83H,0C6H,0A1H,86H

DB8EH,8CH

(2)键盘扫描子程序键盘扫描子程序有两方面功能:

○1判别键盘上的键是否按下方法是让扫描口P2.3~P2.0输出全“0”,然后读P1.7~P1.5端的状态。

若P1.7~P1.5为全1。

(键盘上列线为高电平),则没有键按下,若P1.7~P1.5不为全0,则有键按下,但是为了排除由于键盘上键的抖动而产生的误判,可以在判到有键按下后经软件延时一段时间后再判键盘状态,若仍有键按下则才认为有键按下,否则就认为是键抖动。

○2判别闭合键的键号方法是对键盘的行线依次扫描,扫描口P2.3~P2.0依次送出如表3所示的值。

表3

P2.3

P2.2

P2.1

P2.0

0

1

1

1

1

0

1

1

1

1

0

1

1

1

1

0

相应地顺次读P1.7~P1.5端状态,若P1.7~P1.5为全1,则表示行线为0的这行上没有键按下,否则就确认这一行上有键按下。

放下键的键号等于P1.7~P1.5端读得的值取反加上P2.3~P2.0端送行扫描码,形成键代码。

例如P2.3~P2.0输出为0111,扩展成8位07H,读入P1.7~P1.5的值为110,扩展成8位码为11011111B,与扫描码相加为20H+07H=27H,得该键码为27H,查表得按下键的值为1。

键扫描子程序的流程框图如图9所示,其中延时时间采用调用显示子程序,其优点是进入键扫描子程序后,显示器一直是亮的。

图6-43键盘扫描子程序流程图

键盘扫描子程序:

KEY1:

ACALLKS1

JNZLK1

NI:

MOVR6,#06H

YS:

ACALLDISPLAY

DJNZR6,YS

AJMPKEY1

LK1:

MOVR6,#12

YS1:

ACALLDISPLAY

DJNZR6,YS1

ACALLKS1

JNZLK2

AJMPNI

LK2:

MOVR0,#40h

LK3:

MOVP1,#0FFH

MOVA,@R0

MOVP2,A

MOVR6,#0FFH

LK4:

DJNZR6,LK4

MOVA,P1

CPLA

JZNEXT

ADDA,@R0

MOV60H,A

MOVR1,#44H

MOVR3,#00H

CMP:

CLRC

MOVA,60H

SUBBA,@R1

JZLK5

INCR1

INCR3

AJMPCMP

LK5:

ACALLDISPLAY

ACALLKS1

JNZLK5

MOVA,R3

MOV64H,63H

MOV63H,62H

MOV62H,61H

MOV61H,A

ACALLSOND

RET

NEXT:

INCR0

CJNER0,#45H,LK3

AJMPKEY1

KS1:

MOVP1,#0FFH

MOVP2,#0F0H

MOVR6,#05H

DS6:

DJNZR6,DS6

MOVA,P1

CPLA

RET

SOND:

MOVR7,#35H

SOND0:

MOVR2,#80H

CLRP1.4

SOND1:

DJNZR2,SOND1

MOVR2,#80H

SETBP1.4

SOND2:

DJNZR2,SOND2

DJNZR7,SOND0

RET

KSA:

MOVR3,#00H

MOVP0,#0FFH

MOVP1,#0FFH

MOVA,P1

CPLA

JNZKSA1

EXIT:

MOVA,R3

RET

KSA1:

MOVR6,#12

YS2:

ACALLDISPLAY

DJNZR6,YS2

MOVP2,#0EH

MOVA,P1

CPLA

MOV60H,A

MOVR3,#00H

CMP1:

CLRC

MOVA,60H

SUBBA,@R1

JZEXIT

INCR1

INCR3

AJMPCMP1

RELEASE:

ACALLKS1

MOVB,A

ACALLDISPLAY

MOVA,B

JNZRELEASE

RET

3)DS18B20、24C02功能块程序

(1)DS18B20程序设计

由图6所示,DS18B20的DQ端接P1.0,根据DS18B20的通信协议,由主机控制DS18B20完成温度转换必须经过三个步骤:

每一次读/写前都要对DS18B20进行复位;复位成功后发送ROM指令。

最后发送功能指令。

这样才能对DS18B20进行预定的操作。

复位要求主机CPU将数据DQ(P1.0)引脚送低电平500us,然后释放。

DS18B20收到信号后,等待16~60us左右,后发出60~240us的低脉冲,主机CPU测试P1.0(DQ)端获低电平,说明DS18B20已复位(初始化),可通过DQ写命令到DS18B20并延时750ms待温度转换完成后,读取DS18B20的转换结果,获得的温度送显示器显示。

程序流程框图6-44如图所示。

(a)为主程序框图

(b)为读温度程序流程图

(c)为初始化DS18B20程序流程图

(d)为DS18B20程序流程图。

主程序:

B20MAIN:

ACALLINIT1820;调用复位DSB18B20子程序

MAIN1:

LCALLGET_TEMPER;调用读温度子程序

MOVA,56H;温度值送显示缓冲器

ANLA,#0FH

MOV61H,A

MOVA,56H

SWAPA

ANLA,#0FH

MOV62H,A

MOVA,55H

ANLA,0FH

MOV63H,A

MOVA,55H

SWAPA

ANLA,#0FH

MOV64H,A

LCALLDISPLAY;调用显示子程序

ACALLKSA;调用判有无*按下程序

CJNEA,#0AH,B20MAIN;有退出键按下,等待*键放开

ACALLRELEASE

LJMPMAIN0;*键放开转主程序

初始化程序:

INIT1820:

SETBP1.0;DS18B20复位初始化程序

NOP

CLRP1.0

MOVR0,#0FFH;主机发出延时53.3us的复位低脉冲

TSR1:

DJNZR0,TSR1

SETBP1.0;然后拉高数据线

NOP

NOP

NOP

MOVR0,#25H

TSR2:

JNBP1.0,TSR3;等待DS18B20回应

DJNZR0,TSR2;延时

LJMPTSR4

TSR3:

SETB70H;置标志位,表示DS18B20存在

LJMPTSR5

TSR4:

CLR70H;清标志位,表示DS18B20不存在

LJMPTSR7

TSR5:

MOVR0,#06BH

TSR6:

DJNZR0,TSR6;时序要求延时一段时间

TSR7:

SETBP1.0

RET

读温度程序:

GET:

SETBP1.0

LCALLINIT_1820;先复位DS18B20

JB70H,TSS2

RET;若DS18B20不存在则返回

TSS2:

MOVA,#0CCH;先复位DS18B20

LCALLWRITE_1820

MOVA,#44H;发出温度转换命令

LCALLWRITE_1820

MOV66H,#2

TSS3:

MOV67H,#250;等待A/D转换结束.12位750ms

TSS4:

DEC67H

LCALLDISPLAY

MOVA,67H

JNZTSS4

DEC66H

MOVA,66H

JNZTSS3

LCALLINIT_1820;准备读温度前先复位

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#0BEH;读温度命令

LCALLWRITE_1820

LCALLREAD_1820;将读出的温度数据保存到RAM

RET

READ_1820:

MOVR4,#2;将温度高位和低位从DS18B20中读出

MOVR1.#56H;低位存人56H(TEMPER_L)

RE00:

MOVR2.#8

RE01:

CLRC

SETBP1.0

NOP

NOP

CLRP1.0

NOP

NOP

NOP

SETBP1.0

MOVR3,#5

RE10:

DJNZR3,RE10

MOVC,P1.0

MOVR3,#23

RE20:

DJNZR3,RE20

RRCA

DJNZR2,RE01

MOV@R1,A

DECR1

DJNZR4,RE00

RET

写程序:

WRITE_1820:

MOVR2,#8;写DS18B20的子程序(有具体的时序要求)

CLRC

WR1:

CLRP1.0

WR2:

MOVR3,#5

DJNZR3,WR2

RRCA

MOVP1.0,C

MOVR3,#23

WR3:

DJNZR3,WR3

SETBP1.0

NOP

DJNZR2,WR1

SETBP1.0

RET

(2)24C02存(写)/取(读)数据子程序

由图6可得24C02(256X8)E2PROM与AT89C51通过P1.0与24C02的SDA端相接作为数据输入/输出线,P1.1与24C02的SCL端相连,作为时钟输入线,24C02与CPU之间数据的存/取操作有严格的时序关系,分为写时序,读时序,本程序中以标号EEPW表示写数据程序段并设置R1作为内存地址,R2作为写入字节数,R3作为24C02的起始地址,以标号EEPR表示读数据程序段并设置R1作为内存地址,R2作为读出数据的字节数,R3作为24C02中被读取数据的首地址。

读/写程序流程框图如图10所示。

图6-45读/写程序流程框图

24C02E2PROM子程序:

EEPR:

MOVA,#0A0H;24C02写程序

CLRP1.0;把24C02中以R2为数长度,以R3为首地址的数读到

CLRP1.1;以R1位首地址的内存单元中

ACALLDD

MOVA,R3

ACALLDD

CLR.P1.1

CLR.P1.0

CPLP1.1

CPLP1.0

MOVA,#0A1H

CLRP1.0

CLRP1.1

ACALLDD

MOVR0,#08H;按位从24C02中读出

SETBP1.0

ER0:

NOP

NOP

CPLP1.1

NOP

MOVC,P1.0

RLCA

CLRP1.1

NOP

DJNZR0,ER0

MOV@R1,A

SETBP1.0

CPLP1.1

CPLP1.0

SETBP1.1

SETBP1.0

INCR1

INCR2

DJNZR2,EEPR

RET

EEPW:

MOVR4,#05H

MOVA,#0A0H

CLRP1.0

CLRP1.1

ACALLDD

MOVA,R3

ACALLDD

MOVA,@R1

ACALLDD

CLRP1.1

CLRP1.0

CPLP1.1

CPLP1.0

INCR1

INCR3

ACALLDEL10ms

DJNZR2,EEPW

RET

DEL10ms:

MOVR6,#10

DD10:

LCALLDISPLAY

DJNZR6,DD10

RET

DD:

MOVR0,#08H

D3:

MOVR4,#05H

RLCA

MOVP1.0,C

CPLPl.1

D4:

DJNZR4,D4

CLRPl.1

DJNZR0,D3

SETBP1.0

CPLPl.1

SETBPl.1

CPLPl.1

RET

END

4)A/D、D/A转换子程序

当键盘扫描查到A/D键闭合,即跳转到A/D、D/A转换子程序。

本程序用以调试系统中A/D、D/A工作的正确性。

把输入模拟量VX经A/D转换成数字量,并直接通过D/A转换成输出模拟量信号送示波器输入端,即可看到转换的真实性,并将结果送显示器显示及存入E2PROM。

A/D、D/A转换子程序流程图如图11所示。

图6-46A/DD/A转换程序图

A/DD/A转换子程序

ADC:

MOVR3,#00H;设置E2PROM首地址

MOVR6,#40H

ADC0:

MOVR7,#07H

CLRP1.1

CLRP1.2;启动A/D

MOVC,P1.0

CPLP1.1

RLCA

GET_7Bit:

CPLP1.1

MOVC,P1.0

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

当前位置:首页 > 外语学习 > 英语考试

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

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