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

📄 main.c

📁 基于MSP430单片机的菜单级无限通信程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	crc = CRC16(RxBuff485,N_XY_BAO);			//算出crc值
	if(crc)              //crc校验正确 校验 //数据校验通过
	{
	  Command=RxBuff485[3];
	  TxBuff485[0]=HAND_OK;  
          ask_pc();  //应答pc
          DoCommand(Command);//处理指令
	}
	else
	{
	  //数据校验错误
	  TxBuff485[0]=HAND_ERR;
          ask_pc();  //应答pc
	}
	NRxBuff=0;
      }
    }
  else
  {
  //RxBuff485[0]不是合法的值或者数据接收错误
    TxBuff485[0]=HAND_ERR;
    ask_pc();  //应答pc
    NRxBuff=0;
    bUartRxErr=0;	
  }
 }
  bWaitRe=1;
}

//////////////////声光报警///////////////
void alarm()
{
  uint i;
 // ALARM_ PDIR |= LED_BACK  + TI_CC_LED2 + BUZZ ;
  TI_CC_LED1_PxOUT |= TI_CC_LED1 ;  //关预警灯
  ALARM_POUT |= BUZZ  ;
 // ALARM_POUT &= ~LED_BACK ;
  for(i = 0;i < 400;i++)  //200s
  {
    ALARM_POUT ^= TI_CC_LED2;  //开报警灯
    delay_n_ms(500);
  }
  ALARM_POUT &= ~BUZZ;
  ALARM_POUT |= TI_CC_LED2  ;
}





void delay(int a,int b)
{
 for(int i=a;i>0;i--)
   for(int j=b;j>0;j--);
}


void init_port(void)
{
	P1SEL = 0;//定义为I/o功能
	P1DIR &= ~(KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK);         //端口1初始化	//
	P1IES |= KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK;				//由高到底电平跳变
	P1IE |= KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK;			//使能中断
	P1IFG &= ~(KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK);
	return;
}

void set_time1(uchar tim_m,uchar tim_h,uchar tim_h1,uchar curr)//tim_m十分钟位显示,tim_h小时位显示,curr=0时为小时位反白,curr=1时为十分钟位反白
{
	uchar a ,b,c,d;
	a = tim_m + 0x30;
	b = tim_h + 0x30;
	c = tim_h1 + 0x30;
	d = 0x30;
  if(curr == 2)
  {
    disp_8x16character(&c,4,24,1,0,1);//显示原来的时间
    disp_8x16character(&b,4,32,0,0,0);//
    disp_8x16character(&set_time,4,40,0,0,0);
    disp_8x16character(&a,4,48,0,0,0);//分钟的十位,反白一位
    disp_8x16character(&d,4,56,0,0,0);//分钟的十位,反白一位

  }
  else if(curr == 1)
  {
    disp_8x16character(&c,4,24,1,0,0);//显示原来的时间
    disp_8x16character(&b,4,32,0,0,1);//
    disp_8x16character(&set_time,4,40,0,0,0);
    disp_8x16character(&a,4,48,0,0,0);//分钟的十位,反白一位
    disp_8x16character(&d,4,56,0,0,0);//分钟的十位,反白一位
  }
  else if(curr == 0)
  {
    disp_8x16character(&c,4,24,1,0,0);//显示原来的时间
    disp_8x16character(&b,4,32,0,0,0);//
    disp_8x16character(&set_time,4,40,0,0,0);
    disp_8x16character(&a,4,48,0,0,1);//分钟的十位,反白一位
    disp_8x16character(&d,4,56,0,0,0);//分钟的十位,反白一位
  }
}

void set_temp1(uchar code1,uchar code2,uchar code3,uchar curr)//00显示,curr=0为第一位反白,curr=1为第一位反白,
{
	uchar a,b,c;
	a = code1 + 0x30;
	b = code2 + 0x30;
	c = code3 + 0x30;
   if(curr == 0)
  {
    disp_8x16character(&c,4,48,0,0,0);//反白a
    disp_8x16character(&b,4,56,0,0,0);//显示原来温度
    disp_8x16character(&a,4,64,0,0,1);//显示原来温度
   }
    if(curr == 1)
  {
    disp_8x16character(&c,4,48,0,0,0);//反白a
    disp_8x16character(&b,4,56,0,0,1);//显示原来温度
    disp_8x16character(&a,4,64,0,0,0);//显示原来温度
   }
   if(curr == 2)
  {
    disp_8x16character(&c,4,48,0,0,1);//反白a
    disp_8x16character(&b,4,56,0,0,0);//显示原来温度
    disp_8x16character(&a,4,64,0,0,0);//显示原来温度
   }
}

void set_add1(uchar code1,uchar code2,uchar curr)//00显示,curr=0为第一位反白,curr=1为第一位反白,
{
	uchar a,b;
	a = code1 + 0x30;
	b = code2 + 0x30;
	
  if(curr == 0)
  {
    
    disp_8x16character(&b,4,56,0,0,0);//显示原来温度
    disp_8x16character(&a,4,64,0,0,1);//显示原来温度
   }
    if(curr == 1)
  {
    
    disp_8x16character(&b,4,56,0,0,1);//显示原来温度
    disp_8x16character(&a,4,64,0,0,0);//显示原来温度
   }
	
}


void esc_menu(uchar menu_id,uchar curr_poss)//某界面第一行显示菜单地址menu_id, curr_poss第几行反白
{
       uchar i;
	menu *k;
      //curr_pos = 0;
	k = &menu_table[menu_id];
	for(i = 0;i < 4;i++)
	{
		//location(0,i);
		//print(k->str);
                disp_chinese(k->str,2*i,0,8,1,0);
               	if(k->next == 0) break;                
                if(k->next == 5) break;
		k = &menu_table[k->next];
	}//k=4or=7
        if(menu_id == 1)
	{
          if(curr_poss == 3)  //k = 4
          {
            disp_chinese(k->str,6,0,8,1,1);
          }
           else if(curr_poss == 2)// k = 3
          {
            k = &menu_table[k->prv];
           disp_chinese(k->str,4,0,8,1,1);
         }
           else if(curr_poss == 1)//k = 2
         {
	    k = &menu_table[k->prv];           
            k = &menu_table[k->prv];
            disp_chinese(k->str,2,0,8,1,1);
          }
         else if(curr_poss == 0)  //k = 1
         {
	    k = &menu_table[k->prv];
            k = &menu_table[k->prv];
            k = &menu_table[k->prv];
           disp_chinese(k->str,0,0,8,1,1);
          }
        }
         if(menu_id == 5)
	{
          if(curr_poss == 2)    //k = 7
          {
           disp_chinese(k->str,4,0,8,1,1);
         }
           else if(curr_poss == 1)  //k =6
         {
            k = &menu_table[k->prv];
            disp_chinese(k->str,2,0,8,1,1);
          }
         else if(curr_poss == 0)  //k = 5
         {
            k = &menu_table[k->prv];
            k = &menu_table[k->prv];           
           disp_chinese(k->str,0,0,8,1,1);
          }
        }
        return;
}

void menu_esc()			//设置菜单,上一级 ,退出
{
        uchar a,b;
	if(menu_table[curr_menu_id].up != 0)    //上层菜单
	{
                curr_pos2 = 0;
		disp_lattice(0x00,0x00);		//cls();清屏
		curr_menu_id =menu_table[curr_menu_id].up;
                if(curr_menu_id ==1)  
                {
                  a = 1;
                  b = 0;
                  esc_menu(a,b);	//
                }
                else if(curr_menu_id ==2)
                {
                  a = 1 ;
                  b = 1;
                  esc_menu(a,b);	//
                }
                else if(curr_menu_id ==3)  
                  {
                  a = 1 ;
                  b = 2;
                  esc_menu(a,b);	//
                }
                else if(curr_menu_id ==4) 
                  {
                  a = 1 ;
                  b = 3;
                  esc_menu(a,b);	//
                }
                else if(curr_menu_id ==5)  
                  {
                  a = 5 ;
                  b = 0;
                  esc_menu(a,b);	//
                }
                else if(curr_menu_id ==6) 
                  {
                  a = 5 ;
                  b = 1;
                  esc_menu(a,b);	//
                }
                else if(curr_menu_id ==7) 
                  {
                  a = 5 ;
                  b = 2;
                  esc_menu(a,b);	//
                }
		return;
	}
	//退出菜单的处理
        //进入轮显模式
        else
        {
	  flag = 0x02;
          task_pri[4].task_flag = 1;
          curr_pos2 = 0;      //功能设置光标置0
          curr_menu_id = 1;
    
	  return;
        } 
}

void menu_ok()//确定
{
        uchar y = 0;
	if(menu_table[curr_menu_id].down != 0)//有下一级菜单
	{	
	  curr_menu_id = menu_table[curr_menu_id].down;
	  disp_lattice(0x00,0x00);			//cls();
	  disp_chinese(menu_table[curr_menu_id].str,0,0,8,1,0);//显示标题
        }
	if(curr_menu_id ==8)  //设置采集时间间隔
        {
            
           set_time1( min_1,hour_1,Hour_1,y);
          // set_time1(coll_tim,0);
           return;
       }
	
      else if(curr_menu_id ==9) //设置采集时间间隔
        {
            
            set_time1( min_2,hour_2,Hour_2,y);
          // set_time1(coll_tim,0);
           return;
       }
	else  if(curr_menu_id ==10)    //设置预警温度
      {
	    //a = pre_tem/10;	//预警温度
	set_temp1(num_1,ten_1,bai_1,y);
        
        return;
      }
     else if(curr_menu_id ==11)  //设置采集时间间隔
        {
            
          set_temp1(num_2,ten_2,bai_2,y);
           return;
       }
       
      
     else if(curr_menu_id ==12)
      {
       set_add1(add_1,Add_1,y);//显示原来的地址
        return;
      }
     else   if(curr_menu_id ==13)  //设置测温点地址
        {
            
        set_add1(add_2,Add_2,y);//显示原来的地址
           return;
       }
        
       else if(curr_menu_id ==14)  //查询相应地址测温点历史温度
        {
            
        set_add1(add_3,Add_3,y);//显示原来的地址
           return;
       }
  
  return;    
}

void view_menu(uchar menu_id)//从第一行显示菜单
{
       uchar i;
	menu *k;
	curr_pos = 0;
	k = &menu_table[menu_id];
	disp_chinese(k->str,0,0,8,1,1);//反白显示
	for(i = 1;i < 4;i++)
	{
		if(k->next == 0) break;
		k = &menu_table[k->next];
		disp_chinese(k->str,2*i,0,8,1,0);
	}
	return;
}

void menu_up()//上一条
{
	uchar p;
	signed char i;
        menu *k;
	p = curr_menu_id;
	if(menu_table[p].prv == 0) //没上一条的情况
	{
		curr_menu_id = 7;//到最后一个菜单7
                curr_pos = 2;   //光标
                disp_lattice(0x00,0x00);	
                p = 5;
                for(i = 0;i < 2;i++)
	        {
		    disp_chinese(menu_table[p].str,2*i,0,8,1,0);
                    p++; 
 	        }
                disp_chinese(menu_table[curr_menu_id].str,4,0,8,1,1);//反白显示                
		return;
	}
        ;
        if(curr_pos != 0)//(curr_pos > 0)||(curr_pos <3)
	{//当前光标不在最上
                disp_chinese(menu_table[curr_menu_id].str,2*curr_pos,0,8,1,0);//inv_line(curr_pos,0x00);取正显示
		curr_pos--;   //光标
		//p = curr_menu_id;
                curr_menu_id = menu_table[curr_menu_id].prv;
		disp_chinese(menu_table[curr_menu_id].str,2*curr_pos,0,8,1,1);//inv_line(curr_pos,0xff);反白显示
		
                //curr_menu_id = menu_table[p].prv;
                return;
	}
        else 
	{       //当前光标在最上,再写菜单项
             
		curr_menu_id = menu_table[curr_menu_id].prv;
		//p = curr_menu_id;
		disp_lattice(0x00,0x00);			//???
                k = &menu_table[curr_menu_id];
	        disp_chinese(k->str,6,0,8,1,1);//inv_line(curr_pos,0xff);反白显示
	       for(i = 2;i >= 0 ;i--)
	        {
		if(k->prv == 0) break;///????
		k = &menu_table[k->prv];
		disp_chinese(k->str,2*i,0,8,1,0);
	        }
                curr_pos = 3;
		///////////////////view_menu(p);
                return;
	
	}
	
	
}

⌨️ 快捷键说明

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