智能傳感器課程設(shè)計_第1頁
已閱讀1頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  題目:智能傳感器設(shè)計</p><p><b>  1 設(shè)計要求</b></p><p>  發(fā)送方的ADC模塊能夠隨時動態(tài)采集模擬電壓的變化,即使用A/D轉(zhuǎn)換芯片TLC549CP對模擬電壓進行數(shù)字轉(zhuǎn)換,并將轉(zhuǎn)換結(jié)果處理為三位十進制數(shù)(000-255)通過ZLG7290B進行顯示;可設(shè)定上限報警;且報警值可用鍵盤修改,修改報警值時,修改位閃爍,且顯

2、示上一次的報警值并保存。</p><p>  2 設(shè)計分析及系統(tǒng)方案設(shè)計</p><p>  這是一個利用具有數(shù)據(jù)濾波功能的ADC轉(zhuǎn)換程序,使用8位TLC549芯片、蜂鳴器等,將采集出來的數(shù)據(jù)轉(zhuǎn)換成三位十進制數(shù)穩(wěn)定輸出,并通過ZLG7290B顯示的程序。其中,設(shè)定上限報警值,即通過改變模擬電壓輸入,達到上限值后響鈴報警,且可修改上限報警值。</p><p>  首先

3、是主程序,開中斷并進行7290復(fù)位,設(shè)定初始報警值100,建立顯示緩沖區(qū)(40H-47H)并顯示”adc=”,采集TLC549的N個數(shù)據(jù)并存放于20H開始的單元中,調(diào)ADJUST進行數(shù)據(jù)濾波,結(jié)果存于A中;調(diào)ALARM進行報警判斷:若大于設(shè)定報警值,則蜂鳴器響;調(diào)BCD_CONT,將A中的數(shù)據(jù)拆分、查表并送顯示緩沖區(qū)的低兩位,以備顯示用;調(diào)WRNBYT,將顯示緩沖區(qū)中的數(shù)據(jù)寫入7290B,以十進制的方式顯示ADC的結(jié)果;調(diào)延時子程序。&

4、lt;/p><p>  子程序主要有利用蜂鳴器報警、采集N個數(shù)據(jù)、數(shù)據(jù)濾波、二進制轉(zhuǎn)換成十進制并顯示(其中包括拆分);還有一個中斷程序,由硬件INT_0控制,通過鍵值的修改實現(xiàn)對報警值的調(diào)整。當(dāng)按“E”時,進入報警值修改,數(shù)碼管顯示當(dāng)前報警值并閃爍;繼續(xù)按百位、十位、個位輸入修改值,每輸入一位,該位不閃爍,輸入結(jié)束,將顯示在數(shù)碼管后三位,再按“F”即返回原模擬量對應(yīng)值,且報警值已修改。另外加有容錯功能,即當(dāng)輸入值大于

5、255時,直接默認(rèn)將報警值修改為255</p><p><b>  3系統(tǒng)電路圖</b></p><p><b>  I²C總線</b></p><p>  REF+ JK158 VCC</p><p><b>  VCC</b></p>&

6、lt;p>  ANIN JK159</p><p><b>  W2</b></p><p><b>  BUZZ</b></p><p><b>  JK62</b></p><p>  4 外圍接口模塊硬件電路功能描述</p><p> ?。?

7、)ZLG7290:數(shù)碼管動態(tài)顯示驅(qū)動,鍵盤掃描管理芯片</p><p> ?。?)TCL549CP:CMOS 8位A/D轉(zhuǎn)換器</p><p>  (3) 蜂鳴器:利用定時/計數(shù)器輸出一個特定頻率的方波并驅(qū)動蜂鳴器發(fā)聲</p><p>  5 主程序中主要變量定義</p><p>  6系統(tǒng)軟件中各個子程序的功能描述</p>

8、<p>  7主程序及中斷程序流程圖</p><p><b>  8程序清單</b></p><p>  SDABITP1.0 ;7290B的引腳定義 </p><p>  SCLBITP1.1 </p><p>  WSLAEQU070H</p><p>

9、;  RSLAEQU071H</p><p>  DATBITP1.3 ;TLC549PC引腳定義</p><p>  CLKBITP1.2</p><p>  CSBITP1.4</p><p>  CUNTEQU20H ;每次ADC采集數(shù)據(jù)個數(shù)</p><p>  SHI

10、FTEQU05H;除數(shù)(與采集數(shù)據(jù)個數(shù)有關(guān))</p><p>  ADDREQU20H ;數(shù)據(jù)緩沖區(qū)首地址</p><p>  DISDAEQU40H ;顯示緩沖區(qū)</p><p>  DISCUNTEQU08H;顯示緩沖區(qū)長度</p><p>  ;##################

11、########################################</p><p>  ORG8000H</p><p>  LJMP8100H</p><p>  ORG8003H</p><p>  LJMPINT_7290</p><p>  ;#####################

12、##################################### </p><p><b>  ;主 程 序 </b></p><p>  ;(7290復(fù)位、顯示緩沖區(qū)初始化、連續(xù)采集N個數(shù)據(jù)、數(shù)據(jù)濾波) </p><p>  ;(十進制調(diào)整/拆分/查表/送顯示緩沖區(qū),7290數(shù)碼顯示)</p><p>  ;

13、##########################################################</p><p>  ORG8100H</p><p>  START:MOVSP,#60H</p><p>  SETBEA;開中斷</p><p><b>  SETBEX0</b&g

14、t;</p><p><b>  SETBIT0</b></p><p>  CLRP1.7 ;7290復(fù)位</p><p>  LCALLDELAY</p><p>  SETBP1.7</p><p>  MOV60H,#64H;初始化報警值為100,放入60H

15、地址中</p><p>  ;顯示緩沖區(qū)處理,顯示" adc = "</p><p>  MOVDISDA+7,#0EEH ;a字形</p><p>  MOVDISDA+6,#7AH ;d字形</p><p>  MOVDISDA+5,#1AH ;c字形</p><p&g

16、t;  MOVDISDA+4,#00H ;熄滅</p><p>  MOVDISDA+3,#12H ;"="</p><p>  LOOP:LCALLTLC549 ;采集N個ADC數(shù)據(jù)(20H單元) </p><p>  LCALLADJUST ;數(shù)據(jù)濾波(屏蔽以觀察濾波效果)

17、 </p><p>  LCALLALARM;調(diào)報警子程序</p><p>  LCALLBCD_CONT ;轉(zhuǎn)換為十進制數(shù)</p><p>  MOVR7,#DISCUNT</p><p>  MOVR0,#DISDA</p><p>  MOVR2,#10H</p>

18、<p>  MOVR3,#WSLA</p><p>  LCALLWRNBYT ;7290數(shù)字顯示</p><p>  LCALLDELAY</p><p><b>  SJMPLOOP</b></p><p>  ;#####################################

19、####################</p><p>  ;利用蜂鳴器實現(xiàn)報警</p><p>  ;#########################################################</p><p>  ALARM:PUSH00H</p><p>  MOVR0,#40H;蜂鳴器頻率<

20、/p><p>  MOVTMOD,#10H;工作方式1</p><p>  MOVTL1,#33H;寫入計數(shù)初值</p><p>  MOVTH1,#0FEH</p><p>  CJNEA,60H,NEXT;判斷A與60H中數(shù)相減,無借位執(zhí)行NEXT</p><p>  NEXT:JNCLO

21、OP1;cy=0,執(zhí)行Loop1</p><p>  SJMPNEXT1</p><p>  LOOP1:SETBTR1</p><p>  JNBTF1,$</p><p>  CLRTF1;清標(biāo)志位</p><p>  MOVTL1,#33H;重裝初值</p>&

22、lt;p>  MOVTH1,#0FEH</p><p>  CPLP1.5;取反</p><p>  DJNZR0,LOOP1;循環(huán)R0次跳出</p><p>  NEXT1:POP00H</p><p><b>  RET</b></p><p>  ;#####

23、####################################################</p><p>  ; 各子程序</p><p>  ;#########################################################</p><p>  TLC549:PUSH00H

24、 ;連續(xù)采集32次數(shù)據(jù)</p><p>  PUSH07H ;存放于20H-2FH中</p><p>  MOVR7,#CUNT</p><p>  MOVR0,#ADDR</p><p>  LOOP2:LCALLTLC549_ADC ;A/D轉(zhuǎn)換</p><p><

25、b>  MOV@R0,A</b></p><p><b>  INCR0</b></p><p>  DJNZR7,LOOP2</p><p><b>  POP07H</b></p><p><b>  POP00H</b></p>

26、;<p><b>  RET </b></p><p>  ;############################################################</p><p>  ADJUST:PUSH00H ;將20H開始的CUNT個數(shù)據(jù)</p><p>  PUSH02H ;求平均值&

27、lt;/p><p>  PUSH03H ;結(jié)果于A中</p><p><b>  PUSH07H</b></p><p>  MOVR7,#CUNT</p><p>  MOVR0,#ADDR</p><p><b>  CLRA</b></p>

28、<p><b>  MOVR2,A</b></p><p>  LOOP3:CLRC;累加</p><p>  ADDC A,@R0</p><p>  JNCLOOP4;沒有進位跳至LOOP4</p><p>  INCR2;R2中存進位</p><

29、;p>  LOOP4:INCR0</p><p>  DJNZR7,LOOP3</p><p><b>  MOVR3,A</b></p><p>  MOVA,R2 ;除以數(shù)據(jù)個數(shù)CUNT</p><p>  MOVR7,#SHIFT</p><p>  LOOP5:

30、CLRC</p><p><b>  MOVA,R2</b></p><p><b>  RRCA</b></p><p><b>  MOVR2,A</b></p><p><b>  MOVA,R3</b></p><

31、;p><b>  RRCA</b></p><p><b>  MOVR3,A</b></p><p>  DJNZR7,LOOP5</p><p><b>  POP07H</b></p><p><b>  POP03H</b><

32、;/p><p><b>  POP02H</b></p><p><b>  POP00H</b></p><p><b>  RET </b></p><p>  ;#######################################################

33、#####</p><p>  TLC549_ADC:;A/D轉(zhuǎn)換</p><p><b>  PUSH07H</b></p><p><b>  CLRA</b></p><p><b>  CLRCLK</b></p><p>  

34、MOVR7,#08H</p><p><b>  CLRCS</b></p><p>  LOOP6:SETBCLK</p><p><b>  NOP</b></p><p><b>  NOP</b></p><p><b>  N

35、OP</b></p><p><b>  NOP</b></p><p><b>  MOVC,DAT</b></p><p><b>  RLCA</b></p><p><b>  CLRCLK</b></p><

36、p><b>  NOP</b></p><p><b>  NOP</b></p><p>  DJNZR7, LOOP6</p><p><b>  SETBCS</b></p><p><b>  SETBCLK</b></p>

37、<p><b>  POP07H</b></p><p><b>  RET </b></p><p>  ;############################################################</p><p>  BCD_CONT: </p><p&

38、gt;<b>  PUSH07H</b></p><p><b>  PUSH06H</b></p><p><b>  PUSH05H</b></p><p><b>  PUSH02H</b></p><p>  MOVB,#64H</

39、p><p><b>  DIVAB</b></p><p>  MOVR7,A ;R7中得百位數(shù)</p><p>  MOVR2,B;R2中得余數(shù)</p><p><b>  MOVA,R2</b></p><p>  MOVB,#0AH<

40、/p><p><b>  DIVAB</b></p><p>  MOVR6,A;R6中得十位數(shù)</p><p>  MOVR5,B;R5中得個位數(shù)</p><p><b>  MOVA,R7</b></p><p>  LCALLCF;調(diào)拆分

41、子程序(入口A出口R4,R3-字形碼)</p><p>  MOVDISDA+2,R3;高位R4無用</p><p><b>  MOVA,R6</b></p><p>  LCALLCF;調(diào)拆分子程序(入口A出口R4,R3-字形碼)</p><p>  MOVDISDA+1,R3</p>

42、<p><b>  MOVA,R5</b></p><p>  LCALLCF;調(diào)拆分子程序(入口A出口R4,R3-字形碼)</p><p>  MOVDISDA+0,R3</p><p><b>  POP02H</b></p><p><b>  POP

43、05H</b></p><p><b>  POP06H</b></p><p><b>  POP07H</b></p><p><b>  RET </b></p><p>  ;#######################################

44、#####################</p><p>  CF:PUSH02H ;將A中的數(shù)據(jù)拆分為兩個獨立的BCD碼并查表</p><p><b>  PUSHDPH</b></p><p><b>  PUSHDPL</b></p><p>  MOVDPTR,#LEDS

45、EG</p><p><b>  MOVR2,A</b></p><p>  ANLA,#0FH</p><p>  MOVCA,@A+DPTR</p><p><b>  MOVR3,A</b></p><p><b>  MOVA,R2</b&g

46、t;</p><p><b>  SWAPA</b></p><p>  ANLA,#0FH</p><p>  MOVCA,@A+DPTR</p><p><b>  MOVR4,A</b></p><p><b>  POPDPL</b>&

47、lt;/p><p><b>  POPDPH</b></p><p><b>  POP02H</b></p><p><b>  RET </b></p><p>  ;####################################################

48、########</p><p><b>  DELAY:</b></p><p><b>  PUSH00H</b></p><p><b>  PUSH01H</b></p><p>  MOVR0,#00H</p><p>  DELAY1

49、:MOVR1,#01H</p><p><b>  DJNZR1,$</b></p><p>  DJNZR0,DELAY1</p><p><b>  POP01H</b></p><p><b>  POP00H</b></p><p>

50、<b>  RET</b></p><p>  LEDSEG:DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H</p><p>  DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH </p><p><b>  RET</b></p><p>

51、;  ;############################################################</p><p><b>  INT_7290:</b></p><p><b>  PUSH00H</b></p><p>  PUSH 01H</p><p>

52、<b>  PUSH02H</b></p><p><b>  PUSH03H</b></p><p><b>  PUSH04H</b></p><p><b>  PUSH05H</b></p><p><b>  PUSH06H&

53、lt;/b></p><p><b>  PUSH07H</b></p><p><b>  PUSHACC</b></p><p><b>  PUSHPSW</b></p><p>  LCALLRDKEY;讀取第一個按鍵值(功能鍵)</p&g

54、t;<p>  CJNEA,#0EH,DOWN1 ;判斷是E鍵嗎?不是返回</p><p>  SJMP UP;是E鍵時開始處理百位</p><p>  DOWN1:AJMPDOWN</p><p>  UP:MOV A,60H;顯示60H中的數(shù)</p><p>  LC

55、ALLBCD_CONT;即前一次設(shè)定的報警值</p><p>  MOVR7,#03H;閃爍顯示</p><p>  MOVR0,#40H</p><p>  MOVR2,#10H</p><p>  MOVR3,#WSLA</p><p>  LCALLWRNBYT</p>

56、<p>  LCALLDELAY</p><p>  LCALLFLASH1</p><p>  JBP3.2,$;以查詢的方式等待下一次按鍵操作</p><p>  LCALLRDKEY;讀取第二個按鍵值(百位)</p><p><b>  MOVR1,A</b></p

57、><p>  MOVDPTR,#LEDSEG</p><p>  MOVCA,@A+DPTR</p><p><b>  MOV42H,A</b></p><p>  MOVR7,#01H</p><p>  MOVR0,#42H</p><p>  MOVR2,#

58、12H</p><p>  MOVR3,#WSLA;閃爍</p><p>  LCALLWRNBYT ;7290數(shù)字顯示百位</p><p>  LCALLDELAY</p><p>  LCALLFLASH2</p><p><b>  MOVA,R1</b>

59、;</p><p>  MOVB,#64H;處理輸入的數(shù)據(jù)*100</p><p><b>  MULAB</b></p><p>  MOVR5,A;0-255之間的數(shù),取低位即可</p><p>  JBP3.2,$;以查詢的方式等待下一次按鍵操作</p>&

60、lt;p>  LCALLRDKEY;讀取第三個按鍵值(十位)</p><p><b>  MOVR1,A</b></p><p>  MOVCA,@A+DPTR</p><p><b>  MOV41H,A</b></p><p>  MOVR7,#01H</p>

61、;<p>  MOVR0,#41H</p><p>  MOVR2,#11H</p><p>  MOVR3,#WSLA</p><p>  LCALLWRNBYT ;7290數(shù)字顯示</p><p>  LCALLDELAY</p><p>  LCALLFLASH3

62、;閃爍</p><p><b>  MOVA,R1</b></p><p>  MOVB,#0AH;處理輸入的數(shù)據(jù)*10</p><p><b>  MULAB</b></p><p>  MOVR6,A;取低位</p><p>  J

63、BP3.2,$;以查詢的方式等待下一次按鍵操作</p><p>  LCALLRDKEY;讀取第四個按鍵值(個位)</p><p><b>  MOVR1,A</b></p><p>  MOVCA,@A+DPTR</p><p><b>  MOV40H,A</b>

64、</p><p>  MOVR7,#01H</p><p>  MOVR0,#40H</p><p>  MOVR2,#10H</p><p>  MOVR3,#WSLA</p><p>  LCALLWRNBYT ;7290數(shù)字顯示</p><p>  LCAL

65、LDELAY</p><p>  LCALLFLASH4;不閃爍</p><p>  MOVA,R1</p><p>  ADDA,R5;處理輸入的數(shù)據(jù),全部相加</p><p><b>  ADDA,R6</b></p><p>  MOV60H,

66、A;A賦值給60H</p><p>  JBP3.2,$;以查詢的方式等待下一次按鍵操作</p><p>  LCALLRDKEY;讀取第五個按鍵值(功能鍵)</p><p>  CJNEA,#0FH,$;判斷是F鍵嗎?不是等待</p><p><b>  DOWN:</b

67、></p><p>  CLRIE0;清標(biāo)志</p><p><b>  POPPSW</b></p><p><b>  POPACC</b></p><p><b>  POP07H</b></p><p><b&g

68、t;  POP06H</b></p><p><b>  POP05H</b></p><p><b>  POP04H</b></p><p><b>  POP03H</b></p><p><b>  POP02H</b><

69、;/p><p><b>  POP01H</b></p><p><b>  POP00H</b></p><p><b>  RETI</b></p><p><b>  FLASH1:</b></p><p>  MOV

70、48H,#70H ;后三位閃爍</p><p>  MOV49H,#07H</p><p>  MOV50H,#00H</p><p>  MOVR7,#02H</p><p>  MOV R0,#48H</p><p>  MOVR2,#07H</p><

71、p>  MOVR3,#WSLA</p><p>  LCALLWRNBYT</p><p>  MOVR7,#01H</p><p>  MOVR0,#50H</p><p>  MOVR2,#0CH</p><p>  MOVR3,#WSLA</p><p>  LCALL

72、WRNBYT</p><p><b>  RET</b></p><p><b>  FLASH2:</b></p><p>  MOV 48H,#70H ;后兩位閃爍</p><p>  MOV49H,#03H</p><p>

73、;  MOV50H,#00H</p><p>  MOVR7,#02H</p><p>  MOV R0,#48H</p><p>  MOVR2,#07H</p><p>  MOVR3,#WSLA</p><p>  LCALLWRNBYT</p><p>  MOVR7,#0

74、1H</p><p>  MOVR0,#50H</p><p>  MOVR2,#0CH</p><p>  MOVR3,#WSLA</p><p>  LCALLWRNBYT</p><p><b>  RET</b></p><p><b>  FLA

75、SH3:</b></p><p>  MOV 48H,#70H ;最后一位閃爍</p><p>  MOV49H,#01H</p><p>  MOV50H,#00H</p><p>  MOVR7,#02H</p><p>  MOV R0,#48H</p

76、><p>  MOVR2,#07H</p><p>  MOVR3,#WSLA</p><p>  LCALLWRNBYT</p><p>  MOVR7,#01H</p><p>  MOVR0,#50H</p><p>  MOVR2,#0CH</p><p>

77、;  MOVR3,#WSLA</p><p>  LCALLWRNBYT</p><p><b>  RET</b></p><p><b>  FLASH4:</b></p><p>  MOV 48H,#70H ;不閃爍</p><p&

78、gt;  MOV49H,#00H</p><p>  MOV50H,#00H</p><p>  MOVR7,#02H</p><p>  MOV R0,#48H</p><p>  MOVR2,#07H</p><p>  MOVR3,#WSLA</p><p>  LCALLW

79、RNBYT</p><p>  MOVR7,#01H</p><p>  MOVR0,#50H</p><p>  MOVR2,#0CH</p><p>  MOVR3,#WSLA</p><p>  LCALLWRNBYT</p><p><b>  RET</b&g

80、t;</p><p>  ;*********************************************************</p><p>  ;讀鍵值子程序 (;出口參數(shù)累加器A---獲取到的鍵值) </p><p>  ;*********************************************************<

81、/p><p><b>  RDKEY:</b></p><p>  MOVR0,#1FH;鍵值緩沖單元</p><p>  MOVR7,#01H;取一個數(shù)據(jù)(鍵值)</p><p>  MOVR2,#01H ;指向內(nèi)部數(shù)據(jù)鍵值寄存器地址</p><p>  MOV

82、R3,#WSLA;取器件地址(寫)</p><p>  MOVR4,#RSLA;取器件地址(讀)</p><p>  LCALLRDADD;讀出7290的01H單元中的鍵值</p><p>  MOVA,1FH;取健值送緩沖單元</p><p><b>  DECA</b>

83、;</p><p><b>  RET</b></p><p>  ;*******************************************************</p><p><b>  ;相關(guān)I2C子程序</b></p><p>  ;********************

84、***********************************</p><p><b>  END</b></p><p>  9系統(tǒng)調(diào)試運行結(jié)果說明、分析所出現(xiàn)得問題,設(shè)計體會與建議</p><p>  以AT89C51為核心、利用DP-51PROC單片機綜合仿真實驗儀、采用“在線仿真、調(diào)試”的模式實現(xiàn)上述功能;軟件環(huán)境為Keil

85、 uVision2;設(shè)計語言為匯編語言。實驗結(jié)果為,當(dāng)進入調(diào)試環(huán)境,數(shù)碼管顯示“adc=***”(***即0-255之間的數(shù)),通過旋轉(zhuǎn)電位器,即可改變電壓值,顯示也隨之改變;當(dāng)模擬量大于100時,蜂鳴器報警;按鍵盤區(qū)S15(E)功能鍵進入鍵值修改,數(shù)碼管后三位閃爍顯示當(dāng)前報警值,按順序按下三個鍵值,每按一位數(shù)碼管對應(yīng)顯示,全部按完,按S16(F)鍵,即修改成功,并回顯之前的模擬量,此時鍵值已經(jīng)改變。調(diào)試結(jié)果正常,與設(shè)計方案一致。<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論