久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2106|回復: 1
打印 上一主題 下一主題
收起左側

我這個msp430f169測頻率一直顯示65535Hz,怎么改,大佬幫忙看一下

[復制鏈接]
跳轉到指定樓層
樓主
ID:593810 發表于 2019-8-5 16:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
10黑幣

/***********************************************************
msp430f169 測量頻率

#include  <msp430x16x.h>

#define uchar unsigned char
#define uint  unsigned int
void delay(void);
void InitSys();
//void ClearLCD(void);
extern const unsigned char shuzi_table[];

#define LCD_DataIn    P5DIR=0x00    //數據口方向設置為輸入
#define LCD_DataOut   P5DIR=0xff    //數據口方向設置為輸出
#define LCD2MCU_Data  P5IN
#define MCU2LCD_Data  P5OUT

#define LCD_CMDOut    P4DIR|=0x0F     //P3口的低三位設置為輸出
#define LCD_RS_H      P4OUT|=BIT0      //P3.0
#define LCD_RS_L      P4OUT&=~BIT0     //P3.0
#define LCD_RW_H      P4OUT|=BIT1      //P3.1
#define LCD_RW_L      P4OUT&=~BIT1     //P3.1
#define LCD_EN_H      P4OUT|=BIT2      //P3.2
#define LCD_EN_L      P4OUT&=~BIT2     //P3.2

#define LCD_PSB_P     P4OUT|=BIT3      //3.3
#define LCD_PSB_S     P4OUT&=~BIT3     //3.3

void Delay_1ms(void);
void Delay(unsigned int n);
void Write_Cmd(unsigned char cod);
void Write_Data(unsigned char dat);
void Ini_Lcd(void);
void Disp_HZ(unsigned char addr,const unsigned char * pt,unsigned char num);
void Disp_ND(unsigned char addr,unsigned int  thickness);
void Draw_TX(unsigned char Yaddr,unsigned char Xaddr,const unsigned char * dp) ;
void Draw_PM(const unsigned char *ptr);


//void ADC12(void);
void Clock_Init(void);

uint start,end;
uint width; //==用于存放脈寬==
uint period; //==用于存放周期==
uint frequency; //==用于存放頻率==
uint fy[7]; //==用于存放頻率顯示數據==
uint pd[7]; //==用于存放周期顯示數據==
uint wh[6]; //==用于存放脈寬顯示數據==
const unsigned char zhouqi[]={"周期為:(us) "};
const unsigned char us[]={"us "};
const unsigned char pinlv[]={"頻率為:(Hz) "};
const unsigned char hz[]={"HZ "};

void process(void);

/***************************主函數*************************/
void main( void )
{

   WDTCTL = WDTPW + WDTHOLD; //==關狗==   
  InitSys(); //==初始化時鐘,SMCLK,MCLK均為8M==
  P1DIR&=~BIT2;
  P1SEL = BIT2; //==設置P1.2端口為功能模塊使用,即:做捕獲源==
  TACTL = TASSEL_2+ID_3+TACLR+TAIE+MC_1;//==定時器A時鐘信號選擇SMCLK,8分頻,同時設置定時器A計數模式為連續增計模式==
  CCTL1 = CM_1+SCS+CAP+CCIE; //==輸入上升沿捕獲,CCI0A為捕獲信號源==
  _EINT(); //==開全局中斷允許==
  //_BIS_SR(LPM0_bits+GIE);
   Ini_Lcd(); //==初始化液晶==
   //Clear_GDRAM(); //==清屏==
   Disp_HZ(0x80,zhouqi,6);
    Disp_HZ(0x88,pinlv,6);
      while(1)
      {
        process();

        Write_Cmd(0x90);//==寫地址==
        Write_Data(pd[6]+0x30);
        Write_Data(pd[5]+0x30);
        Write_Data(pd[4]+0x30);
        Write_Data(pd[3]+0x30);
        Write_Data(pd[2]+0x30);
        Write_Data(pd[1]+0x30);
        Write_Data(pd[0]+0x30);

        Write_Cmd(0x98);//==寫地址==
        Write_Data(fy[6]+0x30);
        Write_Data(fy[5]+0x30);
        Write_Data(fy[4]+0x30);
        Write_Data(fy[3]+0x30);
        Write_Data(fy[2]+0x30);
        Write_Data(fy[1]+0x30);
        Write_Data(fy[0]+0x30);   
        delay();
      }
}

void InitSys()
{
   unsigned int i;
//--- 使用XT2振蕩器 ---
   BCSCTL1&=~XT2OFF; //==打開XT2振蕩器==

   do
   {
     IFG1 &= ~OFIFG; //==清除振蕩器失效標志==
     for (i = 0xFF; i > 0; i--); //==延時,等待XT2起振==
   }
  while ((IFG1 & OFIFG) != 0); //==判斷XT2是否起振==
  BCSCTL2 =SELM_2+SELS; //==選擇MCLK、SMCLK為XT2,8M==
  //ADC12CTL0 |=ENC+ADC12SC;//使能轉換;開始轉換
}
void process(void)
{
  while(end<start);
   //while(end<start)的話就讓其一直等待下去,直到end>start
    //width =10000/(end-start); //實際脈沖寬度的計算
    period =2*width;
    frequency=1000000/period;

    pd[6]=period/1000000;
    pd[5]=(period-1000000*pd[6])/100000;
    pd[4]=(period-1000000*pd[6]-100000*pd[5])/10000;
    pd[3]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4])/1000;
    pd[2]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4]-1000*pd[3])/100;
    pd[1]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4]-1000*pd[3]-100*pd[2])/10;
    pd[0]=period%10;

    fy[6]=frequency/1000000;
    fy[5]=(frequency-1000000*fy[6])/100000;
    fy[4]=(frequency-1000000*fy[6]-100000*fy[5])/10000;
    fy[3]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4])/1000;
    fy[2]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-1000*fy[3])/100;
    fy[1]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-1000*fy[3]-100*fy[2])/10;
    fy[0]=frequency%10;   
}
#pragma vector=TIMERA1_VECTOR //==定時器A中斷處理==
__interrupt void timer_A1(void)
{
  uint temp;
  switch(TAIV) //==向量查詢==
  { case 2: //==捕獲中斷==
       if(CCTL1&CM0) //==捕獲到上升沿==
         {
            CCTL1=(CCTL1&(~CM0))|CM1; //==更變設置為下降沿觸發==
            temp=TAR; //==記錄初始時間==
            period=temp-start;
            start=temp;      
         }
       else if (CCTL1&CM1) //==捕獲到下降沿==
        {
           CCTL1=(CCTL1&(~CM1))|CM0; //==更變設置為上升沿觸發==
           end=TAR; //==用start,end,overflow計算脈沖寬度==
           width =end-start;

        }
        break;                 
    default:break;
  }
}
/********************************************
函數名稱:Delay_1ms
功    能:延時約1ms的時間
參    數:無
返回值  :無
********************************************/
void Delay_1ms(void)
{
        uchar i;

        for(i = 150;i > 0;i--)  _NOP();
}
/*******************************************
函數名稱:Delay_Nms
功    能:延時N個1ms的時間
參    數:n--延時長度
返回值  :無
********************************************/
void Delay_Nms(uint n)
{
    uint i;

    for(i = n;i > 0;i--)    Delay_1ms();
}
/*******************************************
函數名稱:Write_Cmd
功    能:向液晶中寫控制命令
參    數:cmd--控制命令
返回值  :無
********************************************/
void Write_Cmd(uchar cmd)
{
    uchar lcdtemp = 0;
                       
    LCD_RS_L;
    LCD_RW_H;
    LCD_DataIn;  
    do                       //判忙
    {   
        LCD_EN_H;
               _NOP();                                       
               lcdtemp = LCD2MCU_Data;
               LCD_EN_L;

    }
    while(lcdtemp & 0x80);

    LCD_DataOut;   
    LCD_RW_L;                 
    MCU2LCD_Data = cmd;
    LCD_EN_H;
    _NOP();                                                                         
    LCD_EN_L;
}
/*******************************************
函數名稱:Write_Data
功    能:向液晶中寫顯示數據
參    數:dat--顯示數據
返回值  :無
********************************************/
void  Write_Data(uchar dat)
{
    uchar lcdtemp = 0;   

    LCD_RS_L;
    LCD_RW_H;  
    LCD_DataIn;   
    do                       //判忙
    {   
        LCD_EN_H;
        _NOP();                                               
        lcdtemp = LCD2MCU_Data;
        LCD_EN_L;      
    }
    while(lcdtemp & 0x80);  

    LCD_DataOut;
    LCD_RS_H;
    LCD_RW_L;  

    MCU2LCD_Data = dat;
    LCD_EN_H;
    _NOP();
    LCD_EN_L;
}  
/*******************************************
函數名稱:Ini_Lcd
功    能:初始化液晶模塊
參    數:無
返回值  :無
********************************************/
void Ini_Lcd(void)
{                  
    LCD_CMDOut;    //液晶控制端口設置為輸出

    Delay_Nms(500);
    Write_Cmd(0x30);   //基本指令集
    Delay_1ms();
    Write_Cmd(0x02);   // 地址歸位
    Delay_1ms();
        Write_Cmd(0x0c);   //整體顯示打開,游標關閉
    Delay_1ms();
        Write_Cmd(0x01);   //清除顯示
    Delay_1ms();
        Write_Cmd(0x06);   //游標右移
    Delay_1ms();
        Write_Cmd(0x80);   //設定顯示的起始地址
}
/*******************************************
函數名稱:Disp_HZ
功    能:控制液晶顯示漢字
參    數:addr--顯示位置的首地址
          pt--指向顯示數據的指針
          num--顯示字符個數
返回值  :無
********************************************/
void Disp_HZ(uchar addr,const uchar * pt,uchar num)
{
    uchar i;
               
    Write_Cmd(addr);
           for(i = 0;i < (num*2);i++)
        Write_Data(*(pt++));
}

void Clock_Init(void)
{
  uchar i;
  BCSCTL1&=~XT2OFF;                 //打開XT振蕩器
  BCSCTL2|=SELM1+SELS;              //MCLK為8MHZ,SMCLK為8MHZ
  do{
      IFG1&=~OFIFG;                   //清除震蕩標志
      for(i=0;i<100;i++)
      _NOP();                      //延時等待
     }
  while((IFG1&OFIFG)!=0);           //如果標志為1,則繼續循環等待
  IFG1&=~OFIFG;
}


void delay(void)
{
  unsigned int i,j;
  for(i=0;i<100;i--)
  {
    for(j=0;j<100;j--);
  }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:290305 發表于 2019-8-6 17:00 | 只看該作者
因為你定義frequency時用的是uint,而你的uint是用unsigned int宏定義的,他的取值范圍為0—65536,所以你最大的顯示數為65536,你可以把frequency用u32定義就可以了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美一区二区三区日本久久久 | 久久久久久成人 | 97热在线 | 日本成人二区 | 丁香五月网久久综合 | 欧美日韩在线综合 | 99视频网站| 在线看免费的a | 暖暖成人免费视频 | 亚洲午夜精品视频 | 免费成人在线网站 | 国产99免费视频 | 免费一级黄 | 午夜国产 | 婷婷色国产偷v国产偷v小说 | 美女视频一区二区三区 | 国产成人精品在线 | 免费黄色的网站 | 91视视频在线观看入口直接观看 | 在线视频一区二区 | 精品亚洲一区二区三区四区五区高 | 九九精品在线 | 欧美日韩精品专区 | 日本午夜免费福利视频 | 国产乱码久久久 | 成人午夜在线视频 | 日韩中文字幕一区二区 | 不卡在线视频 | 国产一区二区在线视频 | 成人欧美一区二区三区 | 91精品国产自产在线老师啪 | 色婷婷久久久亚洲一区二区三区 | av激情在线 | 欧美精品一区免费 | 丁香五月网久久综合 | 91干b| 日韩一区在线观看视频 | 日韩一区二区视频 | 亚洲国产精品99久久久久久久久 | h视频免费在线观看 | 成人国产精品久久 |