找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

第1章 單片機(jī)高效入門

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:111078 發(fā)表于 2016-3-28 00:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51單片機(jī)輕松入門—基于STC15W4K系列(C語言版)
李友全
編著:http://www.torrancerestoration.com/bbs/dpj-37954-1.html


1章 單片機(jī)高效入門

1 認(rèn)識單片機(jī)

2 制作一個最簡單的單片機(jī)實驗電路

3 使用Keil軟件編寫最簡單的程序(點亮一個發(fā)光二極管)

4 計算機(jī)程序下載到單片機(jī)

5 I/O口4種工作模式

6 流水燈實例

7 I/O口輸入測試

8 軟件仿真

9 硬件仿真

10 延時軟件使用方法

11 main()、void main()和int main()的區(qū)別

12 printf 格式化輸出函數(shù)(單片機(jī)與計算機(jī)通信)

13 學(xué)習(xí)用實驗板介紹


1 認(rèn)識單片機(jī)



單片機(jī)全稱是單片微型計算機(jī)(與計算機(jī)原理相同),外 形與普通集成電路相同,但普通集成電路功能是固定死 的,使用者無法更改,單片機(jī)的功能是可以通過編寫程序 進(jìn)行更改的。

51單片機(jī)主要發(fā)展歷程:

AT89C51(已停產(chǎn))——AS89S51(已淘汰)—— STC89C52(2004年,已落后)——STC12系列 (2007年)——STC15F系列(2011年)—— STC15W系列(2014年,最新運(yùn)用主流)。

本書主講單片機(jī)型號:STC15W系列中的典型型 號:IAP15W4K58S4 ,輔助性的介紹STC15F2K60S2與STC15W408S

編程語言與開發(fā)環(huán)境:當(dāng)今最流行的具有跨平臺 優(yōu)勢的C語言與keil編譯軟件

C語言跨平臺優(yōu)勢

不同的CPU使用不同的匯編指令,不通用,但C語言有優(yōu)越的跨平臺能力
2 制作一個最簡單的單片機(jī)實驗電路



5V供電電路

計算機(jī)串口外形

連接到計算機(jī)串口

3 使用Keil軟件編寫最簡單的程序
(點亮一個發(fā)光二極管)
1、安裝Keil軟件

2、安裝漢子補(bǔ)丁

3、 新建工程:工程名與C文件名可隨便輸入,但不能有漢字,更不能與C

語言的關(guān)鍵字或函數(shù)名稱相同,否則會發(fā)生沖突(編譯出現(xiàn)很多錯誤或警告)
Keil中輸入程序代碼

#include "STC15W4K.H"

sbit P0_0 = P0^0; // sbit是位定義

void main ()

{
P0_0=0; // 點亮LED
while(1); // 讓程序停在這里

}

4 計算機(jī)程序下載到單片機(jī)

5 I/O口4種工作模式

例1.5 最精簡的流水燈實例(A)

6 流水燈實例
#include "STC15W4K.H" // 注意宏定義語句后面無分號

void delay100ms()

{
unsigned char i,j,k; // i,j,k由由軟件計算出并驗證正確。
for(i=157;i>0;i--) // 注意后面沒分號
for(j=9;j>0;j--) // 注意后面沒分號
for(k=194;k>0;k--); // 注意后面有分號
}
void port_mode() // 端口模式(準(zhǔn)雙向、弱上拉)
{

P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00; P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;

}

void main()

{

unsigned char a;

port_mode(); // 將單片機(jī)所有端口配置為準(zhǔn)雙向弱上拉方式

while(1)

{
P0 =~(1<<a++); 第一次運(yùn)行時="" 0000="" 0001<<="" 0="0000" 0001[="" size][="" font][="" color][="" align][p="17," null,="" left]delay100ms();
[color=rgb(0," (a="=0x08)" 允許左移8次。[="" align]P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00; P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
}
void main()
{
unsigned char a;
port_mode(); // 將單片機(jī)所有端口配置為準(zhǔn)雙向弱上拉方式 P2 = 0xFF; // P2口置弱上拉高電平輸出
while(1)
{
P0 = P2; // 循環(huán)檢測P2口輸入電平高低。
}
}
8 軟件仿真

9 硬件仿真

n 在STC程序下載軟件中首先選擇“Keil仿真設(shè)置”頁面,點擊“添加型號和頭文件到Keil 中”,在出現(xiàn)的目錄選擇窗口中,定位到Keil的安裝目錄(比如“C:Keil818”),“確 定”后出現(xiàn)“STC MCU型號添加成功”的提示信息,點“確定”。

n 保持IAP15W4K58S4實驗電路仍然與電腦串口相連,如上圖所示,先選擇仿真芯片運(yùn) 行時的R/C時鐘頻率或使用外部晶振,然后點擊“將IAP15W4K58S4設(shè)置為仿真芯片”按 鈕,給電路板上電,此時就將會有程序向芯片中下載,下載完成后仿真器便制作完成 了,IAP15W4K58S4設(shè)置成仿真芯片后,要想再變成一般的單片機(jī)無需任何操作,直接 將它當(dāng)作單片機(jī)下載程序使用就可以了。

n 在Keil中新建項目,出現(xiàn)下圖 對話框,選擇“STC MCU Database”項,然后從列表 中選擇相應(yīng)的MCU型號,在此選擇“STC15W4K32S4”,點擊“OK”完成選擇。

然后按下圖設(shè)置硬件仿真
確認(rèn)前面我們所創(chuàng)建的項目編譯沒有錯誤后,按“Ctrl+F5”或工具欄圖標(biāo) 開始調(diào) 試,若硬件連接無誤的話,將會進(jìn)入到與軟件仿真類似的調(diào)試界面,只是現(xiàn)在可以一步一步 執(zhí)行程序并控制硬件動作了)。
有時進(jìn)入調(diào)試環(huán)境可能會失敗,首先檢查仿真串口號選擇是否有誤,另外可將單片機(jī)斷電 后重新上電試試,若使用的USB轉(zhuǎn)串口,可將USB頭斷開幾秒再插上,如果仍然不行,請檢查
程序代碼是否占用了仿真調(diào)試接口(P3.0與P3.1 )。
10 延時軟件使用方法

長時間延時,函數(shù)固定格式:

void delay500ms() // 大范圍精確延時函數(shù)
{
unsigned char i,j,k; // i,j,k由軟件計算出確定。
for(i=41;i>0;i--) // 注意后面沒分號
for(j=133;j>0;j--) // 注意后面沒分號
for(k=252;k>0;k--); // 注意后面有分號
}
短暫延時,函數(shù)固定格式:
void delay (unsigned char t) // 小范圍精確延時函數(shù)
{

while(--t);

}
根據(jù)不同的延時時間修改函數(shù)中的變量 i,j,kt 即可, i,j,kt 由筆者編寫的 軟件直接計算得出

11 main()、void main()和int main()的區(qū)別

在C語言中main()和void main()區(qū)別:一個有返回值(沒聲明類型的 默認(rèn)是返回值int型),一個無返回值,特別在單片機(jī)運(yùn)用中由于主函數(shù) 沒有其它函數(shù)調(diào)用它,所以返回的值也就沒什么用。所以一般都寫的 void main(),這時程序中不需要return語句,如果main()函數(shù)前沒有void

(默認(rèn)為int),或者寫為int main()程序中就必須有return語句,比如:

int main()

{
return 0; // 表示程序正常退出
}
在單片機(jī)程序中一般寫作void min()最方便,但在其它一些C編譯器中,寫
作void main()編譯是不能通過的,需要寫成int main(),int main()是C語言
的標(biāo)準(zhǔn)格式。
12 printf 格式化輸出函數(shù)(單片機(jī)與計算機(jī)通信)

例1.8 計算機(jī)串口助手顯示單片機(jī)內(nèi)部簡單信息

#include "STC15W4K.H"

#include  // 為使用KEIL自帶的庫函數(shù)printf而加入
void printstar()
{
printf("********************************");
}
void print_message()
{
printf("hello world"); // 最簡單輸出 printf("How do you do!"); // 輸出換行符 printf("歡迎學(xué)習(xí)STC51單片機(jī)"); // 中文輸出
}
void UART_init(void)
{
// 下面代碼設(shè)置定時器1
TMOD = 0x20; // 0010 0000 定時器1工作于方式2(8位自動重裝方式) TH1 = 0xFD; // 波特率:9600 /11.0592MHZ
TL1 = 0xFD; // 波特率:9600 /11.0592MHZ TR1 = 1;
// 下面代碼設(shè)置定串口
AUXR = 0x00; // 很關(guān)鍵,使用定時器1作為波特率發(fā)生器,S1ST2=0
SCON = 0x50; // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允許接受) TI=1; // 很關(guān)鍵,使用printf函數(shù)時必須有此命令
}

void main()

{

}

UART_init(); // 初始化串口 printstar(); // 輸出************** print_message(); // 輸出說明文字 printstar(); // 輸出************** while(1) ; // 停在這里

我們把例1.8程序下載到單片機(jī)中,打開程序下載軟件的串口助手,接收緩沖區(qū)選擇文本模式,波特率

9600,打開串口,給實驗板斷電后上電,可以看到單片機(jī)發(fā)給計算機(jī)的信息如圖1-67所示,如果顯示 的個別字符出現(xiàn)亂碼或連續(xù)接收大量數(shù)據(jù)顯示不正常,可換用其它串口助手軟件,比如“丁丁串口調(diào)試 助手SSCOM 3.3”即可解決。實驗結(jié)果如下:

實 驗 主 板


13 學(xué)習(xí)用實驗板介紹

由于后續(xù)章節(jié)實驗很多,制作實驗電路比較耗費(fèi)時間,可以購買實驗板產(chǎn)品。

SD卡與MP3實驗板


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏12 分享淘帖 頂2 踩

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:154576 發(fā)表于 2017-3-21 10:47 | 只看該作者
謝謝!比較適合我這樣的初學(xué)者,非常感謝。
回復(fù)

使用道具 舉報

板凳
ID:192534 發(fā)表于 2017-5-18 08:25 | 只看該作者
很適合我這樣的初學(xué)者,非常感謝。。!
回復(fù)

使用道具 舉報

地板
ID:280642 發(fā)表于 2018-1-30 08:54 | 只看該作者
看起來很基礎(chǔ)非常適合初學(xué),就感謝樓主分享,謝謝!
回復(fù)

使用道具 舉報

5#
ID:401610 發(fā)表于 2018-9-23 16:40 | 只看該作者
學(xué)習(xí)了。。
很適合我這樣的初學(xué)者,非常感謝。。!
回復(fù)

使用道具 舉報

6#
ID:401610 發(fā)表于 2018-9-23 17:11 | 只看該作者
謝謝,學(xué)習(xí)了。。。
回復(fù)

使用道具 舉報

7#
ID:409837 發(fā)表于 2018-10-23 14:51 | 只看該作者
很好,謝謝,支持!
回復(fù)

使用道具 舉報

8#
ID:421786 發(fā)表于 2018-11-8 11:23 | 只看該作者
謝謝!比較適合我這樣的初學(xué)者,非常感謝!!
回復(fù)

使用道具 舉報

9#
ID:427487 發(fā)表于 2018-11-16 08:17 | 只看該作者
Hello World
回復(fù)

使用道具 舉報

10#
ID:452731 發(fā)表于 2018-12-27 20:58 | 只看該作者
這個單片機(jī)和STC的51還有89C51    有什么優(yōu)點?
回復(fù)

使用道具 舉報

11#
ID:420519 發(fā)表于 2019-1-21 19:35 | 只看該作者
看了一會兒  長路漫漫啊
回復(fù)

使用道具 舉報

12#
ID:452731 發(fā)表于 2019-1-27 23:58 | 只看該作者
具有參考價值
回復(fù)

使用道具 舉報

13#
ID:299054 發(fā)表于 2019-2-16 15:49 | 只看該作者
謝謝樓主分享的好資料!
回復(fù)

使用道具 舉報

14#
ID:384315 發(fā)表于 2019-7-3 23:37 來自手機(jī) | 只看該作者
怎么還是有點看不懂?
回復(fù)

使用道具 舉報

15#
ID:341311 發(fā)表于 2019-9-27 09:34 | 只看該作者
謝謝樓主的分享
回復(fù)

使用道具 舉報

16#
ID:607546 發(fā)表于 2019-10-6 14:46 | 只看該作者
謝謝分享,入門學(xué)習(xí)很好,適用!
回復(fù)

使用道具 舉報

17#
ID:253767 發(fā)表于 2020-4-23 07:30 | 只看該作者
謝謝分享!!!
回復(fù)

使用道具 舉報

18#
ID:816011 發(fā)表于 2020-8-28 11:44 | 只看該作者
學(xué)習(xí)了。。 很適合我這樣的初學(xué)者,感謝
回復(fù)

使用道具 舉報

19#
ID:847123 發(fā)表于 2020-11-22 04:28 | 只看該作者
想入門,看了一會,覺得stc15f104系列8腳的單片機(jī)適合我容易玩
回復(fù)

使用道具 舉報

20#
ID:968083 發(fā)表于 2021-9-26 05:03 | 只看該作者
這樣圖文并茂的教程對新手很有幫助,感謝樓主
回復(fù)

使用道具 舉報

21#
ID:985401 發(fā)表于 2022-1-3 22:30 | 只看該作者

謝謝!比較適合我這樣的初學(xué)者,非常感謝!
回復(fù)

使用道具 舉報

22#
ID:1024753 發(fā)表于 2022-5-19 16:40 | 只看該作者
很實用,謝謝大佬分享,開始學(xué)習(xí)
回復(fù)

使用道具 舉報

23#
ID:742312 發(fā)表于 2022-11-25 21:57 | 只看該作者
很實用,謝謝大佬分享 非常感謝!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表