版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 電子裝置與系統(tǒng)設(shè)計課程設(shè)計</p><p> 學(xué)院: 信息電子學(xué)院 </p><p> 班級: 08電子信息工程 </p><p> 學(xué)號: </p><p> 姓名: </p><p> 指導(dǎo)老師:
2、 </p><p> 日期: </p><p><b> 目錄</b></p><p> 1、課程設(shè)計目的………………………………………………………………3</p><p> 2、課程設(shè)計工具及題目………………………………………………………3</p><
3、p> 2.1、課程設(shè)計工具…………………………………………………...……3</p><p> 2.2、課程設(shè)計題目……………………………………………...…………3</p><p> 3、課程設(shè)計內(nèi)容、步驟及電路原理圖………………………………………3</p><p> 3.1、課程設(shè)計內(nèi)容………………………………………………………..3</p&
4、gt;<p> 3.2、課程設(shè)計步驟………………………………………………………..3</p><p> 3.3、整個系統(tǒng)的電路原理圖……………………………………………..4</p><p> 4、課程設(shè)計各模塊工作原理…………………………………………………5</p><p> 4.1、紅外心率計模塊.……………………………………………………..
5、.5</p><p> 4.1.1、負(fù)電源變換電路………………………………………………5</p><p> 4.1.2、血液波動檢測電路……............................................................6</p><p> 4.1.3、放大、整形、濾波電路…………………………………........7&l
6、t;/p><p> 4.2、PIC單片機(jī)檢測并顯示模塊…………………………………………8</p><p> 4.2.1、定時器初始化及中斷函數(shù)…………………………………....8</p><p> 4.2.2、數(shù)脈沖個數(shù)程序……………………………………………....9</p><p> 4.2.3、數(shù)碼管顯示程序………...…………………
7、…………………10</p><p> 4.2.4、延時子程序…….……………………………………………...11</p><p> 4.2.5、ds18b20溫度采集程序………………………………………..11</p><p> 5、課程設(shè)計心得……………………………………………………………....14</p><p> 6、參考文獻(xiàn)……
8、……………………………………………………………....15</p><p> 7、附錄:源程序代碼及注釋…………………………………………………16</p><p> 課程設(shè)計目的:單片機(jī)具有體積小、功能強(qiáng)、成本低、應(yīng)用面廣等優(yōu)點(diǎn),可以說,智能控制與自動控制的核心就是單片機(jī)。目前,一個學(xué)習(xí)與應(yīng)用單片機(jī)的高潮在全社會大規(guī)模地興起。學(xué)習(xí)單片機(jī)的最有效方法就是理論與實(shí)踐并重。系統(tǒng)地運(yùn)用已學(xué)的理
9、論知識解決實(shí)際問題的能力和查閱資料的能力。培養(yǎng)一定的自學(xué)能力和獨(dú)立分析問題、解決問題的能力,能通過獨(dú)立思考、查閱工具書、參考文獻(xiàn),尋找解決方案;</p><p> 課程設(shè)計工具及題目: </p><p> 1、課程設(shè)計工具:PC機(jī)、PIC單片機(jī)最小系統(tǒng)、紅外心率計模塊</p><p> 2、課程設(shè)計題目:基于PIC單片機(jī)的脈搏檢測</p><
10、;p> 課程設(shè)計內(nèi)容、步驟及電路原理圖</p><p> 1、學(xué)習(xí)PCB畫圖,選好課題,即脈搏檢測。購買元器件材料,焊接PIC最小系統(tǒng)版,搭建心率計模塊,然后由心率計模塊產(chǎn)生方波,用PIC單片機(jī)數(shù)出一分鐘的脈沖個數(shù),然后在數(shù)碼管上顯示出來,即為脈搏。</p><p> 2、首先根據(jù)最小系統(tǒng)版的原理圖,搭建好電路,調(diào)試下載線是否可以下載,復(fù)位開關(guān)是否可以工作。調(diào)試成功之后,開始搭
11、建心率計模塊,搭建好心率計模塊之后,開始檢測是否可以產(chǎn)生方波,用手指按在傳感器上,然后用示波器觀察是否出現(xiàn)方波脈沖。調(diào)試成功之后,就編寫相應(yīng)的程序,燒寫進(jìn)單片機(jī)中,然后就可以檢測相應(yīng)的脈搏了。</p><p> 3、紅外心率計模塊電路圖</p><p> 4、PIC單片機(jī)最小系統(tǒng)原理圖</p><p> 各功能模塊的工作原理:</p><p
12、><b> 紅外心率計模塊</b></p><p><b> 單元電路的工作原理</b></p><p><b> ⑴ 負(fù)電源變換電路</b></p><p> 負(fù)電源變換電路的作用是把+12V直流電變成-10V左右的直流電壓,-10V 電壓與+12V作為運(yùn)算放大器的電源。負(fù)電源變換電路
13、如圖2所示,其中IC1(CD4069)為六非門集成電路,它的內(nèi)部結(jié)構(gòu)圖如圖3(a)所示。</p><p> 負(fù)電源變換電路工作原理:通電的瞬間,假設(shè)A點(diǎn)是低電位,則B點(diǎn)是高電位,C點(diǎn)是低電位,D點(diǎn)是高電位。B點(diǎn)的高電位通過R19給C7充電,當(dāng)F點(diǎn)的電壓高于IC1(CD4049)的電平轉(zhuǎn)換電壓時,B點(diǎn)輸出低電位,C點(diǎn)(C7一端)輸出高電位,由于電容兩端的電壓不能突變,所以C7兩端的電壓通過R19放電。當(dāng)F點(diǎn)電壓低
14、于IC1的轉(zhuǎn)換電壓時,B點(diǎn)輸出高電位,此高電位通過R19對C7充電,如此循環(huán)。C點(diǎn)得到方波,經(jīng)過后面四個反相器反相、擴(kuò)流后,在D點(diǎn)得到方波。</p><p> 當(dāng)D點(diǎn)是高電平的時候,V1導(dǎo)通C8被充電,大約充到11V左右,當(dāng)D點(diǎn)變成低電平的時候,由于C8兩端電壓不能突變,G點(diǎn)電壓被拉到-11V左右,此時V2導(dǎo)通, C9反方向進(jìn)行充電,使E點(diǎn)電壓達(dá)到-10V左右。由于帶負(fù)載的能力不強(qiáng),當(dāng)帶上負(fù)載后,E點(diǎn)電壓大約降
15、到9V左右。</p><p><b> 圖2 電源電路</b></p><p> (a) CD4049 (b) LM741</p><p> 圖3 集成電路的結(jié)構(gòu)圖</p><p> ?、?血液波動檢測電路</p>
16、<p> 血液波動檢測電路首先通過紅外光電傳感器把血液中波動的成分檢測出來,然后通過電容器耦合到放大器的輸入端。如圖4所示。</p><p> 圖4 血液波動檢測電路</p><p> TCRT5000紅外光電傳感器的檢測方法:</p><p> 首先用數(shù)字萬用表的二極管檔位正向壓降測試控制端發(fā)射管(淺藍(lán)色)的正、負(fù)極,將紅黑表筆分別接發(fā)射管的兩
17、個引腳,正反各測一次,表頭一次顯示“1.05(0.9-1.1)”,一次顯示溢出值“-1”,則顯示1.05V的那次正確,紅表筆接的是正極,黑表筆接的是負(fù)極。若兩次都顯示“1”,說明發(fā)射管內(nèi)部開路,若兩次都顯示“0”發(fā)射管內(nèi)不短路。然后再判斷接收管的C、E極和光電轉(zhuǎn)換效率,方法如下:將發(fā)射管的正負(fù)極分別插入數(shù)字萬用表hFE檔NPN型的C、E插孔,再將模擬萬用表打到R×1kΩ檔。紅黑表筆分別接接收管的兩個引腳,若表針不動,則紅黑表筆
18、對調(diào),若表針向右偏轉(zhuǎn)到15kΩ左右,則黑表筆所接管腳為C,紅表筆所接管腳為E。此時,再用手指或白紙貼近兩管上方,表針繼續(xù)向右偏轉(zhuǎn)至1kΩ以內(nèi),說明該紅外光電斷續(xù)器的光電轉(zhuǎn)換效率高。</p><p> 血液波動檢測電路工作原理:TCRT5000是集紅外線發(fā)射管、接收管為一體的器件,工作時把探頭貼在手指上,力度要適中。紅外線發(fā)射管發(fā)出的紅外線穿過動脈血管經(jīng)手指指骨反射回來,反射回來的信號強(qiáng)度隨著血液流動的變化而變化
19、,接收管把反射回來的光信號變成微弱的電信號,并通過C1耦合到放大器。</p><p> ?、?放大、整形、濾波電路</p><p> 放大、整形、濾波電路是把傳感起檢測到的微弱電信號進(jìn)行放大、整形、濾波,最后輸出反映心跳頻率的方波,如圖5所示。其中LM741為高精度單運(yùn)放電路,它們的引腳功能如圖3 (b)所示。IC2、IC3、IC4都為LM741。</p><p>
20、; 圖5 信號放大、整形電路</p><p> 因為傳感器送來的信號幅度只有2~5毫伏,要放大到10V左右才能作為計數(shù)器的輸入脈沖。因此放大倍數(shù)設(shè)計在4000倍左右。兩級放大器都接成反相比例放大器的電路,經(jīng)過兩級放大、反相后的波形是跟輸入波形同相、且放大了的波形。放大后的波形是一個交流信號。其中A1、A2的供電方式是正負(fù)電源供電,電源為+12V、-10V。</p><p> A1、A
21、2與周圍元件組成二級放大電路,放大倍數(shù)Auf為:</p><p> 由于放大后的波形是一個交流信號,而計數(shù)器需要的是單方向的直流脈沖信號。所以經(jīng)過V3檢波后變成單方向的直流脈沖信號,并把檢波后的信號送到RC兩階濾波電路,濾波電路的作用是濾除放大后的干擾信號。R9、V4組成傳感器工作指示電路,當(dāng)傳感器接收到心跳信號時,V4就會按心跳的強(qiáng)度而改變亮度,因此V4正常工作時是按心跳的頻率閃爍。直流脈沖信號濾波后送入A3
22、的同相輸入端,反相輸入端接一個固定的電平,A3是作為一個電壓比較器來工作的,是單電源供電。當(dāng)A3的3腳電壓高于2腳電壓的時候,6腳輸出高電平;當(dāng)A3的3腳電壓低于2腳電壓的時候,6腳輸出低電平,所以A3輸出一個反應(yīng)心跳頻率的方波信號。</p><p> PIC單片機(jī)檢測并顯示模塊</p><p> 定時器,定時1s實(shí)現(xiàn)60秒的計時功能,用于檢測的時間,并在數(shù)碼管上顯示出來。相應(yīng)的初始化
23、程序為:</p><p> void time1_rtc_init(void)</p><p><b> {</b></p><p> INTCON = 0x20; //disable global and enable TMR0 interrupt</p><p> INTCON2
24、 = 0x84; //TMR0 high priority</p><p> RCONbits.IPEN = 1; //enable priority levels</p><p> TMR0H = 100; //clear timer</p><p> TMR0L = 0
25、; //clear timer</p><p> T0CON = 0x85; //set up timer0 - prescaler 1:64</p><p> INTCONbits.GIEH = 1; //enable interrupts</p><p><b>
26、; }</b></p><p> 定時器的中斷函數(shù)為:</p><p> #pragma code InterruptVectorHigh = 0x08</p><p><b> void</b></p><p> InterruptVectorHigh (void)</p><
27、p><b> {</b></p><p><b> _asm</b></p><p> goto InterruptHandlerHigh //jump to interrupt routine</p><p><b> _endasm</b></p><p>&
28、lt;b> }</b></p><p> #pragma code</p><p> #pragma interrupt InterruptHandlerHigh</p><p> void InterruptHandlerHigh ()</p><p><b> {</b></p>
29、;<p> if(INTCONbits.TMR0IF)</p><p> { //check for TMR0 overflow</p><p> INTCONbits.TMR0IF = 0; //clear interrupt flag</p><p>
30、 second++; //indicate timeout</p><p> if(second == 60)</p><p><b> { </b></p><p> second = 0;</p><p> result = 1;</p><p><b>
31、; }</b></p><p> //if(result != 1)</p><p> //led = ~led;</p><p><b> }</b></p><p><b> }</b></p><p> 由RB0采集脈搏的方波,計數(shù)方波個數(shù)
32、,并在60秒后顯示在數(shù)碼管上。</p><p> #define pulse PORTBbits.RB0</p><p> 采用上升沿觸發(fā)來實(shí)現(xiàn)計數(shù)功能,從而實(shí)現(xiàn)了計數(shù)方波的個數(shù)的功能。</p><p> if(INTCONbits.INT0IF == 1)</p><p><b> {</b></p>
33、;<p> INTCONbits.INT0IF = 0;</p><p> delay_ms(100);</p><p><b> fre++;</b></p><p><b> }</b></p><p> 位選和段選的數(shù)值和數(shù)碼管的顯示程序如下:</p>&
34、lt;p> const unsigned table[10]=</p><p> {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; </p><p> const unsigned bit_set[4]={0xFE,0xFD, 0xFB, 0xF7};</p><p> void display
35、(int time)</p><p><b> { </b></p><p> PORTC = table[time % 10];</p><p> PORTD = bit_set[3];</p><p> delay_ms(20);</p><p> PORTC = table[(ti
36、me / 10) % 10];</p><p> PORTD = bit_set[2];</p><p> delay_ms(20);</p><p> PORTC = table[time / 100];</p><p> PORTD = bit_set[1];</p><p> delay_ms(20)
37、;</p><p><b> }</b></p><p> 顯示帶小數(shù)位的,代碼如下:</p><p> void display1(int time)</p><p><b> { </b></p><p> PORTC = table[time % 10];&l
38、t;/p><p> PORTD = bit_set[3];</p><p> delay_ms(10);</p><p> PORTC = table1[(time / 10 )% 10];</p><p> PORTD = bit_set[2];</p><p> delay_ms(10);</p>
39、;<p> PORTC = table[(time)/ 100];</p><p> PORTD = bit_set[1];</p><p> delay_ms(10);</p><p><b> }</b></p><p><b> 延時子程序如下:</b></p&g
40、t;<p> void delay_ms(unsigned int time)</p><p><b> {</b></p><p><b> int n;</b></p><p> for(;time>0;time--)</p><p><b> {<
41、/b></p><p> for(n = 0; n < 50; n++);</p><p><b> }</b></p><p><b> }</b></p><p> DS18B20溫度采集程序如下:</p><p> void dsreset(voi
42、d) //18B20復(fù)位,初始化函數(shù)</p><p><b> {</b></p><p><b> int i;</b></p><p> TRISB = 1;</p><p><b> ds=0;</b></p><p><b&g
43、t; i=103;</b></p><p> while(i>0)i--;</p><p><b> ds=1;</b></p><p><b> i=4;</b></p><p> while(i>0)i--;</p><p><b&
44、gt; }</b></p><p> char tempreadbit(void) //讀1位函數(shù)</p><p><b> {</b></p><p><b> int i;</b></p><p><b> char dat;</b></p&
45、gt;<p> TRISB = 1;</p><p> ds=0;i++; //i++ 起延時作用</p><p> ds=1;i++;i++;</p><p> TRISB = 3;</p><p><b> dat=ds;</b></p><p>
46、i=8;while(i>0)i--;</p><p> return (dat);</p><p><b> }</b></p><p> char tempread(void) //讀1個字節(jié)</p><p><b> {</b></p><p> ch
47、ar i,j,dat;</p><p><b> dat=0;</b></p><p> for(i=1;i<=8;i++)</p><p><b> {</b></p><p> j=tempreadbit();</p><p> dat=(j<<
48、;7)|(dat>>1); //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在DAT里</p><p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> void tempwritebyte(char da
49、t) //向18B20寫一個字節(jié)數(shù)據(jù)</p><p><b> {</b></p><p><b> int i;</b></p><p><b> char j;</b></p><p> char testb;</p><p> for
50、(j=1;j<=8;j++)</p><p><b> {</b></p><p> testb=dat&0x01;</p><p> dat=dat>>1;</p><p> if(testb) //寫 1</p><p><b> {<
51、;/b></p><p> TRISB = 1;</p><p><b> ds=0;</b></p><p><b> i++;i++;</b></p><p><b> ds=1;</b></p><p> i=8;while(i&g
52、t;0)i--;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> TRISB = 1;</p><p> ds=0; //寫 0</p&
53、gt;<p> i=8;while(i>0)i--;</p><p><b> ds=1;</b></p><p><b> i++;i++;</b></p><p><b> }</b></p><p><b> }</b>
54、</p><p><b> }</b></p><p> void tempchange(void) //DS18B20 開始獲取溫度并轉(zhuǎn)換</p><p><b> {</b></p><p> dsreset();</p><p> delay_ms(1);&
55、lt;/p><p> tempwritebyte(0xcc); // 寫跳過讀ROM指令</p><p> tempwritebyte(0x44); // 寫溫度轉(zhuǎn)換指令</p><p><b> }</b></p><p> int get_temp() //讀取寄存器中存儲的溫度數(shù)據(jù)</
56、p><p><b> {</b></p><p><b> char a,b;</b></p><p> dsreset();</p><p> delay_ms(1);</p><p> tempwritebyte(0xcc);</p><p>
57、; tempwritebyte(0xbe);</p><p> a=tempread(); //讀低8位</p><p> b=tempread(); //讀高8位</p><p><b> temp=b;</b></p><p> temp<<=8;
58、 //兩個字節(jié)組合為1個字</p><p> temp=temp|a;</p><p> f_temp=temp*0.0625; //溫度在寄存器中為12位 分辨率位0.0625°</p><p> temp=f_temp*10+0.5; //乘以10表示小數(shù)點(diǎn)后面只取1位,加0.5是四舍五入</p><p&
59、gt; f_temp=f_temp+0.05; </p><p> return temp; //temp是整型</p><p><b> }</b></p><p><b> 課程設(shè)計心得</b></p><p><b> 參考文獻(xiàn)</b></
60、p><p> [1] 郭天祥。新概念51單片機(jī)C語言教程[M] 2009.12</p><p> [1] 孫安青。PIC單片機(jī)使用C語言程序設(shè)計與典型實(shí)例[M] 2008.06</p><p> 附錄:源程序代碼及注釋</p><p> #include <p18F452.h></p><p> #d
61、efine pulse PORTBbits.RB0</p><p> #define ds PORTBbits.RB1</p><p> void delay_ms(unsigned int time); </p><p> const unsigned char table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D
62、,0x07,0x7F,0x6F}; </p><p> const unsigned char table1[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF}; </p><p> const unsigned bit_set[4]={0xFE,0xFD, 0xFB, 0xF7};</p><p>
63、 void time1_rtc_init(void);</p><p> void timer1_rtc_isr(void);</p><p> void InterruptHandlerHigh (void);</p><p> void display(int time);</p><p> void display1(int
64、time);</p><p> void main(void);</p><p> int second, flag, fre, result, temp, count;</p><p> float f_temp;</p><p> void dsreset(void) //18B20復(fù)位,初始化函數(shù)</p>&
65、lt;p><b> {</b></p><p><b> int i;</b></p><p> TRISB = 0xf1;</p><p><b> ds=0;</b></p><p><b> i=103;</b></p>
66、<p> while(i>0)i--;</p><p><b> ds=1;</b></p><p><b> i=4;</b></p><p> while(i>0)i--;</p><p><b> }</b></p><
67、;p> char tempreadbit(void) //讀1位函數(shù)</p><p><b> {</b></p><p><b> int i;</b></p><p><b> char dat;</b></p><p> TRISB = 0xf1;&l
68、t;/p><p> ds=0;i++; //i++ 起延時作用</p><p> ds=1;i++;i++;</p><p> TRISB = 0xf3;</p><p><b> dat=ds;</b></p><p> i=8;while(i>0)i--;<
69、/p><p> return (dat);</p><p><b> }</b></p><p> char tempread(void) //讀1個字節(jié)</p><p><b> {</b></p><p> char i,j,dat;</p>&l
70、t;p><b> dat=0;</b></p><p> for(i=1;i<=8;i++)</p><p><b> {</b></p><p> j=tempreadbit();</p><p> dat=(j<<7)|(dat>>1); //讀
71、出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在DAT里</p><p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> void tempwritebyte(char dat) //向18B20寫一個字節(jié)數(shù)據(jù)</
72、p><p><b> {</b></p><p><b> int i;</b></p><p><b> char j;</b></p><p> char testb;</p><p> for(j=1;j<=8;j++)</p&g
73、t;<p><b> {</b></p><p> testb=dat&0x01;</p><p> dat=dat>>1;</p><p> if(testb) //寫 1</p><p><b> {</b></p><p&
74、gt; TRISB = 0xf1;</p><p><b> ds=0;</b></p><p><b> i++;i++;</b></p><p><b> ds=1;</b></p><p> i=8;while(i>0)i--;</p>&l
75、t;p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> TRISB = 0xf1;</p><p> ds=0; //寫 0</p><p> i=8
76、;while(i>0)i--;</p><p><b> ds=1;</b></p><p><b> i++;i++;</b></p><p><b> }</b></p><p><b> }</b></p><p&g
77、t;<b> }</b></p><p> void tempchange(void) //DS18B20 開始獲取溫度并轉(zhuǎn)換</p><p><b> {</b></p><p> dsreset();</p><p> delay_ms(1);</p><p>
78、; tempwritebyte(0xcc); // 寫跳過讀ROM指令</p><p> tempwritebyte(0x44); // 寫溫度轉(zhuǎn)換指令</p><p><b> }</b></p><p> int get_temp() //讀取寄存器中存儲的溫度數(shù)據(jù)</p><p><
79、;b> {</b></p><p><b> char a,b;</b></p><p> dsreset();</p><p> delay_ms(1);</p><p> tempwritebyte(0xcc);</p><p> tempwritebyte(0x
80、be);</p><p> a=tempread(); //讀低8位</p><p> b=tempread(); //讀高8位</p><p><b> temp=b;</b></p><p> temp<<=8; //兩個字節(jié)組合為1個字<
81、;/p><p> temp=temp|a;</p><p> f_temp=temp*0.0625; //溫度在寄存器中為12位 分辨率位0.0625°</p><p> temp=f_temp*10+0.5; //乘以10表示小數(shù)點(diǎn)后面只取1位,加0.5是四舍五入</p><p> f_temp=f_temp+
82、0.05; </p><p> return temp; //temp是整型</p><p><b> }</b></p><p> void main (void)</p><p><b> {</b></p><p> second = 0;&l
83、t;/p><p> TRISC = 0; /* configure PORTD for output */</p><p> TRISD = 0;</p><p> TRISB = 0xf1;</p><p> time1_rtc_init();</p><p><b> flag = 0;<
84、/b></p><p> fre = 0;</p><p> result = 0;</p><p> count = 0;</p><p><b> while(1)</b></p><p><b> {</b></p><p>
85、 /*if(flag == 1 && pulse == 1)</p><p><b> {</b></p><p><b> fre+=2;</b></p><p><b> flag = 0;</b></p><p><b> }<
86、/b></p><p> else if(pulse == 0 && flag == 0)</p><p><b> {</b></p><p><b> flag = 1;</b></p><p><b> } */</b></p>
87、<p> if(result != 1)</p><p> display(second);</p><p><b> else</b></p><p><b> {</b></p><p><b> while(1)</b></p><
88、;p><b> {</b></p><p> tempchange();</p><p> temp = get_temp(); //采集溫度</p><p><b> count++;</b></p><p> if(count == 201) count = 0;<
89、/p><p> if(count <= 100)</p><p><b> {</b></p><p> display(fre);</p><p><b> }</b></p><p> else if(count <= 200)</p&g
90、t;<p><b> {</b></p><p> display1(temp);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&
91、gt;<b> }</b></p><p><b> }</b></p><p> void display(int time)</p><p><b> { </b></p><p> PORTC = table[time % 10];</p><
92、;p> PORTD = bit_set[3];</p><p> delay_ms(10);</p><p> PORTC = table[(time / 10) % 10];</p><p> PORTD = bit_set[2];</p><p> delay_ms(10);</p><p>
93、PORTC = table[time / 100];</p><p> PORTD = bit_set[1];</p><p> delay_ms(10);</p><p><b> }</b></p><p> void display1(int time)</p><p><b&
94、gt; { </b></p><p> PORTC = table[time % 10];</p><p> PORTD = bit_set[3];</p><p> delay_ms(10);</p><p> PORTC = table1[(time / 10 )% 10];</p><p>
95、 PORTD = bit_set[2];</p><p> delay_ms(10);</p><p> PORTC = table[(time)/ 100];</p><p> PORTD = bit_set[1];</p><p> delay_ms(10);</p><p><b> }&
96、lt;/b></p><p> void time1_rtc_init(void)</p><p><b> {</b></p><p> INTCON = 0x20; //disable global and enable TMR0 interrupt</p><p> IN
97、TCON2 = 0x84; //TMR0 high priority</p><p> RCONbits.IPEN = 1; //enable priority levels</p><p> TMR0H = 100; //clear timer</p><p> TMR0
98、L = 0; //clear timer</p><p> T0CON = 0x85; //set up timer0 - prescaler 1:8</p><p> INTCONbits.GIEH = 1; //enable interrupts</p><p> IN
99、TCONbits.INT0IF = 0;</p><p> INTCONbits.INT0IE = 1;</p><p> INTCON2bits.RBPU = 0;</p><p> INTCON2bits.INTEDG0 = 0;</p><p><b> }</b></p><p>
100、 #pragma code InterruptVectorHigh = 0x08</p><p><b> void</b></p><p> InterruptVectorHigh (void)</p><p><b> {</b></p><p><b> _asm</
101、b></p><p> goto InterruptHandlerHigh //jump to interrupt routine</p><p><b> _endasm</b></p><p><b> }</b></p><p> //----------------------
102、------------------------------------------------------</p><p> // High priority interrupt routine</p><p> #pragma code</p><p> #pragma interrupt InterruptHandlerHigh</p>&
103、lt;p> void InterruptHandlerHigh ()</p><p><b> {</b></p><p> if(INTCONbits.TMR0IF)</p><p> { //check for TMR0 overflow</p>
104、<p> INTCONbits.TMR0IF = 0; //clear interrupt flag</p><p> second++; //indicate timeout</p><p> if(second == 30)</p><p><b> { </b></p&
105、gt;<p> //second = 0;</p><p> result = 1;</p><p><b> }</b></p><p> // pulse = ~pulse;</p><p><b> }</b></p><p> if(INTC
106、ONbits.INT0IF == 1)</p><p><b> {</b></p><p> INTCONbits.INT0IF = 0;</p><p> delay_ms(100);</p><p><b> fre++;</b></p><p><b&g
107、t; }</b></p><p><b> }</b></p><p> void delay_ms(unsigned int time)</p><p><b> {</b></p><p><b> int n;</b></p><
108、p> for(;time>0;time--)</p><p><b> {</b></p><p> for(n = 0; n < 50; n++);</p><p><b> }</b></p><p><b> }</b></p>
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子裝置與系統(tǒng)設(shè)計課程設(shè)計報告 e08610308 - 基于pic單片機(jī)的脈搏檢測
- pic單片機(jī)課程設(shè)計
- 單片機(jī)原理及系統(tǒng)課程設(shè)計--基于單片機(jī)的電子鬧鐘設(shè)計
- 單片機(jī)課程設(shè)計-單片機(jī)課程設(shè)計---電子時鐘
- 單片機(jī)課程設(shè)計---基于單片機(jī)的電子琴設(shè)計
- 單片機(jī)課程設(shè)計-- 基于51單片機(jī)的電子時鐘系統(tǒng)
- 單片機(jī)課程設(shè)計基于pic24智能小車設(shè)計
- 基于單片機(jī)的電子鬧鐘設(shè)計-單片機(jī)原理及系統(tǒng)課程設(shè)計報告
- 單片機(jī)課程設(shè)計--基于單片機(jī)的電子鐘的設(shè)計
- 基于單片機(jī)的電子密碼鎖設(shè)計 單片機(jī)課程設(shè)計
- 單片機(jī)課程設(shè)計---基于單片機(jī)的電子密碼鎖設(shè)計
- 單片機(jī)課程設(shè)計—基于單片機(jī)的電子琴
- 單片機(jī)課程設(shè)計--基于單片機(jī)的秒表系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計---基于51單片機(jī)的電子鐘設(shè)計
- 單片機(jī)課程設(shè)計---基于單片機(jī)的電子密碼鎖設(shè)計
- 單片機(jī)課程設(shè)計報告-- 基于單片機(jī)的電子時鐘設(shè)計
- 單片機(jī)課程設(shè)計---基于單片機(jī)溫度測量系統(tǒng)設(shè)計
- 單片機(jī)課程設(shè)計報告--基于單片機(jī)的電子時鐘
- 基于單片機(jī)的電子課程表系統(tǒng)課程設(shè)計
- 單片機(jī)畢業(yè)設(shè)計---基于pic單片機(jī)的多路溫度巡回檢測系統(tǒng)
評論
0/150
提交評論