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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6595|回復: 24
打印 上一主題 下一主題
收起左側

初學51單片機之點燈程序詳解

  [復制鏈接]
跳轉到指定樓層
樓主
  對于單片機的學習,很多人都是從點燈程序開始的,這里我找到
了一個之前做實驗的小板子,MCU是STC8H1K08,P54引腳接了一個
發光管經過電阻到地。由于P54引腳要拉高才能點亮發光管,所以端
口模式要設置成推挽模式,因此最最最簡單的C語言點燈程序是下面的
樣子:


  看起來是不是很簡單?全部加起來包括花括號只有7行代碼,其中第一
行是文件包含偽指令,它把STC公司提供的對應“頭文件”包含到此程序
中來,下面六行是一個C語言函數的標準寫法,只是名為“main”的函
數很特殊,它是必須的,不能被別的函數調用,所以沒有返回值,也不
需要參數。“void”是C語言中“無類型”關鍵字,“main”左邊的
“void”代表“main”函數的返回值是“無類型”。“main”右邊的
小括號中的“void”是它的參數的類型。緊跟著的一對“花括號”中間
裝的是“main”函數的具體內容,它里面有三個分號,C語言語句以分
號結尾,前兩句用于設置P54端口為推挽模式,第三句才是拉高P54引腳
真正實現點亮發光管的語句,當然也可以在前兩句中把端口設置為準雙
向口模式也是可以點亮的,但是沒有前兩句的話則是不能點亮的。經過編
譯,上圖中可以看到生成了24字節的代碼,沒有錯誤和警告,下載到實驗
板上實測能點亮發光管。
  再來看這三句C語言語句,中間都有“等號”,它可不是我們生活中
的“等于”的意思。“等號”右邊就是數字,只是它的寫法不常見,“等號”
左邊是STC8H1K08這個芯片中寄存器的名字,它們都是在“頭文件”中定
義的,大家可以用記事本或其它程序打開“頭文件”仔細研究研究。什么是
寄存器?我們可以很形象的打個比方,說墻上有很多燈開關,其中一個叫
“P54”,我們在程序中把數字“1”寫進“P54”這個開關中,然后燈這亮了,
也可以把數字“0”寫進“P54”中,然后燈就滅了,所以這三個語句都是
把“等號”右邊的數字寫進左邊的寄存器中,從而實現我們想要的結果。
  除了頭文件外,單片機的制造商還會提供對應單片機的參考手冊和數據
手冊,STC則很獨特的把這兩個文件外加例程都寫進了一個PDF文件中,目前
這個“STC8H技術參考手冊”達到了1640頁。想要學好用好這個單片機就要
認真閱讀此手冊。
  再來看一看“0x10”這個數字,其前綴“0x”代表它是16進制的數字,
翻譯成常見的十進制的寫法是“16”這個數字,同樣的“0x00”就是十進制
的“0”,寫成那樣有強調它是一個8位數的意思,因為“等號”左邊的
“P5M1”寄存器有8個位,語句的結果是要把8個位都寫成“0”,而實際上
只需要把它的“4位”寫成“0”就行了,其它的7個位最好是“保持原樣”,
但是很遺憾,“等號”這種直接賦值的方式不能使其左邊寄存器內的其它位
“保持原樣”,必須得換一種寫法才行,雖然“P54”可以直接賦值而不影響
其它“位”,但為了適應其它不支持“位操作”的單片機,我盡量少用這種
“位操作”的寫法。同樣的程序我改成了如下的樣子:

#include  "STC8Hxx.h"
#define    BIT4    (0x10)//定義“4位”,注意這句沒有分號!!
void  main(void)
{
P5M1  &=~(BIT4);//拉低復位
P5M0    |=  BIT4;//拉高置位
P5         |=  BIT4;//P54拉高置位
}
 
  其中“BIT4”對于單片機來說就是數字“0x10”,但是我們在讀這個程
序的時候一眼就能看出是要對寄存器的哪一位做怎樣的處理而不需要特別注明
語句的具體含義。我們要特別的記住“|=”是拉高某位(或某幾位)而其它位保
持原樣,“&=~”則是拉低某位(或某幾位同時拉低的話要加圓括號括起來)而
其它位保持原樣。
  當然,實際的程序不可能只是這么簡單,比如“#define”這樣的位定義就
有8行(或更多),
#define    BIT0    (0x01)
#define    BIT1    (0x02)
#define    BIT2    (0x04)
#define    BIT3    (0x08)
#define    BIT4    (0x10)
#define    BIT5    (0x20)
#define    BIT6    (0x40)
#define    BIT7    (0x80)
  我們可把這些(或更多的內容)寫進我們自己的“Ext.h”這樣一個頭文件中,
然后包含進程序中,當然還要加上傳說中的“大循環”:

#include  "STC8Hxx.h"
#include  "Ext.h"
void  main(void)//程序從主函數開始執行
{
P5M1  &=~(BIT4);//只運行一次的程序
P5M0    |=  BIT4;  //寫這這里,
P5         |=  BIT4;  //比如初始化程序
while(1)//大循環
    {
    ;//要循環運行的語句寫這里
    }
}//主程序結束
//中斷函數可以寫在下面

  今天就聊到這里,不足之處,歡迎指正。



評分

參與人數 2黑幣 +55 收起 理由
SDDQ + 5 對新人非常友好,贊一個
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂11 踩
回復

使用道具 舉報

沙發
ID:192020 發表于 2024-2-23 18:26 | 只看該作者
這種沒有while循環的結束main后不知MCU處在什么狀態?運行的什么語句呢?
回復

使用道具 舉報

板凳
ID:1110945 發表于 2024-2-24 21:50 | 只看該作者
qq475878026 發表于 2024-2-23 18:26
這種沒有while循環的結束main后不知MCU處在什么狀態?運行的什么語句呢?

為幫助初學習者理解而省略了大循環的一個鮒程而已,
實際情況是它能編譯通過并下載到單片機運行,也能成
功點亮發光管。我所知道的沒有例外的都有大循環在主
函數中使程序“永遠”運行下去。
也許,單片機的生產廠家能回答這樣的問題,但這個問
題的答案對于我這樣一般的單片機使用者來說好象沒有
什么用處。
回復

使用道具 舉報

地板
ID:961114 發表于 2024-3-28 09:47 | 只看該作者
初學應該學STC8H8K64U啊   有硬件USB,直接仿真啊
回復

使用道具 舉報

5#
ID:1115793 發表于 2024-4-8 19:03 | 只看該作者
請問一下初學單片機應該如何入手?
回復

使用道具 舉報

6#
ID:1116590 發表于 2024-4-14 16:28 | 只看該作者
不錯降低了很多
回復

使用道具 舉報

7#
ID:1117351 發表于 2024-4-19 16:10 | 只看該作者
對新人非常友好
回復

使用道具 舉報

8#
ID:1118442 發表于 2024-4-26 17:17 | 只看該作者
如果學單片機直接,案列對著程序學習這樣會不會學的快點
回復

使用道具 舉報

9#
ID:1100807 發表于 2024-4-27 15:33 | 只看該作者
學習了,感謝分享。
回復

使用道具 舉報

10#
ID:876947 發表于 2024-5-7 13:38 | 只看該作者
fan523709338 發表于 2024-4-26 17:17
如果學單片機直接,案列對著程序學習這樣會不會學的快點

同感,同樣的任務語句卻也不同,有些迷糊。
回復

使用道具 舉報

11#
ID:60122 發表于 2024-5-14 22:51 | 只看該作者
我能點亮的是單片機本體,算不算單片機點燈大師,
回復

使用道具 舉報

12#
ID:61997 發表于 2024-5-19 21:54 | 只看該作者
這是STC最基礎的單片機么
回復

使用道具 舉報

13#
ID:1123146 發表于 2024-5-31 15:09 | 只看該作者
之前做的led循環,用的是while(1)循環,led流水燈的實驗,你的這篇文章確實給我很大啟發
回復

使用道具 舉報

14#
ID:1123631 發表于 2024-6-4 00:42 | 只看該作者
對新人非常友好
回復

使用道具 舉報

15#
ID:1126717 發表于 2024-6-24 11:51 | 只看該作者
學習了,摸索中,
回復

使用道具 舉報

16#
ID:1127864 發表于 2024-7-2 10:27 | 只看該作者
學習了,感謝
回復

使用道具 舉報

17#
ID:1131387 發表于 2024-9-4 19:41 | 只看該作者
你們有沒有買開發板呢?
回復

使用道具 舉報

18#
ID:1126656 發表于 2024-9-22 17:56 | 只看該作者
萬千的程序,目的只有一個,點燈,第一步,哪種最簡潔,最容易掌握和理解就是最好的
回復

使用道具 舉報

19#
ID:1126656 發表于 2024-9-22 17:57 | 只看該作者
發表于 2024-9-4 19:41
你們有沒有買開發板呢?

我買了,能直觀一些吧
回復

使用道具 舉報

20#
ID:1132706 發表于 2024-9-28 10:57 | 只看該作者
相當的不錯!
回復

使用道具 舉報

21#
ID:1134561 發表于 2024-10-24 13:43 | 只看該作者

初學應該學STC8H8K64U
回復

使用道具 舉報

22#
ID:1135137 發表于 2024-10-31 12:32 | 只看該作者
非常棒的文章,解決了我的問題
回復

使用道具 舉報

23#
ID:1135214 發表于 2024-11-1 23:10 | 只看該作者
對初學者有一點幫助
回復

使用道具 舉報

24#
ID:1004615 發表于 2024-11-23 03:31 | 只看該作者
Graves 發表于 2024-2-23 18:26
這種沒有while循環的結束main后不知MCU處在什么狀態?運行的什么語句呢?

同問~~~~~~~~~~~
回復

使用道具 舉報

25#
ID:390416 發表于 2024-12-4 13:59 | 只看該作者
發表于 2024-4-8 19:03
請問一下初學單片機應該如何入手?

去B站 直接搜索《人人學會單片機》,直接看這套課程學習就行了,PCB已經開源,你可以自己做WQX開發板。千萬不要花冤枉錢去買那些老掉牙的開發板。
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人欧美 | 羞羞色网站| 国产精品福利视频 | 91短视频网址 | 99久久精品国产一区二区三区 | 亚洲国产中文字幕 | 成人网址在线观看 | 国产在线精品一区二区 | 亚洲欧美成人 | 欧美精品一区二区三区在线播放 | 久久人人爽人人爽人人片av免费 | 影视一区| 欧美精品在欧美一区二区少妇 | 在线视频国产一区 | 国产精品久久久久久久久久免费看 | 日韩福利 | 久久99精品久久久久久 | 日日综合 | 综合另类| 国产亚洲一区二区三区在线观看 | 日韩免费视频一区二区 | 天堂影院av | 性天堂网 | 欧美日韩专区 | 日本一区二区不卡 | 国产区在线免费观看 | 欧美成人h版在线观看 | 国产精品久久久久久av公交车 | 国产精品色 | 国产高清一区二区三区 | 国产亚洲一区在线 | 成人三级av| 欧美精品video | 亚洲视频在线免费观看 | 国产高清精品一区二区三区 | 又爽又黄axxx片免费观看 | 极品的亚洲 | 精品久久网| 欧美久久国产精品 | www.国产91| 久久91精品久久久久久9鸭 |