|
給你寫(xiě)個(gè)程序,經(jīng)仿真無(wú)誤。按鍵和LED端口可按實(shí)際電路修改。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code table2[]={0x18,0x24,0x42,0x81,0x18,0x24,0x42,0x81};
uchar code table3[]={0x81,0x42,0x24,0x18,0x81,0x42,0x24,0x18};
uchar code table4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
uint Cnt250us=0;
uchar key=0;
void Timer0Init() //250微秒@11.0592MHz
{
TMOD |= 0x02; //設(shè)置定時(shí)器模式
TL0 = 0x1A; //設(shè)置定時(shí)初值
TH0 = 0x1A; //設(shè)置定時(shí)重載值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
}
void delay(uint xms) //延時(shí)子函數(shù)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void key_scan() //按鍵檢測(cè)子函數(shù)
{
uchar x;
static bit sign=0;
x=P1&0x0f;
if(x!=0x0f) //檢測(cè)鍵是否被按下
{
delay(10);
if((x!=0x0f)&&(sign==0))
{
sign=1;
x=P1&0x0f;
switch(x)
{
case 0x0e: key=1; break;
case 0x0d: key=2; break;
case 0x0b: key=3; break;
case 0x07: key=4; break;
}
}
}
else sign=0;
}
void key_service() //按鍵服務(wù)程序
{
static uchar i=0;
if(key!=0)
{
switch(key)
{
case 1:
P2=~table1;
break;
case 2:
P2=~table2;
break;
case 3:
P2=~table3;
break;
case 4:
P2=~table4;
break;
}
i++;
if(i>=8)
i=0;
}
}
void main()
{
Timer0Init();
while(1)
{
key_scan();
if(TF0==1)
{
TF0=0;
Cnt250us++;
if(Cnt250us>=1000)
{
Cnt250us=0;
key_service();
}
}
}
}
無(wú)標(biāo)題.jpg (108.17 KB, 下載次數(shù): 23)
下載附件
2018-11-15 11:01 上傳
|
|