a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > MSC-51中斷綜合應用

MSC-51中斷綜合應用

作者: 時間:2016-11-13 來源:網絡 收藏
定時中斷和外部中斷都用上了。

源程序如下:

本文引用地址:http://www.j9360.com/article/201611/316242.htm

#pragma REGPARMS CD DB SB OE OT(5)

#include

typedef unsigned char byte;

typedef unsigned int word;

typedef unsigned long dword;

byte sec,ms,xs_en,shic;/*定義時間變量*/

sbit P2_0 = P2^0;//鍵盤輸出1

sbit P2_1 = P2^1;//鍵盤輸出2

sbit P2_2 = P2^2;//鍵盤輸入1

sbit P2_3 = P2^3;//鍵盤輸入2

sbit P2_4 = P2^4;//蜂鳴器

sbit P2_5 = P2^5;//繼電器

sbit P2_6 = P2^6;//數碼管1

sbit P2_7 = P2^7;//數碼管2

/**********************************************************************

函數功能:延時程序

入口參數:延遲時間

出口參數:無

***********************************************************************/

void Delay(byte time)

{

byte i;

for(;time > 0;time--)

for(i=10;i > 0;i--);

}

/*LED數碼管顯示程序****************************************************

入口函數:要顯示的值

出口函數:無

**********************************************************************/

void xianshi(byte xs)//輸入要顯示的值

{

byte code Seg[10]={0x28,0xf9,0x4c,0x58,0x99,0x1a,0x0a,0xf8,0x08,0x18};

P0=0xff;//顯示個位

P2_7=1;

P2_6=0;

P0=Seg[xs%10];

Delay(10);//延時程序

P0=0xff;//顯示十位

P2_6=1;

P2_7=0;

P0=Seg[xs/10];

Delay(10);//延時程序

}

/**********************************************************************

函數功能:掃描鍵盤

函數入口:無

函數出口:有/無鍵按下1/0

**********************************************************************/

byte keyfun(void)

{

byte P2copy;

P2 &= 0xfc;

P2copy = P2;

if((P2copy & 0x04) && (P2copy & 0x08))return 0;

else

{

EA = 0;

return 1;

}

}

/**********************************************************************

函數功能:外部中斷服務程序

入口參數:無

出口參數:無

***********************************************************************/

void STOP1() interrupt 2/*當ITN0中斷時執行此函數*/

{

ET0 = 1;

xs_en = 1;

}

/**********************************************************************

函數功能:外部中斷服務程序

入口參數:無

出口參數:無

***********************************************************************/

void STOP0() interrupt 0/*當ITN0中斷時執行此函數*/

{

if(xs_en)

{

xs_en = 0;

ms = 0;

sec = 0;

}

else

{

ET0 = 0;

}

}

/**********************************************************************

函數功能:定時器中斷函數(掃描鍵盤)(10ms 16位定時)

入口參數:無

出口參數:無

***********************************************************************/

void Time0_Func() interrupt 1/*當定時器中斷時執行此函數*/

{

TH0=(0xffff-9259)/256;/*10ms*/

TL0=(0xffff-9259)%256;

ms++;

if(keyfun())//當有鍵時,P2低四位置1,定時器中斷禁止

{

P2 |= 0x0f;

}

else

{

if(ms == 99){ms = 0;sec++;}

if(ms % 5 == 0 && xs_en)

{

switch(ms / 5)

{

case 1 : P1 = 0x7f;break;

case 2 : P1 = 0x3f;break;

case 3 : P1 = 0x1f;break;

case 4 : P1 = 0x8f;break;

case 5 : P1 = 0xc7;break;

case 6 : P1 = 0xe3;break;

case 7 : P1 = 0xf1;break;

case 8 : P1 = 0xf8;break;

case 9 : P1 = 0xfc;break;

case 10: P1 = 0xfe;break;

default: P1 = 0xff;

}

}

}

}

/**********************************************************************

函數功能:上電初始化函數

入口參數:無

出口參數:無

***********************************************************************/

void Power_Up(void)

{

TMOD = 0x01;/*Time0為16計數器*/

TH0=(0xffff-9259)/256;/*10ms*/

TL0=(0xffff-9259)%256;

TR0=1;//T0啟動

IT0 = 1;//外部中斷為邊沿觸發

IE=0x87;/*EA=1 ET0=1 EX0=1 EX1=1*/

P1=0xff;

P2=0xff;

}

/**********************************************************************

函數功能:鍵值掃描

入口參數:無

出口參數:鍵值

***********************************************************************/

byte keyscan(void)

{

byte i,j;

P2 |= 0x0f;

P2 &= 0xfe;//Key_1低電平

for(i=0;i<2;i++)

{

if(i)

{

P2 |= 0x0f;

P2 &= 0xfd;//Key_2低電平

}

j = P2 & 0x0c;

j >>= 1;

if(j != 6){return (i+j-1);break;}

}

return 0;

}

/**********************************************************************

函數功能:時間調整

入口參數:無

出口參數:無

***********************************************************************/

void TiaoZ(void)

{

byte sp=1,Keyc,Keyl;

while(sp)

{

xianshi(shic);

Delay(20);

Keyc = keyscan();

while(Keyc != Keyl)

{

xianshi(shic);

Delay(20);

switch(Keyc)

{

case 3 ://顯示值加1

shic++;break;

case 2 ://顯示值減1

shic--;break;

case 4 ://退出調整

sp=0;

while(Keyc == keyscan());

Power_Up();

break;

}

Keyl = Keyc;

}

}

}

/**********************************************************************

函數功能:主函數

入口參數:無

出口參數:無

***********************************************************************/

void main()

{

sec=0;//初始化

ms=0;

xs_en=1;

shic=10;//初始時長10秒

Power_Up();//初始化

while(1)

{

if(EA == 0)TiaoZ();

if(ET0 == 0){P1 = ~sec;xianshi(ms);}

if(xs_en == 1)xianshi(ms);

}

}



關鍵詞: MSC-51中

評論


相關推薦

技術專區

關閉