题目:智能传感器设计
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
系统电路图 AT89C51 P1.0 P1.1 P1.7 (/INT0) P3.2 I2C总线 ZLG7290B SDA SCK /RST /INT_KEY VCC REF+ JK158 VCC P1.2 P1.3 P1.4
TLC549 Vcc REF+ DAT /CS REF- ANIN JK159 ANIN CLK GND W2 P1.5 10K 8550 47K BUZZ BUZZ JK62 103 4 外围接口模块硬件电路功能描述
(1)ZLG7290:数码管动态显示驱动,键盘扫描管理芯片 (2)TCL549CP:CMOS 8位A/D转换器
(3) 蜂鸣器:利用定时/计数器输出一个特定频率的方波并驱动蜂鸣器发声 5 主程序中主要变量定义 变量名称 ADDR / DISDA DISDA+1 DISDA+2 DISDA+3 DISDA+4 DISDA+5 DISDA+6 RAM单元/寄存器 20H 60H 40H 41H 42H 43H 44H 45H 46H 功能 数据缓冲区首地址 存放报警值 显示个位 显示十位 显示百位 无显示 显示符号“=” 显示符号“c” 显示符号“d” DISDA+7 47H 显示符号“a” 出口参数 P1.5 20H-2FH 累加器A R3 累加器A 累加器A R3 / / / / / 功能 描述 实现报警响铃 连续采集32次数据 数据滤波 转换成十进制数 A/D转换 获取到的键值 将数据拆分为两个独立的BCD码并查表 延时 后三位闪烁 后两位闪烁 后一位闪烁 后三位不闪烁 6 系统软件中各个子程序的功能描述 子程序名称 ALARM TLC549 ADJUST BCD_CONT TLC549_ADC RDKEY CF 入口参数 / 累加器A 20H-2FH 累加器A P1.3 1FH 累加器A / / / / / DELAY FLASH1 FLASH2 FLASH3 FLASH4 7 主程序及中断程序流程图
调延时子程序 7290数字显示转换值 转化为十进制 调ALARM子程序 数据滤波,取平均值 7290复位 初始化报警值,建立显示缓冲区,显示“adc=” 采集32次A/D转换数据 开中断 主程序入口 中断程序入口
Y RETI N N 查询按键? Y F键? 数码管不闪烁 输入数据与R5、R6相加存于A中,并将A中值赋给60H N 查询按键? Y 读取键值,查表,7290显示个位 输入数据*10,存于R6中 数码管后两位闪烁 输入数据*100,存于R5中 N N 数码管后三位闪烁 E键? Y 7290数字显示报警值 N 读取键值 查询按键? Y 读取键值,查表,7290显示百位 查询按键? Y 读取键值,查表,7290显示十位 数码管最后一位闪烁 8 程序清单
SDA SCL WSLA RSLA DAT CLK CS CUNT SHIFT ADDR DISDA BIT BIT EQU EQU BIT BIT BIT EQU EQU EQU EQU P1.0 P1.1 070H 071H P1.3 P1.2 P1.4 20H 05H
;每次ADC采集数据个数 ;除数(与采集数据个数有关) ;TLC549PC引脚定义 ;7290B的引脚定义
20H ;数据缓冲区首地址 40H ;显示缓冲区 DISCUNT EQU 08H ;显示缓冲区长度
;########################################################## ORG 8000H LJMP 8100H ORG 8003H LJMP INT_7290
;########################################################## ;主 程 序 ;(7290复位、显示缓冲区初始化、连续采集N个数据、数据滤波) ;(十进制调整/拆分/查表/送显示缓冲区,7290数码显示)
;########################################################## ORG 8100H START: MOV SP,#60H
SETB SETB SETB CLR LCALL SETB MOV MOV MOV MOV MOV MOV LCALL LCALL LCALL LCALL MOV MOV
EA EX0 IT0 P1.7 DELAY P1.7 60H,#64H
;7290复位 ;开中断
;初始化报警值为100,放入60H地址中
;显示缓冲区处理,显示\\ \\DISDA+7,#0EEH ;a字形 DISDA+6,#7AH ;d字形 DISDA+5,#1AH ;c字形 DISDA+4,#00H ;熄灭 DISDA+3,#12H ;\\=\\
TLC549 ;采集N个ADC数据(20H单元)
ADJUST ;数据滤波(屏蔽以观察滤波效果) ALARM
;调报警子程序
BCD_CONT ;转换为十进制数 R7,#DISCUNT R0,#DISDA LOOP:
感谢您的阅读,祝您生活愉快。
因篇幅问题不能全部显示,请点此查看更多更全内容