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

📄 yejing_main.c

📁 该程序主要是实现液晶显示功能,在这上可设置温度,时间等参数
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#include<main.h>

#define uchar unsigned char
#define uint unsigned int  

sbit IRPT5=P1^2;//ZLG7290中断
sbit bojing=P3^4;
void Reset();
void KeyDisposal();
void Show();
void imput();

uchar idata  dat_time[3]={0,0,0};                   //时间
uchar idata  dat_date[3]={0x05,0x01,0x01};          //日期
uchar idata  dat_wendu[3]={0x00,0x00,0x00};              //温度
uchar idata  dat_votage[3]={0};
uchar idata  dat_set_votage[2]={9,9};
uchar idata  vota=0;
//页面显示
uchar data  ScreenNum;        //液晶屏上正在显示的页面号
uchar data  item;             //当前页面号中正选中的项(有的页面中无)
bit         ScreenCHG;        //页面内容是否有改变

//按键消息
uchar data  KeyNum;           //按下的键号
uchar data  Shuz;              //数字键值
bit         KeyDown;          //键盘有无键按下

void DS12887_init()
{
 Registe_A=0x2f;
 Registe_B=0x3e;
}
void DS12887()
{
    dat_time[2]=Seconds;
    dat_time[1]=Minutes;
    dat_time[0]=Hours;
	dat_date[2]=Day;
    dat_date[1]=Month;
    dat_date[0]=Year;
}


void main(void)
{
 Reset();
 DS12887_init();
			
 while(1){	
      Show();
      DS12887();
      imput();   //读键值并处理
      if(ScreenCHG){
	  Clear();
      ScreenCHG=0;
	  } 
 
  }
}



void Reset()//初始化
{
    bojing=0;
    C_Write(LEFT,0x3f);        //显示开关设置(左)
    C_Write(RIGHT,0x3f);       //显示开关设置(右)
    C_Write(LEFT,0xc0);        //显示起始行设置(左)
    C_Write(RIGHT,0xc0);       //显示起始行设置(右)
    Clear();

/********************************变量初始化*********************************/
    ScreenNum=0;
    ScreenCHG=0;
    KeyNum=0;

}

void Show()
{ 
  switch(ScreenNum){
    case 0:Show_Pinbao(dat_date,dat_time);break;    
	case 1:Show_Menu(item);break;           //菜单
	case 2:Set_Clock(item,dat_date,dat_time);break;//设定时间
	case 3:TestTemperature(dat_wendu) ; 
	       Show_temperature(dat_wendu);break;//显示温度
	case 4:TestVotage(dat_votage,dat_set_votage);
	       Show_votage(dat_votage);
	       break;
    case 5:Set_Votage(item,dat_set_votage);break;
	default:break;
  }
}


void imput()
{
  uchar data inval;
  KeyDown=IRPT5;  
  if(!KeyDown){
	inval=ZLG7290_GetKey();
    if(inval<0x14){ //数字键
      switch(inval){                     
	      case 0x01:Shuz=1;break;
	      case 0x09:Shuz=2;break;
	      case 0x11:Shuz=3;break;
	      case 0x02:Shuz=4;break;
	      case 0x0A:Shuz=5;break;
	      case 0x12:Shuz=6;break;
	      case 0x03:Shuz=7;break;
	      case 0x0B:Shuz=8;break;
	      case 0x13:Shuz=9;break;
          case 0x0C:Shuz=0;break;
	      case 0x04:Shuz=10;break;//小数点

	      default: break;
         }
		 KeyNum=0;
	}
   else
     switch(inval){
	    case 20:KeyNum=1;break;//确定键
	    case 26:KeyNum=2;break;//增键
	    case 27:KeyNum=3;break;//减键
	    case 28:KeyNum=4;break;//取消键
	    default:KeyNum=0;break;
	 }
   KeyDisposal();
   ScreenCHG=1;
  }  
}
//Show_Pinbao
void Disp0()
{
  switch(KeyNum){
      case 1:ScreenNum=1;
	         item=1;
	  break;
	default: break;
  }
}


//Show_Menu
void Disp1()
{
  
  switch(KeyNum){
    case 1:switch(item){
	         case 1:ScreenNum=2;     //设定时间
                    item=1;
                    
                    break;
			 case 2:ScreenNum=3;     //显示温度
                    item=1;
           
                    break;
          
             case 3:ScreenNum=4;     //
                    item=1;
           
                    break;

            case 4:ScreenNum=5;     //
                    item=1;
                    vota=0;
                    break;
			 default:break;
		   }
		   break;
	case 2:item--;
	       if(item<1)item=4;
		   break;
	case 3:item++;
	       if(item>4)item=1;
		   break;
    case 4:
           ScreenNum=0;
           break;
	default:break;
  }  
}

//Set_Clock
void Disp2()
{ 
  switch(KeyNum){
    case 1:item++;
	       if(item>6){
             ScreenNum=1;
             item=1;
           }	
	   	   //调整时间芯片
		   break;
	case 2:switch(item){
	         case 1:Year++;
			        if(Year>=100)Year=0;
					break;
			 case 2:Month++;
			        if(Month>12)Month=1;
					break;
			 case 3:Day++;
			        if(Day>31)Day=1;
					break;
			 case 4:Hours++;
			        if(Hours>23)Hours=0;
					break;
			 case 5:Minutes++;
			        if(Minutes>59)Minutes=0;
					break;
			 case 6:Seconds++;
			        if(Seconds>59)Seconds=0;
					break;
			 default:break;
		   }
		   break;
	case 3:
	      switch(item){
	         case 1:Year--;
			        if(Year>=100)Year=99;
					break;
			 case 2:Month--;
			        if(Month==0)Month=12;
					break;
			 case 3:Day--;
			        if(Day==0)Day=31;
					break;
			 case 4:Hours--;
			        if(Hours>24)Hours=23;
					break;
			 case 5:Minutes--;
			        if(Minutes>60)Minutes=59;
					break;
			 case 6:Seconds--;
			        if(Seconds>60)Seconds=59;
					break;
			 default:break;
		   }
		   break;
	case 4:item--;
	       if(item<1){
             ScreenNum=1;
             item=1;
             //ScreenCHG=1;
           }
		   break;
	default:break;
  }
}


//Show_temperature
void Disp3()
{
  switch(KeyNum){

			 case 4:ScreenNum=1;     
                    item=1;
                    break;
			 default:break;
		   }
}
void Disp4()
{
  switch(KeyNum){
             case 1:bojing=0;
			        break;
			 case 4:ScreenNum=1;     
                    item=1;
                    break;
			 default:break;
		   }
}
void Disp5()
{uchar *p;
p=dat_set_votage;
 if(vota<2&&(KeyNum==0))
   dat_set_votage[vota++]=Shuz;
 
  switch(KeyNum){
            
			 case 4:ScreenNum=1;     
                    item=1;
					vota=0;
                    break;
			 default:break;
		   }
}
void KeyDisposal()           //键处理
{
  switch(ScreenNum){
    case 0:Disp0();break;
	case 1:Disp1();break;
	case 2:Disp2();break;
	case 3:Disp3();break;
	case 4:Disp4();break;
    case 5:Disp5();break;
	default:break;
  } 
}

⌨️ 快捷键说明

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