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

📄 main.c

📁 msp430红外串口通信
💻 C
字号:
/*
 *CopyRight  Reserved?
 *文件名:main.C
 *
 *版本:v1.0
 *作者:fire
 *日期:2007/07
 */



#define	MAIN_C
#include "main.h"
#include "..\uart1.h"
/*#define DIROUT P5DIR=0XFF
#define DIRIN  P5DIR=0X00
#define RS_1   P4OUT|=BIT6
#define RS_0   P4OUT&=~BIT6
#define RW_1   P4OUT|=BIT7
#define RW_0   P4OUT&=~BIT7
#define E_1    P4OUT|=BIT5
#define E_0    P4OUT&=~BIT5
void wr_lcd (uchar dat_comm,uchar content);
void chk_busy (void);
void Delay (uint);
uint clk=0;
  uint data=0;
uint ss[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar tab31[]={
"  兰州交通大学  "
 
};
uchar tab32[]={
"速度:      m/s "
};
uchar tab33[]={
"车程:        m"};
uchar tab34[]={
"2009年04月24日ok"};*/
/*
 *函数性质:私有
 *入口:无
 *出口:无
 *功能:初始化CPU到正常运行状态,启动XTAL2,将DCO开启到最高速度,并且主程序
 *使用DCO作为运行时钟,SMCLK时钟初始化为1M。
 */

/******************************************************************************************
* 函数名称    :init_lcd
* 功能描述    : LCD初始化子程序
* 返回值      :无
******************************************************************************************/
/*void init_lcd (void)
{
   wr_lcd(comm,0x30);   //30---基本指令动作 
   wr_lcd(comm,0x01);   //清屏,地址指针指向00H 
        wr_lcd(comm,0x06);  //光标的移动方向 
        wr_lcd(comm,0x0c);  //开显示,关游标 
}*/  

/******************************************************************************************
* 函数名称    :chn_disp1
* 功能描述    : 上半屏显示汉字或字符,字库汉字与字符
* 返回值      :无
******************************************************************************************/
/* void chn_disp1(uchar  *chn)
{
   uchar i,j;
   wr_lcd(comm,0x30);
        Delay(5);
   wr_lcd(comm,0x80);     //第1行
        j=0;
   for(i=0;i<16;i++)
        {
            wr_lcd(dat,chn[j*16+i]); 
        }
       
} */
 
 /******************************************************************************************
* 函数名称    :chn_disp1
* 功能描述    : 上半屏显示汉字或字符,字库汉字与字符
* 返回值      :无
******************************************************************************************/
 /*void chn_disp2 (uchar  *chn)
{
   uchar i,j;
   wr_lcd(comm,0x30);
        Delay(5);
   wr_lcd(comm,0x90);     //第2行
        j=0;
   for(i=0;i<16;i++)
        {
            wr_lcd(dat,chn[j*16+i]); 
        }
 } 
 */
  /******************************************************************************************
* 函数名称    :chn_disp1
* 功能描述    : 上半屏显示汉字或字符,字库汉字与字符
* 返回值      :无
******************************************************************************************/
/*void chn_disp3 (uchar  *chn)
{
   uchar i,j;
   wr_lcd(comm,0x30);
        Delay(5);
   wr_lcd(comm,0x88);     //第3行
        j=0;
   for(i=0;i<16;i++)
        {
            wr_lcd(dat,chn[j*16+i]); 
        }
 } */
  /******************************************************************************************
* 函数名称    :chn_disp1
* 功能描述    : 上半屏显示汉字或字符,字库汉字与字符
* 返回值      :无
******************************************************************************************/
 /*void chn_disp4 (uchar  *chn)
{
   uchar i,j;
   wr_lcd(comm,0x30);
        Delay(5);
   wr_lcd(comm,0x98);     //第4行
        j=0;
   for(i=0;i<10;i++)
        {
            wr_lcd(dat,chn[j*16+i]); 
        }
 } */
  /******************************************************************************************
* 函数名称    :chn_disp1
* 功能描述    : 上半屏显示汉字或字符,字库汉字与字符
* 返回值      :无
******************************************************************************************/
 /*void chn_disp5 (uchar  *chn)
{
   uchar i,j;
   wr_lcd(comm,0x30);
        Delay(5);
   wr_lcd(comm,0x92);     
        j=0;
   for(i=0;i<16;i++)
        {
            wr_lcd(dat,chn[j*16+i]); 
        }
 } */
  /******************************************************************************************
* 函数名称    :chn_disp1
* 功能描述    : 上半屏显示汉字或字符,字库汉字与字符
* 返回值      :无
******************************************************************************************/
/* void chn_disp6(uint  chn)
{
   uchar i,j;
   wr_lcd(comm,0x30);
        Delay(5);
   wr_lcd(comm,0x98);     //第一行
        j=0;
   for(i=0;i<16;i++)
        {
            wr_lcd(dat,chn ); 
        }
 } */
 
 /******************************************************************************************
* 函数名称    :wch_disp
* 功能描述    :向指定位置写入汉字和字符,(字库汉字和字符)
* 返回值      :无,x字节数,nbyte写入的汉字和字符个数
******************************************************************************************/
/*void wch_disp(uchar *chn,uint x,uint nbyte)
{
   uchar i;
   wr_lcd(comm,0x30);  //一般功能
   wr_lcd(comm,x);  //显示起始位置,x坐标是自加的,注意显示地址
     for(i=0;i<(2*nbyte);i++)
        {
            wr_lcd(dat,chn[i]); //写数据
        }
}*/
/******************************************************************************************
* 函数名称    :clrram
* 功能描述    : 清DDRAM
* 返回值      :无
******************************************************************************************/
/*void clrram(void)
{
   wr_lcd(comm,0x30);
   wr_lcd(comm,0x01);
}*/
/******************************************************************************************
* 函数名称    :wr_lcd
* 功能描述    : 写数据和指令子程序,0时写指令,1写数据
* 返回值      :无
******************************************************************************************/
/*void wr_lcd(uchar dat_comm,uchar content)
{
   chk_busy ();
   if(dat_comm)
    {
         RS_1;  //写数据
         RW_0;   
    }
   else 
    {
         RS_0;   //写指令
         RW_0;   
    }
   P5OUT=content;   //数据载入
        Delay(10);
   E_1;
   E_0;
}*/
 /******************************************************************************************
* 函数名称    :wch_disp
* 功能描述    :向指定位置写入汉字和字符,(字库汉字和字符)
* 返回值      :无,x字节数,nbyte写入的汉字和字符个数
******************************************************************************************/
/*void wch_disp1(uint chn,uint x,uint nbyte)
{
   uchar i;
   wr_lcd(comm,0x30);  //一般功能
   wr_lcd(comm,x);  //显示起始位置,x坐标是自加的,注意显示地址
     for(i=0;i<(2*nbyte);i++)
        {
            wr_lcd(dat,chn ); //写数据
        }
}*/
/******************************************************************************************
* 函数名称    :chk_busy
* 功能描述    : 检查忙信号子程序
* 返回值      :无
******************************************************************************************/
/*void chk_busy(void)
{
   int temp;
        DIRIN;   //端口设置为输入方式
   RS_0;
   RW_1;
        do
        {
          E_1;   //读端口状态
     temp=P5IN;
          E_0;
        }while((temp&0X80)!=0);  //高位为1为忙信号
        DIROUT;
}*/
static void CPUIni(void)
{
	uint i;
	WDTCTL 	= 	WDTPW + WDTHOLD;					//关闭内部看门狗
	BCSCTL1 &= ~XT2OFF;								//开启XT2高速时钟。
	do
	{
		IFG1 &= ~OFIFG;
		for (i = 0; i < 0xff; i++);
	}
	while(IFG1 & OFIFG);							//等待时钟运行正常
	BCSCTL2 |= SELS + DIVS_2;						//SMCLK选择XT2,并经过4分频,DCO时钟作为MCLK
	BCSCTL1 |=	RSEL2 + RSEL1 + RSEL0;				//选择DCO电阻选择为7。							
	DCOCTL |= DCO2+ DCO1+ DCO0;						//DCO时钟运行于最高频率。
}	

/*
 *函数性质:私有
 *入口:无
 *出口:无
 *功能:初始化定时器A
 */
static void TimeAIni(void)
{
	TACTL = TASSEL_2 + MC_1 + TACLR + TAIE;		//选择SMCLK作为定时时钟,不分频,同时工作在增计数模式。
	CCR0 = 1000*(SMCLK/1000000);	 	
}


/*
 *函数性质:私有
 *入口:无
 *出口:无
 *功能:初始化定时器B,使其TB1控制ADC采集,TB2触发DMA,控制DAC数据传输。
 */
static void TimeBIni(void)
{												
	TBCTL = TBSSEL_2 + MC_1 + TBCLR;					//TB使用SMCLK时钟,工作在增计数模式。
	TBCCTL0 = OUTMOD_4;									//使用触发模式
	TBCCR0  = 13;										//13微秒触发一次。输出频率为38K
	P4SEL |= 0X01;
	P4DIR |= 0X01;
}

/*
 *函数性质:中断函数
 *入口:无
 *出口:无
 *功能:提供定时器A中断,产生1ms中断
*/
static const uchar cucTmrFlag[] = {TIME_5MS, TIME_10MS, TIME_20MS, TIME_50MS, TIME_100MS,TIME_200MS,TIME_500MS,
								 TIME_1S,};
static const uint cuiTmrLen[] 	 = {5, 10, 20, 50, 100,200,500,
								1000, };
#pragma vector = TIMERA1_VECTOR
__interrupt void TmrAInt(void)
{
	static uint s_clk = 0;
	uint i;
	i = TAIV;											//清除定时标志,
	s_clk++;
        if(s_clk%100==0)
       {
           dataprocess();
        }
	for (i = 0; i < sizeof(cucTmrFlag); i++)
	{
		if ( (s_clk%cuiTmrLen[i]) == 0)
		{
			gucSysTmrFlag |= cucTmrFlag[i];
		}	
	}
	if (s_clk >= 10000)
	{
		s_clk = 0;
	}
}	

void Init_Port(void)
{
  P5SEL=0X00;
  P5DIR=0XFF;  //输出端口
  P5OUT=0X00;
  P4SEL=0X00;
  P4DIR|=BIT5; //输出端口
  P4DIR|=BIT6;
  P4DIR|=BIT7;
  P1SEL=0X00;
  P1DIR=0XFF;  //输出端口
  P1OUT=0X00; 
}

/*
 *函数性质:私有
 *入口:无
 *出口:无
 *功能:测试RS232通讯端口
*/
void TestIrDA(void)
{
	uint i;
	uchar ucRxBuf[10];
	WriteUart1Port("A",1);
	for(i=0 ; i<50; i++);
	ReadUart1Port(ucRxBuf);
	
	
}

/*
 *函数性质:主函数
 *入口:无
 *出口:无
 *功能:实现智能测控单元的全部功能
 */

void main(void)
{      
       
	CPUIni();
        Init_Port();														//初始化时钟
   	TimeAIni();													//定时器初始化
        init_lcd();
        clrram();
	TimeBIni();
	_EINT();
	Uart1PortIni(bp1200);


	while(1)
	{     
	       
		TestIrDA();
                dip();
                disp();
		
	       
	
	}
}

⌨️ 快捷键说明

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