⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keycount.c

📁 通过时钟芯片计算按键开关闭合次数和时间
💻 C
📖 第 1 页 / 共 4 页
字号:
         write_dr();
         lcddata=0x53;
         write_data();
         datadr=0x46;//B
         write_dr();
         lcddata=0x42;
         write_data();
         
         datadr=0x48;//次第
         write_dr();
         lcddata=0x30+check_num/10;
         write_data();
         datadr=0x49;
         write_dr();
         lcddata=0x30+check_num%10;
         write_data();
         datadr=0x4a;//冒号
         write_dr();
         lcddata=0x3a;
         write_data();
         datadr=0x4b;//小时
         write_dr();
         lcddata=0x30+((*(TIMES+2*(*DAY_SUM)+move_num*2-2))>>4);
         write_data();
         datadr=0x4c;
         write_dr();
         lcddata=0x30+((*(TIMES+2*(*DAY_SUM)+move_num*2-2))&0x0f);
         write_data();
         datadr=0x4d;//冒号
         write_dr();
         lcddata=0x3a;
         write_data();
         datadr=0x4e;//分钟
         write_dr();
         lcddata=0x30+((*(TIMES+2*(*DAY_SUM)+move_num*2-1))>>4);
         write_data();
         datadr=0x4f;
         write_dr();
         lcddata=0x30+((*(TIMES+2*(*DAY_SUM)+move_num*2-1))&0x0f);
         write_data(); 
     } 
}
void key_stop(){                     /*延时等待按键取消*/
         byte h;
         do h=P2&0x0f;
         while(h!=0x0f);
}

void key_scan(){                                      /*按键检测子程序*/
       byte i,colcode;
       colcode=P2&0x0f;
       if(colcode!=0x38){    /*判断是否有键按下*/ 
            for(i=200;i>0;i--);
			colcode=P2&0x38;
            if(colcode!=0x38){//若有键按下,求其值                              
                  if(colcode==0x30){//
                       key_num=0;
                       key_flag=1;
                  }
                  else if (colcode==0x20){
                       key_num=1;
                       key_flag=1;
                  } 
                  else if (colcode==0x08){
                       key_num=2;
                       key_flag=1;
                  }
                  else if (colcode==0x18){
                       key_num=3;     
                       key_flag=1;
                  }
                  else key_flag=0;
            } 
       }                     
} 
void key_dispose1(){//按键处理子程序
       byte j,y;
	   bit alarm_flag=0;
       read_initstat();
       switch(key_num){
                       case 0x00:   if((checktime_flag)||(changetime_flag)){//在修改时间或检查继电器闭合时间界面下,快捷退出
                                         clr_lcd();
                                         main_face();
                                         checktime_flag=0;
                                         changetime_flag=0;
                                         move_num=0;
  									     del_flag=0;
                                         press_num=0;
                                         last_num=0;
										 //check_flag=0;
                                    }
					                else if((!checktime_flag)&&(!changetime_flag)){//进入修改时间界面,
                                         change_time();
                                         changetime_flag=1;
                                         move_num=0x00; 
     									 checktime_flag=0;
										 del_flag=0;
                                    }
									key_flag=0;
									key_stop();
                                    break;
                       case 0x01:   if((changetime_flag)&&(!checktime_flag)){//修改时间界面下,移动光标
                                         datadr=(0x40+move_num);//T
                                         write_dr();
                                         lcddata=0x20;
                                         write_data();
                                         switch(move_num){
                                             case 0: move_num=15;break;
                                             case 1: move_num=0;break;
                                             case 3: move_num=1;break;
                                             case 4: move_num=3;break;
                                             case 6: move_num=4;break;
                                             case 7: move_num=6;break;
                                             case 9: move_num=7;break;
                                             case 10: move_num=9;break;
                                             case 12: move_num=10;break;
                                             case 13: move_num=12;break;
                                             case 15: move_num=13;break;
                                             default: move_num=0;break;                                                                                                                                                                                                                                                                 
                                         }
                                         datadr=(0x40+move_num);//T
                                         write_dr();
                                         lcddata=0xb0;
                                         write_data();
                                    } 
                                    else if(((!changetime_flag)&&(checktime_flag))&&(!del_flag)){//查看继电器闭合时间界面下,翻动菜单
     								       if((move_num==1)||(move_num==0)){        //从最早一天看起已看至最近一天最近一次按键时间
   										       move_num=*PRESS_SUM;
										       y=*DAY_SUM;
											   y--;
											   tiancha=y;
                                               while(*(TIMES+2*tiancha+1)==0){
														    if(tiancha==0){
															   j=*DAY_SUM;
											                   j--;
															   tiancha=j;
										                       move_num=*PRESS_SUM;
															   check_num=1;
															   break;
															}
													        tiancha--;
															check_num=1;
										       } 
											   check_num=1;
											   check_time();
										   } 
										   else{
                                               move_num--;
											   if(check_num==*(TIMES+2*tiancha+1)){
											          tiancha--;
                                                      while(*(TIMES+2*tiancha+1)==0){
														    if(tiancha==0){
															   j=*DAY_SUM;
											                   j--;
															   tiancha=j;
										                       move_num=*PRESS_SUM;
															   check_num=1;
															   break;
															}
													        tiancha--;
															check_num=1;
													  } 
   												      check_num=1;
											   }
											   else check_num++;
										  }
										  check_time(); 
                                    }
									key_flag=0;
 								    key_stop();
                                    break;
                       case 0x02:   if((changetime_flag)&&(!checktime_flag)){//在修改时间界面下,移动光标
                                         datadr=(0x40+move_num);//T
                                         write_dr();
                                         lcddata=0x20;
                                         write_data();
                                         switch(move_num){
                                             case 0: move_num=1;break;
                                             case 1: move_num=3;break;
                                             case 3: move_num=4;break;
                                             case 4: move_num=6;break;
                                             case 6: move_num=7;break;
                                             case 7: move_num=9;break;
                                             case 9: move_num=10;break;
                                             case 10: move_num=12;break;
                                             case 12: move_num=13;break;
                                             case 13: move_num=15;break;
                                             case 15: move_num=0;break;
                                             default: move_num=0;break;
                                         }
                                         datadr=(0x40+move_num);//T
                                         write_dr();
                                         lcddata=0xb0;
                                         write_data();
                                     }
 									 else if(((!changetime_flag)&&(checktime_flag))&&(!del_flag)){//查看继电器闭合时间界面下,翻动菜单   
											if(move_num==*PRESS_SUM){
											     move_num=1;
											     tiancha=0;
												 while(*(TIMES+2*tiancha+1)==0){
														    if(tiancha==*DAY_SUM){
															   tiancha=0;
										                       move_num=1;
															   check_num=*(TIMES+1);
															   break;
															}
													        tiancha++;
															check_num=*(TIMES+2*tiancha+1);	
											     }
												 check_num=*(TIMES+1);
											}
											else{
											     move_num++;
                                                 if(check_num==1){
											          tiancha++;
                                                      while(*(TIMES+2*tiancha+1)==0){
														    if(tiancha==*DAY_SUM){
															   tiancha=0;
										                       move_num=1;
															   check_num=*(TIMES+1);
															   break;
															}
													        tiancha++;
															check_num=*(TIMES+2*tiancha+1);	
													   }
    												   check_num=*(TIMES+2*tiancha+1);
											    }
												else check_num--;
											}
                                            check_time(); 
        							}
									key_flag=0;
								    key_stop();
								    break;
                       case 0x03:   if((!changetime_flag)&&(!checktime_flag)){//进入检查继电器闭合时间界面
		                                 if(*(PRESS_SUM)!=0){
										     /*if(!check_flag){
										         for(f=0;f<*DAY_SUM;f++){
											         j=*(TIMES+2*f-1);
												     if(j==0){
												     alarm_flag=1;
												     tiancha=f;
												     }
											     }
											 }
											 if(alarm_flag==1){
											    datadr=0x40;//距今天天数
                                                write_dr();
                                                lcddata=0x30+tiancha/10;
                                                write_data();
                                                datadr=0x41;
                                                write_dr();
                                                lcddata=0x30+tiancha%10;
                                                write_data();
                                                datadr=0x42;//D
                                                write_dr();
                                                lcddata=0x44;
                                                write_data();
                                                datadr=0x43;//A
                                                write_dr();
                                                lcddata=0x41;
                                                write_data();
                                                datadr=0x44;//Y
                                                write_dr();
                                                lcddata=0x59;
                                                write_data();
                                                datadr=0x45;//S
                                                write_dr();
                                                lcddata=0x53;
                                                write_data();
                                                datadr=0x46;//B
                                                write_dr();
                                                lcddata=0x42;
                                                write_data();
                                                 
												datadr=0x48;//N
                                                write_dr();
                                                lcddata=0x4e;
                                                write_data();
                                                datadr=0x49;//O
                                                write_dr();
                                                lcddata=0x4f;
                                                write_data();
                                                datadr=0x4a;//P
                                                write_dr();
                                                lcddata=0x50;
                                                write_data();
												alarm_flag=0;
												check_flag=1;
											 }*/
											 //else{ 
                                             check_num=*(TIMES+1);
                                             tiancha=0;
                                             move_num=1;
                                             checktime_flag=1;
 											 changetime_flag=0;
											 del_flag=0;
										     check_time();
											 //}
										 }
										 else if(*(PRESS_SUM)==0){//未曾有继电器闭合纪录
                                             for(j=0;j<=15;j++){//第二行全写入空白
                                                   datadr=0x40+j;
                                                   write_dr();
                                                   lcddata=0x20;
                                                   write_data(); 
                                             }
											 datadr=0x40;//0
                                             write_dr();
                                             lcddata=0x30;
                                             write_data();
											 datadr=0x41;//t
                                             write_dr();
                                             lcddata=0x54;
                                             write_data();
                                             datadr=0x42;//i
                                             write_dr();
                                             lcddata=0x69;
                                             write_data();
											 datadr=0x43;//m
                                             write_dr();
                                             lcddata=0x6d;
                                             write_data();
                                             datadr=0x44;//e
                                             write_dr();
                                             lcddata=0x65;
                                             write_data();
											 datadr=0x45;//s
                                             write_dr();
                                             lcddata=0x73;
                                             write_data();
                                             checktime_flag=1;
 											 changetime_flag=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -