單片機(jī)C語(yǔ)言編程相對(duì)于匯編語(yǔ)言來(lái)講入門(mén)比較容易,不需要對(duì)硬件理解那么深刻,有C語(yǔ)言基礎(chǔ)的人學(xué)習(xí)起來(lái)更有優(yōu)勢(shì)。單片機(jī)C語(yǔ)言編程入門(mén)只需要學(xué)會(huì)編寫(xiě)簡(jiǎn)單的輸入、輸出控制即可,入門(mén)后再根據(jù)需要逐步深入學(xué)習(xí)。
一、電路圖
說(shuō)明:仿真軟件后臺(tái)已默認(rèn)是單片機(jī)最小系統(tǒng),本圖沒(méi)再添加電源、復(fù)位電路和時(shí)鐘電路。P0口連接發(fā)光二極管,并且連接了上拉電阻和5V電源,P3口連接獨(dú)立式按鍵。
二、單片機(jī)C語(yǔ)言入門(mén)常用指令
1、#include(包含命令)
#include <reg51.h> //將指定的定義和聲明文件加入程序中。
2、#define(宏定義命令)
#define D P0 //定義D為端口P0。
3、sbit(位定義)
sbit D1=P0^0; //定義D1為引腳P0.0。
3、if(條件判斷指令)
if (條件1)
程序a;
else(條件2)
程序b; //條件1滿足,執(zhí)行程序a;條件2滿足,執(zhí)行程序b;
4、for(循環(huán)指令)
for(int i=0;i<8;i++)
{ } //i為整型變量,小于8時(shí)一直循環(huán)大括號(hào)內(nèi)容。
5、while(循環(huán)指令)
while (表達(dá)式)
{
語(yǔ)句;
} //表達(dá)式成立,執(zhí)行大括號(hào)里內(nèi)容。
三、入門(mén)任務(wù)講解:
1、單片機(jī)控制流水燈D1-D8(輸出練習(xí))
(1)分析:根據(jù)上圖所示,P0口連接發(fā)光二極管正極,所以P0口要輸出高電平才能使發(fā)光二極管導(dǎo)通。大部分電路P0連接發(fā)光二極管負(fù)極,只要輸出低電平就可以導(dǎo)通,并且減少了上拉電阻。
(2)程序及注釋
#include//引用52單片機(jī)頭文件 sbit D1=P0^0; sbit D2=P0^1; sbit D3=P0^2; sbit D4=P0^3; sbit D5=P0^4; sbit D6=P0^5; sbit D7=P0^6; sbit D8=P0^7; /*位定義做流水燈,入門(mén)容易;也可端口定義,#define D P0*/ delay() //延時(shí)函數(shù) { unsigned char i,j; //定義無(wú)符號(hào)字符型,也可用int定義為整型變量 for(i=0;i<2;i++) //外層循環(huán),這里不加分號(hào)。 for(j=0;j<112;j++); //內(nèi)層循環(huán),加分號(hào),表示后面不執(zhí)行任何指令 } main() //主函數(shù) { D1=0; D2=0; D3=0; D4=0; D5=0; D6=0; D7=0; D8=0; /*初始燈處于熄滅狀態(tài)。也可for循環(huán)for(int i=1;i<9;i++) {Di=0;}*/ while(1) //1表示條件永遠(yuǎn)成立,這里使用while形成死循環(huán)。{ D1=1; //點(diǎn)亮第1盞燈 delay(); //點(diǎn)亮的時(shí)間 D1=0; //熄滅第1盞燈 delay(); //熄滅的時(shí)間 D2=1; //點(diǎn)亮第2盞燈 delay(); //點(diǎn)亮的時(shí)間 D2=0; //熄滅第2盞燈 delay(); //熄滅的時(shí)間 D3=1; //點(diǎn)亮第3盞燈 delay(); //點(diǎn)亮的時(shí)間 D3=0; //熄滅第3盞燈 delay(); //熄滅的時(shí)間 D4=1; //點(diǎn)亮第4盞燈 delay(); //點(diǎn)亮的時(shí)間 D4=0; //熄滅第4盞燈 delay(); //熄滅的時(shí)間 D5=1; //點(diǎn)亮第5盞燈 delay(); //點(diǎn)亮的時(shí)間 D5=0; //熄滅第5盞燈 delay(); //熄滅的時(shí)間 D6=1; //點(diǎn)亮第6盞燈 delay(); //點(diǎn)亮的時(shí)間 D6=0; //熄滅第6盞燈 delay(); //熄滅的時(shí)間 D7=1; //點(diǎn)亮第7盞燈 delay(); //點(diǎn)亮的時(shí)間 D7=0; //熄滅第7盞燈 delay(); //熄滅的時(shí)間 D8=1; //點(diǎn)亮第8盞燈 delay(); //點(diǎn)亮的時(shí)間 D8=0; //熄滅第8盞燈 delay(); //熄滅的時(shí)間 } } /*也可以使用for循環(huán),參考初始定義部分注釋,流水就是等依次點(diǎn)亮,熄滅的過(guò)程 */
2、按鍵K1時(shí)D1-D8開(kāi)始流水(輸入輸出練習(xí))
(1)分析:通常按鍵一端接引腳,另一端接地。按鍵接通時(shí),輸入單片機(jī)引腳的電平為低電平0。判斷是否按下,使用if指令進(jìn)行判斷。按鍵按下時(shí),會(huì)有抖動(dòng),使用延時(shí)消除抖動(dòng)。
(2)程序及注釋:
#include//引用52單片機(jī)頭文件 sbit D1=P0^0; sbit D2=P0^1; sbit D3=P0^2; sbit D4=P0^3; sbit D5=P0^4; sbit D6=P0^5; sbit D7=P0^6; sbit D8=P0^7; //位定義,也可以整個(gè)端口定義,#define D P0 sbit K1=P3^0; //定義K1連接引腳P3.0。 delay() //延時(shí)函數(shù) { unsigned char i,j; //定義無(wú)符號(hào)字符型 for(i=0;i<2;i++) //外層循環(huán),這里不加分號(hào) for(j=0;j<112;j++); //內(nèi)循環(huán)加分號(hào),表示后面不執(zhí)行任何指令 } main() //主函數(shù) { D1=0; D2=0; D3=0; D4=0; D5=0; D6=0; D7=0; D8=0; //也可以for循環(huán)for(int i=1;i<9;i++) {Di=0;} while(1) //使用while形成死循環(huán),即燈一直流水。 { if(K1==0) //按鍵按下時(shí)引腳接地,即等于0。 { delay(); //延時(shí)一下,防抖動(dòng) if(K1==0) //再斷按鍵是否按下,按下則流水,否則退出。 { D1=1; //點(diǎn)亮第1盞燈 delay(); //點(diǎn)亮的時(shí)間 D1=0; //熄滅第1盞燈 delay(); //熄滅的時(shí)間 D2=1; //點(diǎn)亮第2盞燈 delay(); //點(diǎn)亮的時(shí)間 D2=0; //熄滅第2盞燈 delay(); //熄滅的時(shí)間 D3=1; //點(diǎn)亮第3盞燈 delay(); //點(diǎn)亮的時(shí)間 D3=0; //熄滅第3盞燈 delay(); //熄滅的時(shí)間 D4=1; //點(diǎn)亮第4盞燈 delay(); //點(diǎn)亮的時(shí)間 D4=0; //熄滅第4盞燈 delay(); //熄滅的時(shí)間 D5=1; //點(diǎn)亮第5盞燈 delay(); //點(diǎn)亮的時(shí)間 D5=0; //熄滅第5盞燈 delay(); //熄滅的時(shí)間 D6=1; //點(diǎn)亮第6盞燈 delay(); //點(diǎn)亮的時(shí)間 D6=0; //熄滅第6盞燈 delay(); //熄滅的時(shí)間 D7=1; //點(diǎn)亮第7盞燈 delay(); //點(diǎn)亮的時(shí)間 D7=0; //熄滅第7盞燈 delay(); //熄滅的時(shí)間 D8=1; //點(diǎn)亮第8盞燈 delay(); //點(diǎn)亮的時(shí)間 D8=0; //熄滅第8盞燈 delay(); //熄滅的時(shí)間 } } } } /*也可以使用for循環(huán),參考初始定義部分注釋,流水就是等依次點(diǎn)亮,熄滅的過(guò)程 */