
外部多按键中断响应和动态数码管显示.doc
6页include #include #include #include #include #define uchar unsigned char #define uint unsigned int sbit P10=P1^0; sbit P11=P1^1; sbit P12=P1^2;//别对应按键 1、2、3 double distance=0; double time=0; double fare=0; int ldatas[8]; int tdatas[8]; int fdatas[8]; int keyflag1; void delayms(unsigned char ms); uchar data dis_digit; uchar code dis_code[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x38,0x31,0x71}; uchar number[8]; void order(uchar p,uchar q,uchar r,uchar s,uchar t,uchar u,uchar v,uchar w) { number[0]=dis_code[p]; number[1]=dis_code[q]; number[2]=dis_code[r]; number[3]=dis_code[s]; number[4]=dis_code[t]; number[5]=dis_code[u]; number[6]=(dis_code[v]|0x80); number[7]=dis_code[w];} uchar key_value; void delayms(uchar ms) {uchar i; while(ms--) {for(i=0;i2 }if(y7) dis_index-=8; }};break; //按键 2 按下第一次显示路程 case 2:{order(tdatas[0],tdatas[1],tdatas[2],tdatas[3],tdatas[4],tdatas[5],tdatas[6],tdatas[7]); while(keyflag1==2 P0=dis_digit; delayms(1); P0=0xff; dis_digit=_crol_(dis_digit,1); dis_index++; if(dis_index>7) dis_index-=8;}};break; //按键 2 按下第二次显示时间 case 3:{order(fdatas[0],fdatas[1],fdatas[2],fdatas[3],fdatas[4],fdatas[5],fdatas[6],fdatas[7]); while(keyflag1==3P0=dis_digit; delayms(1); P0=0xff; dis_digit=_crol_(dis_digit,1); dis_index++; if(dis_index>7) dis_index-=8;}};break; //按键 2 按下第三次显示费用 }} break; case 3:{P0=0x00; P2=0x3f; distance=time=fare=0;} default:break; //按键 3 清零 } } } } void int0() interrupt 0 //中断服务 {if(P10==0) {key_value=1; } else if(P11==0) {key_value=2; keyflag1++; if (keyflag1>3) keyflag1=1; } else if(P12==0) {key_value=3; P0=0x00; P2=0x3f;} }。
