这是一个加法器,一个5道题,答对一题亮1盏灯,需要在按键增加其他功能,目前我完成了一部分功能,我就想请教那个按一下清屏,再按一下恢复那个怎么实现,程序是什么。。。。
程序如下图
#include<reg51.h>
unsigned char guan[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x48,0x00};
unsigned char shu[8]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};
unsigned char ggboy[6]={0xff,0xf7,0xe7,0xc7,0x87,0x07};
unsigned char hang[4]={0x08,0x04,0x02,0x01};
unsigned char lie[4]={0xef,0xdf,0xbf,0x7f};
unsigned char key;
int seg1[6]={1,2,3,4,5,6};
int seg2;
int sum;int n=0,p=9,t=0;
int c=0,d=0,v=0,z=0,num=0;
int n13=1;
void delay(int a)
{int j;
j=a;while(j--);}
void df() interrupt 1 //计时功能
{ int h;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n=n+1;
if(n==100)
{for(h=0;h<=4;h++)
{P0=shu[6]&ggboy[5];
P1=guan[seg1[d]];
delay(10000000);
P0=shu[7]&ggboy[0];
P1=0X00;
delay(10000000);}n=0;}}
void sdwoig() //换题按钮
{ if(v==1)
{d=d+1;
if(d==6)
{d=0;}}
if(v==2)
{d=d-1;
if(d==-1)
{d=5;}}
if(v==3)
{d=d-1;z=z-1;
}}
void chengjichaxun() //查成绩功能
{int j=1000;
while(j--)
{P0=(shu[0]&ggboy[z]);
P1=0x00;
delay(1000);
P0=(shu[1]&ggboy[z]);
P1=0x5e;
delay(1000);
P0=(shu[2]&ggboy[z]);
P1=guan[z];
delay(1000);
P0=(shu[3]&ggboy[z]);
P1=0x40;
delay(1000);
P0=(shu[4]&ggboy[z]);
P1=0x39;
delay(1000);
P0=shu[5]&ggboy[z];
P1=guan[(5-z)];
delay(1000);
P0=shu[6]&ggboy[z];
P1=0x40;
delay(1000);
P0=shu[7]&ggboy[z];
P1=0x00;
delay(1000);
}
}
void sg1() //数码管显示内容
{
P0=(shu[1]&ggboy[z]);
P1=guan[seg1[d]];
delay(1000);
P0=(shu[2]&ggboy[z]);
P1=guan[10];
delay(1000);
P0=(shu[3]&ggboy[z]);
seg2=seg1[d]-1;
sum=seg1[d]+seg2;
P1=guan[seg2];
delay(1000);
P0=(shu[4]&ggboy[z]);
P1=guan[11];
delay(1000);
P0=shu[5]&ggboy[z];
P1=guan[num];
delay(1000); }
void ig() //按键扫描与键盘功能
{ int a,t;
P2=0x0f;
if(P2!=0x0f)
{ delay(10000);
if(P2!=0x0f)
{
for(a=0;a<=3;a++)
{P2=lie[a];
for(t=0;t<=3;t++)
{if((P2&hang[t])==0)
{ key=a+4*t;}}}
switch(key)
{ case 0:num=9;break;
case 1:num=8;break;
case 2:num=6;break;
case 3:num=3;break;
case 4:num=7;break;
case 5:num=5;break;
case 6:num=2;break;
case 7:v=2;num=12;break; //上一题
case 8:num=4;break;
case 9:num=1;break;
case 10: //功能一彩灯功能
case 11:v=1;num=12;break; //下一题
case 12:num=0;break;
case 13: //功能二关机重启
case 14:chengjichaxun();break; //功能三成绩查询
case 15: //重做功能
if(num==sum)
{z=z+1;
if(z==6)
{z=1;}P0=(shu[5]&ggboy[z]);}
delay(1000);
if(num<=9)
{v=1;}
if(v!=0)
{sdwoig();}
}}}}
void main()
{ TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
IE=0x9f;
while(1)
{sg1();delay(1000);{ig();delay(100);}}}
|