(1)功能要求:三個按鍵,三個LED燈,按其中一個按鍵,對應的LED燈點亮1s,1s和按鍵均采用中斷法實作。
uj5u.com熱心網友回復:
#include "reg52.h"typedef unsigned int u16;
typedef unsigned char u8;
sbit k0=P1^0;
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
sbit k4=P1^4;
sbit k5=P1^5;
sbit k6=P1^6;
sbit k7=P1^7;
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p23=P2^3;
sbit p24=P2^4;
sbit p25=P2^5;
sbit p26=P2^6;
sbit p27=P2^7;
u8 flag=0;//t=0;
u8 key;
u8 cisu;
u16 di;
void Int0() interrupt 0 //外部中斷0的中斷函式
{
switch(P1)
{
case 0xfe: key=0x00;
break;
case 0xfd: key=0x11;
break;
case 0xfb: key=0x22;
break;
case 0xf7: key=0x33;
break;
case 0xef: key=0x44;
break;
case 0xdf: key=0x55;
break;
case 0xbf: key=0x66;
break;
case 0x7f: key=0x77;
break;
default: key=0xff;
}
}
void Timer0() interrupt 1//
{
TH0=0Xdc;//10MS-0.01s
TL0=0X08;
di++;
//led1=~led1;
}
void Timer0Init()//定時0初始化
{
TMOD|=0X01;
TH0=0Xdc;//11.0592Mhz;0xdc08-10ms;
TL0=0X08;
ET0=1;
//EA=1;
//TR0=1;
}
void Int0Init()
{
//設定INT0
IT0=1;//跳變沿出發方式(下降沿)
EX0=1;//打開INT0的中斷允許。
EA=1;//打開總中斷
}
void main()
{
Timer0Init();//
Int0Init(); // 設定外部中斷0
key=0xff;
while(1)
{
if(cisu==0)
{
switch(key)
{
case 0x00: P2=0xfe;di=0;cisu=1;TR0=1;
break;
case 0x11: P2=0xfd;di=0;cisu=1;TR0=1;
break;
case 0x22: P2=0xfb;di=0;cisu=1;TR0=1;
break;
case 0x33: P2=0xf7;di=0;cisu=1;TR0=1;
break;
case 0x44: P2=0xef;di=0;cisu=1;TR0=1;
break;
case 0x55: P2=0xdf;di=0;cisu=1;TR0=1;
break;
case 0x66: P2=0xbf;di=0;cisu=1;TR0=1;
break;
case 0x77: P2=0x7f;di=0;cisu=1;TR0=1;
break;
case 0xff: P2=0xff;
break;
//default: P2=0xff;
}
}
if(di>100&&cisu==1)
{
di=0;TR0=0;key=0xff;P2=0xff;
cisu=0;
}
}
}
uj5u.com熱心網友回復:
好好學習學習uj5u.com熱心網友回復:
哇,這也太厲害了,謝謝老板轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/30605.html
標籤:單片機/工控
上一篇:LED無極調光
下一篇:捕捉目標物
