當前位置:編程學習大全網 - 編程語言 - 求大神壹個關於89c52單片機用S0鍵來啟動和停止流水燈的程序,在這裏先感謝各位大佬幫幫忙。

求大神壹個關於89c52單片機用S0鍵來啟動和停止流水燈的程序,在這裏先感謝各位大佬幫幫忙。

//鍵控流水燈

#include "REG52.H"

#define DataGPIO P1//顯示端口

#define FLOWTIME 100//修改此值,改變流水速度

sbit KEY = P2^0;//按鍵

bit Start_flag =0;//流水燈控制

bit Flow_flag =0;//流水

unsigned char Cnt =0;//流水燈計數器

unsigned char KEY_Cnt=0;//按鍵識別計數器

void Init_Timer0()//定時器0初始化

{

TMOD |= 0x01;//16位計數器

TH0 = 0xEC;

TL0 = 0x77;//12M,12T,5000us=5ms

TCON |= 0x10;//定時器0啟動

TCON |= 0x01;//定時器0中斷允許

IE |= 0x80;//總中斷開

}

void Flow_Cont()//流水計數

{

if(++Cnt>FLOWTIME)//500ms

{

Cnt=0;

Flow_flag =1;//流水控制位

}

}

void KEY_Scan()//鍵掃描

{

if(!KEY)//鍵被按下

{

if(KEY_Cnt!=0)//鍵計數器不為0,已經消抖

{

KEY_Cnt = 0;//清計數器

Start_flag =~Start_flag;//流水顯示控制

}

else //鍵計數器為0,沒有消抖

{

KEY_Cnt++;//鍵計數器+1,再掃描壹次。

}

}

}

//

void Timer0_ISR() interrupt 1 //定時器0中斷響應

{

TCON &= ~0x20;//定時器0清溢出

TH0 = 0x3C;

TL0 = 0xAF;//12M,12T,50000us=50ms

Flow_Cont();//流水計數

KEY_Scan();//鍵掃描

}

void DispFlashLED()//流水燈

{

if(Flow_flag)

{

Flow_flag =0;//

switch(DispBit)

{

case 0; DataGPIO = 0xfe; break;

case 0; DataGPIO = 0xfd; break;

case 0; DataGPIO = 0xfb; break;

case 0; DataGPIO = 0xf7; break;

case 0; DataGPIO = 0xef; break;

case 0; DataGPIO = 0xdf; break;

case 0; DataGPIO = 0xbf; break;

case 0; DataGPIO = 0x7f; break;

}

DispBit++;

}

}

int main()

{

Init_Timer0();//定時器0初始化

while(1)

{

if(Start_flag)//如果啟動流水燈

{

DispFlashLED();//流水燈

}

else

{

DataGPIO = 0xff;//不顯示

}

}

}

  • 上一篇:java適合做圖像處理嗎?
  • 下一篇:Xcode模擬器上安裝.app 方法
  • copyright 2024編程學習大全網