📄 from_hs.c
字号:
}
//***********---------------- Pulse output--------------**********************
void Output(float f) // 脉冲输出子程序(脉冲输出函数)
{
long int a;
P4DIR |= 0x01; // P4.0 output
P4SEL |= 0x01; // P4.0 option select
TBCCTL0 = OUTMOD_4; // CCR0 toggle mode
if(f>100)
{
BCSCTL2=SELS + DIVS_1;
a=2000000/(2*f);
TBCTL = TBSSEL_2 + MC_1; // SMCLK, up mode
}
else
{
a=32768/(2*f);
TBCTL = TBSSEL_1 + MC_1; // ACLK, up mode
}
TBCCR0 = a-1;
}
//***********---------------- LCD display ----------------**********************
void Disp_Init(void)
{
P6OUT|=BIT7; // ~CS=1 reset
for(delay=0;delay<100;delay++);
buffer=0x00;
wrcommand();
buffer=0x29; // 上电初始化命令专用模块
wrcommand();
buffer=0x18; // 定义内部振荡器工作
wrcommand();
buffer=0x01; // 开振荡器
wrcommand();
buffer=0x03; // 开显示器
wrcommand();
addr_buffer=0x1B; // 显示Q标志
buffer=0x08;
wrdata();
}
void wrcommand(void) // LCD写命令
{
P6OUT&=~BIT7; // ~CS=0
P6OUT|=BIT5; // DATA=1
wr_act();
P6OUT&=~BIT5; // DATA=0
wr_act();
P6OUT&=~BIT5; // DATA=0
wr_act();
for(count=0;count<8;count++)
{
if((buffer&0x80)==0x80)
P6OUT|=BIT5;
else P6OUT&=~BIT5;
wr_act();
buffer<<=1;
}
P6OUT&=~BIT5; // DATA=0
wr_act();
P6OUT|=(BIT7+BIT6+BIT5); // ~CS=1,~WR=1,DATA=1
}
void wr_act(void)
{
P6OUT&=~BIT6;
for(delay=0;delay<10;delay++);
P6OUT|=BIT6;
for(delay=0;delay<10;delay++);
}
void wrdata(void) // LCD写数据程序
{
P6OUT&=~BIT7; // CS=0,使能液晶
P6OUT|=BIT5; /*1*/
wr_act();
P6OUT&=~BIT5; /*0*/
wr_act();
P6OUT|=BIT5; /*1*/
wr_act();
P6OUT&=~BIT5; /*0*/
wr_act();
addr_buffer<<=3; // 左移三位,低五位有效
for(count=0;count<5;count++)
{
if((addr_buffer&0x80)==0x80)
P6OUT|=BIT5;
else P6OUT&=~BIT5;
wr_act();
addr_buffer<<=1;
}
for (count=0;count<8;count++)
{
if((buffer&0x01==0x01))
P6OUT|=BIT5;
else P6OUT&=~BIT5;
wr_act();
buffer>>=1;
}
P6OUT|=(BIT7+BIT6+BIT5); // ~CS=1,~WR=1,DATA=1
}
void int_ascii(void) //将整型数转化为用于显示的ASCII
{
int i;
unsigned long int view_temp;
for(i=0;i<8;i++)
{
view_temp=view/10;
asc[i]=view-view_temp*10; //求余数
view=view/10;
}
for(i=0;i<6;i++)
{
dis_up[i]=asc[i];
}
for(i=0;i<8;i++)
{
dis_down[i]=asc[i];
}
}
void updisp(void) //上排液晶显示程序
{
int t;
addr_buffer=addr_up[0]; //显示上排第0位
t=dis_up[0];
buffer=upseg[t];
wrdata();
addr_buffer=addr_up[1]; //显示上排第1位
t=dis_up[1];
buffer=upseg[t];
wrdata();
addr_buffer=addr_up[2]; //显示上排第2位
t=dis_up[2];
buffer=upseg[t];
wrdata();
addr_buffer=addr_up[3]; //显示上排第3位
t=dis_up[3];
buffer=upseg[t];
buffer|=0x08;
wrdata();
addr_buffer=addr_up[4]; //显示上排第4位
t=dis_up[4];
buffer=upseg[t];
wrdata();
addr_buffer=addr_up[5]; //显示上排第5位
t=dis_up[5];
buffer=upseg[t];
wrdata();
}
void downdisp(void)//下排液晶显示程序
{
int t;
addr_buffer=addr_down[0];//显示下排第0位
t=dis_down[0];
buffer=downseg[t];
wrdata();
addr_buffer=addr_down[1];//显示下排第1位
t=dis_down[1];
buffer=downseg[t];
wrdata();
addr_buffer=addr_down[2];//显示下排第2位
t=dis_down[2];
buffer=downseg[t];
wrdata();
addr_buffer=addr_down[3];//显示下排第3位
t=dis_down[3];
buffer=downseg[t];
wrdata();
addr_buffer=addr_down[4];//显示下排第4位
t=dis_down[4];
buffer=downseg[t];
wrdata();
addr_buffer=addr_down[5];//显示下排第5位
t=dis_down[5];
buffer=downseg[t];
wrdata();
addr_buffer=addr_down[6];//显示下排第6位
t=dis_down[6];
buffer=downseg[t];
wrdata();
addr_buffer=addr_down[7];//显示下排第7位
t=dis_down[7];
buffer=downseg[t];
wrdata();
}
//************------------------ FFT calculate-------------**********************
void FFT_calculate(void)
{
}
//------------------- Timer A1 interrupt service routine------------------------
//#if VERSION>126
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A (void)
//#else
//interrupt[TIMERA0_VECTOR] void Timer_A(void)
//#endif
{
CCTL1 &= ~CCIFG; // clear CCI1A interrupt flag
newcapture = CCR1; // Get current captured ACLK
Compare = newcapture - Oldcapture; // ACLK difference
Oldcapture = CCR1; // Save current captured ACLK
cap[cap_cnt]=Compare;
cap_cnt++;
if(cap_cnt>number)
{
CCTL1 = 0;
taflag= 1;
}
_BIC_SR_IRQ(LPM0_bits); // Clear LPM0, SET BREAKPOINT HERE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -