📄 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 + -