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

📄 main.c

📁 一个基于MEGA16的GUI
💻 C
字号:
#include "CONFIG.H" 

WINDOWS  Mwindows={x:0,y:0,with:97,hight:67,title:"yhy_GUI_TEST"};   /* 主窗口句柄 */
WINDOWS  *current_Mwindows=&Mwindows;
uint8    menu1[4]={"File"};                  /*主菜单名*/
uint8    menu2[4]={"Edit"};
uint8    menu3[4]={"Wind"}; 
uint8    smenu11[8]={"DATA_Dis"};            /*子菜单名*/
uint8    smenu12[8]={"Graphics"};
uint8    smenu13[8]={"CurveDIS"};  
uint8    smenu21[8]={"Zoom out"};
uint8    smenu22[8]={"Shorten "};
uint8    smenu23[8]={"NON_Done"};
uint8    smenu31[8]={"SLE_YHY1"};
uint8    smenu32[8]={"STOP/RUN"};
uint8    smenu33[8]={"STEM_RST"}; 
MMENU    mmenu={no:3};                               /*  主菜单句柄*/
MMENU    *current_MMENU=&mmenu;                /*主菜单指针*/
uint16    TEM_Buffer,TEM_L;
uint16     TEM_H=25;
uint8    Display[6]={'2','5','.','0','0','0'};   /*温度显示数据*/
SMENU    Smenu[3]={
                   {mmenu_no:0,no:3,state:0,},
				   {mmenu_no:1,no:3,state:0,},
				   {mmenu_no:2,no:3,state:0,}
				  };             /*  子菜单句柄 */  
SMENU    *current_SMENU=&Smenu[0]; 
uint8    current_MMENU_NO=0,old_MMENU_NO=0;
uint8    current_SMENU_NO=0,old_SMENU_NO=0; 
uint8    buttom=0,OK=0,KEY=0x00;
uint8    Stop_Run=0xff;
uint8    Temperature_buffer[61]={25,25,25,25,25,25,25,25,25,25,
                                  25,25,25,25,25,25,25,25,25,25,
								  25,25,25,25,25,25,25,25,25,25,
								  25,25,25,25,25,25,25,25,25,25,
								  25,25,25,25,25,25,25,25,25,25,
								  25,25,25,25,25,25,25,25,25,25,25};
uint8    Function_SMENU_NO,Function_MMENU_NO; 
uint8 Acc=0;
volatile uint8  Rec_D,Rec_Start;               /*中断中接受的数据用volatile*/
uint8    TEM_Alarm=32;
uint16   Eep_Addr=0x01;

#define  E_Addr        0x0001
#define  A_Addr        0x0003

void DATA_Dis(void);
void CurveDIS(void);
void Graphics(void);
void EXt_Init(void);

void task0(void)
{
  uint8  REC_TEMP;

	while(1)
	{ 
    GUI_CPutChar8_8(12, 55, Rec_D+48,Red);
	  if(0x0a==Rec_D)              /*1010*/
	  {
	   Acc=0; 
       Rec_Start=1;               /*  导言正确 启动接收数据 */
	  }
	  if((Rec_D!=0x0a)&&(1==Rec_Start))
	  {
	   if((0==Acc)&&(!(Rec_D&0x04)))
	   {
	    Rec_Start=0;
	   }
	   Acc++;
	   TEM_Buffer+=(Rec_D-1)<<(12-(3*Acc));
	  }
	  if(Acc==4)
	  {
	   REC_TEMP=((TEM_Buffer&0x0fc0)>>6)-22;
	   if((REC_TEMP>10)&&(REC_TEMP<41))
	   {
	   TEM_H = REC_TEMP;
	   if(TEM_H>=TEM_Alarm)
	   {Alarm=1;}
	   else
	   {Alarm=0;PORTD|=0x01;}
	   TEM_L=(TEM_Buffer&0x003c)>>2;
	   TEM_L=TEM_L*1000/16;
	   KEY=(TEM_Buffer&0x0002)?  (KEY|0xf0):(KEY&0x0f);
	   KEY=(TEM_Buffer&0x0001)?   (KEY|0x0f):(KEY&0xf0);
	   }
	   TEM_Buffer=0;
	   Rec_Start=0;
	  }
	  OSWait(K_SIG,0);
	}
}

void task1(void)
{uint8 i;
	while(1)
	{
	 Display[0]=(TEM_H/10)+48;
	 Display[1]=(TEM_H%10)+48;
	 Display[3]=(TEM_L/100)+48;
	 Display[4]=((TEM_L%100)/10)+48;
	 Display[5]=((TEM_L%100)%10)+48;
	 Temperature_buffer[0]=TEM_H;
	 eeprom_write_byte (Eep_Addr, TEM_H);
	 Eep_Addr++;
	 if(Eep_Addr>512)
	 {Eep_Addr=4;}
	 for(i=59;i>0;i--)
	 {
	  Temperature_buffer[60]=Temperature_buffer[i-1];
	  Temperature_buffer[i]=Temperature_buffer[60];
	 }
	 
	OSWait(K_TMO | K_SIG,50);
}
}

		void task2(void)
{
	while(1)
	{
	  GUI_MMenuNSelect(current_MMENU, old_MMENU_NO);
	  GUI_MMenuSelect(current_MMENU, current_MMENU_NO);
      if(buttom&0x80)                                /*  如果OK按钮有按下*/
	  {
	   buttom &=0x7f;
	   if(buttom==1)
	    {
		 if(current_SMENU->mmenu_no != current_MMENU_NO)
		 {
		  current_SMENU=&Smenu[old_MMENU_NO];
	      current_SMENU->mmenu_no=old_MMENU_NO;
		  GUI_SMenuHide( current_SMENU );            /*   消除下拉菜单*/
		 }
		 current_SMENU=&Smenu[current_MMENU_NO];
		 current_SMENU->state=current_SMENU_NO;
		 current_SMENU->mmenu_no=current_MMENU_NO;    /*  画下拉菜单 */
         GUI_SMenuDraw(current_SMENU);
		}
	    if(buttom==0)
	     {
		  if(current_SMENU->mmenu_no==current_MMENU_NO)
		  {
		   GUI_SMenuHide( current_SMENU );            /*   消除下拉菜单*/
		  }
		 }
	  }
      if(buttom==1)
     {  
	  if(current_SMENU->state!=current_SMENU_NO)
	  {
	  GUI_SMenuSelect(current_SMENU, old_SMENU_NO,current_SMENU_NO);
	  }
	 }
	 if(OK&0x01)
	 {
	 (*Smenu[Function_MMENU_NO].Function[Function_SMENU_NO])();	  /* 调用子功能函数 */
	 }
	OSWait(K_TMO | K_SIG,50);
	}
}

		void task3(void)
{
    uint8  key_temp=0,old_key=0;
	while(1)
	{ 
	 OSWait(K_TMO, 3);    /*  等待50MS*/
	 key_temp=(PIND&0xf0);
     OSWait(K_TMO, 1);  /*  等待50MS*/
	 if((PIND&0xf0) ==key_temp)
	  {
	    if(key_temp != old_key)     /* 识别长按

⌨️ 快捷键说明

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