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

📄 duijj.c

📁 单边带调幅对讲机程序 msp430单片机控制 实现无线数据传输
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "msp430x24x.h"
#include "Init.h"
#include "NOKIA_5110.H"
#include "scancodes.h"
#include "Modem.h"
#include "DS1302.h"
#include "ziku.h"

#define Key_Data P2IN&BIT0
#define Key_CLK  P2IN&BIT1
#define SIDval   P2IN&BIT0

#define uchar unsigned char
#define uint unsigned int
#define Buf_Dp 100

unsigned char IntNum = 0;     //中断次数计数
unsigned char KeyV;           //键值
unsigned char DisNum = 0;     //显示用指针
unsigned char Key_UP=0, Shift = 0;   //Key_UP是键松开标识,Shift是Shift键按下标识
unsigned char BF = 0;         //标识是否有字符被收到
unsigned char pebit=0xff;    //奇偶校验标志位
unsigned char recdata=0;     //接收到的数据
unsigned char bitcount=11;   //位计数变量
unsigned char x=0,y=0;
unsigned char count=0;
char UART_TX_BUF[Buf_Dp];
char UART_RX_BUF[Buf_Dp];
char Tshow_Puf[100];
char Rshow_Puf[100];
unsigned char RX1_Len_temp;
unsigned char nRX_Len;
unsigned char nTX_Len;
static char nRX_Flag;
static char nTX_Flag;
static char Write_Flag=0;
static char Rece_Flag=0;
char Resv[2];
char signal;

char RX_Flag;
const char TAB_f_Week[][4]={{' ','S','u','n'},
                            {' ','M','o','n'},
                            {' ','T','u','e'},
                            {' ','W','e','d'},
                            {' ','T','h','u'},
                            {' ','F','R','i'},
                            {' ','S','a','t'}
                                            };
char NYR[11]={'2','0','0','8','-','1','1','-','1','8','\0'};
char Xinq[5];
unsigned char SF[5] ={0,2,10,4,4};
unsigned char Setting_Time[7]={ //bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
 0x08,    //--------十位-------|-------个位--------|年份(当前07年)
 0x06,    //                        |-----个位-----|星期(当前周日)
 0x11,    //              |十位|-------个位--------|月份(当前07月)
 0x28,    //         |--十位---|-------个位--------|日期(当前01号)
 0x11,    //-12H|    |--十位---|-------个位--------|小时(当前18点)
 0x25,    //    |-----十位-----|-------个位--------|分钟(当前20分)
 0x00    //    |-----十位-----|-------个位--------|秒钟(当前30秒)
};
unsigned char ReadingData[7];  //读出来的数据,同SettingData定义与格式
char A_PM,O_Tm;
char test;
//char test[]="cuit";
void Get_time(unsigned char *ReadingData);
void Tlotal_m(char k);

void delay(int n)
{  unsigned int i;
   for(;n>0;n--)		       
   for(i=0;i<1000;i++);
}  
void Decode(unsigned char ScanCode) //注意:如SHIFT+G为12H 34H F0H 34H F0H 12H,也就是说shift的通码+G的通码+shift的断码+G的断码
{
unsigned char TempCyc;	
 if (!Key_UP)                //当键盘松开时
 { 
     if(count==0) {DisNum=0;x=0;y=1; NOKIA5110_set_XY(6*x,y);}
        switch (ScanCode)
          {
	    case 0xF0 :	// 当收到0xF0,Key_UP置1表示断码开始
		      Key_UP = 1;
		      break;
	    case 0x12 :	// 左 SHIFT
		      Shift = 1;
		      break;
            case 0x59 :	// 右 SHIFT
		      Shift = 1;        
		      break;  
            case 0x76 ://退出
                      Write_Flag=0;
                      Rece_Flag =0;
                      break;
            case 0x66:  //back space                                               
                      if((x == 0) && (y != 1))//如果游标在第2行第1位
                          {
                             x = 13;y --; }                                                                                  
                       else if(x != 0) 
                          {  x--;   }                                                                                 
                       else                   //如果游标在第1行第1位
                           {;}           //0x20是空格的ASCII码
                           NOKIA5110_set_XY(6*x,y);
                           if(count!=0)  {count--;DisNum--;}
                           Tshow_Puf[count]='\0';
                           NOKIA5110_w_char(32);
                           NOKIA5110_set_XY(6*x,y);
                        break;             
              case 0x5a:
                        Tshow_Puf[count++]=' ';
                         x=0;y=1;
                        NOKIA5110_set_XY(x,y);
                        nTX_Flag=1;
                        break;
		default:						
			if (DisNum >= 70)
                        break;          
			if(!Shift)	//如果SHIFT没按下
			  {
				for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
				if (UnShifted[TempCyc][0] == ScanCode) NOKIA5110_w_char( UnShifted[TempCyc][1]);
                                Tshow_Puf[count++]=UnShifted[TempCyc][1];
                                DisNum++;
                                x++;
                                if(x>13) 
                                { x=0;y++;
                                  if(y>5){x=0;y=1;}                                     
                                }	
                                NOKIA5110_set_XY(6*x,y);
                           } 
			else  //按下SHIFT
			   {
				for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
				if (Shifted[TempCyc][0] == ScanCode) NOKIA5110_w_char( Shifted[TempCyc][1]);
                                Tshow_Puf[count++]=Shifted[TempCyc][1];
				DisNum++;
                                x++;
                                if(x>13) 
                                   { x=0;y++;
                                     if(y>5){ x=0;y=1;}
                                   }	
                                NOKIA5110_set_XY(6*x,y);
			    }
			break;
	        }
         }
 else
	{	
	      Key_UP = 0;
	      switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处理
		{
		     case 0x12 :	// 左 SHIFT
			Shift = 0;break;
		     case 0x59 :	// 右 SHIFT
			Shift = 0;break;
		}                        
	}
 BF = 0; //标识字符处理完了
 KeyV=0;
} 


void main( )  
{  char i,j=0; 
   WDTCTL = WDTPW + WDTHOLD;          // Stop WDT
  // P6DIR |=BIT6+BIT7;
  // P6OUT |=BIT6+BIT7;
   P5DIR =0XFF;
   P5OUT =0XFF;
   P3DIR |=BIT4+BIT5;                 //P3.4,p3.5输出
   P4DIR =0xff;
   P4OUT =0xff;
   P2SEL = 0x00;             
   P2DIR &=~ BIT1;     //Clock接P1.7,设置为输入
   P2DIR &=~ BIT0;     //SID接P4.6,设置为输入
   P2IES |=  BIT1; 
   P1SEL = 0x00;       //P1口作为IO使用
   P1DIR &=~ (BIT3+BIT2);
   P1IES |= BIT2+BIT3;      //下降沿中断
   P1IFG = 0x00;            //中断标志清零
   P2IFG = 0x00; 
   
   P1IE  |= BIT2+BIT3;      //使能时钟端口中断
   nRX_Len=0;
   nTX_Len=0;
   nRX_Flag=0;
   nTX_Flag=0;
   RX_Flag=0;
   initSys();             //单片机初始化
   NOKIA5110_init();      //初始化液晶
   NOKIA5110_draw_bmp(0,0,Start_p,82,47);  //初始化话提示
   Uart_init();           //初始化串口
   Timerb_init();         //初始化定时器
   DS1302_Reset();         //初始化时钟
   //DS1302_SettingData(Setting_Time);
   Set_mb1504_1(3700);     //设置MB1504 锁定频率
   Set_mb1504_2(4800);
   ADC12_init();            //初始化ADC
   _EINT();                 //打开全局中断控制
   P3OUT |= 0x30;           //MSM7512设置为接收模式
   Rx_Mode();
   //test=0xff;
 while(1)
{ 
/*  P3OUT |= 0x30;
  Tx_Mode();
  delay(1000);
  usart_putchar(test);*/
  
  if((Write_Flag!=0)|(Rece_Flag!=0))   //判断是否有数据发送或接收
    { 
        TBCCTL0=0x00;                   //关定时中断
        NOKIA5110_clear();              //清屏
        x=0;y=0;                        //定位
        NOKIA5110_set_XY(6*x,y);
        NOKIA5110_w_char_string(0,0,"=chat=");
        if(Write_Flag!=0)   NOKIA5110_w_char_string(42,0,"write: ");
        else if(Rece_Flag!=0 )   NOKIA5110_w_char_string(42,0,"Read: ");
        count=0;
        P2IE |= BIT1;                   //打开键盘
        while(1)
        {                           
          if(nTX_Flag==1)              //发送标志置位,进入发送程序
            { 

⌨️ 快捷键说明

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