欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
MSP430F552x電子屏顯示程序
[打印本頁]
作者:
timoo
時間:
2019-11-5 10:10
標題:
MSP430F552x電子屏顯示程序
LAB電子屏顯示
單片機源程序如下:
//******************************************************************************
//SMCLK為20Mhz,否則屏幕會閃
// MSP430F552x Demo - Timer0_A5, Toggle P1.0, CCR0 Up Mode ISR, DCO SMCLK
//
// Description: Toggle P1.0 using software and TA_1 ISR. Timer1_A is
// configured for up mode, thus the timer overflows when TAR counts
// to CCR0. In this example, CCR0 is loaded with 50000.
// ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~1.045MHz
//
// MSP430F552x
// ---------------
// /|\| |
// | | |
// --|RST |
// | |
// | P1.0|-->LED
//
// Bhargavi Nisarga
// Texas Instruments Inc.
// April 2009
// Built with CCSv4 and IAR Embedded Workbench Version: 4.21
//******************************************************************************
//測周法----測頻率,主頻升到25Mhz,
#include "msp430f5529.h"
#include "Init_sys.h"
#include "Paper_Display.h"
///////////////////
#define xDot 128
#define yDot 250
//#define DELAYTIME 5
volatile unsigned char DisBuffer[250*16];
volatile unsigned int Cycle[10];
unsigned int Last_capture,Over_flow_counter,Down_Last_capture;
unsigned int One_second_flag=0;
unsigned long capture_num=0,CapFlag=0,Average_period,High_width;
unsigned char down_flag;
float f, test_f1,test_f2,test_width;
void init_TA1(void) //定時1s
{
TA1CCTL0=CCIE;
TA1CCR0=32768; //1s
TA1CTL=TASSEL_1+MC_1+TACLR;
}
void init_pwm(void) //p1.2(TA0.1)輸出10KhzPWM信號
{
P1DIR|=BIT2;
P1SEL|=BIT2;//輸出PWM1波
TA0CCR0=2000;//10khz
TA0CTL=TASSEL_2+MC_1+TACLR;//時鐘源為SMCLK=20MHZ,向上計數(shù),TAR清堆零
TA0CCTL1=OUTMOD_7;//初始化模式
TA0CCR1=1000;
P7DIR |=BIT4+BIT0;
P7OUT |=BIT0;
P7OUT &=~BIT4;
}
void init_TA2_CAP(void) //測頻,p2.2為測頻輸入端
{
TA2CTL=TASSEL_2+MC_2+TACLR+TAIE;//SMCLK,連續(xù)計數(shù),清TAR,TA定時使能
P2DIR&=~BIT4; //設(shè)置為輸入P2.4為TA2.1
P2SEL|=BIT4;
TA2CCTL1=CM_1+SCS+CAP+CCIE; //+CCIS_0;//cap1,上升沿捕獲,同步,捕獲,捕獲使能,
}
///////////////////
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
int i=180;
int m = 0xff;
char disp[11]={'0','1','2','3','4','5','6','7','8','9','.'};
float value = 0;
volatile unsigned int a1 = 0;
volatile unsigned int V2 = 0;
unsigned char t1[5], t2[5], t3[5];
init_clk(); //初始化時鐘;
init_TA1(); //定時1s
init_pwm(); //PWM初始化
init_TA2_CAP();
P4DIR |= BIT7;
P1DIR |= BIT0; // P1.0, P4.7 LED output,
PaperIO_Int(); //電子紙IO口初始化
EPD_init_Full(); //全屏刷新初始化
__delay_cycles(500000);
EPD_Dis_Full((unsigned char *)&m,0); //all white
__delay_cycles(8000000);
EPD_init_Part(); //電子紙局部刷新
Init_buff(); //初始化屏幕顯存
DIS_IMG(0);
__delay_cycles(800000);
display(" ", 20, 4,0,1,0,0);
DIS_IMG(5);
__delay_cycles(500000);
__bis_SR_register( GIE); // Enter LPM0, enable interrupts
//
//
while(1)
{
test_f1=20000000/Average_period; //測周法
test_f2=capture_num; //測頻法
test_width=1.0/20*High_width; //測高電平寬度
V2=test_f1;
t1[0]=disp[V2/10000]; //萬位
t1[1]=disp[V2/1000%10]; //千位
t1[2]=disp[V2/100%10]; //百位
t1[3]=disp[V2%100/10]; //十位
t1[4]=disp[V2%10]; //個位/
V2=test_f2;
t2[0]=disp[V2/10000]; //萬位
t2[1]=disp[V2/1000%10]; //千位
t2[2]=disp[V2/100%10]; //百位
t2[3]=disp[V2%100/10]; //十位
t2[4]=disp[V2%10]; //個位/
V2=test_width;
t3[0]=disp[V2/10000]; //萬位
t3[1]=disp[V2/1000%10]; //千位
t3[2]=disp[V2/100%10]; //百位
t3[3]=disp[V2%100/10]; //十位
t3[4]=disp[V2%10]; //個位/
display("f1: ", 0, 0,0,1,0,0); // 送到顯存
display(t1, 60, 0,0,1,0,0);
display("Hz ", 140, 0,0,1,0,0);
display("f2:", 0, 32,0,1,0,0); // 送到顯存
display(t2, 60, 32,0,1,0,0);
display("Hz ", 140, 32,0,1,0,0);
display("w:", 0, 80,0,1,0,0); // 送到顯存
display(t3, 60, 80,0,1,0,0);
display("us", 140, 80,0,1,0,0);
DIS_IMG(5); //局部刷新顯示
}
}
//TA1中斷服務程序 Timer1 A0 interrupt service routine
//每1s計算捕獲脈沖個數(shù)
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
_EINT();
P4OUT ^= BIT7;
capture_num= CapFlag; //計算在1s間隔內(nèi)捕獲脈沖的次數(shù)
CapFlag=0; //清除捕獲計數(shù)值
TA1CTL&=~TAIFG;
}
//TA2捕獲中斷服務程序
#pragma vector=TIMER2_A1_VECTOR
__interrupt void TIMER2_A1_ISR(void)
{
static unsigned int i=0;
switch(__even_in_range(TA2IV,14))
{
case 0: break; // No interrupt
case 2 : // CCR1 捕獲中斷
if((TA2CCTL1&CM0)==CM0) // 若是上升沿捕獲,測上升沿間隔脈沖數(shù)
{
CapFlag++; //捕獲次數(shù)++
Average_period=Over_flow_counter*65535-Last_capture+TA2CCR1;
//測量兩個上升沿的間隔的時鐘個數(shù)
Last_capture=TA2CCR1; //當前上升沿捕獲值保存
Over_flow_counter=0; //溢出清零
TA2CCTL1 = CM1 + SCS + CAP + CCIE; //開啟下降沿捕獲
}
else // 若是下降沿捕獲,則測高電平的寬度
//if((TA2CCTL1&CM1)==CM1)
{
High_width=Over_flow_counter*65535-Last_capture+TA2CCR1; //測量本下降沿與之前上升沿之差值
//此時TA2CCR1為下降沿捕獲值
Over_flow_counter=0; //溢出清零
TA2CCTL1 = CM0 + SCS + CAP + CCIE;//開啟上升沿捕獲
}
TA2CCTL1&=~CCIFG; //清除中斷
break;
case 4: break; // CCR2 not used
case 6: break; // reserved
case 8: break; // reserved
case 10: break; // reserved
case 12: break; // reserved
case 14: // overflow TAFIG溢出中斷
Over_flow_counter++;
TA2CTL&=~TAIFG;
break;
default: break;
}
}
復制代碼
所有資料51hei提供下載:
LAB_test_f_show.zip
(216.21 KB, 下載次數(shù): 3)
2019-11-5 10:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1