控制程序.docx
《控制程序.docx》由会员分享,可在线阅读,更多相关《控制程序.docx(13页珍藏版)》请在冰豆网上搜索。
控制程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitjc=P2^0;
sbitled1=P2^1;
sbitled2=P2^2;
sbitled3=P2^3;
sbitled4=P2^4;
sbitstar=P2^5;
sbitstop=P2^6;
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0xff,0xbf,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
uchara,b,c,d,flag,num,wei,key;
uintm,n;
voiddelay(uintz);
voiddisplay(uchara,ucharb,ucharc,uchard);
voidkeyscan()
{
uchartemp;
P1=0xfe;
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
temp=P1;
switch(temp)
{
case0xee:
key=1;
break;
case0xde:
key=2;
break;
case0xbe:
key=3;
break;
case0x7e:
key=10;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
temp=P1;
switch(temp)
{
case0xed:
key=4;
break;
case0xdd:
key=5;
break;
//矩阵键盘扫描
case0xbd:
key=6;
break;
case0x7d:
key=10;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
temp=P1;
switch(temp)
{
case0xeb:
key=7;
break;
case0xdb:
key=8;
break;
case0xbb:
key=9;
break;
case0x7b:
key=10;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!
=0xf0)
temp=P1;
switch(temp)
{
case0xe7:
key=11;
break;
case0xd7:
key=0;
break;
case0xb7:
key=12;
break;
case0x77:
key=10;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
flag=0;
wei=1;
led1=1;
led2=1;
led3=1;
led4=1;
key=10;
a=0;
b=0;
n=0;
m=0;
while
(1)
{
keyscan();
if(key<=9&wei==1)
{
a=key;
wei=2;
key=10;
}//输入两位数
if(key<=9&wei==2)
{
b=key;
wei=1;
key=10;
}
m=a*10+b;
//**********************************************************
if(num==15)
{
num=0;
flag=~flag;//让光标一秒闪烁
}
//***************************************************************//
if(m==n)
{
star=1;
stop=0;
if(flag==0)
{
a=11;
b=11;
c=n/10;//1,2位数码管显示——
d=n%10;
display(a,b,c,d);
a=m/10;
b=m%10;
}
else
{
a=10;
b=10;
c=n/10;//1,2位数码管不显示
d=n%10;
display(a,b,c,d);
a=m/10;
b=m%10;
}
}
else
{
a=m/10;
b=m%10;
c=n/10;//不相等就不闪烁,等待传感器检测累加
d=n%10;
display(a,b,c,d);
}
//*********************************************************************
if(m!
=n)
{
keyscan();
if(key==11)
{
delay
(1);
if(key==11)
{
stop=1;
star=0;
}
}
if(star==0)
{
keyscan();
if(key==12)
{
delay
(1);
if(key==12)
{
star=1;
stop=0;
}
}
if(jc==0)
{
delay(3);
if(jc==0)
{
n++;
while(!
jc)
display(a,b,c,d);
}
}
}//m!
=n时,传感器被遮挡一次累加一下上升高度
}
}
}
//+++++++++++++++++++++++++++++++++++++++++++++++++//main函数结束
voiddelay(uintz)
{
uintt1,y;
for(t1=z;t1>0;t1--)//延时子程序
for(y=110;y>0;y--);
}
voiddisplay(uchara,ucharb,ucharc,uchard)
{
led1=0;
led2=1;
led3=1;
led4=1;
P0=table[a];
delay(3);
P0=table[10];
delay
(1);
led1=1;
led2=0;
led3=1;
led4=1;//显示子程序
P0=table[b];
delay(3);
P0=table[10];
delay
(1);
led1=1;
led2=1;
led3=0;
led4=1;
P0=table[c];
delay(3);
P0=table[10];
delay
(1);
led1=1;
led2=1;
led3=1;
led4=0;
P0=table[d];
delay(3);
P0=table[10];
delay
(1);
}
voidT0_time()interrupt1
{
TH0=(65536-45872)/256;//中断程序
TL0=(65536-45872)%256;
num++;
}