?? newc.c
字號:
/*************************************************/
/*名稱:可控流水燈
/*描述:該程序?qū)崿F(xiàn)的是可控流水燈
/* 接P3.2 的鍵為開始鍵,按此鍵則燈開始流動(由下而上)
/* 接P3.3 的鍵為停止鍵,按此鍵則停止流動,所有燈暗
/* 接P3.4 的鍵為向上鍵,按此鍵則燈由上向下流動
/* 接P3.5 的鍵為向下鍵,按此鍵則燈由下向上流動
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/
#include <reg51.h>
//#include <intrins.h>
bit upDown = 1; //定義upDown為流向,1為由下至上,0為由上至下
bit onOff = 0; //定義onOff為開關,0為關閉,1為開啟
unsigned char i = 0; //定義i為計數(shù)器,用來累加計數(shù)
void keyProcess (void);
void action (void);
/*************************************************/
/*名稱:main
/*描述:C語言的主函數(shù),該程序的入口
/*參數(shù):void
/*返回值:void
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/
void main (void)
{
TMOD = 0x01; //設定定時器T0工作在方式1
TH0 = 0xd8; //初始化定時器初值,使其產(chǎn)生10ms的中斷(認為晶振為12MHZ所產(chǎn)生)
TL0 = 0xf0;
IE = 0x82; //允許CPU中斷,并打開定時器T0中斷
TR0 = 1; //定時器開始定時
while( 1 ); //等待中斷產(chǎn)生
}
/*************************************************/
/*名稱:T0_ISR
/*描述:定時器T0中斷響應函數(shù)
/*參數(shù):void
/*返回值:void
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/
void delay ( unsigned char i )
{
while (i--);
return ;
}
void T0_ISR (void) interrupt 1 using 1
{
TH0 = 0xd8; //重裝初值
TL0 = 0xf0;
keyProcess(); //運行鍵盤掃描函數(shù)
action(); //運行走馬燈函數(shù)
}
/*************************************************/
/*名稱:keyProcess
/*描述:鍵盤處理函數(shù)
/*參數(shù):void
/*返回值:void
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/
void keyProcess (void)
{
unsigned char key; //定義key為按下鍵值
key = P3; //讀取P3口
if ( key == 0xff ) return ; //如果沒有鍵按下,退出函數(shù)
// _nop_(); //延時消抖
// _nop_();
// _nop_();
delay(100);
if ( key != P3 ) return ;
switch ( key ) //根據(jù)鍵值處理
{
case 0xfb : if ( onOff == 0 ) P1 = 0x7f;
onOff = 1;
break;
case 0xf7 : onOff = 0;
break;
case 0xef : upDown = 1;
break;
case 0xdf : upDown = 0;
break;
default : break;
}
}
/*************************************************/
/*名稱:action
/*描述:LED顯示函數(shù),根據(jù)onOff與upDown來亮滅LED
/*參數(shù):void
/*返回值:void
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/
void action (void)
{
if ( onOff == 0 ) //如果開關onOff為關,則將P1口重置退出函數(shù)
{
P1 = 0xff;
return;
}
if ( i == 250 ) //計數(shù)器記滿250次,燈流動,否則計數(shù)器i自加
{
i = 0;
if ( upDown == 1 )
{
P1 = P1>>1|0x80;
if ( P1 == 0xff ) P1 = 0x7f;
}
else
{
P1 = P1<<1|0x01;
if ( P1 == 0xff ) P1 = 0xfe;
}
}
else
i++;
return;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -