智能传感器课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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