1.單個LED燈,單個按鍵
//C語言的頭文件 //這是第一種注釋方式;
#include
#include <> //預(yù)處理命令
void main(void) //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型
{
unsigned int a; //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾
do{ //do-while 組成的循環(huán)過程,過程的開始
for (a=0; a<500; a++); //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句
P1_0 = 0; //位賦值語句,設(shè) P1.0 口為低電平—置0,點亮 LED
for (a=0; a<500; a++); //這又是一個判斷循環(huán)
P1_0 = 1; //設(shè) P1.0 口為高電平,熄滅 LED
}
while(1); //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷
}
程序說明:
While(條件語句) 與 for(條件語句) 單獨使用所表達的循環(huán),是在句首先執(zhí)行判斷,為真循環(huán),為假轉(zhuǎn)下一句執(zhí)行。其中語句的括號內(nèi)為判斷條件語句。
Do-while合用,是需要對do的過程再進行一次判斷。While(條件語句)為真循環(huán),為假跳轉(zhuǎn)。while(1)表示高電平為真循環(huán)do,否則,低電平跳轉(zhuǎn)。由于P1.0 口為高電平結(jié)尾,因此,又回到do再循環(huán),無限反復(fù)。
2.多個LED燈,單個按鍵
#include
#include <> //預(yù)處理命令
void main(void) //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型
{
unsigned int a; //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾
do{ //do-while 組成的循環(huán)過程,過程的開始
for (a=0; a<500; a++); //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句
P1_0 = 0; //位賦值語句,設(shè) P1.0 口為低電平—置0,點亮 LED
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
for (a=0; a<500; a++); //這又是一個判斷循環(huán)
P1_0 = 1; //設(shè) P1.0 口為高電平,熄滅 LED
P1_1 = 1;
P1_2 = 1;
P1_3 = 1;
}
while(1); //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷
}
程序說明:
每個口用位賦值指令來開關(guān)P1口的各個LED?梢杂米止(jié)賦值指令一次性的開關(guān)8位P1口LED。
P1=0; //P1口8位置低電平,點亮8個LED
P1=1; // P1口8位置低電平,關(guān)閉8個LED
#include
#include <> //預(yù)處理命令
void main(void) //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型
{
unsigned int a; //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾
do{ //do-while 組成的循環(huán)過程,過程的開始
for (a=0; a<500; a++); //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句
P1 = 0; //字節(jié)賦值語句,設(shè) P1 口為低電平—置0,點亮 8個LED
for (a=0; a<500; a++); //這又是一個判斷循環(huán)
P = 1; //設(shè) P1 口為高電平,熄滅 LED
}
while(1); //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷
}
l LED循環(huán)問題(跑馬燈):
每個口用位賦值指令來開關(guān)P1口的各個LED,用位指令賦值順序開關(guān),實現(xiàn)跑馬燈。
#include
#include <> //預(yù)處理命令
void main(void) //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型
{
unsigned int a; //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾
do{ //do-while 組成的循環(huán)過程,過程的開始
for (a=0; a<500; a++); //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句
P1_0 = 0; //位賦值語句,設(shè) P1.0 口為低電平—置0,點亮 LED
P1_1 = 1;
P1_2 = 1;
P1_3 = 1;
for (a=0; a<500; a++); //這又是一個判斷循環(huán)
P1_0 = 1; //設(shè) P1.0 口為高電平,熄滅 LED
P1_1 = 0;
P1_2 = 1;
P1_3 = 1;
for (a=0; a<500; a++); //這又是一個判斷循環(huán)
P1_0 = 1;
P1_1 = 1;
P1_2 = 0;
P1_3 = 1;
for (a=0; a<500; a++); //這又是一個判斷循環(huán)
P1_0 = 1;
P1_1 = 1;
P1_2 = 1;
P1_3 = 0;
for (a=0; a<500; a++); //這又是一個判斷循環(huán)
P1_0 = 1; //設(shè) P1.0 口為高電平,熄滅 LED
P1_1 = 1;
P1_2 = 1;
P1_3 = 1;
}
while(1); //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷
}
用循環(huán)語句實現(xiàn)跑馬燈,需要使用數(shù)組—表data。每個字節(jié)--8位來表達P1口各個位的電平高低,也就是亮與滅。
#include
#include <> //預(yù)處理命令
void main(void) //主函數(shù)名,必須有一個主函數(shù),void為數(shù)據(jù)類型
{
unsigned int a; //定義變量,a為int類型,無符號整型。語句必須分號結(jié)尾
do{ //do-while 組成的循環(huán)過程,過程的開始
for (a=0; a<500; a++); //這是一個條件循環(huán),判斷a的值是否小于500,真循環(huán)-耗時,假轉(zhuǎn)下句
P1 = 0; //字節(jié)賦值語句,設(shè) P1 口為低電平—置0,點亮 8個LED
for (a=0; a<500; a++); //這又是一個判斷循環(huán)
P = 1; //設(shè) P1 口為高電平,熄滅 LED
}
while(1); //do-while 組成循環(huán)過程的末尾,需要對do的過程進行一次判斷
}
3. 鍵盤與數(shù)碼管
//鍵盤掃描法--數(shù)碼管顯示鍵值。行P1.0~3 列P1.4~7
#include
unsigned char code tabyin[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0到F的16個鍵值
unsigned char code tabyang[ ]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0x88,0x83,0xc6,0xa1,0x86,0x8e};//0到F的16個鍵值
//延時函數(shù)
void Delayt(unsigned char t)
{
unsigned char i;
for(t=0;i<=t;t++)
for(i=0;i<255;i++);
}
//鍵值判斷函數(shù)
bit pkey(void)
{
P1=0xf0;
if(P1!=0xf0)
{
Delayt(25);
if(P1!=0xf0)
return 1;
else
return 0;
}
else
return 0;
}
//主函數(shù)
void main(void)
{
unsigned char key,j,k,s;
while(1)
{
if(pkey()==1)
{
P1=0xfe;
k=0xfe;
for(j=0;j<4;j++)
{
s=P1&0xf0;
switch(s)
{
case 0xe0: key=4*j+0; break;
case 0xd0: key=4*j+1; break;
case 0xb0: key=4*j+2; break;
case 0x70: key=4*j+3; break;
default: break;
}
k=(k<<1)|0x01;
P1=k;
}
}
P2=0x00;
P3=0xff;
P3=tabyang[key];
Delayt(200);
P2=tabyin[key];
Delayt(250);
}
}