《单片机技术及应用项目化教程》课件第6章_第1页
《单片机技术及应用项目化教程》课件第6章_第2页
《单片机技术及应用项目化教程》课件第6章_第3页
《单片机技术及应用项目化教程》课件第6章_第4页
《单片机技术及应用项目化教程》课件第6章_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目六综合应用项目

任务1远程报警装置的设计任务2出租车计费器的设计任务1远程报警装置的设计

知识目标:了解和掌握单片机的外围基本芯片的搭接方法,掌握DS18B20温度模块、数据处理模块及显示模块的设计方法。

能力目标:掌握DS18B20的搭建方式、通信过程和LCD显示模块的设计方法。

1.任务要求

(1)以MCS-51系列单片机为核心器件,组成一个远程报警装置。

(2)本装置的温度范围为 -20℃~70℃。

(3)温度用LCD显示,至少能够显示一位小数。

(4)能设定报警温度。

2.硬件设计

本设计主要有DS18B20芯片、LCD显示模块及报警用的蜂鸣器,其硬件总体设计如图6-1所示。

3.主程序流程图

主程序流程图如图6-2所示。图6-1硬件总体设计图6-2主程序流程图

4.主程序设计

程序清单如下:

LED_0 EQU 30H

LED_1 EQU 31H

LED_2 EQU 32H

ADC EQU 35H

TCNTA EQU 36H

TCNTB EQU 37H

H_TEMP EQU 46H ;温度上限

L_TEMP EQU -14H ;温度下限

FLAG BIT 00H

H_ALM BIT P3.0

L_ALM BIT P3.1

SOUND BIT P3.7

CLOCK BIT P2.4

ST BIT P2.5

EOC BIT P2.6

OE BIT P2.7

ORG 00H

SJMP START

ORG 0BH

LJMP INT_T0

ORG 1BH

LJMP INT_T1

START: MOV LED_0, #00H

MOV LED_1, #00H

MOV LED_2, #00H

MOV DPTR, #TABLE

MOV H_TEMP, #60

MOV L_TEMP, #30

MOV TMOD, #12H

MOV TH0, #245

MOV TL0, #0

MOV TH1, #(65536-1000)/256

MOV TL1, #(65536-1000)%256

MOV IE, #8aH

CLR C

SETB TR0 ;为ADC0808提供时钟

WAIT: SETB H_ALM

SETB L_ALM

CLR ST

SETB ST

CLR ST ;启动转换

JNB EOC,$

SETB OE

MOV ADC,P1 ;读取A/D转换结果

CLR OE

MOV A,ADC

SUBB A,#30 ;判断是否低于下限

JC LALM

MOV A,H_TEMP

MOV R0,ADC

SUBB A,R0 ;判断是否高于上限

JC HALM

CLR TR1

LJMP PTOC

LALM: ;低温报警

CLR L_ALM

SETB TR1

CLR FLAG

LJMP PTOC

HALM: ;高温报警

CLR H_ALM

SETB TR1

SETB FLAG

LJMP PtOC

PTOC: MOV A,ADC ;数值转换

MOV B,#100

DIV AB

MOV LED_2,A

MOV A,B

MOV B,#10

DIV AB

MOV LED_1,A

MOV LED_0,B

LCALL DISP

SJMP WAIT

INT_T0: CPL CLOCK ;提供89C51时钟

RETI

INT_T1: MOV TH1,#(65536-1000)/256

MOV TL1,#(65536-1000)%256

CPL SOUND

INC TCNTA

MOV A,TCNTA

JB FLAG,I1 ;判断是高温警报还是低温警报

CJNE A,#30,RETUNE ;低温警报声

SJMP I2

I1: CJNE A,#20,RETUNE ;高温警报声

I2: MOV TCNTA,#0

INC TCNTB

MOV A,TCNTB

CJNE A,#25,RETUNE

MOV TCNTA,#0

MOV TCNTB,#0

LCALL DELAY2

RETUNE: RETI

DISP: MOV A,LED_0 ;数码显示子程序

MOVC A,@A+DPTR

CLR P2.3

MOV P0,A

LCALL DELAY

SETB P2.3

MOV A,LED_1

MOVC A,@A+DPTR

CLR P2.2

MOV P0,A

LCALL DELAY

SETB P2.2

MOV A,LED_2

MOVC A,@A+DPTR

CLR P2.1

MOV P0,A

LCALL DELAY

SETB P2.1

RET

DELAY: MOV R6,#10

D1: MOV R7,#250

DJNZ R7,$

DJNZ R6,D1

RET

DELAY2: MOV R5,#20

D2: MOV R6,#20

D3: MOV R7,#250

DJNZ R7,$

DJNZ R6,D3

DJNZ R5,D2

RET

TABLE: DB3FH,06H,5BH,4FH,66H

DB6DH,7DH,07H,7FH,FH

END

5.知识链接

1)

DS18B20原理及引脚介绍

DS18B20数字温度计是DALLAS公司生产的1-Wire(即单总线器件),具有线路简单、体积小的特点。因此,用它来组成一个测温系统,线路简单,并且在一根通信线上,可以挂很多这样的数字温度计,十分方便。DS18B20产品的特点如下:

(1)只要求一个端口即可实现通信。

(2)在DS18B20中的每个器件上都有独一无二的序列号。

(3)实际应用中不需要外部任何元器件即可实现测温。

(4)测量温度范围为-55℃~+125℃。

(5)数字温度计的分辨率用户可以从9位到12位选择。

(6)内部有温度上、下限告警设置。

DS18B20的引脚功能描述如下:

(1) GND—地信号。

(2) DQ—数据输入/输出引脚。开漏极单总线接口引脚。当工作于寄生电源时,也可以向器件提供电源。

(3) VDD—电源引脚。当工作于寄生电源时,此引脚必须接地。

2) DS18B20控制命令

DS18B20的ROM命令如表6-1所示。

DS18B20存储控制命令如表6-2所示。

表6-1DS18B20的ROM命令

表6-2DS18B20存储控制命令

DS18B20程序如下:

WENDU_L EQU29H ;用于保存读出温度的低字节

WENDU_H EQU28H ;用于保存读出温度的高字节

XIAOSHU EQU27H ;用于保存温度的小数部分

ZHENGSHU EQU26H ;用于保存整数部分

BIAOZHI BIT50H ;DS18B20检查位:1为存在,0为不存在

ORG

0000H

AJMP MAIN

ORG 0030H

MAIN: MOV SCON,#00H

ACALL DUWEN

ACALL ZHENGHE

ACALL BCD

ACALL DISP

ACALL TIME1

AJMP MAIN

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;读温度子程序

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

DUWEN: SETBP2.0

ACALLFUWEI

;读温度之前必须先复位

JBBIAOZHI,CUNZAI ;查看标志位看DS18B20是否存在,1为存在,0为不存在

RET

;不存在则返回

CUNZAI:

;存在则开始读温度

MOV A,#0CCH

;跳过ROM匹配

ACALL XIE

;调写子程序

MOV A,#44H

;发出温度转换命令

ACALL XIE

;调写子程序

ACALL TIME1

;调1秒延时,等A/D转换完成,现在分辨率为12位,

;温度最大转换时间为750ms

ACALL FUWEI

;读温前需要复位

MOV A,#0CCH

;跳过ROM匹配

ACALL XIE

MOV A,#0BEH

;发读温度命令

ACALL XIE

ACALL DUSHU

;将输出数据读回

CLR P1.2

RET

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;复位子程序

;DS18B20复位需要将数据位拉低500μs

;DS18B20收到信号后要等待16~60μs,然后发出60~240μs的低脉冲

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

FUWEI: SETB P2.0

NOP

CLR P2.0

MOV R0,#3

INTE: MOV R1,#107

;设一个537μs延时

KK1: DJNZ R1,KK1

DJNZ R0,INTE

SETB P2.0

;拉高数据线,等待回应

NOP

NOP

NOP

MOV R0,#25

INTE1: JNB P2.0,INTE2 ;延时50μs等待DS18B20回应,若返回低脉冲则

;说明DS18B20存在

DJNZ R0,INTE1

AJMP INTE3

;经过反应时间而未检测到DS18B20的存在,

;则跳转去清零标志位

INTE2: SETB BIAOZHI

;检测到DS18B20存在,标志位置1

CLR P1.0

AJMP INTE4

INTE3: CLR BIAOZHI

;未检测到DS18B20,标志位清零

AJMP INTE5

INTE4: MOV R0,#120

;延时240μs,确定回应信号已发完

KK:

DJNZ R0,KK

INTE5: SETB P2.0

RET

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;写DS18B20子程序

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

XIE: MOV R2,#8

;写计数寄存器,一共有8位数据

CLR C

LP: CLR P2.0

MOV R3,#6

;设一个延时

LL1: DJNZ R3,LL1

RRC A

;右循环,先输出低位

MOV P2.0,C

MOV R3,#23

;设延时

LL: DJNZ R3,LL

SETB P2.0

NOP

NOP

DJNZ R2,LP

;判断是否完成数据传送

SETB P2.0

;完成传送,拉高数据位

RET

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;从DS18B20中读出温度数据子程序

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

DUSHU: MOV R4,#2

;设读回数据个数指针

MOV R1,#WENDU_L

;把温度数据低位存入29H

RE: MOV R2,#8

;设数据长度指针

RE1:

CLR

C

SETB P2.0

NOP

NOP

CLR P2.0

NOP

NOP

NOP

SETB P2.0

MOV R3,#9

DJNZ R3,$

MOV C,P2.0

MOV R3,#23

NN:

DJNZ R3,NN

RRC

A

DJNZ R2,RE1

MOV @R1,A

DEC R1

;高位存入28H

DJNZ R4,RE

RET

;-----------------------------------------------------------------------

------------------------------------------------------------------------

;数据整合子程序

;温度源数据的整合,读出数据的高字节的低四位决定温度的整数部分

;低字节的低四位决定小数部分

;------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

ZHENGHE:

MOV A,#0FH

ANL A,WENDU_L

;低字节的低四位就是小数部分

MOV XIAOSHU,A

;获得小数部分

MOV A,WENDU_L

;将高字节的低四位移入低字节的高四位

MOV C,40H

;获得的新字节就是整数部分的数据

RRC A

MOV C,41H

RRC A

MOV C,42H

RRC A

MOV C,43H

RRC A

MOV ZHENGSHU,A

RET

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;显示数据拆解程序、显示程序、延时程序

;---------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------

;数据拆解程序

BCD:

MOV A,ZHENGSHU

MOV B,#10

DIV AB

MOV 50H,A

MOV 51H,B

MOV A,XIAOSHU

MOV R0,#52H

MOV R2,#4

D0: MOV B,#10

MUL AB

MOV B,#16

DIV AB

MOV @R0,A

INC R0

MOV A,B

DJNZ R2,D0

RET

;-----------------------------------

;显示程序

;----------------------------------

DISP:

ACALL TIME

MOV R7,#6

MOV DPTR,#TAB

MOV R0,#55H

LP1: MOV A,@R0;

MOVC A,@A+DPTR

CJNE R7,#2,NE1

ANL A,#07FH

NE1: MOV SBUF,A

JNB TI,$

CLR TI

DEC R0

DJNZ R7,LP1

RET

;----------------------------------------

;延时程序

;----------------------------------------

TIME1: MOV R6,#4

LOOP2: MOV R5,#250

LOOP1: ACALL D1MS

DJNZ R5,LOOP1

DJNZ R6,LOOP2

RET

TIME: MOV R6,#200

LOOP3: ACALL D1MS

DJNZ R6,LOOP3

RET

D1MS: MOV R7,#250

LOOP0: NOP

NOP

NOP

DJNZR7,LOOP0

RET

TAB: DB0C0H,0F9H,0A4H,0B0H

DB99H,92H,82H,0F8H

DB80H,90H,88H,83H

DB0C6H,0A1H,86H,8EH

DB0FFH

END任务2出租车计费器的设计

知识目标:了解应用单片机的定时/计数器以及中断。

能力目标:会使用定时/计数器和中断系统。

1.任务要求

本系统假设速度恒定60km/h(1km/min),单价一定1.2元/km,起步价6.0元,超过三公里开始计费,每公里加1.2元。由于速度恒定,所以计算的核心是时间。时间单元由单片机的定时/计数器来计算,延时1ms时间的初值由程序来设定。算法公式是:

费用 = 起步价 + (路程-3) × 1.2

路程 = 速度 × 时间(速度恒定,60km/h,也就是1km/min)

若路程小于等于3,则收起步价6元,否则按费用公式计算。

2.硬件电路的设计与制作(应用Proteus画电路原理图)

1)整体硬件电路图

整体硬件电路图如图6-3所示。图6-3硬件电路图由图6-3我们可以清楚地看到,本电路控制核心是AT89C51芯片。该方案采用动态显示的方法。P0口作为数据总线口,分别把数据输送到4个74LS273地址锁存器中,而锁存器的工作需要等待脉冲的到来。脉冲通过写地址端口P3.6和端口P2.0~P2.3并经过或非门来产生。只有把数据送到外部接口时,P3.6口才为低电平,P2.0~P2.3用来控制到底是把数据送往哪一个锁存器。

3.应用程序设计

1)程序流程图的设计

该计费器系统的软件设计分为主程序模块和显示子程序模块。

(1)主程序模块。在主程序模块中,需要完成对各接口芯片的初始化、出租车起步价和单价、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中,还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。其流程图如图6-4所示。图6-4软件设计流程图当按下轻触开关时,开始对系统初始化,价格和时间都显示0,再次按下开关后,时间单元开始计时,并计算时间是否超过3分钟,超过3分钟,则从第4分钟开始计费。价格单元从起步价6.0元开始计费,每多一分钟,价格单元多加1.2元。

(2)显示子程序模块。显示子程序由显示时间子程序DIS1和显示价格子程序DIS组成。时间由小时、分、秒三个单元组成,共六个数码管。价格由元和角两个单元组成,最大可显示999.9元。

2)程序清单及分析

ORG 0000H ;初始化段地址

LJMP MAIN ;长跳转到主函数MAIN处

ORG 000BH ;TT0开始地址

LJMP TT0 ;长跳转到TT0处

ORG 0030H ;主函数开始地址,避开00~30敏感段

MAIN: MOV SP,#40H ;设堆栈底指针,下一个数据将放在41H单元

MOV 70H,#60 ;价格单元的起步价

MOV 71H,#00 ;价格单元的十位和百位

MOV 72H,#00 ;秒单元清零

MOV 73H,#00 ;分单元清零

MOV 74H,#00 ;时单元清零

MOV 75H,#00 ;75H单元清零备用

CLR 00H

CLR 01H ;将00H、01H单元清零

MOV 6BH,#0AH ;将0AH(即十进制10)放入6B单元

MOV R1,#76H ;把76H放到R1中

KKK: MOV @R1,#00H ;将76H单元的内容清零

INC R1

DJNZ 6BH,KKK ;76H~7FH单元全部清零,备用

LCALL DIS;调用价格显示子程序

LCALL DIS1;调用时间显示子程序

MOV TMOD,#11H ;定时/计数器工作方式设置

MOV TH0,#3CH

MOV TL0,#0B0H ;这句和上一句设置延时50ms

MOV 6EH,#20 ;将6EH单元设置为20,达到1s的延时

G2: LCALL DIS;长调用价格显示子程序

LCALL DIS1;长调用时间显示子程序

JB P1.0,G2 ;开关未按下,等待按下,显示初始状态,全部为零

LCALL TIME1;调用TIME1延时子程序

JB P1.0,G2;开关未按下,跳到G2,否则转到下一步

G1: LCALL DIS

LCALL DIS1

JNB P1.0,G1;开关按下,继续显示价格和时间,并转到中断

SETB EA ;开中断

SETB ET0;定时器0中断允许,向CPU申请中断

SETB TR0 ;定时器0工作允许

SETB 01H ;01H单元置位

LLL: LCALL CHAI;调用现场保护子程序

LCALL DIS

LCALL JISUAN;调用计算子程序

LCALL DIS1

JB P1.0,G3;开关没按下,则返回

LCALL TIME1

JB P1.0,G3

CPL 01H;01H单元此时为零

JNB 01H,G5 ;01H单元内容为0,跳到G5

SETB ET0;定时器0中断允许,向CPU申请中断

G6: LCALL DIS

LCALL DIS1

JNB P1.0,G6;开关按下,显示所走的时间及费用

LJMP MAIN;重新等待下一个工作状态

G5: CLR ET0

G4: LCALL DIS

LCALL DIS1

JNB P1.0,G4

G3: LJMP LLL

TT0: CLR ET0 ;定时一秒

CLR TR0

MOV TH0,#3CH

MOV TL0,#0B0H

SETB TR0

SETB ET0

DJNZ 6EH,JJJ

LCALL ADD1

MOV 6EH,#20

JJJ: RETI

DIS: MOV 6DH,#06H ;价格显示子程序

MOV R0,#7AH

MOV 6CH,#0FEH

HHH: MOV DPTR,#0FDFFH;数据指针出口地址,低8位给P0口,高8给位P2口

MOV A,6CH

MOVX @DPTR,A

MOV A,@R0

MOV DPTR,#TAB ;查表首地址

MOVC A,@A+DPTR ;查表值送A

MOV DPTR,#0FEFFH

MOVX @DPTR,A

LCALL TIME1

MOV A,6CH

RLA

MOV 6CH,A

INC R0

DJNZ 6DH,HHH

RET

DIS1: MOV 6DH,#04H ;时间显示子程序

MOV R0,#72H

MOV 6CH,#0FEH

HHH1: MOV DPTR,#0F7FFH ;FF给P0口,F7给P1.0~P1.3口

MOV A,6CH

MOVX @DPTR,A ;将6CH的内容放到0F7FFH中

MOV A,@R0

MOV DPTR,#TAB ;查表首地址

MOVC A,@A+DPTR ;查表值送A

MOV DPTR,#0FBFFH

MOV R1,6DH

CJNE R1,#03H,K1

ORL A,#80H

K1: MOVX @DPTR,A

LCALL TIME1

MOV A,6CH

RL A

MOV 6CH,A

INC R0

DJNZ 6DH,HHH1

RET

TIME1: MOV 6AH,#0AH /*延时子程序*/

FFF: MOV 69H,#0AH

GGG: DJNZ 69H,GGG

DJNZ 6AH,FFF

RET

JISUAN:

JB 00H,K2 /*判断是否超过3公里及计算价格子程序*/

MOV A,78H

CLR C

SUBB A,#03H

MOV 73H,#06H

JC K3

SETB 00H

LJMP K3

K2: MOV R3,71H

MOV R4,70H

MOV R2,#00H

MOV R5,#00H

MOV R6,#03H

MOV R7,#0E8H

LCALL NDIV42

MOV 75H,R4

MOV A,R6

MOV R3,A

MOV A,R7

MOV R4,A

MOV R2,#00H

MOV R7,#100

LCALL NDIV31

MOV 74H,R4

MOV A,R7

MOV B,#10

DIV AB

MOV 73H,A

MOV 72H,B

K3: RET

CHAI: MOV 6FH,#03H /*保护现场子程序*/

MOV R0,#77H

MOV R1,#7AH

ZZZ: MOV A,@R0

ANL A,#0FH ;保存77H单元中的低4位

MOV @R1,A

MOV A,@R0

SWAP A

ANL A,#0FH

INC R1

MOV @R1,A

INC R0

INC R1

DJNZ 6FH,ZZZ ;循环三次

RET

ADD1: MOV A,77H /*加一子程序*/

CJNE A,#59H,L18

LJMP L19

L18: ADD A,#01H

DA A

MOV 77H,A

LJMP L24

L19: MOV 77H,#00H

JNB 00H,S1

CLR C

MOV A,70H

ADD A,#12

MOV 70H,A

MOV A,71H

ADDC A,#00H

MOV 71H,A

S1: MOV A,78H

CJNE A,#59H,L20

LJMP L21

L20: ADD A,#01H

DA A

MOV 78H,A

LJMP L24

L21: MOV 78H,#00H

MOV A,79H

CJNE A,#23H,L22

LJMP L23

L22: ADD A,#01H

DA A

MOV 79H,A

L23: MOV 79H,#00H

L24: RET

NDIV42: MOV A,R1 /*四除二子程序*/

PUSH ACC

MOV B,#00H

NDV421: MOV A,R2

CLR C

SUBB A,R7

MOV R1,A

MOV A,R5

SUBB A,R6

JC NDV422

MOV R5,A

MOV A,R1

MOV R2,A

INC B

SJMP NDV421

NDV422: PUSH B

MOV B,#10H

NDV423: CLR C

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

RLC A

MOV R2,A

XCH A,R5

RLC A

XCH A,R5

MOV F0,C

CLR C

SUBB A,R7

MOV R1,A

MOV A,R5

SUBB A,R6

JB F0,NCV424

JC NDV425

NCV424: MOV R5,A

MOV A,R1

MOV R2,A

INC R4

NDV425: DJNZ B,NDV423

POP ACC

CLR OV

JNZ NDV426

SETB OV

NDV426: XCH A,R2

MOV R7,A

MOV A,R5

MOV R6,A

POP ACC

MOV R1,A

RET

NDIV31: MOV A,R2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论