欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 初學(xué)51單片機(jī)之點(diǎn)燈程序詳解 [打印本頁]

作者: 明日之星8    時間: 2024-2-15 21:52
標(biāo)題: 初學(xué)51單片機(jī)之點(diǎn)燈程序詳解
  對于單片機(jī)的學(xué)習(xí),很多人都是從點(diǎn)燈程序開始的,這里我找到
了一個之前做實(shí)驗(yàn)的小板子,MCU是STC8H1K08,P54引腳接了一個
發(fā)光管經(jīng)過電阻到地。由于P54引腳要拉高才能點(diǎn)亮發(fā)光管,所以端
口模式要設(shè)置成推挽模式,因此最最最簡單的C語言點(diǎn)燈程序是下面的
樣子:


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

#include  "STC8Hxx.h"
#define    BIT4    (0x10)//定義“4位”,注意這句沒有分號!!
void  main(void)
{
P5M1  &=~(BIT4);//拉低復(fù)位
P5M0    |=  BIT4;//拉高置位
P5         |=  BIT4;//P54拉高置位
}
 
  其中“BIT4”對于單片機(jī)來說就是數(shù)字“0x10”,但是我們在讀這個程
序的時候一眼就能看出是要對寄存器的哪一位做怎樣的處理而不需要特別注明
語句的具體含義。我們要特別的記住“|=”是拉高某位(或某幾位)而其它位保
持原樣,“&=~”則是拉低某位(或某幾位同時拉低的話要加圓括號括起來)而
其它位保持原樣。
  當(dāng)然,實(shí)際的程序不可能只是這么簡單,比如“#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)
  我們可把這些(或更多的內(nèi)容)寫進(jìn)我們自己的“Ext.h”這樣一個頭文件中,
然后包含進(jìn)程序中,當(dāng)然還要加上傳說中的“大循環(huán)”:

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

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




作者: Graves    時間: 2024-2-23 18:26
這種沒有while循環(huán)的結(jié)束main后不知MCU處在什么狀態(tài)?運(yùn)行的什么語句呢?
作者: 明日之星8    時間: 2024-2-24 21:50
qq475878026 發(fā)表于 2024-2-23 18:26
這種沒有while循環(huán)的結(jié)束main后不知MCU處在什么狀態(tài)?運(yùn)行的什么語句呢?

為幫助初學(xué)習(xí)者理解而省略了大循環(huán)的一個鮒程而已,
實(shí)際情況是它能編譯通過并下載到單片機(jī)運(yùn)行,也能成
功點(diǎn)亮發(fā)光管。我所知道的沒有例外的都有大循環(huán)在主
函數(shù)中使程序“永遠(yuǎn)”運(yùn)行下去。
也許,單片機(jī)的生產(chǎn)廠家能回答這樣的問題,但這個問
題的答案對于我這樣一般的單片機(jī)使用者來說好象沒有
什么用處。
作者: STC莊偉    時間: 2024-3-28 09:47
初學(xué)應(yīng)該學(xué)STC8H8K64U啊   有硬件USB,直接仿真啊
作者: kkkkah    時間: 2024-4-8 19:03
請問一下初學(xué)單片機(jī)應(yīng)該如何入手?

作者: ltqinghua    時間: 2024-4-14 16:28
不錯降低了很多
作者: mkbk110    時間: 2024-4-19 16:10
對新人非常友好
作者: fan523709338    時間: 2024-4-26 17:17
如果學(xué)單片機(jī)直接,案列對著程序?qū)W習(xí)這樣會不會學(xué)的快點(diǎn)
作者: dcxx    時間: 2024-4-27 15:33
學(xué)習(xí)了,感謝分享。
作者: 白水大蝦2016    時間: 2024-5-7 13:38
fan523709338 發(fā)表于 2024-4-26 17:17
如果學(xué)單片機(jī)直接,案列對著程序?qū)W習(xí)這樣會不會學(xué)的快點(diǎn)

同感,同樣的任務(wù)語句卻也不同,有些迷糊。
作者: liaoxliang    時間: 2024-5-14 22:51
我能點(diǎn)亮的是單片機(jī)本體,算不算單片機(jī)點(diǎn)燈大師,
作者: kinglucifun    時間: 2024-5-19 21:54
這是STC最基礎(chǔ)的單片機(jī)么
作者: 2042582764    時間: 2024-5-31 15:09
之前做的led循環(huán),用的是while(1)循環(huán),led流水燈的實(shí)驗(yàn),你的這篇文章確實(shí)給我很大啟發(fā)
作者: blindman    時間: 2024-6-4 00:42
對新人非常友好
作者: hrzwan    時間: 2024-6-24 11:51
學(xué)習(xí)了,摸索中,
作者: 浪人情歌    時間: 2024-7-2 10:27
學(xué)習(xí)了,感謝
作者: easymfk    時間: 2024-9-4 19:41
你們有沒有買開發(fā)板呢?

作者: zyscxr    時間: 2024-9-22 17:56
萬千的程序,目的只有一個,點(diǎn)燈,第一步,哪種最簡潔,最容易掌握和理解就是最好的
作者: zyscxr    時間: 2024-9-22 17:57
發(fā)表于 2024-9-4 19:41
你們有沒有買開發(fā)板呢?

我買了,能直觀一些吧
作者: dyc2024    時間: 2024-9-28 10:57
相當(dāng)?shù)牟诲e!
作者: w110223    時間: 2024-10-24 13:43

初學(xué)應(yīng)該學(xué)STC8H8K64U
作者: JoyHuan    時間: 2024-10-31 12:32
非常棒的文章,解決了我的問題
作者: qaz256    時間: 2024-11-1 23:10
對初學(xué)者有一點(diǎn)幫助
作者: Mango22    時間: 2024-11-23 03:31
Graves 發(fā)表于 2024-2-23 18:26
這種沒有while循環(huán)的結(jié)束main后不知MCU處在什么狀態(tài)?運(yùn)行的什么語句呢?

同問~~~~~~~~~~~
作者: 人人學(xué)會單片機(jī)    時間: 2024-12-4 13:59
發(fā)表于 2024-4-8 19:03
請問一下初學(xué)單片機(jī)應(yīng)該如何入手?

去B站 直接搜索《人人學(xué)會單片機(jī)》,直接看這套課程學(xué)習(xí)就行了,PCB已經(jīng)開源,你可以自己做WQX開發(fā)板。千萬不要花冤枉錢去買那些老掉牙的開發(fā)板。
作者: man1234567    時間: 2025-11-11 16:48
人人學(xué)會單片機(jī) 發(fā)表于 2024-12-4 13:59
去B站 直接搜索《人人學(xué)會單片機(jī)》,直接看這套課程學(xué)習(xí)就行了,PCB已經(jīng)開源,你可以自己做WQX開發(fā)板。千 ...

51是不是都老掉牙了呢




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1