版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 頻率計的程序設計</b></p><p><b> 1頻率計設計</b></p><p><b> 編寫頻率計程序。</b></p><p> 要求:1)能夠測量頻率并顯示。</p><p> 2)能夠進行閘門時間選擇。</p>
2、<p> 2設計過程及論文的基本要求</p><p> ?。?).課程設計論文是體現(xiàn)和總結課程設計成果的載體,一般不應少于3000字。</p><p> ?。?).學生應撰寫的內(nèi)容為:中文摘要和關鍵詞、目錄、正文、參考文獻等。課程設計論文的結構及各部分內(nèi)容要求可參照《沈陽工程學院畢業(yè)設計(論文)撰寫規(guī)范》執(zhí)行。應做到文理通順,內(nèi)容正確完整,書寫工整,裝訂整齊。</p&
3、gt;<p> (3).論文要求打印,打印時按《沈陽工程學院畢業(yè)設計(論文)撰寫規(guī)范》的要求進行打印。</p><p> ?。?). 課程設計論文裝訂順序為:封面、任務書、成績評審意見表、中文摘要和關鍵詞、目錄、正文、參考文獻。</p><p><b> 3.時間進度安排;</b></p><p><b> 中文摘
4、要</b></p><p> 數(shù)字頻率計是計算機、通訊設備、音頻視頻等科研生產(chǎn)領域不可缺少的測量儀器。它是一種用十進制數(shù)字顯示被測信號頻率的數(shù)字測量儀器。它的基本功能是測量正弦信號,方波信號及其他各種單位時間內(nèi)變化的物理量。在進行模擬、數(shù)字電路的設計、安裝、調試過程中,由于其使用十進制數(shù)顯示,測量迅速,精確度高,顯示直觀,經(jīng)常要用到頻率計。 </p><p> 本數(shù)字頻率計
5、將采用定時、計數(shù)的方法測量頻率,采用一個 LCD顯示器動態(tài)顯示5數(shù)。測量范圍從1Hz-2MHz的方波。</p><p> 基本設計原理是通過控制按鈕來控制閘門時間,利用T1進行定時,定的時間即為閘門時間,同時在定時的同時利用T0進行計數(shù),一旦時間到了,就開始對TH0和TL0中的數(shù)進行數(shù)據(jù)轉換,轉換后的BCD碼利用液晶顯示器顯示出來即可。</p><p> 頻率測量儀器使用在生產(chǎn)和科研的
6、各個部門,也是某些大型系統(tǒng)的重要組成部分,實現(xiàn)頻率測量有專用的頻率測量儀器,但不易用于特殊場合.本設計介紹的用單片機實現(xiàn)的頻率測量儀,利用分頻和單片機的計數(shù)功能來實現(xiàn)等精度的測量.該頻率測量儀器可獨立使用;也可方便的嵌入電路系統(tǒng)中;并且將降低產(chǎn)品的成本,有利于新產(chǎn)品的設計與研制。</p><p> 本次設計通過對一個基于單片機的功能實現(xiàn)頻率計的設計學習,詳細介紹了單片機應用中的數(shù)據(jù)轉換顯示,LED顯示原理,單片
7、機的定時原理。從而達到學習、了解單片機相關指令在各方面的應用。</p><p><b> 目錄</b></p><p><b> 課程設計任務書I</b></p><p> 單片機 課程設計成績評定表III</p><p><b> 中文摘要IV</b><
8、/p><p> 1 設計任務描述1</p><p> 1.1設計題目:串行通信電路1</p><p> 1.2設計要求:1</p><p> 1.2.1設計目的:1</p><p> 1.2.2基本要求:1</p><p> 1.2.3發(fā)揮部分:1</p>&l
9、t;p><b> 2 設計思路2</b></p><p><b> 3設計方框圖3</b></p><p> 4 各部分程序設計4</p><p> 4.1程序初始化4</p><p> 4.2系統(tǒng)時鐘初始化5</p><p> 4.3交叉開關初始
10、化5</p><p> 4.4定時器0/1初始化5</p><p> 4.5 LCD初始化6</p><p> 4.6 測頻部分6</p><p> 4.7 測占空比部分8</p><p> 5 編程過程所遇問題9</p><p> 5.1 P5口問題9</
11、p><p> 5.2 交叉開關問題9</p><p> 5.3 數(shù)組問題9</p><p> 5.4 定義變量問題9</p><p> 6 編程過程未解決問題9</p><p> 6.1 占空比測量問題9</p><p> 6.2 液晶屏LCD問題9</p>&
12、lt;p> 7 元器件清單10</p><p> 8 主要器件介紹11</p><p> 8.1 C8051f020單片機11</p><p> 8.1.1管腳圖11</p><p> 8.1.2簡介11</p><p><b> 小結13</b></p>
13、<p><b> 致謝14</b></p><p><b> 參考文獻15</b></p><p><b> 程序源代碼16</b></p><p><b> 1 設計任務描述</b></p><p> 1.1設計題目:串行通
14、信電路</p><p><b> 1.2設計要求:</b></p><p> 1.2.1設計目的:</p><p> ?。?)掌握了解單片機各部分的綜合應用</p><p> ?。?)熟悉Silicon Laboratories IDE的仿真方法。</p><p> 1.2.2基本要求:&l
15、t;/p><p> ?。?)能夠測量頻率并顯示。</p><p> (2)能夠進行閘門時間選擇</p><p> 1.2.3發(fā)揮部分:</p><p><b> ?。?)量程切換。</b></p><p> ?。?)占空比的測量。</p><p><b> 2
16、設計思路</b></p><p> 由于此程序是基于C8051F020單片機的程序設計,主要的設計思路是利用信號發(fā)生器產(chǎn)生1HZ~2MHZ的方波,通過單片機的P0^0端口輸入進單片機,進過單片機的處理,再由51單片機的實驗箱的液晶屏進行顯示,具體思路如下:</p><p> (1)首先是對單片機的定時計數(shù)部分進行初始化的設定。選擇片外的12M晶振,</p>&
17、lt;p> 對液晶顯示器進行初始化設定,對定時計數(shù)部分進行特殊功能寄存器的初始化設置和選擇。</p><p> ?。?)計數(shù)器T0和定時器T1的應用。</p><p> 采用T0對外部輸入的脈沖進行計數(shù),用T1來設置閘門時間。當T1發(fā)生中斷的時候關閉計數(shù)器T0,并把此時的TH0、TL0的數(shù)據(jù)儲存起來,為后續(xù)的數(shù)據(jù)處理做準備,此部分是本頻率計設計的核心部分,此部分分的對計數(shù)器T0和
18、定時器T1的開啟關閉設計時應該注意,因為當外部輸入的脈沖頻率較大時,會對測量結果產(chǎn)生較大的誤差,所以盡量做到啟動定時時就對外部脈沖進行計數(shù),定時器T1發(fā)生中斷就停止T0的計數(shù)此時所測的頻率較為準確。</p><p> ?。?)數(shù)據(jù)的轉化部分。</p><p> 由于T1發(fā)生中斷,此時記錄T0的計數(shù)值。因為貯存的數(shù)據(jù)為十六進制,所以需對此數(shù)據(jù)進行轉化成十進制,存入事先定義好的數(shù)組,為下一部
19、分的顯示部分做準備。此部分的要求也較高,因為要把最大值FFFF,數(shù)據(jù)轉化成65536,所以存數(shù)據(jù)的數(shù)組應為一維,至少長度為五。并且要按位存入數(shù)組,對數(shù)據(jù)進行轉化時要分好是十進制還是十六進制。</p><p> ?。?)數(shù)據(jù)的顯示部分。</p><p> 對液晶顯示器進行初始化之后,在對數(shù)組中的數(shù)據(jù)進行按位的顯示,最后顯示出所測數(shù)據(jù)。</p><p> ?。?)占空
20、比的測量部分。</p><p> 此部分的原理是利用定時器T1的定時功能,對P0^0進行定義,當檢測到P0^0有上升沿時啟動定時器,但檢測到下降延時,記錄此時的TH0、TL0的值,此時的數(shù)為高電平的時間,在檢測到上升沿時停止計時,記錄此時的TH0、TL0的值,此時記錄的值為整個脈沖的周期。兩部分相除所得的即為所測脈沖的占空比。再經(jīng)過數(shù)據(jù)處理存入數(shù)組,送到顯示部分顯示。</p><p>
21、 以上為我編寫的程序的主要思路。</p><p><b> 3設計方框圖</b></p><p><b> 4 各部分程序設計</b></p><p><b> 4.1程序初始化</b></p><p> 此部分的主要內(nèi)容為對主程序的初始化,定義變量和庫函數(shù)的調用,其中
22、包括定義長整形,無符號字符型、無符號整形、無符號長整形、位型。還包括數(shù)組的定義等。</p><p> #include<c8051f020.h></p><p> #include<intrins.h></p><p> unsigned long x;</p><p> unsigned char *lcd;
23、</p><p> unsigned char M;</p><p> unsigned char n;</p><p> unsigned char h;</p><p> unsigned char e;</p><p> unsigned int tl0;</p><p> u
24、nsigned int tl00;</p><p> unsigned int th00;</p><p> unsigned char m1;</p><p> unsigned char m11;</p><p> unsigned int th0;</p><p> unsigned long t;&l
25、t;/p><p> unsigned long t0;</p><p> unsigned long t00;</p><p> unsigned char aaa;</p><p> unsigned char A;</p><p> sbit P52=P1^1;</p><p>
26、sbit P51=P1^0;</p><p> sbit P53=P1^2;</p><p> sbit P58=P1^7;</p><p> sbit a=P2^0;</p><p> sbit b=P2^1;</p><p> sbit c=P2^2;</p><p> sbit
27、 d=P2^7;</p><p> sbit in=P0^0;</p><p> unsigned char temp,data1;</p><p> unsigned char HMS[9]={"freoufce:"},YMD[10]={0x0,0x00,0X0,0X0,0x00,"KHZ"};</p>
28、<p> unsigned char YME[10]={0x0,0x00,0X0,0X0,0x00,"HZ"};</p><p> unsigned char YMM[10]={0x0,0x0,0X0,0X0,0x00,"MHZ"};</p><p> unsigned char ZK[2]={0x0,0x00};</p>
29、<p> unsigned char ZKB[14]={"ZHAN KONG BI :"};</p><p> #define SYSCLK 11059200</p><p> void SYSCLK_Init(void);</p><p> void PORT_Init(void);</p><p>
30、; void Time01_Init(void);</p><p> void LCD_Init(void);</p><p> unsigned int Frequence;</p><p> unsigned int WAN,QIAN,BAI,SHI,GE,FF;</p><p> 4.2系統(tǒng)時鐘初始化</p>&
31、lt;p> void SYSCLK_Init(void)</p><p><b> {</b></p><p> int i; </p><p> OSCXCN=0x67; //啟動外部11.0592MHZ晶振</p><p
32、> for(i=0;i<255;i++);</p><p> while((OSCXCN & 0x80) == 0x00);</p><p> OSCICN=0x88; //選擇外部晶振作為系統(tǒng)時鐘</p><p><b> }</b></p><p>
33、4.3交叉開關初始化</p><p> void PORT_Init(void)</p><p><b> {</b></p><p> XBR0=0x00;</p><p> XBR1=0x02; //交叉開關使能T0</p><p>
34、XBR2=0x40; //使能交叉開關</p><p> P74OUT=0xf0;</p><p> P1MDOUT=0xff;</p><p><b> }</b></p><p> 4.4定時器0/1初始化</p><p> void
35、Time01_Init(void)</p><p><b> {</b></p><p> EA=0; //關總使能</p><p> TR0=0; //關定時器T0</p><p> TR1=0;
36、 //關定時器T1</p><p><b> IE=0x00;</b></p><p><b> TF1=0;</b></p><p> TMOD=0x15; //定時器1為16位定時器方式</p><p><b>
37、 IP=0x08;</b></p><p> CKCON=0x18;</p><p><b> }</b></p><p> 4.5 LCD初始化</p><p> void LCD_Init(void)</p><p><b> {</b><
38、/p><p><b> P6=0x09;</b></p><p> for(x=0;x<50000;x++);</p><p> P7=0x30; //一行顯示</p><p><b> P6=0x08;</b><
39、/p><p><b> P6=0X09;</b></p><p> for(x=0;x<1000;x++);</p><p><b> P7=0x0e;</b></p><p><b> P6=0x08;</b></p><p><b&g
40、t; P6=0X09;</b></p><p> for(x=0;x<1000;x++);</p><p><b> P7=0x06;</b></p><p><b> P6=0x08;</b></p><p><b> P6=0X09;</b>&l
41、t;/p><p> for(x=0;x<5000;x++);</p><p> P7=0x01; //清屏</p><p><b> P6=0x08;</b></p><p><b> P6=0X09;</b></p
42、><p> for(x=0;x<5000;x++);}</p><p><b> 4.6 測頻部分</b></p><p> 4.6.1 量程選擇部分</p><p> if(P52==1) //判斷P52端口是否為1</p>&l
43、t;p> {b=0; //燈亮</p><p><b> ET1=1;</b></p><p> TH1=(-SYSCLK/1000)>>8; //定時1ms</p><p> TL1=-SYSCLK/1000;<
44、/p><p> TR1=1; //啟動T0、T1</p><p><b> TR0=1;}</b></p><p> else if(P51==1) //判斷P51端口是否為1</p><p><b&g
45、t; {a=0;</b></p><p> TR0=1; //啟動T0</p><p><b> TF1=0; </b></p><p> for(aaa=0;aaa<239;aaa++) </p><p>
46、; {TH1=0x4c; </p><p><b> TL1=0x00;</b></p><p> TR1=1; //此部分for循環(huán)利用查詢方式</p><p> while(!TF1); 定時1s<
47、/p><p><b> TF1=0;}</b></p><p><b> ET1=1;</b></p><p> TH1=0x4c; </p><p><b> TL1=0x00;</b></p><p><b> }</b>
48、</p><p> else if(P53==1) //判斷P52端口是否為1</p><p><b> { c=0;</b></p><p><b> ET1=1;</b></p><p> TH1=(-SYSCLK/1000)>>
49、;8;</p><p> TL1=-SYSCLK/1000;</p><p><b> TR1=1;</b></p><p><b> TR0=1; }</b></p><p> Else //如若P5端口全部為0,則把
50、燈全部關斷</p><p> { P2=0xff;</p><p><b> TR0=0;</b></p><p> YME[0]=0x00; //無檔時對數(shù)組清零</p><p> YME[1]=0x00; </p><p> YME
51、[2]=0x00; </p><p> YME[3]=0x00; </p><p> YME[4]=0x00;}</p><p><b> }</b></p><p> 4.6.2 測頻顯示部分</p><p><b> P6=0x0d;</b></p>
52、<p> for(x=0;x<1000;x++);</p><p> if(P58==0)</p><p><b> {h=9;</b></p><p> lcd=&HMS;} //將"freoufce:"顯示出來</p>
53、<p><b> else</b></p><p><b> {h=14;</b></p><p> lcd=&ZKB;} //將"ZHAN KONG BI :"顯示出來</p><p> for(M=h;M>0
54、;M--)</p><p><b> {</b></p><p> data1=*lcd;</p><p><b> P7=data1;</b></p><p><b> P6=0x0c;</b></p><p><b> P6=0x
55、0d;</b></p><p><b> lcd++;</b></p><p> for(x=0;x<100;x++);</p><p><b> }</b></p><p> if(P58==0)</p><p><b> {h=7;&
56、lt;/b></p><p> if(P52==1)</p><p> {lcd=&YMD;} //將"KHZ"的數(shù)據(jù)顯示出來</p><p> else if(P51==1)</p><p> {lcd=&YME;}
57、 //將"HZ"的數(shù)據(jù)顯示出來</p><p> else if(P53==1)</p><p> {lcd=&YMM;} //將"MHZ"的數(shù)據(jù)顯示出來</p><p><b> else</b></p>&
58、lt;p> {lcd=&YME;}} //將"0HZ"的數(shù)據(jù)顯示出來</p><p><b> else</b></p><p><b> { h=2;</b></p><p> lcd=&ZK;}
59、 //顯示預算后的占空比</p><p> for(M=h;M>0;M--)</p><p><b> {</b></p><p> data1=*lcd;</p><p> if (data1<0x40)</p><p> data1+=0x30
60、;</p><p><b> P7=data1;</b></p><p><b> P6=0x0c;</b></p><p><b> P6=0x0d;</b></p><p><b> lcd++;</b></p><p>
61、; for(x=0;x<100;x++);</p><p><b> }</b></p><p><b> }</b></p><p> 4.7 測占空比部分</p><p> { d=0; //燈亮</p&
62、gt;<p><b> TH1=0;</b></p><p><b> TL1=0;</b></p><p> while(!in); //查詢方波上升沿</p><p> TR1=1; /
63、/啟動定時器T1</p><p> while(in); //查詢方波下降沿</p><p> th0=TH1;tl0=TL1; //記錄高電平時間</p><p> while(!in); //查詢方波上升沿</
64、p><p><b> TR1=0;</b></p><p> th00=TH1;tl00=TL1;</p><p> t0=th0*0x100+tl0; //對所得數(shù)據(jù)進行計算</p><p> t00=th00*0x100+tl00;</p><p>
65、 t=t0*100/t00;</p><p> ZK[0]=t/10; //存入數(shù)組</p><p> ZK[1]=t%10;</p><p><b> TH1=0;</b></p><p><b> TL1=0;</b></p&g
66、t;<p><b> }</b></p><p> 5 編程過程所遇問題</p><p><b> 5.1 P5口問題</b></p><p> 編程中遇到需要對量程進行切換問題,需用P5口,過程中忽略了P5口不可位尋址,最終轉化到P1口,進行判斷,并且須定義了中間變量A.</p>&l
67、t;p> 5.2 交叉開關問題</p><p> 編程中遇到了對可位尋址端口進行賦值,但觀察無效,其忽略了交叉開關問題,將賦值語句加到了交叉開關使能的上端,致使語句無效,最終發(fā)現(xiàn)問題解決。</p><p><b> 5.3 數(shù)組問題</b></p><p> 由于顯示和存儲數(shù)據(jù)時需用到數(shù)組,所以要定義數(shù)組,但過程中發(fā)現(xiàn),數(shù)組的大小
68、一定要足夠大才能完整顯示</p><p> 5.4 定義變量問題</p><p> 在進行占空比測量時,須定義變量,由于定時器1定時時需要較多的變量,忽略了長整形,浮點型等的區(qū)別,造成數(shù)據(jù)的無法采集。</p><p> 6 編程過程未解決問題</p><p> 6.1 占空比測量問題</p><p> 由于低
69、頻段周期較長,會造成定時器溢出,無法準確記錄周期和高電平時間,所以只能測量1KHZ~6KHZ.</p><p> 6.2 液晶屏LCD問題</p><p> 液晶屏一行顯示,并且只能從側面看清顯示的數(shù)據(jù)。</p><p><b> 7 元器件清單</b></p><p><b> 8 主要器件介紹<
70、;/b></p><p> 8.1 C8051f020單片機</p><p><b> 8.1.1管腳圖</b></p><p> 圖7.1 c8051f020引腳圖</p><p><b> 8.1.2簡介</b></p><p> C8051F020 器
71、件是完全集成的混合信號系統(tǒng)級MCU芯片, 具有64 個數(shù)字I/O 引腳 (C8051F020/2)或32 個數(shù)字I/O 引腳(C8051F021/3)。下面列出了一些主要特性; </p><p> 1. 高速、流水線結構的8051 兼容的CIP-51 內(nèi)核(可達25MIPS) </p><p> 2. 全速、非侵入式的在系統(tǒng)調試接口(片內(nèi)) &l
72、t;/p><p> 3. 真正12 位(C8051F020/1)或10 位(C8051F022/3)、100 ksps 的8 通道ADC,帶PGA和模擬多路開關 </p><p> 4. 真正8 位500 ksps 的ADC,帶PGA 和8 通道模擬多路開關 </p><p> 5. 兩個12 位DAC,
73、具有可編程數(shù)據(jù)更新方式 </p><p> 6. 64K 字節(jié)可在系統(tǒng)編程的FLASH 存儲器 </p><p> 7. 4352(4096+256)字節(jié)的片內(nèi)RAM </p><p> 8. 可尋址64K 字節(jié)地址空間的外部數(shù)據(jù)存儲器接口 </p><p> 9.h
74、8697; 硬件實現(xiàn)的SPI、SMBus/ I2C 和兩個UART 串行接口 </p><p> 10. 5 個通用的16 位定時器</p><p> 11. 具有5 個捕捉/比較模塊的可編程計數(shù)器/定時器陣列 </p><p> 12. 片內(nèi)看門狗定時器、VDD 監(jiān)視器和溫度傳感器 </p><p> 13 具有片內(nèi)VDD 監(jiān)視
75、器、看門狗定時器和時鐘振蕩器的C8051F020 是真正能獨立工作的片上系統(tǒng)。 </p><p> C8051F020單片機所有模擬和數(shù)字外設均可由用戶固件使能/禁止和配置。FLASH 存儲器還具有在系統(tǒng)重新編程能力,可用于非易失性數(shù)據(jù)存儲,并允許現(xiàn)場更新8051 固件。片內(nèi)JTAG 調試電路允許使用安裝在最終應用系統(tǒng)上的產(chǎn)品MCU 進行非侵入式(不占用片內(nèi)資源)、全速、在系統(tǒng)調試。該調試系統(tǒng)支持觀察和修改存儲
76、器和寄存器,支持斷點、觀察點、單步及運行和停機命令。在使用JTAG 調試時,所有的模擬和數(shù)字外設都可全功能運行。</p><p><b> 小結</b></p><p> 本次我課程設計的題目是頻率計的程序設計,這次課程設計我們查閱了許多的相關文獻和書籍。因為剛看到這個題目的時候,大家都不了解。前期都處于迷茫狀態(tài)。此次課設是二周的時間,第一天,老師對每個題目都做了
77、解釋及其具體的要求,使邏輯電路的輪廓逐漸清晰起來。知道了從何處下手。</p><p> 大家都知道,課程設計是用我們課程知識綜合應用的實踐訓練;是我們邁向社會,從事職業(yè)工作前一個必不少的過程。所以我很珍惜這次機會,在老師講完的時候,我們就有了一個模塊的思路。</p><p> 我們今天認真的進行課程設計,學會腳踏實地邁開實踐這一步,就是為明天能穩(wěn)健地在社會大潮中奔跑打下堅實的基礎。在這
78、次的課程設計中,不僅檢驗了我所學習的知識,也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設計過程中,與同學分工設計,和同學們相互探討,相互學習,相互監(jiān)督。學會了合作,學會了運籌帷幄,學會了寬容,學會了理解,也學會了做人與處世。這一周內(nèi), 我感觸最深的當屬查閱大量的設計資料了。無論是課本上的,還是網(wǎng)上的都瀏覽了不少相關的設計思路,從中也借鑒了別人的思想,開闊了自己的思路。</p><p>
79、 在設計程序之前,設計者必</p><p> 通過這次訓練,我能夠更好的綜合運用所學知識、獨立分析和解決實際問題。培養(yǎng)了自己的創(chuàng)新意識和創(chuàng)新能力,并獲得了科學研究的基礎訓練和培養(yǎng)了團隊協(xié)作精神。</p><p> 。在與老師交流、請教之間,課學對所用的知識內(nèi)部有一個深刻的理解,知道具體應用的是哪一部分的知識。更要有一個清晰的思路和一個完整的結構框圖。在設計邏輯電路時,不能妄想一次就將整
80、個電路圖設計好。 反復修改、不斷改進是整個設計過程的必經(jīng)之路。要養(yǎng)成文件管理的好習慣,因為每個模塊可能仿真的次數(shù)很多,如果不整理好文件,最后可能一團糟。一個邏輯圖的完美與否不僅僅是實現(xiàn)其應有的功能, 而應該讓人一看就能明白你的設計結構。在設計課程過程中遇到問題是很正常的,但我們應該將每次遇到的問題分析清楚,并及時解決,以免下次再碰到同樣的問題。設很快就結束了。一周的時間雖然短暫,但在這一星期的課程設計中收獲很多。</p>
81、<p> 將以前的知識運用到實踐中,大大提升了自己的動手能力。在設計與仿真的過程中,對某些元件的功能及特點有了很好的了解,這對以后的學習或是工作有很大的幫助。</p><p> 課設雖然結束了,但是實踐與求知的路并未結束。</p><p><b> 致謝</b></p><p> 在這次課程設計的過程中,首先要感謝的是呂勇軍老
82、師。沒有老師的幫助,我們要完成整個程序是很困難的。就算是很簡單的一個問題,我們有時候也會檢查不出來,這時候多虧了老師的幫助。是老師的正確指導,才使我的課程設計更加完整。</p><p> 由于此次課程設計涉及的內(nèi)容以前沒有經(jīng)常應用,遇到了很大的困難,設計能夠順利的完成,真的很感謝老師。在老師的講解下,我才有了比較清晰地設計框圖。在每個模塊電路的設計過程中也遇到了很多的問題。每次請教老師的時候,老師都能很仔細、耐
83、心的為我們解答,不管是容易的問題,還是復雜的問題。每次老師在講解以后,我們都會恍然大悟,而且老師也會給出更好的設計提議。使我們設計得更快,更順利。</p><p> 在這里,對其他給我?guī)椭娜艘脖硎菊\摯的謝意。</p><p> 也感謝學校能夠提供一次鍛煉學生將理論與實踐相結合的能力的機會。</p><p> 對我們組來說,是一個合作的團體,所以也感謝我組成員
84、對我的幫助,每次遇到問題的時候,他們一定會幫我解決問題,并鼓勵我。所以在問題解決的同時,也學會了新的東西。大家在一起討論、研究與測試,各自發(fā)揮所長。真的很高興能有這樣的一次機會。</p><p><b> 參考文獻</b></p><p> [1]李光飛 ,樓苗然主編.51系列單片機.北京:北京航空航天大學出版社,2003</p><p>
85、 [2]萬光毅 .Soc單片機實驗、實踐應用設計. 北京:北京航空航天大學出版社,2006</p><p> [3]何立民 .單片機高級教程. 北京:北京航空航天大學出版社,2000</p><p> [4]張俊謨 . Soc單片機原理應與用——基于C8051F系列. 北京:北京航空航天大學出版社,2007</p><p><b> 程序源代碼&l
86、t;/b></p><p> #include<c8051f020.h></p><p> #include<intrins.h></p><p> unsigned long x;</p><p> unsigned char *lcd;</p><p> unsigned c
87、har M;</p><p> unsigned char n;</p><p> unsigned char h;</p><p> unsigned char e;</p><p> unsigned int tl0;</p><p> unsigned int tl00;</p><
88、p> unsigned int th00;</p><p> unsigned char m1;</p><p> unsigned char m11;</p><p> unsigned int th0;</p><p> unsigned long t;</p><p> unsigned lon
89、g t0;</p><p> unsigned long t00;</p><p> unsigned char aaa;</p><p> unsigned char A;</p><p> sbit P52=P1^1;</p><p> sbit P51=P1^0;</p><p&g
90、t; sbit P53=P1^2;</p><p> sbit P58=P1^7;</p><p> sbit a=P2^0;</p><p> sbit b=P2^1;</p><p> sbit c=P2^2;</p><p> sbit d=P2^7;</p><p> sb
91、it in=P0^0;</p><p> unsigned char temp,data1;</p><p> unsigned char HMS[9]={"freoufce:"},YMD[10]={0x0,0x00,0X0,0X0,0x00,"KHZ"};</p><p> unsigned char YME[10]=
92、{0x0,0x00,0X0,0X0,0x00,"HZ"};</p><p> unsigned char YMM[10]={0x0,0x0,0X0,0X0,0x00,"MHZ"};</p><p> unsigned char ZK[2]={0x0,0x00};</p><p> unsigned char ZKB[14
93、]={"ZHAN KONG BI :"};</p><p> #define SYSCLK 11059200</p><p> void SYSCLK_Init(void);</p><p> void PORT_Init(void);</p><p> void Time01_Init(void);</p&
94、gt;<p> void LCD_Init(void);</p><p> unsigned int Frequence;</p><p> unsigned int WAN,QIAN,BAI,SHI,GE,FF;</p><p> void main (void)</p><p><b> { </b
95、></p><p> WDTCN=0xde;</p><p> WDTCN=0xad;</p><p> LCD_Init();</p><p> SYSCLK_Init();</p><p> PORT_Init();</p><p> Time01_Init(); <
96、/p><p><b> A=P5;</b></p><p><b> P1=A;</b></p><p><b> while(1)</b></p><p><b> {A=P5;</b></p><p><b>
97、P1=A;</b></p><p><b> EA=1;</b></p><p> if(P58==0)</p><p> {if(P52==1)</p><p><b> {b=0;</b></p><p><b> ET1=1;</b
98、></p><p> TH1=(-SYSCLK/1000)>>8;</p><p> TL1=-SYSCLK/1000;</p><p><b> TR1=1;</b></p><p><b> TR0=1;</b></p><p><b>
99、; }</b></p><p> else if(P51==1)</p><p><b> {a=0;</b></p><p><b> TR0=1;</b></p><p><b> TF1=0; </b></p><p>
100、for(aaa=0;aaa<239;aaa++)</p><p><b> {</b></p><p> TH1=0x4c; </p><p><b> TL1=0x00;</b></p><p><b> TR1=1;</b></p><p&
101、gt; while(!TF1);</p><p><b> TF1=0;</b></p><p><b> }</b></p><p><b> ET1=1;</b></p><p> TH1=0x4c; </p><p><b>
102、 TL1=0x00;</b></p><p><b> }</b></p><p> else if(P53==1)</p><p><b> { c=0;</b></p><p><b> ET1=1;</b></p><p>
103、TH1=(-SYSCLK/1000)>>8;</p><p> TL1=-SYSCLK/1000;</p><p><b> TR1=1;</b></p><p><b> TR0=1; }</b></p><p><b> else</b></p&g
104、t;<p> { P2=0xff;</p><p><b> TR0=0;</b></p><p> YME[0]=0x00; </p><p> YME[1]=0x00; </p><p> YME[2]=0x00; </p><p> YME[3]=0x00; <
105、;/p><p> YME[4]=0x00;}</p><p><b> }</b></p><p><b> else</b></p><p><b> { d=0;</b></p><p><b> TH1=0;</b>
106、</p><p><b> TL1=0;</b></p><p> while(!in);</p><p><b> TR1=1;</b></p><p> while(in);</p><p> th0=TH1;tl0=TL1;</p><p&
107、gt; while(!in);</p><p><b> TR1=0;</b></p><p> th00=TH1;tl00=TL1;</p><p> t0=th0*0x100+tl0;</p><p> t00=th00*0x100+tl00;</p><p> t=t0*100/
108、t00;</p><p> ZK[0]=t/10;</p><p> ZK[1]=t%10;</p><p><b> TH1=0;</b></p><p><b> TL1=0;</b></p><p><b> }</b></p>
109、;<p><b> P6=0x0d;</b></p><p> for(x=0;x<1000;x++);</p><p> if(P58==0)</p><p><b> {h=9;</b></p><p> lcd=&HMS;}</p><
110、p><b> else</b></p><p><b> {h=14;</b></p><p> lcd=&ZKB;}</p><p> for(M=h;M>0;M--)</p><p><b> {</b></p><p>
111、; data1=*lcd;</p><p><b> P7=data1;</b></p><p><b> P6=0x0c;</b></p><p><b> P6=0x0d;</b></p><p><b> lcd++;</b></p&
112、gt;<p> for(x=0;x<100;x++);</p><p><b> }</b></p><p> if(P58==0)</p><p><b> {h=7;</b></p><p> if(P52==1)</p><p> {lc
113、d=&YMD;}</p><p> else if(P51==1)</p><p> {lcd=&YME;}</p><p> else if(P53==1)</p><p> {lcd=&YMM;}</p><p><b> else</b></p>
114、<p> {lcd=&YME;}}</p><p><b> else</b></p><p><b> { h=2;</b></p><p><b> lcd=&ZK;}</b></p><p> for(M=h;M>0;M--)
115、</p><p><b> {</b></p><p> data1=*lcd;</p><p> if (data1<0x40)</p><p> data1+=0x30;</p><p><b> P7=data1;</b></p><
116、p><b> P6=0x0c;</b></p><p><b> P6=0x0d;</b></p><p><b> lcd++;</b></p><p> for(x=0;x<100;x++);</p><p><b> }</b>
117、</p><p><b> }</b></p><p><b> }</b></p><p> void SYSCLK_Init(void)</p><p><b> {</b></p><p><b> int i;</b&g
118、t;</p><p> OSCXCN=0x67;</p><p> for(i=0;i<255;i++);</p><p> while((OSCXCN & 0x80) == 0x00);</p><p> OSCICN=0x88;</p><p><b> }</b>&l
119、t;/p><p> void PORT_Init(void)</p><p><b> {</b></p><p> XBR0=0x00;</p><p> XBR1=0x02;</p><p> XBR2=0x40;</p><p> P74OUT=0xf0;&l
120、t;/p><p> P1MDOUT=0xff;</p><p><b> }</b></p><p> void Time01_Init(void)</p><p><b> {</b></p><p><b> EA=0;</b></p&g
121、t;<p><b> TR0=0;</b></p><p><b> TR1=0;</b></p><p><b> IE=0x00;</b></p><p><b> TF1=0;</b></p><p> TMOD=0x15;&
122、lt;/p><p><b> IP=0x08;</b></p><p> CKCON=0x18;</p><p><b> }</b></p><p> void TIMER1_ISR(void) interrupt 3 using 1</p><p><b>
123、 {</b></p><p><b> TR0=0;</b></p><p><b> ET1=0;</b></p><p><b> TF1=0;</b></p><p><b> TR1=0;</b></p><
124、;p><b> TF0=0;</b></p><p> Frequence=TH0*0x100+TL0;</p><p> if(P52==1)</p><p> {WAN=Frequence/0x2710;</p><p> YMD[0]=WAN;</p><p> FF=Fr
125、equence%0x2710;</p><p> QIAN=FF/0x03e8;</p><p> YMD[1]=QIAN;</p><p> FF=FF%0x03e8;</p><p> BAI=FF/0x64;</p><p> YMD[2]=BAI;</p><p> FF=F
126、F%0x64;</p><p> SHI=FF/0x0a;</p><p> YMD[3]=SHI;</p><p> FF=FF%0x0a;</p><p><b> GE=FF;</b></p><p> YMD[4]=GE;}</p><p> else
127、if(P51==1)</p><p> {WAN=Frequence/0x2710;</p><p> YME[0]=WAN;</p><p> FF=Frequence%0x2710;</p><p> QIAN=FF/0x03e8;</p><p> YME[1]=QIAN;</p><
128、;p> FF=FF%0x03e8;</p><p> BAI=FF/0x64;</p><p> YME[2]=BAI;</p><p> FF=FF%0x64;</p><p> SHI=FF/0x0a;</p><p> YME[3]=SHI;</p><p> FF=F
129、F%0x0a;</p><p><b> GE=FF;</b></p><p> YME[4]=GE;}</p><p> if (P53==1)</p><p> {WAN=Frequence/0x2710;</p><p><b> YMM[0]=0;</b>&
130、lt;/p><p> FF=Frequence%0x2710;</p><p> QIAN=FF/0x03e8;</p><p> YMM[4]=QIAN;</p><p> FF=FF%0x03e8;</p><p> BAI=FF/0x64;</p><p><b> YM
131、M[2]=0;</b></p><p> FF=FF%0x64;</p><p> SHI=FF/0x0a;</p><p><b> YMM[3]=0;</b></p><p> FF=FF%0x0a;</p><p><b> GE=FF;</b>&
132、lt;/p><p> YMM[1]=0; }</p><p><b> TH0=0x00;</b></p><p><b> TL0=0x00;</b></p><p><b> TH1=0x00;</b></p><p> TL1=0x00;}&
133、lt;/p><p> void LCD_Init(void)</p><p><b> {P6=0x09;</b></p><p> for(x=0;x<50000;x++);</p><p><b> P7=0x30;</b></p><p><b>
134、 P6=0x08;</b></p><p><b> P6=0X09;</b></p><p> for(x=0;x<1000;x++);</p><p><b> P7=0x0e;</b></p><p><b> P6=0x08;</b></
135、p><p><b> P6=0X09;</b></p><p> for(x=0;x<1000;x++);</p><p><b> P7=0x06;</b></p><p><b> P6=0x08;</b></p><p><b>
136、; P6=0X09;</b></p><p> for(x=0;x<5000;x++);</p><p><b> P7=0x01;</b></p><p><b> P6=0x08;</b></p><p><b> P6=0X09;</b><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機頻率計課程設計
- 單片機頻率計課程設計
- 課程設計--基于單片機的頻率計
- 簡易頻率計單片機課程設計
- 單片機簡易頻率計課程設計
- 單片機課程設計報告---頻率計
- 單片機課程設計報告--- 基于單片機的頻率計設計
- 用8051單片機實現(xiàn)頻率計
- 單片機課程設計--頻率計的設計
- 單片機課程設計--基于單片機數(shù)字頻率計設計
- 單片機課程設計報告-簡易頻率計
- 單片機簡易頻率計課程設計報告
- 課程設計----基于51系列單片機的頻率計
- 基于c8051f020單片機的電機變頻遙控控制系統(tǒng)
- 基于單片機C8051F020太陽光導入器的研究.pdf
- 基于C8051F020單片機的多生理信號檢測儀.pdf
- 單片機課程設計(數(shù)字頻率計)
- 單片機課程設計---數(shù)字頻率計
- 單片機數(shù)字頻率計課程設計
- 單片機課程設計---數(shù)字頻率計
評論
0/150
提交評論