衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一個在單片機上練習C語言的模板程序

電子工程師 ? 來源:網絡整理 ? 作者:佚名 ? 2018-02-15 22:54 ? 次閱讀

先給大家附上一套完整的模板源代碼,后面章節練習C語言的模板程序就直接復制此完整的源代碼,此源代碼適合的單片機型號是STC89C52RC,晶振是11.0592MHz,串口波特率是9600,初學者只需修改代碼里從“C語言學習區域的開始”到“C語言學習區域的結束”的區域,其它部分不要更改。可復制的源代碼請到網上論壇原貼處復制或者下載,搜索本教程名字就可以找到原貼出處。一套完整的模板源代碼如下:

#include "REG52.H" void View(unsigned long u32ViewData); void to_BufferData(unsigned long u32Data,unsigned char *pu8Buffer,unsigned char u8Type); void SendString(unsigned char *pu8String); /*---C語言學習區域的開始。-----------------------------------------------*/ void main() //主函數 { unsigned char a; //定義一個變量a。 unsigned int b; //定義一個變量b。 unsigned long c; //定義一個變量c。 a=100; //給變量a賦值。 b=10000; //給變量b賦值。 c=1000000000; //給變量c賦值。 View(a); //在電腦串口端查看第1個數a。 View(b); //在電腦串口端查看第2個數b。 View(c); //在電腦串口端查看第3個數c。 while(1) { } } /*---C語言學習區域的結束。-----------------------------------------------*/ void View(unsigned long u32ViewData) { static unsigned char Su8ViewBuffer[43]; code unsigned char Cu8_0D_0A[]={0x0d,0x0a,0x00}; code unsigned char Cu8Start[]={"開始..."}; static unsigned char Su8FirstFlag=0; static unsigned int Su16FirstDelay; if(0==Su8FirstFlag) { Su8FirstFlag=1; for(Su16FirstDelay=0;Su16FirstDelay<10000;Su16FirstDelay++); SendString(Cu8Start); SendString(Cu8_0D_0A); SendString(Cu8_0D_0A); } to_BufferData(u32ViewData,Su8ViewBuffer,1); SendString(Su8ViewBuffer); to_BufferData(u32ViewData,Su8ViewBuffer,2); SendString(Su8ViewBuffer); to_BufferData(u32ViewData,Su8ViewBuffer,3); SendString(Su8ViewBuffer); to_BufferData(u32ViewData,Su8ViewBuffer,4); SendString(Su8ViewBuffer); SendString(Cu8_0D_0A); } void to_BufferData(unsigned long u32Data,unsigned char *pu8Buffer,unsigned char u8Type) { code unsigned char Cu8Array1[]={0xB5,0xDA,0x4E,0xB8,0xF6,0xCA,0xFD,0x00}; code unsigned char Cu8Array2[]="十進制:"; code unsigned char Cu8Array3[]="十六進制:"; code unsigned char Cu8Array4[]="二進制:"; static unsigned char Su8SerialNumber=1; static unsigned int Su16BufferCnt; static unsigned int Su16TempCnt; static unsigned int Su16TempSet; static unsigned long Su32Temp1; static unsigned long Su32Temp2; static unsigned long Su32Temp3; static unsigned char Su8ViewFlag; if(1==u8Type) { for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++) { pu8Buffer[Su16BufferCnt]=Cu8Array1[Su16BufferCnt]; } pu8Buffer[2]=Su8SerialNumber+'0'; pu8Buffer[Su16BufferCnt]=0x0d; pu8Buffer[Su16BufferCnt+1]=0x0a; pu8Buffer[Su16BufferCnt+2]=0; Su8SerialNumber++; return; } else if(2==u8Type) { for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++) { pu8Buffer[Su16BufferCnt]=Cu8Array2[Su16BufferCnt]; } Su32Temp1=1000000000; Su32Temp2=10; Su16TempSet=10; } else if(3==u8Type) { for(Su16BufferCnt=0;Su16BufferCnt<9;Su16BufferCnt++) { pu8Buffer[Su16BufferCnt]=Cu8Array3[Su16BufferCnt]; } Su32Temp1=0x10000000; Su32Temp2=0x00000010; Su16TempSet=8; } else { for(Su16BufferCnt=0;Su16BufferCnt<7;Su16BufferCnt++) { pu8Buffer[Su16BufferCnt]=Cu8Array4[Su16BufferCnt]; } Su32Temp1=0x80000000; Su32Temp2=0x00000002; Su16TempSet=32; } Su8ViewFlag=0; for(Su16TempCnt=0;Su16TempCnt 【11.2? ?模板程序的使用說明。】


圖11.2.1

大多數初學者在學習C語言的時候,往往是在電腦端安裝上VC平臺軟件來練習C語言,這種方法只要在代碼里調用printf語句,編譯后就可以看到被printf語句調用的變量,挺方便的。本教程沒有用這種方法,既然本教程的C語言主要針對單片機,所以我想出了另外一種方法,這種方法就是直接在單片機上練習C語言,這樣會讓初學者體驗更深刻。這種方法對硬件平臺要求不高,只要51學習板上有一個9針的串口就可以,這個串口既可以用來燒錄程序,也可以用來觀察代碼里的某個變量,只要在代碼里調用View函數就可以達到類似VC平臺軟件下printf語句的效果,View函數可以向串口輸出某個變量的十進制,十六進制和二進制,大家只要在電腦端的串口助手軟件就可以看到某個變量的這些信息,View函數能查看的變量最大數值范圍是4個字節的unsigned long變量,十進制的范圍是從0到4294967295,也可以查看unsigned int 和unsigned char的類型變量(數據的進制以及long,int,char等知識點大家目前還沒接觸到,因此不懂也沒關系,當前只要有個大概的認識就可以,暫時不用深入理解,后面章節還會詳細介紹)。View函數是我整個模板程序的其中一部分,所以要用這種方法就必須先復制我整個模板程序,初學者練習代碼的活動范圍僅僅局限于模板程序里的“C語言學習區域”,在此區域里有一個main主函數,main主函數內有一個初始化區域,初學者往往在這個初始化區域里練習C語言就夠了,初學者最大的活動范圍不能超過從“C語言學習區域的開始”到“C語言學習區域的結束”這個范圍,這個范圍之外其它部分的代碼主要用來實現數據處理和串口發送的功能,大家暫時不用讀懂它,直接復制過來就可以了。比如:

/*---C語言學習區域的開始。-----------------------------------------------*/

void main() //主函數

{

//...初始化區域,也就是主要用來給初學者學習C語言的區域。

while(1)

{

}

}

/*---C語言學習區域的結束。-----------------------------------------------*/

上述例子中,初學者練習代碼只能在從“C語言學習區域的開始”到“C語言學習區域的結束”這個范圍,此范圍外的代碼直接復制過來不要更改。我們再來分析分析下面節選的main函數源代碼:

/*---C語言學習區域的開始。-----------------------------------------------*/

void main() //主函數

{

unsigned char a; //定義一個變量a。

unsigned intb; //定義一個變量b。

unsigned long c; //定義一個變量c。

a=100; //給變量a賦值。

b=10000; //給變量b賦值。

c=1000000000; //給變量c賦值。

View(a); //在電腦串口端查看第1個數a。

View(b); //在電腦串口端查看第2個數b。

View(c); //在電腦串口端查看第3個數c。

while(1)

{

}

}

/*---C語言學習區域的結束。-----------------------------------------------*/


上述節選的main函數代碼里,比如“a=100; //給變量a賦值。”這行代碼,所謂的“賦值”就是“=”這個語句,它表面上像我們平時用的等于號,實際上不是等于號,而是代表“給”的意思,把“=”符號右邊的數復制一份給左邊的變量,比如“a=100;”就是代表把100這個數值復制一份給變量a,執行這條指令后,a就等于100了。這里的分號“;”代表一條程序指令的結束。 而雙斜線“//”是注釋語句,雙斜線“//”這行后面的文字或字符都是用來注釋用的,編譯器會忽略雙斜線“//”這一行后面的文字或字符,編譯器不把注釋文字或字符列入源代碼,也就是“//”這一行中后面的文字或字符是不占單片機內存的。當然“//”僅僅局限于當前一行代碼。上面除了“//”是注釋語句外,上面的“/*”和“*/”之間也是注釋語句,跟”//”的作用一樣,只不過“/*”是注釋開始,“*/”是注釋結束,它們的范圍不局限于一行,而是從“/*”到“*/”的范圍,因此可以用于注釋連著的多行文字或者字符。
接著在分析上述代碼中最重要的函數,也是本節最核心最重要的函數View(某個變量)。比如“ View(a); ”這行代碼,View(a)就是要把變量a的十進制,十六進制和二進制的數值都發送到串口,我們通過USB轉串口線讓學習板連接上電腦,在電腦串口助手軟件上就能看到被View函數調用的變量a的信息。

【11.3 如何在電腦上使用串口助手軟件查看被View函數調用的變量?】
前面章節在講燒錄程序時提到一個叫“stc-isp-15xx-v6.85I”的上位機軟件,這個軟件除了用來燒錄程序,還集成了串口助手軟件的功能。所以本節直接共用燒錄程序時的USB轉串口線和“stc-isp-15xx-v6.85I”軟件就可以了,無需額外再購買新的USB轉串口線和下載其它串口助手軟件,但是如何設置這個“stc-isp-15xx-v6.85I”上位機軟件,還是有一些需要特別注意的地方的,現在把這個詳細的步驟介紹給大家。

第一步:設置燒錄軟件的選項。
按前面章節介紹燒錄程序時所需的步驟,用USB轉串口線連接51學習板和電腦,記錄COM號,打開“stc-isp-15xx-v6.85I”軟件,選擇單片機型號,選擇對應的串口號(COM號),設置最低波特率和最高波特率,這部分的內容跟燒錄程序時的配置步驟是一樣的,唯一必須要特別注意的是最高波特率必須選擇9600!最低波特率建議選擇2400。否則在燒錄完程序后,當上位機集成軟件自動切換到串口助手軟件窗口時,接收區域顯示的一些漢字信息可能會出現亂碼。

----------------------------------步驟之間的分割線----------------------------------------


圖11.3.2

第二步:設置串口助手軟件的選項。
先點擊右上方選中“串口助手”選項切換到串口助手的窗口,接收緩沖區選擇“文本模式”,串口選擇匹配的COM號(跟燒錄軟件一致的COM號),波特率必須選擇9600,勾選上“編程完成后自動打開串口”選項,最后點擊“打開串口”按鈕使之切換到顯示“關閉串口”的文字狀態,至此串口助手軟件的設置完畢。接下來就是按燒錄程序的流程,打開新的HEX程序文件,程序燒錄完成后上位機軟件會自動切換到串口助手的串口,就可以觀察到View函數從單片機上發送過來的某個變量的十進制,十六進制,二進制的信息了。接收緩沖區的窗口比較小,如果收到的信息比較多,只要在上下方向拖動窗口右邊的滑塊就可以依次看到全部的信息。如果想讓單片機重新發送數據,只要讓51學習板斷電重啟就可以重發一次數據,當串口助手的接收區接收的信息太多影響觀察時,大家可以點擊“清空接收區”的按鈕來清屏,然后斷電重啟讓它再重發一次數據。在電腦的串口助手軟件里觀察到的數據格式大概是什么樣子的呢?比如編譯完本章節上述完整的模板源代碼程序后,會在串口助手軟件里看到a,b,c三個變量的信息如下:

開始...

第1個數

十進制:100

十六進制:64

二進制:1100100

第2個數

十進制:10000

十六進制:2710

二進制:10011100010000

第3個數

十進制:1000000000

十六進制:3B9ACA00

二進制:111011100110101100101000000000

多說一句,燒錄程序后,當軟件自動切換到串口助手軟件選項的窗口時,串口助手窗口顯示單片機返回的信息,這時有可能第一行的文字“開始...”會丟失或者顯示不出來,但是后面其它的關鍵信息不受影響,我猜測可能是串口助手軟件本身的某個環節存在的小bug,跟我們沒關系,我們不用深究原因,因為不會影響我們的使用。此時如果讓單片機斷電重啟就可以看到第一行的文字“開始...”。

【11.4 如何利用現有的工程編輯編譯新的源代碼?】
本教程后面有很多章節的源代碼,是不是每個章節都要重新建一個工程?其實不用。我們只要用一個工程就可以編譯編輯本教程所有章節的源代碼。方法很簡單,就是打開一個現有的工程,用快捷組合鍵“Ctrl+A”把原工程里面的C源代碼全部選中,再按“Backspace”清空原來的代碼,然后再復制本教程相關章節的代碼粘貼到工程的C文檔里,重新編譯一次就可以得到對應的Hex格式的燒錄文件。用這種方法的時候,建議大家做好每個程序代碼的備份。每完成一個項目的小進度,都要及時把源代碼存儲到電腦硬盤里,電腦硬盤里每個項目對應一個項目文件夾,每個項目文件夾里包含很多不同版本編號的源代碼文件,每個源代碼文件名都有流水編號,方便識別最新版本的程序,每天下班前都要把最新版本的源代碼文件上傳到自己的網盤里備份,在互聯網時代,把源代碼存到自己的網盤,可以隨時異地存取,即使遇到電腦故障損壞也不擔心數據永久丟失。

【11.5 編輯源代碼的5個常用快捷鍵。】
介紹一下常用的快捷鍵,好好利用這5個快捷鍵,會讓你在編輯源代碼時效率明顯提高。
(1)選中整篇所有的內容:組合鍵Ctrl+A。
(2)把選中的內容復制到臨時剪貼板:組合鍵Ctrl+C。
(3)把臨時剪貼板的內容粘貼到光標開始處:組合鍵Ctrl+V。
(4)把選中的一行或者幾行內容整體往右邊移動:單鍵Tab。每按一次就移動幾個空格,很實用。
(5)把選中的一行或者幾行內容整體往左邊移動:組合鍵Shift+Tab。每按一次就移動幾個空格,很實用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44619

    瀏覽量

    638481
收藏 人收藏

    評論

    相關推薦

    單片機基礎到程序框架(連載)

    預留。第十節:程序從哪里開始,要到哪里去?第十一節:單片機上練習
    發表于 01-17 10:50

    C語言的指針32位單片機上有哪些應用呢

    C語言的指針有哪些應用呢?C語言的指針32位單片機上有哪些應用呢?
    發表于 02-25 07:37

    單片機C語言應用程序設計

    單片機C語言應用程序設計針對目前最通用的單片機8051和最流行的程序設計語言——
    發表于 10-09 17:53 ?171次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>C</b><b class='flag-5'>語言</b>應用<b class='flag-5'>程序</b>設計

    100經典C語言程序

    c語言編寫,c語言的100經典程序單片機的應用,
    發表于 12-17 11:46 ?11次下載

    單片機蜂鳴器簡單發聲程序C語言版】

    單片機蜂鳴器簡單發聲程序C語言版】單片機蜂鳴器簡單發聲程序
    發表于 12-29 13:53 ?0次下載

    單片機蜂鳴器_各種發聲程序_C語言

    單片機蜂鳴器 各種發聲程序C語言版】 單片機蜂鳴器 各種發聲程序
    發表于 12-29 15:52 ?0次下載

    51單片機匯編語言教程_第一個單片機程序

    51單片機匯編語言教程:4課第一個單片機程序
    發表于 01-19 15:27 ?0次下載

    單片機C語言例程模塊

    STC89C52單片機的常用開發和實驗的練習例程,里面每個指令都有注解,可以方便的快捷的學習C語言
    發表于 05-24 10:03 ?8次下載

    51單片機的40實驗原理和程序(包含匯編和C語言程序

    51單片機的40實驗,每個實驗采用多種編程思路,包含匯編和C語言程序
    發表于 08-30 17:02 ?22次下載

    簡單實用——C語言入門程序練習

    C語言入門程序練習,簡單實用
    發表于 04-04 10:14 ?31次下載

    單片機C語言編程模板(基礎模板)資料分享

    單片機C語言編程模板(基礎模板)資料分享
    發表于 04-13 09:56 ?38次下載

    使用51單片機設計簡易加法計算器的C語言程序免費下載

    本文檔的主要內容詳細介紹的是使用51單片機設計簡易加法計算器的C語言程序免費下載。
    發表于 06-20 17:44 ?15次下載
    使用51<b class='flag-5'>單片機</b>設計<b class='flag-5'>一</b><b class='flag-5'>個</b>簡易加法計算器的<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>程序</b>免費下載

    單片機C語言程序設計教程

    單片機C語言程序設計教程免費下載。
    發表于 04-15 11:12 ?78次下載

    單片機C語言程序與數據存儲

    目錄:、五大內存分區二、C語言程序的存儲區域三、C語言程序
    發表于 11-20 20:36 ?12次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>程序</b>與數據存儲

    怎么采用C語言程序通過單片機的I/O端口點亮LED燈?

    怎么采用C語言程序通過單片機的I/O端口點亮LED燈??
    的頭像 發表于 09-02 17:05 ?3525次閱讀
    威尼斯人娱乐城代理注册| 真人百家乐技巧| 大发888博彩官方下载| 南京百家乐官网赌博现场被| 真人在线百家乐| 武穴市| 网上百家乐官网玩法| 申博娱乐城官网| 大发888手机版下载官方网站| 玩百家乐游戏的最高技巧| 职业百家乐的玩法技巧和规则 | 太阳城百家乐官网下载网址| BB百家乐官网HD| 百家乐官网1326投注| 百家乐官网赌场赌场网站| 圣保罗百家乐官网的玩法技巧和规则| 百家乐游戏研发| 买百家乐程序| 太阳城会员| 皇冠透注网| 皇冠网址| 真人百家乐官网开户须知| 大发888 配置要求| 真钱棋牌导航| 财神真人娱乐城| 百家乐官网另类投注法| 博天堂百家乐官网官网| 百家乐视频游戏界面| 诚信百家乐在线平台| 查看百家乐赌博| 大发888体育竞技| 大发888娱乐捕鱼游戏| 桂阳县| 百家乐官网超级市场| 哪个百家乐平台信誉好| 威尼斯人娱乐备用6222| 平湖市| 五张百家乐官网的玩法技巧和规则| 菲彩百家乐官网的玩法技巧和规则 | 百家乐赌场网| 大发888手机好玩吗|