本節(jié)重點(diǎn):實(shí)現(xiàn)一個(gè)LED流水燈程序
預(yù)備知識(shí):
一、C語(yǔ)言常用到的預(yù)處理命令
1、define
define是宏定義,程序在預(yù)處理階段將用define定義的內(nèi)容進(jìn)行了替換 。因此在程序運(yùn)行時(shí),常量表中并沒(méi)有用define定義的常量,系統(tǒng)不為它分配內(nèi)存。
使用#define定義的常量也稱為符號(hào)常量,可以提高程序的運(yùn)行效率。
其常見(jiàn)的用法包括兩種,分別是:
1)#define 宏名 宏值
2)#define 宏名(參數(shù)列表)表達(dá)式
而define命令的用法一般分為兩種:
第一種語(yǔ)法就是定義符號(hào)常量
第二種語(yǔ)法常用來(lái)定義符號(hào)函數(shù)。
舉例說(shuō)明一下:
#define A 3.14
執(zhí)行這個(gè)條件之后,就是能直接將3.14的數(shù)值給到A上。
#define AREA(x,y)(x)*(y)
表示用來(lái)求長(zhǎng)和寬分別是x和y的矩形的面積。
二、函數(shù)循環(huán)左移/右移
crol (a,b);循環(huán)左移函數(shù),a是左移的值,b是左移的位數(shù)。包含在intrins.h庫(kù)函數(shù)里面。
cror (a,b);循環(huán)右移函數(shù),a是右移的值,b是右移的位數(shù)。包含在intrins.h庫(kù)函數(shù)里面
編寫程序:
有了上述的知識(shí)儲(chǔ)備之后,我們?cè)诰帉懸粋€(gè)LED流水燈的程序。
流水燈思路:
首先點(diǎn)亮第一個(gè)LED燈,然后延時(shí)一段時(shí)間,再將當(dāng)前LED熄滅,然后點(diǎn)亮第二個(gè)LED燈,這個(gè)過(guò)程通過(guò)一個(gè)函數(shù)移動(dòng)的方式去實(shí)現(xiàn),再延時(shí)一段時(shí)間,熄滅LED燈,如此往復(fù)的循環(huán)下去,就能實(shí)現(xiàn)一個(gè)LED燈的流水視覺(jué)。
(本此實(shí)驗(yàn)LED燈組采用的是共陰極接法,也就是說(shuō)需要單片機(jī)引腳輸出一個(gè)1,才會(huì)使得LED燈點(diǎn)亮)
程序編寫:
#include< reg52.h > //頭文件
#include< intrins.h > //頭文件
typedef unsigned char u8; //定義類型
typedef unsigned int u16;
#define led P2 //定義LED燈組使用的是P2的八個(gè)引腳
void delay(u16 i) //延時(shí)函數(shù)delay
{
while(i--);
}
void main()
{
u8 i=0; //定義變量i
led=0x01; //設(shè)置LED燈組的初始狀態(tài)值(0000 0001,使用的是共陰極)
delay(50000);
while(1)
{
for(i=0;i< 7;i++) //for循環(huán)函數(shù),初始值i為0,滿足i< 7的條件,每次循環(huán)一次執(zhí)行i自加1
{
led=_crol_(led,1); //LED左移函數(shù),每次執(zhí)行for循環(huán)執(zhí)行一次函數(shù)移動(dòng)
delay(50000);
}
for(i=0;i< 7;i++)
{
led=_cror_(led,1); //LED右移函數(shù),每次執(zhí)行for循環(huán)執(zhí)行一次函數(shù)移動(dòng)
delay(50000);
}
}
}
-
led
+關(guān)注
關(guān)注
242文章
23329瀏覽量
662114 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7614瀏覽量
137317 -
流水燈
+關(guān)注
關(guān)注
21文章
433瀏覽量
59771 -
程序
+關(guān)注
關(guān)注
117文章
3794瀏覽量
81254 -
命令
+關(guān)注
關(guān)注
5文章
692瀏覽量
22067
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論