久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15205|回復(fù): 33
打印 上一主題 下一主題
收起左側(cè)

51單片機入門經(jīng)驗分享2-關(guān)于進制 typedef 頭文件 main 延時函數(shù)等基礎(chǔ)知識

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:74187 發(fā)表于 2018-10-13 08:36 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
接上篇帖子,單片機這種東西,如果是用來考試,翻翻書大概就可以了,如果是拿來開發(fā)一些小的作品,自學(xué)2個月,也不會太難,因為現(xiàn)在開發(fā)板也是很多的,資料也很豐富,如果你是想找工作,想獨立開發(fā)產(chǎn)品,這個,對于一個剛畢業(yè)的人來說,就比較難了,很大的原因,是走了彎路,而且沿著彎路一直走了下去。我們希望分享一些有用的東西,實用的東西,讓新手少走些彎路,如果每個坑都重踩一遍,這得浪費多少時間啊。
    言歸正傳,單片機是必須要親自動手敲代碼才能學(xué)會的,所以從這一章節(jié)開始,我們會分享一些例程,并詳細(xì)解析,希望能給新手帶來幫助,還是那句話,本人水平有限,老手輕拍,有錯誤請指出,有事請留言。
    一個經(jīng)典的例程,點亮你的LED
我以手里的這塊STC15W1K16PWM芯片為例來寫例子,這塊芯片至少還有一些人用來開發(fā)產(chǎn)品,學(xué)習(xí)了至少還有一定實用價值,如果你手里有同類型的芯片,那就更方便學(xué)習(xí)了,不管干什么,都是從簡單到復(fù)雜的,比如學(xué)計算機,第一句就是“HELLO WORLD”,那么學(xué)習(xí)單片機,就是點亮你的LED了{:lol:}。先把原理圖上傳,單片機是軟硬結(jié)合的東西,硬件為主,軟件為輔,所以需要看原理圖編程。
   新建一個KEIL4工程,把下面代碼敲進去,就可以實現(xiàn)LED的閃爍了,但是還是需要解釋下一下代碼。

   
  1. /*******************************************************************
  2. * 文件名  LED0 500MS閃爍
  3. * 描述:        點亮LED
  4. * 2018-09-17 調(diào)試通過
  5. * 功能  入門模板
  6. * 作者:大核桃
  7. * 版本號:V1.00(2018.09.17)
  8. ********************************************************************/
  9. #include "config.h"
  10. #include "intrins.h"


  11. /*******************************************************************
  12. * 文件名 變量重新定義區(qū)域
  13. * 描述:        
  14. * 功 能
  15. * 作者:大核桃
  16. * 版本號:V1.00(2018.09.17)
  17. ********************************************************************/

  18. typedef unsigned char uint8;//無符號字符型
  19. typedef unsigned int  uint16;//無符號整型
  20. typedef unsigned long uint32;//無符號長整型


  21. /*******************************************************************
  22. * 文件名:位重新定義區(qū)域 函數(shù)前置聲明
  23. * 描述:        
  24. * 功 能
  25. * 作者:大核桃
  26. * 版本號:V1.00(2018.09.17)
  27. ********************************************************************/
  28. void Delay500ms();                //@11.0592MHz
  29. void MCU_Port_Init(void);


  30. sbit LED0 = P1^0;
  31. sbit LED1 = P1^1;
  32. sbit LED2 = P1^2;
  33. sbit LED3 = P1^3;
  34. sbit LED4 = P1^4;
  35. sbit LED5 = P3^2;
  36. sbit LED6 = P0^0;
  37. sbit LED7 = P0^1;


  38. /*******************************************************************
  39. * 文件名 main函數(shù)入口
  40. * 描述:        
  41. * 功 能
  42. * 作者:大核桃
  43. * 版本號:V1.00(2018.09.17)
  44. ********************************************************************/
  45. void main(void)
  46. {
  47.         MCU_Port_Init();//端口模式初始化函數(shù)
  48.         //上電IO默認(rèn)是0
  49.         LED0 = 1;//輸出1
  50.         LED1 = 0;
  51.         LED2 = 0;
  52.         LED3 = 0;
  53.         LED4 = 0;
  54.         LED5 = 0;
  55.         LED6 = 0;
  56.         LED7 = 0;//

  57.         while(1)
  58.         {
  59.              P2 = 0XFE;//1111_1110;
  60.                  Delay500ms();//500ms延時 11.0592MHZ
  61.                  P2 = 0XFF;//1111_1111;
  62.                  Delay500ms();//500ms延時 11.0592MHZ
  63.         }
  64. }

  65. /*******************************************************************
  66. * 文件名:void MCU_Port_Init(void)
  67. * 描述:        MCU端口上電初始化函數(shù)
  68. * 功 能
  69. * 作者:大核桃
  70. * 版本號:V1.00(2018.09.17)
  71. ********************************************************************/
  72. void MCU_Port_Init(void)
  73. {
  74.         //第0 和1位配置推完輸出模式,大電流
  75.         P0M1 = 0XFC; //        1111_1100
  76.         P0M0 = 0X03; // 0000_0011

  77.         //第01234位配置推完輸出模式,大電流,567配置高阻輸入,用于ADC
  78.         P1M1 = 0XE0; //1110_0000        
  79.         P1M0 = 0X1F; //0001_1111

  80.         //P2配置位準(zhǔn)雙向口
  81.         P2M1 = 0X00; //0000_0000        
  82.         P2M0 = 0X00; //0000_0000

  83.         P2 = 0XFF;//P2口初始化為1

  84.         //P5配置位準(zhǔn)雙向口
  85.         P5M1 = 0X00; //0000_0000        
  86.         P5M0 = 0X00; //0000_0000

  87.         P5 = 0XFF;//P5口初始化為1

  88.         //P3 23467推完輸出
  89.         P3M1 = 0X00; //0000_0000        
  90.         P3M0 = 0XFC; //1101_1100

  91.         P3 = 0X23;  //0010_0011
  92.                
  93. }
  94. /*******************************************************************
  95. * 文件名:void Delay500ms()
  96. * 描述:        通用延時函數(shù)
  97. * 功 能
  98. * 作者:大核桃
  99. * 版本號:V1.00(2018.09.17)
  100. ********************************************************************/
  101. void Delay500ms()                //@11.0592MHz
  102. {
  103.         unsigned char i, j, k;

  104.         _nop_();
  105.         _nop_();
  106.         i = 22;
  107.         j = 3;
  108.         k = 227;
  109.         do
  110.         {
  111.                 do
  112.                 {
  113.                         while (--k);
  114.                 } while (--j);
  115.         } while (--i);
  116. }
復(fù)制代碼



   頭文件 #include "config.h"這個頭文件是我們新建的,這里面是STC15W系列的寄存器地址定義等等,就好比學(xué)STC89C52RC那樣,先包含頭文件#include "reg52.h"一樣,因為STC15W系列的不是標(biāo)準(zhǔn)的51,所以不能用REG52.H這個頭文件,需要我們自己去新建一個,然后把官網(wǎng)的頭文件復(fù)制過來就好了。
  typedef 的作用
typedef是用來聲明新類型名的,也即是說我覺得unsigned char 太長了,記不住,或者每次都寫很繁瑣怎么辦?另外起一個名字,typedef就是起到這個作用,而且用typedef定義過的是可以參與系統(tǒng)編譯的,如果編譯錯誤,那么編譯器是提醒你的,如果你是用#define來定義,也可以,除非你保證自己的程序沒有錯誤,如果出錯,不小心把unsigned char寫unsigned charr也是會通過的,因為#define知識簡單的替換,并不參與系統(tǒng)編譯。typedef的詳細(xì)用法請參考C語言第四版326頁,非常詳細(xì)。
  
  關(guān)于無符號字符型的定義,無符號字符型占1個字節(jié),取值范圍在0-255之間,無符號基本整型占2個字節(jié),取值范圍是0-65535,但是在STM32上,我記得是unsigned short ,即無符號短整型,一直混用,當(dāng)時搞得好混,后來看C語言,發(fā)現(xiàn)可以同時用,unsigned long,即無符號長整型,取值范圍是0-4294967295,我們暫時就用到這3種類型的數(shù)據(jù)變量,至于更具體的請翻閱C語言第44頁。
   關(guān)于函數(shù)前置聲明
   函數(shù)如果在MAIN函數(shù)前面定義,是不要函數(shù)前置聲明的,但是如果在MAIN后面定義,那就一定需要了,不然會報錯的。
   sbit定義引腳
比如sbit LED0 = P1^0;,P1^0必須要大寫而且必須要加一個分號,sbit定義是51單片機獨有的,STM32就沒有這個東西,直接初始化用就好了。
   main入口函數(shù)
   統(tǒng)一規(guī)定的,就這么個寫法,第一個void指的是函數(shù)沒有返回值,第二個void指的是函數(shù)沒有形參調(diào)用,在STM32里面,就不是這樣的,int main(void),是一個基本整型的變量作為返回值的。里面是一個while(1)的大循環(huán),這沒啥好說的。
  關(guān)于端口配置
   如果是用STC89C52的話,不需要端口配置的,除了P0是開漏輸出,其他普通IO都是準(zhǔn)雙向口,直接賦值即可,但是STC89C52的IO驅(qū)動能力是有限的,LED小燈是一個耗電大戶,必須要加一個三極管才可以,STC15W則不需要,IO可以配置位4種模式,準(zhǔn)雙向口,開漏輸出,推挽輸出,高阻輸入4種模式,前2個沒什么分別,推挽輸出是大電流,可以直接驅(qū)動LED,最大可以達到20MA,但是根據(jù)使用經(jīng)驗,最好是灌入電流,也就是IO是0的時候,點亮LED,至于拉電流,IO上拉15MA可能就極限了。

程序中的寄存器定義P0M0 P0M1的配置,就是參照這個表格配置出來的,因為好多引腳還用在了別的上面,實現(xiàn)別的功能。請注意,P0M0和P0M1只是設(shè)定IO端口的工作類型,至于輸出IO是低電平還是高電平,仍然是需要你自己決定的 ,不然達不到你要實現(xiàn)的效果。我們只是想點亮第一組LED的第一個燈,那么選擇LED = 1;就可以了,然后在主循環(huán)中延時閃爍就好了。
   關(guān)于二進制和16進制
   我們在循環(huán)中,寫P2 = 0XFE,這兒是將P2端口的最低位清零,換算成二進制也就是1111_1110,這個0就代表了P2口的最低位,也就是原理圖中的DB0,如果我們不想并口操作IO,可以用sbit DB0 = P2^0;這樣定義就可以將P2 = 0XFE,替換成DB = 0;P2 = 0XFF;替換DB0 = 1;就可以實現(xiàn)同樣的效果,我們稱這樣的叫做可位操作,隨著以后的學(xué)習(xí)深入,你會發(fā)現(xiàn)有很多寄存器不支持位操作,這就要想辦法了。二進制怎么轉(zhuǎn)換成16進制?16進制怎么轉(zhuǎn)換成二進制呢?答案很簡單,用計算器{:titter:},如下圖WINDOWS自帶的非常好用,還有就是自己算,也比較簡單,0XFF 換成二級制也就是1111_1111,
16進制最大計數(shù)到F,從0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,共計16個數(shù),比如一個0XFE,是一個8位數(shù),1111是高4位 ,1110看成低四位,從左到右,依次看過去的1對應(yīng)的是8421,低四位也一樣,也是8421,8*1+4*1+2*1+1*1 = 15,也就是16進制的F,8*1+4*1+2*1+1*0 = 14,也就是16進制的E,就是這樣算,當(dāng)然我覺得還是計算器最好用。{:lol:}
  
   關(guān)于delay延時函數(shù)
還記得我剛開始學(xué)的時候,就是不知道這個DELAY函數(shù)是怎么來的,在那里苦思冥想,也得不到結(jié)果。如果你是一個剛?cè)腴T的新手,那么這個DELAY函數(shù)也不要去研究了,直接用STC的客戶端配置好就完事了,注意選擇好對應(yīng)的內(nèi)核就好了。這樣的函數(shù),沒有參考的價值,沒有研究意義。要定時精準(zhǔn),還是要用定時器來做。


好了,就到這里吧,未完待續(xù)。。。
   


評分

參與人數(shù) 2黑幣 +25 收起 理由
wxxl + 5 很給力!
yousunny + 20 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏16 分享淘帖 頂8 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:371529 發(fā)表于 2018-10-13 15:19 | 只看該作者
真棒,感謝感謝!
回復(fù)

使用道具 舉報

板凳
ID:161328 發(fā)表于 2018-10-19 11:32 | 只看該作者
建議想學(xué)單片機的人看看
回復(fù)

使用道具 舉報

地板
ID:413986 發(fā)表于 2018-10-23 14:56 | 只看該作者
我認(rèn)真的看完了沒個字
回復(fù)

使用道具 舉報

5#
ID:393933 發(fā)表于 2018-10-24 11:55 | 只看該作者
想知道最后那個延時函數(shù)生成的軟件是什么
回復(fù)

使用道具 舉報

6#
ID:74187 發(fā)表于 2018-10-24 13:28 | 只看該作者
bao321 發(fā)表于 2018-10-24 11:55
想知道最后那個延時函數(shù)生成的軟件是什么

STC 的ISP程序下載客戶端
回復(fù)

使用道具 舉報

7#
ID:97089 發(fā)表于 2018-11-1 01:24 | 只看該作者
不賴 真不賴 繼續(xù)跟進
回復(fù)

使用道具 舉報

8#
ID:451088 發(fā)表于 2018-12-20 20:59 | 只看該作者
666可以可以的,感謝大佬指路
回復(fù)

使用道具 舉報

9#
ID:414447 發(fā)表于 2019-1-5 22:36 來自觸屏版 | 只看該作者
很感興趣,虛心學(xué)習(xí)。
回復(fù)

使用道具 舉報

10#
ID:460466 發(fā)表于 2019-1-8 10:32 | 只看該作者
我一看代碼什么的就腦袋疼!我就認(rèn)識看得見的東西:電阻,電容,晶體管,集成電路引腳,萬用表指示數(shù)
回復(fù)

使用道具 舉報

11#
ID:461889 發(fā)表于 2019-1-23 15:12 | 只看該作者
虛心學(xué)習(xí)。
回復(fù)

使用道具 舉報

12#
ID:471375 發(fā)表于 2019-2-16 22:22 來自觸屏版 | 只看該作者
真心不錯
回復(fù)

使用道具 舉報

13#
ID:490261 發(fā)表于 2019-3-17 21:34 | 只看該作者
        感謝分享我想求教一下69行     P2 = 0XFE;//1111_1110;中P2指的是。
回復(fù)

使用道具 舉報

14#
ID:345426 發(fā)表于 2019-3-23 21:44 | 只看該作者
Dotokeep 發(fā)表于 2019-3-17 21:34
感謝分享我想求教一下69行     P2 = 0XFE;//1111_1110;中P2指的是。

P2口是單片機的P2.02.12.2.232.42.52.62.78個引腳
回復(fù)

使用道具 舉報

15#
ID:479205 發(fā)表于 2019-4-3 14:46 | 只看該作者
很實用
回復(fù)

使用道具 舉報

16#
ID:469510 發(fā)表于 2019-4-30 09:10 | 只看該作者
真棒,感謝感謝!
回復(fù)

使用道具 舉報

17#
ID:248392 發(fā)表于 2019-5-9 14:23 | 只看該作者
感謝感謝!
回復(fù)

使用道具 舉報

18#
ID:530802 發(fā)表于 2019-5-15 16:02 | 只看該作者
Dotokeep 發(fā)表于 2019-3-17 21:34
感謝分享我想求教一下69行     P2 = 0XFE;//1111_1110;中P2指的是。

P2有八個腳,每個角對應(yīng)后面1111_1110。就是一號腳給0(就是低電平),二號腳給1(高電平),以此類推。程序執(zhí)行時P2八個腳連的燈只有第一個燈是0(低電平),燈亮。其他全滅
回復(fù)

使用道具 舉報

19#
ID:578937 發(fā)表于 2019-7-6 14:18 | 只看該作者
講的真好 謝謝樓主 辛苦了
回復(fù)

使用道具 舉報

20#
ID:578937 發(fā)表于 2019-7-6 14:19 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報

21#
ID:578937 發(fā)表于 2019-7-6 14:19 | 只看該作者
可以可以  感謝樓主
回復(fù)

使用道具 舉報

22#
ID:579071 發(fā)表于 2020-2-17 17:28 來自觸屏版 | 只看該作者
Dotokeep 發(fā)表于 2019-3-17 21:34
感謝分享我想求教一下69行     P2 = 0XFE;//1111_1110;中P2指的是。

P2口引腳8位高低電瓶賦值,51有4組引腳,每組8個,p2是第二組,0xfe是說8個腳的電瓶是高高高高-高高高低。我只是試試我還能不能搞清楚,別噴
回復(fù)

使用道具 舉報

23#
ID:566697 發(fā)表于 2020-3-19 12:52 | 只看該作者
單片機入門 真心可以
回復(fù)

使用道具 舉報

24#
ID:811024 發(fā)表于 2020-8-4 00:38 | 只看該作者
深入淺出,非常精彩
回復(fù)

使用道具 舉報

25#
ID:785551 發(fā)表于 2020-9-2 17:18 | 只看該作者
對應(yīng)的原理圖在哪兒呢
回復(fù)

使用道具 舉報

26#
ID:408692 發(fā)表于 2020-9-26 10:20 | 只看該作者
感謝講解
回復(fù)

使用道具 舉報

27#
ID:832566 發(fā)表于 2020-10-21 11:24 | 只看該作者
很棒!!!!
回復(fù)

使用道具 舉報

28#
ID:824957 發(fā)表于 2020-11-18 13:21 | 只看該作者
打卡,學(xué)習(xí)。謝樓主
回復(fù)

使用道具 舉報

29#
ID:863412 發(fā)表于 2021-1-12 10:06 | 只看該作者
謝謝樓主了,很精彩!!!
回復(fù)

使用道具 舉報

30#
ID:866313 發(fā)表于 2021-1-14 16:33 | 只看該作者
沒看見原理圖啊
回復(fù)

使用道具 舉報

31#
ID:886117 發(fā)表于 2021-3-11 12:01 | 只看該作者
繼續(xù),好文。
回復(fù)

使用道具 舉報

32#
ID:496265 發(fā)表于 2021-12-15 08:58 | 只看該作者
想學(xué),但還是看不明白
回復(fù)

使用道具 舉報

33#
ID:1049825 發(fā)表于 2022-10-31 20:11 | 只看該作者
深入淺出,講得很好。
回復(fù)

使用道具 舉報

34#
ID:1110944 發(fā)表于 2025-4-4 01:37 | 只看該作者
很感興趣,虛心學(xué)習(xí)。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色伊人网 | 久久手机视频 | 国产中文字幕亚洲 | 亚洲精品一区中文字幕 | 亚洲免费福利视频 | 日韩精品一区二区三区中文字幕 | 日韩精品一区二区在线 | 免费国产成人av | 日韩欧美在| 亚洲成在线观看 | 一区二区三区观看视频 | 精品国产欧美一区二区三区成人 | 18性欧美 | 中文一区二区视频 | 91色视频在线观看 | 久久久精品一区 | 日韩电影一区 | 99热精品久久 | 成人在线电影在线观看 | av网站在线播放 | 精品国产欧美 | 99热99| av电影一区二区 | 午夜伦4480yy私人影院 | 不卡av电影在线播放 | 麻豆久久久9性大片 | 久久精品亚洲国产奇米99 | 亚洲色视频 | 超碰美女在线 | 日本不卡一区 | 久久久久91| 国产激情一区二区三区 | 日韩午夜影院 | 日本啊v在线 | 奇米超碰 | 欧美日韩成人影院 | 久久久99精品免费观看 | 色网站在线免费观看 | 999久久久| 天天综合网永久 | 国产乱码精品一区二区三区忘忧草 |