




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
作作本文是講座《單片機C語言程序設計》的結束篇,為了幫助大家更好地掌握前面所學的知識,歸納性地介紹初學者用C語言編PC單片機實用程序時應具備的思維方法和基本知識,并通過下面的實例進行一次小結,以期對大家今后深入學習PC單片機C語言程序設計一個完整的PIC單片機C語言源程序應包主函數main()、若干個其他功能函數、各種功能C語句,以及已定義的函數和函數體、注釋等說明:對PIC單片機中級或中級以下的產品,其頭文件是#include<pic.h>和#include<pic1687x.h>;對高級產品,如PIC18F452器件,其頭文件是#include<pic18.h>和#include<pic18fxx2.h>。C程序的運行,總是從主函數 )開(可以通過模擬仿真直接觀察到),由主函數調用其他函數,其他函數也可互相調用,如此運行工作。而C序結構、選擇結構和循環結構等。這里的順序結構,,;是指程序根據某條件的存在執行一段程序,直到條件為止,若該條件存在,就成循用匯編語言編輯一個較大的PIC單片機程序
時,一般分為多個程序模塊,每個模塊的子程序C模塊的功能是用函數實現的,即函數相當于匯編來說明PIC單片機C語言程序的基本組成格式。延時函數是PIC單片機源程序中出現頻率較高的函數,而且具有相同功能的延時函數也有多所的三種延時函數都是由循環控制語句——while、do_while和for等實現的。帶形式參數的由for語句組成的延時函數voiddelay(unsignedint{unsignedinti,j;}該延時函數由兩個for語句組成,第一個for語句中的81是筆者設置的常數(可任意設定,用于使延時值增加;第二個for語句中的k是在程序中主函數main()調用delay(k)時,由用戶給定的值,k值不同,延時時間就不等,所以該延時函數可在一個C程序中實現不同的多個延時量,顯然比匯編語言延時子程序簡單多了。在延時量要求較短時,該延時函數種的兩個for語句的功能可用一個for語句來實現。帶形式參數的由while循環語句組成的 deley(unsignedlongint{UnsignedlongintWhile(--}{此延時函數簡單、容易。使用時,在程序中主函數main()調用delay(k)時,由用戶給定不同的k值,亦可實現多種延時值。帶形式參數的由do-while語句組成的 longint{Unsignedintlongj=o;do{}While(j<=k);}該延時函數簡單易記。使用時,在程序中主函數main()調用delay(k)時,由用戶給定不同的k值,即可實現多種延時值。需要說明的是,上述由while循環語句和由do-while語句組成的延時函數中的形式參數,不一定用長整型(longink)。⒉電路功能相同形式不同的四種C下面介紹利用PIC16F84A單片機的PORTB端口外接的8只LED,采用四種C程序控制端口的LED燈,來說明編輯C語言程序時的基本格式及其靈活性。電路參見《電子制作》2009年9期《單片機C語言程序設計(11,程序流程如圖64所示,采用的是無限循環工作方式。開開PORTB口的LED全亮3(1)C程序一,文件名為pic09.c,如下
#include //頭文件voiddelay(unsignedlongint//延時函數開始{unsignedintlong//由do-while組成的延時執行語句{}}main( //主函數開始{TRISB=0x0//設置PORTB口全為輸出 //關閉所有中斷 //RB口先送低電平 //永久循環開始{//RB口外接LED其1、3、5、7點亮//點亮的LED延時1秒后關閉//RB口外接LED其2、4、6、8點亮//點亮的LED延時2秒后關閉PORTB=0xFF;//RB口外接LED全亮//全亮的LED延時3秒后關閉}}并由do-while語句組成。b.主函數main()調用delay(kK分別是45000(1秒)、98000(2秒)、和155000(3c.LED燈點亮時的無限循環,由while(1)語(2)C程序二,文件名為pic10.c,如下#include<pic.h>//頭文件voiddelay(K)//延時函數unsignedlongintK;//形參數(k)說明{unsignedlongint//說明語句while(--//由while}}main( //主函數開始{//設置PORTB口全為輸出INTCON=0x00;//關閉所有中斷PORTB=0x00;//RB口先送低電平 //語句標號(無限循環)//RB口外接LED其1、3、5、7點亮//點亮的LED延時1秒后關閉//RB口外接LED其2、4、6、8點亮delay(74000//點亮的LED延時2秒后關閉 //RB口外接LED全亮//全亮的LED延時3秒后關閉gotoloop;//跳轉到loop處循環}說明:a.上述程序中,延時函數帶形參數k,且由while語句組成。b.主函數main()調用delay(k)時,其k分別是37000(1秒、74000(2秒)(3秒c.LED燈點亮時的無限循環,由goto無條件轉移執行語句完成。其中loop為語句標號。對goto語句使用時應慎重,在簡單的C程序中使用goto語句是必要的,但編輯復雜的C程序結構,會(3)C程序三,文件名為pic11.c,如下#include<pic.h>//頭文件unsignedinth;//無符號的整型變量voiddelay(unsignedlongint//延時函數開始{unsignedintlongi,j;//說明語句//由兩個for語句組成的 //延時執行語句 //繼續循環}main( //主函數開始{
//設置PORTB口全為輸出 //關閉所有中斷PORTB=0x00;//RB口先送低電平 //給h賦置0do-while語句開始循環{//RB口外接LED其1、3、5、7點亮//點亮的LED延時1秒后關閉//RB口外接LED其2、4、6、8點亮//點亮的LED延時2秒后關閉PORTB=0xFF;//RB口外接LED全亮//全亮的LED延時3秒后關閉 //h自增量} //hh=0;//給h賦值0return;//返回}說明:a.上述程序中,延時函數帶形參數M,并由二個for語句組成(可以是多個for語句或一個for語句。b.主函數main()調用delay(M)時,M值分別是500(1秒1000(2秒)和1500(3秒c.LED燈點亮時的無限循環由do_while語句完成,其while(h<=100)中的100可任意選取大于0的其他值。(4)C程序四,文件名為pic12.c,如下#include //頭文件voiddelay(unsignedlongint//延時函數開始{unsignedintlongj;//說明語句for //for}voidlight1(//RB口點LED燈函數1voidlight2();//RB口點LED燈函數2voidlight3();//RB口點LED燈函數main{TRISB=0x//設置PORTB口全為輸出INTCON=0x00;//關閉所有中斷 //RB口先送低電平 //永久循環開始{light1();//調用LED燈函數delay(45000);//調用延時函數(1)light2();//調用LED燈函數2delay(95000);//調用延時函數(2)light3();//調用LED燈函數3delay(145000(3)}}voidlight1()//LED //RBLED1、3、5、7}voidlight2( //LED燈函數 //RBLED其2、4、6、8}voidlight3( //LED燈函數{ //RB口外接LED全亮}a.forM值分別是45000(1、95000(2秒)145000(3秒。LED燈點亮時的無限循環,由while語句上述程序都以LED的各功能函數);light2light3()完成。程序運行時,由主函數main(LED的功能函數和延時函數,此方法是編輯復雜C程序所必備的。PIC單片機端口的位定義PIC單片機是一種系列產品,其端口數和端口的位與具體型號有關。如PIC16F877的端口有PORTA~PORTE,端口的位不都是8位,其PORTA口只有6位(RAO~RA5),
PORTAB、BORTC和PORTD8位,分別為RB0~RB7、RC0~RC7、RD0~RD7。在編輯C程序時,要上述端口的某個位,必須先把這一位的地址確定下來,這可通過@add(address)結構和bit關鍵字來實現,其中@是地址標識符、add(address)是絕對地址。利用上述地址符,可對PIC單片機端口的位進行定義,爾后便可隨意對端口的位進行。下面是對PIC16F84A的PORTB口進行位定義的語句:#dafinePORTBIT(add,bit)((unsigned)SaticbitPORTB_0@PORTBIT(PORTB,0);//定義PORTB的0SaticbitPORTB_1@PORTBIT(PORTB,1)//定義PORTB的1StaticbitPORTB_7@PORTBIT(PORTB,7);//定義PORTB的7其中“&”和”*”符號,在C語言中是作為按位運算符用的,而88位。在編輯PIC單片機C程序時,一旦某個端口,如PORTB義后,其對應位(bit)還可寫成RBO、RB1、RB2、RB3…RB7,以使程序代碼簡化。C(6)pic06.cLED數碼顯示函數的應用下面以倒計數、倒計時C程序實例,說明LED數碼顯示函數disy(x)的應用PIC16F84A4LED數碼顯示電路(參見《單片機C語言程序設計(4)》一文中的圖3、圖4)2位數碼管(另兩位不用)的計時以分為單位,只要有顯示函數disy(),其(2)99~0(以分鐘計)的C源程序如下,程序名為pic13.c。#include<pic.h#definePORTAIT(add,bit)((unsigned)staticbitPORT_2@PORTAIT(PORTA,2//PORTA口位定義staticbitPORT_3@PORTAIT(PORTA,3);staticbitPORT_4@PORTAIT(PORTA,4);unsignedintx=0; //無符號的整形變量voiddelay(unsignedlongintk)//延時函數開始{unsignedlonginti;//說明語句 //for執行語句 //繼續循環}voiddisy(unsignedint//數碼管LED顯示函數{unsignedint//無符號整型變量Dunsignedchar//0~9的7段碼數組unit_bit=x%10;//picc可識別個位數 //picc可識別十位數while(d>0)//while語句開始 //PORTA//個位字段碼數組送B口RA3=0;//RA3賦值0,LED個位顯示delay(200);//延時以便觀察RA3=1;//RA3賦值1,LED個位數滅delay(2);//短延時//十位字段碼數組送B口 //RA20,LED //RA2賦值1,LED十位數滅 //短延時d //d自減量}}voidmain( //主函數開始{ //B口全為輸出 //A口低4位為輸出PORTB=0x40;//給B口低位輸出0 //關閉所有中斷 //A口低位輸出0 //給整形變量x賦值99 //顯示起動信號 //RA4為0}while(1)//while循環語句開始{
dis //調用顯示函 //x自減if(x==-1)//若x自減到-1 //給x賦值99}}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電工技能與實訓》項目8 任務4觸電急救的現場操作訓練
- 小學奧數題目及答案
- 光學神經網絡課件
- 導數與微分課件1
- 高中節奏教學課件
- 藥房維持秩序方案(3篇)
- 2018-2022北京高中合格考生物匯編:基因的表達
- 總部質量抽查方案(3篇)
- 2025年關于六問六反思發言稿
- DB13T 5811-2023 桃雙株錯位V字形整形修剪技術規程
- 《財政學》教學大綱中文版
- 高危新生兒急診服務流程圖
- CLSI EP25-A 穩定性考察研究
- SJG 44-2018 深圳市公共建筑節能設計規范-高清現行
- 職工子女暑期工會愛心托管班的方案通知
- “文化引導型”城市更新思想思考與實踐課件
- 卷心菜中過氧化物酶熱穩定性的初步研究
- 渦輪增壓器系統及常見故障案例
- 宋大叔教音樂第三單元進階版講義2
- 26個科室建設指南
- 童聲合唱訓練講座
評論
0/150
提交評論