?? platup070710.c
字號:
year=buffer[14]*10+buffer[15];
if(year>99){ buffer[14]=0;buffer[15]=6;}
mouth=buffer[16]*10+buffer[17];
if(mouth>12){ buffer[16]=0;buffer[17]=1;}
day=buffer[18]*10+buffer[19];
if(day>31){buffer[18]=0;buffer[19]=1; }
}
else if(cnt_set==4){ //設定現在時間
line++;
if(line>23)line=20;
hour=buffer[20]*10+buffer[21];
if(hour>=24){buffer[20]=0;buffer[21]=0;}
minute=buffer[22]*10+buffer[23];
if(minute>=60){buffer[22]=0;buffer[23]=0; }
}
}
}
}
void plan_count_display(){
uchar buf_disp[4];
uchar flag_0,flag_1,flag_2;
buf_disp[0]=plancount/1000;
buf_disp[1]=plancount/100 -buf_disp[0]*10;
buf_disp[2]=plancount/10 -buf_disp[0]*100 -buf_disp[1]*10;
buf_disp[3]=plancount -buf_disp[0]*1000-buf_disp[1]*100-buf_disp[2]*10;
flag_0=0;flag_1=0;flag_2=0; //關0碼標示
if(buf_disp[0]==0){ //查0碼并樹標示
flag_0=1;
if(buf_disp[1]==0) {
flag_1=1;
if(buf_disp[2]==0)flag_2=1;
}
}
if(flag_0){buffer[0]=16; }else{buffer[0]=buf_disp[0];}//若有0碼關顯示
if(flag_1){buffer[1]=16; }else{buffer[1]=buf_disp[1];}
if(flag_2){buffer[2]=16; }else{buffer[2]=buf_disp[2];}
buffer[3]=buf_disp[3];
}
void set_plan_count_display(){
buffer[0]=plancount/1000;
buffer[1]=plancount/100 -buffer[0]*10;
buffer[2]=plancount/10 -buffer[0]*100 -buffer[1]*10;
buffer[3]=plancount -buffer[0]*1000-buffer[1]*100-buffer[2]*10;
}
void counter_display(){ //轉換為顯示碼(實際臺數) //
uchar buf_disp[4];
uchar flag_0,flag_1,flag_2;
buf_disp[0]=counter/1000;
buf_disp[1]=counter/100 -buf_disp[0]*10;
buf_disp[2]=counter/10 -buf_disp[0]*100 -buf_disp[1]*10;
buf_disp[3]=counter/1 -buf_disp[0]*1000-buf_disp[1]*100-buf_disp[2]*10;
flag_0=0;flag_1=0;flag_2=0; //關0碼標示
if(buf_disp[0]==0){ //查0碼并樹標示
flag_0=1;
if(buf_disp[1]==0) {
flag_1=1;
if(buf_disp[2]==0)flag_2=1;
}
}
if(flag_0){buffer[8]=16; }else{buffer[8]=buf_disp[0];}//若有0碼關顯示
if(flag_1){buffer[9]=16; }else{buffer[9]=buf_disp[1];}
if(flag_2){buffer[10]=16; }else{buffer[10]=buf_disp[2];}
buffer[11]=buf_disp[3];
}
void rate_display(){ //轉換為顯示碼(現在計劃)
uint newcnt,rat,rat1,rat0;
uint timecnt,rat_tmp0,rat_tmp;
uchar buf_disp[4];
uchar flag_0,flag_1,flag_2;
newcnt=plancount;
timecnt=worktime;
rat0=newcnt/timecnt;
rat1=newcnt%timecnt; //余數處理
rat_tmp0=minutecounter*rat0;
rat_tmp=(minutecounter*rat1)/timecnt;
rat=rat_tmp0+rat_tmp;
if(rat<=9999){
buf_disp[0]=rat/1000;
buf_disp[1]=rat/100 -buf_disp[0]*10;
buf_disp[2]=rat/10 -buf_disp[0]*100 -buf_disp[1]*10;
buf_disp[3]=rat/1 -buf_disp[0]*1000-buf_disp[1]*100-buf_disp[2]*10;
flag_0=0;flag_1=0;flag_2=0;//關0碼標示
if(buf_disp[0]==0){ //查0碼并樹標示
flag_0=1;
if(buf_disp[1]==0) {
flag_1=1;
if(buf_disp[2]==0)flag_2=1;
}
}
if(flag_0){buffer[4]=16; }else{buffer[4]=buf_disp[0];} //若有0碼關顯示
if(flag_1){buffer[5]=16; }else{buffer[5]=buf_disp[1];}
if(flag_2){buffer[6]=16; }else{buffer[6]=buf_disp[2];}
buffer[7]=buf_disp[3];
}
else { //清0
minutecounter=0;
}
}
void rate_set_display(){ //轉換為顯示碼( 設定工作時間 )
buffer[4]=worktime/1000;
buffer[5]=worktime/100 -buffer[4]*10;
buffer[6]=worktime/10 -buffer[4]*100 -buffer[5]*10;
buffer[7]=worktime -buffer[4]*1000-buffer[5]*100-buffer[6]*10;
}
void time_display(void){ //轉換為顯示碼(現在時間)
buffer[20]=hour/10 ;
buffer[21]=hour%10;
buffer[22]=minute/10;
buffer[23]=minute%10;
}
unsigned char testkey(){ //鍵盤檢查
uchar tmp;
P2=0xf0;
tmp=P2;
tmp=~tmp;
return(tmp&0xf0);
}
unsigned char scan(){ //鍵盤掃描
uchar i,j, in,ini,inj,key;
uchar scandig[] = {0xfe,0xfd,0xfb,0xf7};
for(i=0;i<4;i++){
P2=scandig[i];
delay(4);in=P2; in=in>>4;in=in|0xf0;
for(j=0;j<4;j++){
if(scandig[j]==in){
ini=i; inj=j; key=inj*4+ini;
delay(5);while(testkey());
return(key);
}
}
}
return(0xff) ;
}
void date_disp(){
buffer[12]=2;
buffer[13]=0;
buffer[14]=year/10;
buffer[15]=year%10;
buffer[16]=mouth/10;
buffer[17]=mouth%10;
buffer[18]=day/10;
buffer[19]=day%10;
}
void main (){
TMOD=0x21; //T0計時,T1計時
ET0=1; //開T0中斷
TL0=TTL0; //2ms定時計時
TH0=TTH0;
TR0=1; //啟動T0
ET1=1; //開T1中斷
TL1=156; //接收計時
TH1=156;
TR1=1; //啟動T1
EX1=1; //開INT1
IT1=1; //觸發方式為負邊緣
PX1=1; //INTI中斷優先
year=7;
mouth=7;
day=7;
plancount=800; //計劃數量
worktime=480; //計劃工作時間
hour=8; //預定現在時間 08:00
minute=0;
second=0;
flag_day=1;
EA =1; //開總中斷
counter=0; //初始化計數器
minutecounter=0; //初始化分鐘計數器
while(1){
if(testkey()){ //按鍵檢查
MRD=scan(); //按鍵掃描
if(MRD!=0xff) KEYHANDLE(); //鍵值處理
}
if(ir_enable){ //紅外接收檢查
ir_enable=0; //清紅外接收成功旗標
MRD= key(); //處理紅外接收碼變為鍵值代碼
if(MRD!=0xff) KEYHANDLE(); //鍵值處理
delay(30000);
ir_reject=0;
}
if(flag_day){ //年月日天數判斷程式
flag_day=0;
day++;
if(mouth==1||mouth==3||mouth==5||mouth==7||mouth==8||mouth==10||mouth==12) {day0=31;}
else if(mouth==4||mouth==6||mouth==9||mouth==11) {day0=30;}
else if(((year%4==0)&&(year%100!=0))||(year%400==0)){day0=29;} //2月判斷
else {day0=28; }
if(day>day0){
day=1;
mouth++;
if(mouth>12){
mouth=1;
year++;
}
}
date_disp(); //顯示日期
}
counter_display(); //顯示實際臺數
time_display(); //刷新顯示時間
if(flag_set){
set_plan_count_display(); //設定生產計劃顯示
rate_set_display(); //轉換為顯示碼( 設定工作時間 )
}
else{
plan_count_display(); // 計劃生產數量顯示
rate_display(); //刷新今日計劃
}
if(T0==0&&T1==1){ //實際計數
delay(5);
while(~T0);
counter++;
if(counter>9999)counter=0;
}
if((flagminute==1)&&(T1==1)){ //分鐘計數;sw開;sw關停止計數
flagminute=0; //清間隔刷分鐘標示
minutecounter++;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -