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

📄 main.c

📁 基于MSP430单片机的菜单级无限通信程序
💻 C
📖 第 1 页 / 共 5 页
字号:
              buf = add_1 + 0x30;
              disp_8x16character(&buf,4,64,0,0,1);//显示原来的时间

	     }
	  else  if(curr_pos2 == 0)
	     {

	    menu_esc();
            
	     }
          return;
	  }	
        
        if(curr_menu_id == 13)
        {
	  if(curr_pos2 == 1)
	    {
	      curr_pos2 --;
              buf = Add_2 + 0x30;
              disp_8x16character(&buf,4,56,0,0,0);//显示原来的时间
              buf = add_2 + 0x30;
              disp_8x16character(&buf,4,64,0,0,1);//显示原来的时间

	     }
	   else  if(curr_pos2 == 0)
	     {

	    menu_esc();
            
	     }
          return;
	  }	
        if(curr_menu_id == 14)
        {
	  if(curr_pos2 == 1)
	    {
	      curr_pos2 --;
              buf = Add_3 + 0x30;
              disp_8x16character(&buf,4,56,0,0,0);//显示原来的时间
              buf = add_3 + 0x30;
              disp_8x16character(&buf,4,64,0,0,1);//显示原来的时间

	     }
	   else  if(curr_pos2 == 0)
	     {

	    menu_esc();
            
	     }
          return;
	  }	            
      }
 }

///////////////轮显任务只显示最新的当前温度函数///////////////
void turn_show_task()
{
        uint i;
	uchar j;
	uchar k;
        i = 0;
	task_pri[4].task_flag = 0;
	if(alt)			//alt为轮显反转标志
	{
		disp_lattice(0x00,0x00);		//cls();清屏
		disp_chinese(alt_view2,0,0,8,1,0);//显示标题
		disp_8x16character(view_a,2,8,0,0,0);   //x_number的为实际数减1
		disp_chinese(view_tem,2,16,8,1,0);
		j = site4[i]/10;
		k = site4[i]%10;
		set_code[0] = j + 0x30;
		set_code[1] = k + 0x30;
		disp_8x16character(set_code,2,80,1,0,0);//x_number的为实际数减1
		disp_8x16character(&view_a[1],4,8,0,0,0);//x_number的为实际数减1
		disp_chinese(view_tem,4,16,8,1,0);
		j = site5[i]/10;
		k = site5[i]%10;
		set_code[0] = j + 0x30;
		set_code[1] = k + 0x30;
		disp_8x16character(set_code,4,80,1,0,0);    //x_number的为实际数减1
		disp_8x16character(&view_a[2],6,8,0,0,0);   //x_number的为实际数减1
		disp_chinese(view_tem,6,16,8,1,0);
		j = site6[i]/10;
		k = site6[i]%10;
		set_code[0] = j + 0x30;
		set_code[1] = k + 0x30;
		disp_8x16character(set_code,6,80,1,0,0);    //x_number的为实际数减1
		alt = 0;
	}
	else		//alt为轮显标志
	{
		disp_lattice(0x00,0x00);		//cls();清屏
		disp_chinese(alt_view1,0,0,8,1,0);//显示标题
		disp_8x16character(view_a,2,8,0,0,0);   //x_number的为实际数减1
		disp_chinese(view_tem,2,16,8,1,0);
		j = site1[i]/10;
		k = site1[i]%10;
		set_code[0] = j + 0x30;
		set_code[1] = k + 0x30;
		disp_8x16character(set_code,2,80,1,0,0);    //x_number的为实际数减1
		disp_8x16character(&view_a[1],4,8,0,0,0);   //x_number的为实际数减1
		disp_chinese(view_tem,4,16,8,1,0);
		j = site2[i]/10;
		k = site2[i]%10;
		set_code[0] = j + 0x30;
		set_code[1] = k + 0x30;
		disp_8x16character(set_code,4,80,1,0,0);    //x_number的为实际数减1
		disp_8x16character(&view_a[2],6,8,0,0,0);   //x_number的为实际数减1
		disp_chinese(view_tem,6,16,8,1,0);
		j = site3[i]/10;
		k = site3[i]%10;
		set_code[0] = j + 0x30;
		set_code[1] = k + 0x30;
		disp_8x16character(set_code,6,80,1,0,0);    //x_number的为实际数减1
		alt = 1;
	}
	return;
}

///////某温控点温度显示任务函数 08-9-26//////////////
void rtu_view_task()
{
	uchar i;
	uchar j;
	uchar k;
	uchar b ;//显示温度的行坐标
	uchar c;	//显示温度的列坐标
        rtu_view = 1;
	task_pri[3].task_flag = 0;
	disp_lattice(0x00,0x00);			//清屏
	if(temp_addr == 1)
	{
	  disp_chinese(rtu_head1,0,0,5,1,0);//显示标题
	  disp_8x16character(view_a,0,88,0,0,0);
	  for(b=0;b<7;b++)       //6行,4列显示
	  {
	    for(c=0;c<4;c++)
	      {
		i = c + b*4;
		j = site1[i]/10;    //第1个点的
		k = site1[i]%10;
		set_code[0] = j + 0x30;
		set_code[1] = k + 0x30;
		disp_8x8character(set_code,(b+2),c*32,2,1);
	      }
	  }
          return;
        }
	if(temp_addr == 2)
        {
	  disp_chinese(rtu_head1,0,0,5,1,0);//显示标题
	  disp_8x16character(&view_a[1],0,88,0,0,0);
	  for(b=0;b<7;b++)       //6行,4列显示
	  {
	    for(c=0;c<4;c++)
	    {
	      i = c + b*4;
	      j = site2[i]/10;    //第2个点的
	      k = site2[i]%10;
	      set_code[0] = j + 0x30;
	      set_code[1] = k + 0x30;
	      disp_8x8character(set_code,(b+2),c*32,2,1);
	    }
	  }
	  return;	
        }
	if(temp_addr == 3)
        {
	  disp_chinese(rtu_head1,0,0,5,1,0);//显示标题
	  disp_8x16character(&view_a[2],0,88,0,0,0);
	  for(b=0;b<7;b++)       //6行,4列显示
	  {
	    for(c=0;c<4;c++)
	    {
	      i = c + b*4;
	      j = site3[i]/10;    //第3个点的
	      k = site3[i]%10;
	      set_code[0] = j + 0x30;
	      set_code[1] = k + 0x30;
	      disp_8x8character(set_code,(b+2),c*32,2,1);
	    }
	  }
	return;
        }
	if(temp_addr == 4)
        {
	  disp_chinese(rtu_head2,0,0,5,1,0);//显示标题
	  disp_8x16character(view_a,0,88,0,0,0);
	  for(b=0;b<7;b++)       //6行,4列显示
	  {
	    for(c=0;c<4;c++)
	    {
	      i = c + b*4;
	      j = site4[i]/10;    //第4个点的
	      k = site4[i]%10;
	      set_code[0] = j + 0x30;
	      set_code[1] = k + 0x30;
	      disp_8x8character(set_code,(b+2),c*32,2,1);
	    }
	  }
	return;
        }
	if(temp_addr == 5)
        {
	  disp_chinese(rtu_head2,0,0,5,1,0);//显示标题
	  disp_8x16character(&view_a[1],0,88,0,0,0);
	  for(b=0;b<7;b++)       //6行,4列显示
	  {
	    for(c=0;c<4;c++)
	    {
	      i = c + b*4;
	      j = site5[i]/10;    //第5个点的
	      k = site5[i]%10;
	      set_code[0] = j + 0x30;
	      set_code[1] = k + 0x30;
	      disp_8x8character(set_code,(b+2),c*32,2,1);
	    }
	  }
	  return;
        }
	if(temp_addr == 6)
        {
	  disp_chinese(rtu_head2,0,0,5,1,0);//显示标题
	  disp_8x16character(&view_a[2],0,88,0,0,0);
	  for(b=0;b<7;b++)       //6行,4列显示
	  {
	    for(c=0;c<4;c++)
	    {
	      i = c + b*4;
	      j = site6[i]/10;    //第6个点的
	      k = site6[i]%10;
	      set_code[0] = j + 0x30;
	      set_code[1] = k + 0x30;
	      disp_8x8character(set_code,(b+2),c*32,2,1);
	    }
	  }
	 return; 
	}
  }



void main (void)
{
  //curr_menu_id = 0;
  char i,len1;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
 
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  P3DIR |= 0x50;                             // All P3.x outputs
  P3DIR &= ~0x20;                             // All P3.x outputs
  TI_CC_LED2_PxDIR = TI_CC_LED2 ;
  TI_CC_LED2_PxOUT |=  TI_CC_LED2;
  UCA0CTL1 |= UCSSEL_2;                   // CLK = ACLK
 //UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK
  UCA0BR0 = 0x68;                           // 32kHz/9600 = 3.41
  UCA0BR1 = 0x00;                           //
//  UCA0MCTL |=  UCBRS0     ;     // Modulation UCBRSx = 3UCBRS1 + UCBRS0;
  UCA0MCTL |= UCBRS1 + UCBRS0; 
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE;
  //while (!(IFG2&UCA0RXIFG));                 // Enable USCI_A0 RX interrupt

  P3OUT |=0x40;
 _EINT();                            //中断使能
 delay(100,100);
 
 
  
  TI_CC_GDO0_PxDIR &= ~TI_CC_GDO0_PIN;         //设GDOO为输入状
  IFG1 &= ~OFIFG;
  TI_CC_Wait(30);
  TI_CC_SPISetup();                         // Initialize SPI port -modify-
  TI_CC_PowerupResetCCxxxx();               // Reset CCxxxx,TI_CC_SPI.c
  writeRFSettings();                        // Write RF settings to config reg
  //设置功率
  TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLE  memory locations:TI_CCxxx0_PATABLE=0x3f
  TI_CC_LED1_PxDIR |= TI_CC_LED1 ;              //点亮LED1; 
  TI_CC_LED1_PxOUT &= ~(TI_CC_LED1 );
  TI_CC_GDO0_PxDIR &= ~TI_CC_GDO0_PIN;       //设置GDO0为输入; 
  TI_CC_GDO0_PxSEL &= ~TI_CC_GDO0_PIN;       //设置P2.6脚为I/O端口; 
  TI_CC_GDO0_PxIES |= TI_CC_GDO0_PIN;       //下降沿触发中断; 
  TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN;      // 清除中断标志; 

  TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN;        // 使能中断总允许;
  TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);        ////设置芯片为空闲状态; 
  TI_CC_SPIStrobe(TI_CCxxx0_SPWD);        ////设置芯片为sleep状态;
 /*TI_CC_SW_PxIES = KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK;                     //按键选择下降沿触发    
  TI_CC_SW_PxIFG &= ~(KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK);                //清除按键中断请求    
 TI_CC_SW_PxIE = KEY_ESC + KEY_UP + KEY_DOWN + KEY_OK;  */                   //按键中断使能    
  //TI_CC_LED_PxDIR = TI_CC_LED1 + TI_CC_LED2;                  //设定输出状态 


  TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); 
  TI_CC_SPIStrobe(TI_CCxxx0_SRX);           // Initialize CCxxxx in RX mode. 

  init_port();
  lcd_initial();
  flag = 2;  
  task_pri[4].task_flag = 1;  
  LCD_BACK_PxDIR |= LED_BACK;
  LCD_BACK_PxOUT &= ~LED_BACK;   
  
  TI_CC_LED1_PxDIR  |=    TI_CC_LED1 ;           
  TI_CC_LED1_PxOUT |=    TI_CC_LED1 ; 
  
  TACCTL0 = CCIE;                           // TACCR0 interrupt enabled
  TACCR0 = 50000;
  TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode
 /* TI_CC_LED1_PxOUT &=   ~TI_CC_LED1 ; 
  delay_n_ms(200);
  TI_CC_LED1_PxOUT |=  TI_CC_LED1 ; 
  delay_n_ms(300);
  TI_CC_LED1_PxOUT &=   ~TI_CC_LED1 ; 
  delay_n_ms(200);
  TI_CC_LED1_PxOUT |=  TI_CC_LED1 ; */

  _EINT();                                 //允许中断
  while(1)
  {
   
    //menu_open = 1;
     //receive10m++;
      for(i=0;i<5;i++)
    {
	if(task_pri[i].task_flag)	
	{
           
	  task_pri[i].oper();
          break;
	}	
      
    }
    
    
   __bis_SR_register(LPM0_bits + GIE);     // Enter LPM3, enable interrupts
#ifdef _TRANSMITTER
 //for(len1=0;len1<50;len1++)
  if(j) 
  {
  //TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
   RFSendPacket(txBuffer1, 9);                 // Send value over RF
   //TI_CC_Wait(30000);
  
    RFSendPacket(txBuffer1, 9);                 // Send value over RF
  //TI_CC_Wait(30000);
   
  
     RFSendPacket(txBuffer1, 9);                 // Send value over RF
 //TI_CC_Wait(30000);
    RFSendPacket(txBuffer1, 9);                 // Send value over RF

    
   j = 0;
  }
  else
  {
    RFSendPacket(txBuffer2, 9);                 // Send value over RF
    TI_CC_Wait(30000);

    RFSendPacket(txBuffer2, 9);                 // Send value over RF
    TI_CC_Wait(30000);

    RFSendPacket(txBuffer2, 9);                 // Send value over RF
    TI_CC_Wait(30000);

    RFSendPacket(txBuffer2, 9);                 // Send value over RF
    TI_CC_Wait(30000);

    RFSendPacket(txBuffer2, 9);                 // Send value over RF
    TI_CC_Wait(30000);

    j = 1;
   } 

  TI_CC_SPIStrobe(TI_CCxxx0_SFRX);//不能和RFReceivePacket()分得太远
  TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); 
  TI_CC_SPIStrobe(TI_CCxxx0_SRX);//后面的延时比较难调
  TI_CC_LED1_PxOUT  |= TI_CC_LED1;
  TI_CC_Wait(30000);

  TI_CC_LED_PxOUT  &= ~(TI_CC_LED2 + TI_CC_LED1);
  TI_CC_Wait(30000);
  TI_CC_Wait(30000);

  //_EINT();                              // Enable interrupts
 _BIS_SR(LPM3_bits + GIE);
#endif 

  /* RFReceivePacket(rxBuffer,&len1);
  
      TI_CC_Wait(30000);
      
   //_BIS_SR(LPM3_bits + GIE);
    */
    ///TI_CC_Wait(30);
  
     if (RFReceivePacket(rxBuffer,&len1))       // Fetch packet from CCxxxx
   //  next++   ; 
         //Toggle LEDs according to pkt data
      TI_CC_SPIStrobe(TI_CCxxx0_SFRX);//不能和RFReceivePacket()分得太远
      TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); 
 

⌨️ 快捷键说明

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