單片機C語言編程相對於(yu) 匯編語言來講入門比較容易,不需要對硬件理解那麽(me) 深刻,有C語言基礎的人學習(xi) 起來更有優(you) 勢。單片機C語言編程入門隻需要學會(hui) 編寫(xie) 簡單的輸入、輸出控製即可,入門後再根據需要逐步深入學習(xi) 。
一、電路圖
說明:仿真軟件後台已默認是單片機最小係統,本圖沒再添加電源、複位電路和時鍾電路。P0口連接發光二極管,並且連接了上拉電阻和5V電源,P3口連接獨立式按鍵。
二、單片機C語言入門常用指令
1、#include(包含命令)
#include <reg51.h> //將指定的定義(yi) 和聲明文件加入程序中。
2、#define(宏定義(yi) 命令)
#define D P0 //定義(yi) D為(wei) 端口P0。
3、sbit(位定義(yi) )
sbit D1=P0^0; //定義(yi) D1為(wei) 引腳P0.0。
3、if(條件判斷指令)
if (條件1)
程序a;
else(條件2)
程序b; //條件1滿足,執行程序a;條件2滿足,執行程序b;
4、for(循環指令)
for(int i=0;i<8;i++)
{ } //i為(wei) 整型變量,小於(yu) 8時一直循環大括號內(nei) 容。
5、while(循環指令)
while (表達式)
{
語句;
} //表達式成立,執行大括號裏內(nei) 容。
三、入門任務講解:
1、單片機控製流水燈D1-D8(輸出練習(xi) )
(1)分析:根據上圖所示,P0口連接發光二極管正極,所以P0口要輸出高電平才能使發光二極管導通。大部分電路P0連接發光二極管負極,隻要輸出低電平就可以導通,並且減少了上拉電阻。
(2)程序及注釋
#include //引用52單片機頭文件
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;
/*位定義(yi) 做流水燈,入門容易;也可端口定義(yi) ,#define D P0*/
delay() //延時函數
{
unsigned char i,j; //定義(yi) 無符號字符型,也可用int定義(yi) 為(wei) 整型變量
for(i=0;i<2;i++) //外層循環,這裏不加分號。
for(j=0;j<112;j++); //內(nei) 層循環,加分號,表示後麵不執行任何指令
}
main() //主函數
{
D1=0;
D2=0;
D3=0;
D4=0;
D5=0;
D6=0;
D7=0;
D8=0;
/*初始燈處於(yu) 熄滅狀態。也可for循環for(int i=1;i<9;i++) {Di=0;}*/
while(1) //1表示條件永遠成立,這裏使用while形成死循環。{
D1=1; //點亮第1盞燈
delay(); //點亮的時間
D1=0; //熄滅第1盞燈
delay(); //熄滅的時間
D2=1; //點亮第2盞燈
delay(); //點亮的時間
D2=0; //熄滅第2盞燈
delay(); //熄滅的時間
D3=1; //點亮第3盞燈
delay(); //點亮的時間
D3=0; //熄滅第3盞燈
delay(); //熄滅的時間
D4=1; //點亮第4盞燈
delay(); //點亮的時間
D4=0; //熄滅第4盞燈
delay(); //熄滅的時間
D5=1; //點亮第5盞燈
delay(); //點亮的時間
D5=0; //熄滅第5盞燈
delay(); //熄滅的時間
D6=1; //點亮第6盞燈
delay(); //點亮的時間
D6=0; //熄滅第6盞燈
delay(); //熄滅的時間
D7=1; //點亮第7盞燈
delay(); //點亮的時間
D7=0; //熄滅第7盞燈
delay(); //熄滅的時間
D8=1; //點亮第8盞燈
delay(); //點亮的時間
D8=0; //熄滅第8盞燈
delay(); //熄滅的時間
}
}
/*也可以使用for循環,參考初始定義(yi) 部分注釋,流水就是等依次點亮,熄滅的過程 */
2、按鍵K1時D1-D8開始流水(輸入輸出練習(xi) )
(1)分析:通常按鍵一端接引腳,另一端接地。按鍵接通時,輸入單片機引腳的電平為(wei) 低電平0。判斷是否按下,使用if指令進行判斷。按鍵按下時,會(hui) 有抖動,使用延時消除抖動。
(2)程序及注釋:
#include //引用52單片機頭文件
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; //位定義,也可以整個端口定義,#define D P0
sbit K1=P3^0; //定義K1連接引腳P3.0。
delay() //延時函數
{
unsigned char i,j; //定義無符號字符型
for(i=0;i<2;i++) //外層循環,這裏不加分號
for(j=0;j<112;j++); //內循環加分號,表示後麵不執行任何指令
}
main() //主函數
{
D1=0;
D2=0;
D3=0;
D4=0;
D5=0;
D6=0;
D7=0;
D8=0; //也可以for循環for(int i=1;i<9;i++) {Di=0;}
while(1) //使用while形成死循環,即燈一直流水。
{
if(K1==0) //按鍵按下時引腳接地,即等於0。
{ delay(); //延時一下,防抖動
if(K1==0) //再斷按鍵是否按下,按下則流水,否則退出。
{
D1=1; //點亮第1盞燈
delay(); //點亮的時間
D1=0; //熄滅第1盞燈
delay(); //熄滅的時間
D2=1; //點亮第2盞燈
delay(); //點亮的時間
D2=0; //熄滅第2盞燈
delay(); //熄滅的時間
D3=1; //點亮第3盞燈
delay(); //點亮的時間
D3=0; //熄滅第3盞燈
delay(); //熄滅的時間
D4=1; //點亮第4盞燈
delay(); //點亮的時間
D4=0; //熄滅第4盞燈
delay(); //熄滅的時間
D5=1; //點亮第5盞燈
delay(); //點亮的時間
D5=0; //熄滅第5盞燈
delay(); //熄滅的時間
D6=1; //點亮第6盞燈
delay(); //點亮的時間
D6=0; //熄滅第6盞燈
delay(); //熄滅的時間
D7=1; //點亮第7盞燈
delay(); //點亮的時間
D7=0; //熄滅第7盞燈
delay(); //熄滅的時間
D8=1; //點亮第8盞燈
delay(); //點亮的時間
D8=0; //熄滅第8盞燈
delay(); //熄滅的時間
}
}
}
}
/*也可以使用for循環,參考初始定義部分注釋,流水就是等依次點亮,熄滅的過程 */