📄 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 + -