?? main.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 + -