智能传感器课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:智能传感器设计

1 设计要求

发送方的ADC模块能够随时动态采集模拟电压的变化,即使用A/D转换芯片TLC549CP对模拟电压进行数字转换,并将转换结果处理为三位十进制数(000-255)通过ZLG7290B进行显示;可设定上限报警;且报警值可用键盘修改,修改报警值时,修改位闪烁,且显示上一次的报警值并保存。

2 设计分析及系统方案设计

这是一个利用具有数据滤波功能的ADC转换程序,使用8位TLC549芯片、蜂鸣器等,将采集出来的数据转换成三位十进制数稳定输出,并通过ZLG7290B 显示的程序。其中,设定上限报警值,即通过改变模拟电压输入,达到上限值后响铃报警,且可修改上限报警值。

首先是主程序,开中断并进行7290复位,设定初始报警值100,建立显示缓冲区(40H-47H)并显示”adc=”,采集TLC549的N个数据并存放于20H开始的单元中,调ADJUST进行数据滤波,结果存于A中;调ALARM进行报警判断:若大于设定报警值,则蜂鸣器响;调BCD_CONT,将A中的数据拆分、查表并送显示缓冲区的低两位,以备显示用;调WRNBYT,将显示缓冲区中的数据写入7290B,以十进制的方式显示ADC的结果;调延时子程序。

子程序主要有利用蜂鸣器报警、采集N个数据、数据滤波、二进制转换成十进制并显示(其中包括拆分);还有一个中断程序,由硬件INT_0控制,通过键值的修改实现对报警值的调整。当按“E”时,进入报警值修改,数码管显示当前报警值并闪烁;继续按百位、十位、个位输入修改值,每输入一位,该位不闪烁,输入结束,将显示在数码管后三位,再按“F”即返回原模拟量对应值,且报警值已修改。另外加有容错功能,即当输入值大于255时,直接默认将报警值修改为255

3 系统电路图

4 外围接口模块硬件电路功能描述

(1)ZLG7290:数码管动态显示驱动,键盘扫描管理芯片

(2)TCL549CP:CMOS 8位A/D转换器

(3)蜂鸣器:利用定时/计数器输出一个特定频率的方波并驱动蜂鸣器发声5 主程序中主要变量定义

6 系统软件中各个子程序的功能描述

7 主程序及中断程序流程图

8 程序清单

SDA BIT P1.0 ;7290B的引脚定义

SCL BIT P1.1

WSLA EQU 070H

RSLA EQU 071H

DAT BIT P1.3 ;TLC549PC引脚定义

CLK BIT P1.2

CS BIT P1.4

CUNT EQU 20H ;每次ADC采集数据个数

SHIFT EQU 05H ;除数(与采集数据个数有关)

ADDR EQU 20H ;数据缓冲区首地址

DISDA EQU 40H ;显示缓冲区

DISCUNT EQU 08H ;显示缓冲区长度

;########################################################## ORG 8000H

LJMP 8100H

ORG 8003H

LJMP INT_7290

;##########################################################

;主程序

;(7290复位、显示缓冲区初始化、连续采集N个数据、数据滤波)

;(十进制调整/拆分/查表/送显示缓冲区,7290数码显示)

;########################################################## ORG 8100H

START: MOV SP,#60H

SETB EA ;开中断

SETB EX0

SETB IT0

CLR P1.7 ;7290复位

LCALL DELAY

SETB P1.7

MOV 60H,#64H ;初始化报警值为100,放入60H地址中

;显示缓冲区处理,显示" adc = "

MOV DISDA+7,#0EEH ;a字形

MOV DISDA+6,#7AH ;d字形

MOV DISDA+5,#1AH ;c字形

MOV DISDA+4,#00H ;熄灭

MOV DISDA+3,#12H ;"="

LOOP: LCALL TLC549 ;采集N个ADC数据(20H单元) LCALL ADJUST ;数据滤波(屏蔽以观察滤波效果)

LCALL ALARM ;调报警子程序

LCALL BCD_CONT ;转换为十进制数

MOV R7,#DISCUNT

MOV R0,#DISDA

MOV R3,#WSLA

LCALL WRNBYT ;7290数字显示

LCALL DELAY

SJMP LOOP

;#########################################################

;利用蜂鸣器实现报警

;#########################################################

ALARM: PUSH 00H

MOV R0,#40H ;蜂鸣器频率

MOV TMOD,#10H ;工作方式1

MOV TL1,#33H ;写入计数初值

MOV TH1,#0FEH

CJNEA,60H,NEXT ;判断A与60H中数相减,无借位执行NEXT NEXT: JNC LOOP1 ;cy=0,执行Loop1

SJMP NEXT1

LOOP1: SETB TR1

JNB TF1,$

CLR TF1 ;清标志位

MOV TL1,#33H ;重装初值

MOV TH1,#0FEH

CPL P1.5 ;取反

DJNZ R0,LOOP1 ;循环R0次跳出

NEXT1: POP 00H

RET

;#########################################################

; 各子程序

;#########################################################

TLC549: PUSH 00H ;连续采集32次数据

PUSH 07H ;存放于20H-2FH中

MOV R7,#CUNT

MOV R0,#ADDR

LOOP2: LCALL TLC549_ADC ;A/D转换

MOV @R0,A

INC R0

DJNZ R7,LOOP2

POP 07H

POP 00H

RET

;############################################################ ADJUST:PUSH 00H ;将20H开始的CUNT个数据

PUSH 02H ;求平均值

PUSH 03H ;结果于A中

PUSH 07H

相关文档
最新文档