智能传感器课程设计.doc

上传人:文库蛋蛋多 文档编号:2390771 上传时间:2023-02-17 格式:DOC 页数:13 大小:94KB
返回 下载 相关 举报
智能传感器课程设计.doc_第1页
第1页 / 共13页
智能传感器课程设计.doc_第2页
第2页 / 共13页
智能传感器课程设计.doc_第3页
第3页 / 共13页
智能传感器课程设计.doc_第4页
第4页 / 共13页
智能传感器课程设计.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《智能传感器课程设计.doc》由会员分享,可在线阅读,更多相关《智能传感器课程设计.doc(13页珍藏版)》请在三一办公上搜索。

1、题目:智能传感器设计1 设计要求发送方的ADC模块能够随时动态采集模拟电压的变化,即使用A/D转换芯片TLC549CP对模拟电压进行数字转换,并将转换结果处理为三位十进制数(000-255)通过ZLG7290B进行显示;可设定上限报警;且报警值可用键盘修改,修改报警值时,修改位闪烁,且显示上一次的报警值并保存。2 设计分析及系统方案设计这是一个利用具有数据滤波功能的ADC转换程序,使用8位TLC549芯片、蜂鸣器等,将采集出来的数据转换成三位十进制数稳定输出,并通过ZLG7290B显示的程序。其中,设定上限报警值,即通过改变模拟电压输入,达到上限值后响铃报警,且可修改上限报警值。首先是主程序,

2、开中断并进行7290复位,设定初始报警值100,建立显示缓冲区(40H-47H)并显示”adc=”,采集TLC549的N个数据并存放于20H开始的单元中,调ADJUST进行数据滤波,结果存于A中;调ALARM进行报警判断:若大于设定报警值,则蜂鸣器响;调BCD_CONT,将A中的数据拆分、查表并送显示缓冲区的低两位,以备显示用;调WRNBYT,将显示缓冲区中的数据写入7290B,以十进制的方式显示ADC的结果;调延时子程序。子程序主要有利用蜂鸣器报警、采集N个数据、数据滤波、二进制转换成十进制并显示(其中包括拆分);还有一个中断程序,由硬件INT_0控制,通过键值的修改实现对报警值的调整。当按

3、“E”时,进入报警值修改,数码管显示当前报警值并闪烁;继续按百位、十位、个位输入修改值,每输入一位,该位不闪烁,输入结束,将显示在数码管后三位,再按“F”即返回原模拟量对应值,且报警值已修改。另外加有容错功能,即当输入值大于255时,直接默认将报警值修改为2553系统电路图AT89C51 P1.0 P1.1 P1.7(/INT0) P3.2 P1.2P1.3P1.4P1.5ZLG7290BSDASCK/RST/INT_KEYTLC549VccREF+CLK ANINDAT REF-/CS GND10K855047K103BUZZIC总线REF+ JK158 VCC VCCANIN JK159W

4、2BUZZJK624 外围接口模块硬件电路功能描述(1)ZLG7290:数码管动态显示驱动,键盘扫描管理芯片(2)TCL549CP:CMOS 8位A/D转换器(3) 蜂鸣器:利用定时/计数器输出一个特定频率的方波并驱动蜂鸣器发声5 主程序中主要变量定义变量名称RAM单元/寄存器功能ADDR20H数据缓冲区首地址/60H存放报警值DISDA40H显示个位DISDA+141H显示十位DISDA+242H显示百位DISDA+343H无显示DISDA+444H显示符号“=”DISDA+545H显示符号“c”DISDA+646H显示符号“d”DISDA+747H显示符号“a”6系统软件中各个子程序的功能

5、描述子程序名称入口参数出口参数功能 描述ALARM/P1.5实现报警响铃TLC549累加器A20H-2FH连续采集32次数据ADJUST20H-2FH累加器A数据滤波BCD_CONT累加器AR3转换成十进制数TLC549_ADCP1.3累加器AA/D转换RDKEY1FH累加器A获取到的键值CF累加器AR3将数据拆分为两个独立的BCD码并查表DELAY/延时FLASH1/后三位闪烁FLASH2/后两位闪烁FLASH3/后一位闪烁FLASH4/后三位不闪烁7主程序及中断程序流程图主程序入口开中断7290复位初始化报警值,建立显示缓冲区,显示“adc=”采集32次A/D转换数据数据滤波,取平均值调A

6、LARM子程序转化为十进制7290数字显示转换值调延时子程序YYYNNNNYYNYN查询按键?7290数字显示报警值数码管后三位闪烁E键?读取键值中断程序入口查询按键?RETIF键?查询按键?读取键值,查表,7290显示个位数码管不闪烁输入数据与R5、R6相加存于A中,并将A中值赋给60H输入数据*10,存于R6中读取键值,查表,7290显示十位数码管最后一位闪烁输入数据*100,存于R5中读取键值,查表,7290显示百位数码管后两位闪烁查询按键?8程序清单SDABITP1.0 ;7290B的引脚定义 SCLBITP1.1 WSLAEQU070HRSLAEQU071HDATBITP1.3 ;T

7、LC549PC引脚定义CLKBITP1.2CSBITP1.4CUNTEQU20H ;每次ADC采集数据个数SHIFTEQU05H;除数(与采集数据个数有关)ADDREQU20H ;数据缓冲区首地址DISDAEQU40H ;显示缓冲区DISCUNTEQU08H;显示缓冲区长度;#ORG8000HLJMP8100HORG8003HLJMPINT_7290;# ;主 程 序 ;(7290复位、显示缓冲区初始化、连续采集N个数据、数据滤波) ;(十进制调整/拆分/查表/送显示缓冲区,7290数码显示);#ORG8100HSTART:MOVSP,#60HSETBEA;开中断SETBEX0SETBIT0C

8、LRP1.7 ;7290复位LCALLDELAYSETBP1.7MOV60H,#64H;初始化报警值为100,放入60H地址中;显示缓冲区处理,显示 adc = MOVDISDA+7,#0EEH ;a字形MOVDISDA+6,#7AH ;d字形MOVDISDA+5,#1AH ;c字形MOVDISDA+4,#00H ;熄灭MOVDISDA+3,#12H ;LOOP:LCALLTLC549 ;采集N个ADC数据(20H单元) LCALLADJUST ;数据滤波(屏蔽以观察滤波效果) LCALLALARM;调报警子程序LCALLBCD_CONT ;转换为十进制数MOVR7,#DISCUNTMOVR0

9、,#DISDAMOVR2,#10HMOVR3,#WSLALCALLWRNBYT ;7290数字显示LCALLDELAYSJMPLOOP;#;利用蜂鸣器实现报警;#ALARM:PUSH00HMOVR0,#40H;蜂鸣器频率MOVTMOD,#10H;工作方式1MOVTL1,#33H;写入计数初值MOVTH1,#0FEHCJNEA,60H,NEXT;判断A与60H中数相减,无借位执行NEXTNEXT:JNCLOOP1;cy=0,执行Loop1SJMPNEXT1LOOP1:SETBTR1JNBTF1,$CLRTF1;清标志位MOVTL1,#33H;重装初值MOVTH1,#0FEHCPLP1.5;取反D

10、JNZR0,LOOP1;循环R0次跳出NEXT1:POP00HRET;#; 各子程序;#TLC549:PUSH00H ;连续采集32次数据PUSH07H ;存放于20H-2FH中MOVR7,#CUNTMOVR0,#ADDRLOOP2:LCALLTLC549_ADC ;A/D转换MOVR0,AINCR0DJNZR7,LOOP2POP07HPOP00HRET ;#ADJUST:PUSH00H ;将20H开始的CUNT个数据PUSH02H ;求平均值PUSH03H ;结果于A中PUSH07HMOVR7,#CUNTMOVR0,#ADDRCLRAMOVR2,ALOOP3:CLRC;累加ADDC A,R0

11、JNCLOOP4;没有进位跳至LOOP4INCR2;R2中存进位LOOP4:INCR0DJNZR7,LOOP3MOVR3,AMOVA,R2 ;除以数据个数CUNTMOVR7,#SHIFTLOOP5:CLRCMOVA,R2RRCAMOVR2,AMOVA,R3RRCAMOVR3,ADJNZR7,LOOP5POP07HPOP03HPOP02HPOP00HRET ;#TLC549_ADC:;A/D转换PUSH07HCLRACLRCLKMOVR7,#08HCLRCSLOOP6:SETBCLKNOPNOPNOPNOPMOVC,DATRLCACLRCLKNOPNOPDJNZR7, LOOP6SETBCSSE

12、TBCLKPOP07HRET ;#BCD_CONT: PUSH07HPUSH06HPUSH05HPUSH02HMOVB,#64HDIVABMOVR7,A ;R7中得百位数MOVR2,B;R2中得余数MOVA,R2MOVB,#0AHDIVABMOVR6,A;R6中得十位数MOVR5,B;R5中得个位数MOVA,R7LCALLCF;调拆分子程序(入口A出口R4,R3-字形码)MOVDISDA+2,R3;高位R4无用MOVA,R6LCALLCF;调拆分子程序(入口A出口R4,R3-字形码)MOVDISDA+1,R3MOVA,R5LCALLCF;调拆分子程序(入口A出口R4,R3-字形码)MOVDIS

13、DA+0,R3POP02HPOP05HPOP06HPOP07HRET ;#CF:PUSH02H ;将A中的数据拆分为两个独立的BCD码并查表PUSHDPHPUSHDPLMOVDPTR,#LEDSEGMOVR2,AANLA,#0FHMOVCA,A+DPTRMOVR3,AMOVA,R2SWAPAANLA,#0FHMOVCA,A+DPTRMOVR4,APOPDPLPOPDPHPOP02HRET ;#DELAY:PUSH00HPUSH01HMOVR0,#00HDELAY1:MOVR1,#01HDJNZR1,$DJNZR0,DELAY1POP01HPOP00HRETLEDSEG:DB0FCH,60H,0

14、DAH,0F2H,66H,0B6H,0BEH,0E4HDB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH RET;#INT_7290:PUSH00HPUSH 01HPUSH02HPUSH03HPUSH04HPUSH05HPUSH06HPUSH07HPUSHACCPUSHPSWLCALLRDKEY;读取第一个按键值(功能键)CJNEA,#0EH,DOWN1 ;判断是E键吗?不是返回SJMP UP;是E键时开始处理百位DOWN1:AJMPDOWNUP:MOV A,60H;显示60H中的数LCALLBCD_CONT;即前一次设定的报警值MOVR7,#03H;闪烁显示MOVR0,

15、#40HMOVR2,#10HMOVR3,#WSLALCALLWRNBYTLCALLDELAYLCALLFLASH1JBP3.2,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第二个按键值(百位)MOVR1,AMOVDPTR,#LEDSEGMOVCA,A+DPTRMOV42H,AMOVR7,#01HMOVR0,#42HMOVR2,#12HMOVR3,#WSLA;闪烁LCALLWRNBYT ;7290数字显示百位LCALLDELAYLCALLFLASH2MOVA,R1MOVB,#64H;处理输入的数据*100MULABMOVR5,A;0-255之间的数,取低位即可JBP3.2,$;以

16、查询的方式等待下一次按键操作LCALLRDKEY;读取第三个按键值(十位)MOVR1,AMOVCA,A+DPTRMOV41H,AMOVR7,#01HMOVR0,#41HMOVR2,#11HMOVR3,#WSLALCALLWRNBYT ;7290数字显示LCALLDELAYLCALLFLASH3;闪烁MOVA,R1MOVB,#0AH;处理输入的数据*10MULABMOVR6,A;取低位JBP3.2,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第四个按键值(个位)MOVR1,AMOVCA,A+DPTRMOV40H,AMOVR7,#01HMOVR0,#40HMOVR2,#10HMOV

17、R3,#WSLALCALLWRNBYT ;7290数字显示LCALLDELAYLCALLFLASH4;不闪烁MOVA,R1ADDA,R5;处理输入的数据,全部相加ADDA,R6MOV60H,A;A赋值给60HJBP3.2,$;以查询的方式等待下一次按键操作LCALLRDKEY;读取第五个按键值(功能键)CJNEA,#0FH,$;判断是F键吗?不是等待DOWN:CLRIE0;清标志POPPSWPOPACCPOP07HPOP06HPOP05HPOP04HPOP03HPOP02HPOP01HPOP00HRETIFLASH1:MOV 48H,#70H ;后三位闪烁 MOV49H,#07HMOV50H,

18、#00HMOVR7,#02HMOV R0,#48HMOVR2,#07HMOVR3,#WSLALCALLWRNBYT MOVR7,#01HMOVR0,#50HMOVR2,#0CHMOVR3,#WSLALCALLWRNBYTRETFLASH2:MOV 48H,#70H ;后两位闪烁 MOV49H,#03HMOV50H,#00HMOVR7,#02HMOV R0,#48HMOVR2,#07HMOVR3,#WSLALCALLWRNBYT MOVR7,#01HMOVR0,#50HMOVR2,#0CHMOVR3,#WSLALCALLWRNBYTRETFLASH3:MOV 48H,#70H ;最后一位闪烁 M

19、OV49H,#01HMOV50H,#00HMOVR7,#02HMOV R0,#48HMOVR2,#07HMOVR3,#WSLALCALLWRNBYT MOVR7,#01HMOVR0,#50HMOVR2,#0CHMOVR3,#WSLALCALLWRNBYTRETFLASH4:MOV 48H,#70H ;不闪烁 MOV49H,#00HMOV50H,#00HMOVR7,#02HMOV R0,#48HMOVR2,#07HMOVR3,#WSLALCALLWRNBYT MOVR7,#01HMOVR0,#50HMOVR2,#0CHMOVR3,#WSLALCALLWRNBYTRET;*;读键值子程序 (;出口

20、参数累加器A-获取到的键值) ;*RDKEY:MOVR0,#1FH;键值缓冲单元MOVR7,#01H;取一个数据(键值)MOVR2,#01H ;指向内部数据键值寄存器地址MOVR3,#WSLA;取器件地址(写)MOVR4,#RSLA;取器件地址(读) LCALLRDADD;读出7290的01H单元中的键值MOVA,1FH;取健值送缓冲单元DECARET;*;相关I2C子程序;*END9系统调试运行结果说明、分析所出现得问题,设计体会与建议以AT89C51为核心、利用DP-51PROC单片机综合仿真实验仪、采用“在线仿真、调试”的模式实现上述功能;软件环境为Keil uVision2;设计语言为汇编语言。实验结果为,当进入调试环境,数码管显示“adc=*”(*即0-255之间的数),通过旋转电位器,即可改变电压值,显示也随之改变;当模拟量大于100时,蜂鸣器报警;按键盘区S15(E)功能键进入键值修改,数码管后三位闪烁显示当前报警值,按顺序按下三个键值,每按一位数码管对应显示,全部按完,按S16(F)键,即修改成功,并回显之前的模拟量,此时键值已经改变。调试结果正常,与设计方案一致。

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号