⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机中用于相位差测量仪的c程序
💻 C
字号:
#include <msp430x14x.h>
#define uchar unsigned char
unsigned char j;
unsigned int b,s,g,fai,l,n,p,e,f,T,c,z,pl,pk,pb,ps,pg;
long int t,v0=0,v1=0;

const unsigned char num[32][32]={
/*--  文字:  0  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00},

/*--  文字:  1  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00},

/*--  文字:  2  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00},

/*--  文字:  3  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00},

/*--  文字:  4  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00},

/*--  文字:  5  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00},

/*--  文字:  6  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00},

/*--  文字:  7  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00},

/*--  文字:  8  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00},

/*--  文字:  9  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00},

/*--  文字:  -  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80},

/*--  文字:  +  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF8,0x80,0x80,0x80,0x00},

/*--  文字:  H  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x10,0x1F,0x10,0x00,0x00,0x10,0x1F,0x10,0x04,0xFC,0x84,0x80,0x80,0x84,0xFC,0x04},

/*--  文字:  Z  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x08,0x10,0x10,0x10,0x13,0x1C,0x10,0x00,0x04,0x1C,0x64,0x84,0x04,0x04,0x18,0x00},

/*--  文字:  :  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00}};





const unsigned char a[32][32]={
/*--  文字:  度  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x00,0x00,0x3F,0x20,0x24,0x24,0x3F,0xA5,0x65,0x25,0x3F,0x24,0x24,0x24,0x20,0x00,
0x01,0x06,0xF8,0x01,0x01,0x42,0x62,0x54,0x48,0x48,0x54,0x64,0x42,0x03,0x02,0x00},

/*--  文字:  频  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x04,0x3C,0x04,0x04,0xFD,0x24,0x24,0x00,0x4F,0x58,0x6B,0x48,0x48,0x4F,0x40,0x00,
0x22,0xC2,0x04,0x08,0xD0,0x20,0xC2,0x02,0xE4,0x18,0xE0,0x10,0x08,0xE4,0x06,0x00},

/*--  文字:  率  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x00,0x30,0x28,0x25,0x20,0x26,0xAC,0x75,0x26,0x24,0x28,0x25,0x28,0x20,0x20,0x00,
0x10,0x50,0x90,0x10,0x10,0x50,0xD0,0x7F,0x50,0xD0,0x30,0x10,0x90,0x50,0x10,0x00},

/*--  文字:  为  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x00,0x08,0x08,0x48,0x28,0x38,0x08,0x0F,0xF9,0x08,0x08,0x08,0x08,0x1F,0x08,0x00,
0x00,0x00,0x02,0x04,0x08,0x10,0x60,0x80,0x00,0x88,0x64,0x02,0x04,0xF8,0x00,0x00},

/*--  文字:  相  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x08,0x08,0x0B,0xFF,0x0C,0x0A,0x09,0x00,0x7F,0x44,0x44,0x44,0x44,0x7F,0x00,0x00,
0x20,0xC0,0x00,0xFF,0x00,0x00,0x80,0x00,0xFF,0x42,0x42,0x42,0x42,0xFF,0x00,0x00},

/*--  文字:  位  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x00,0x03,0x0C,0x37,0xC0,0x54,0x13,0x90,0x50,0x70,0x10,0x17,0x12,0x10,0x00,0x00,
0x80,0x00,0x00,0xFE,0x04,0x04,0x04,0xE4,0x04,0x0C,0x74,0x84,0x04,0x04,0x04,0x00},

/*--  文字:  差  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x01,0x11,0x15,0x15,0x95,0x75,0x57,0x1D,0x15,0x35,0xD5,0x55,0x15,0x11,0x01,0x00,
0x02,0x04,0x08,0x12,0x62,0xA2,0x22,0x22,0x3E,0x22,0x22,0x22,0x22,0x02,0x02,0x00},

/*--  文字:  第  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},

/*--  文字:  小  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x00,0x00,0x00,0x03,0x0E,0x04,0x00,0xFF,0x00,0x08,0x04,0x03,0x01,0x00,0x00,0x00,
0x20,0x40,0x80,0x00,0x00,0x02,0x01,0xFE,0x00,0x00,0x00,0x00,0x80,0xE0,0x40,0x00},

/*--  文字:  组  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x00,0x04,0x1C,0xE5,0x46,0x18,0x00,0x7F,0x44,0x44,0x44,0x44,0x7F,0x00,0x00,0x00,
0x00,0x44,0xC4,0x44,0x48,0x48,0x04,0xFC,0x44,0x44,0x44,0x44,0xFC,0x04,0x04,0x00},

/*--  文字:  制  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x00,0x0A,0xF2,0x52,0x12,0xFF,0x12,0x12,0x12,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00,
0x00,0x00,0xFC,0x80,0x80,0xFF,0x84,0x86,0xFC,0x00,0xF0,0x02,0x01,0xFE,0x00,0x00},

/*--  文字:  作  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
{0x01,0x02,0x04,0x1F,0xE0,0x44,0x18,0x30,0xDF,0x12,0x12,0x12,0x16,0x12,0x10,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x20,0x20,0x20,0x20,0x60,0x20,0x00}};







void delay_us(unsigned char n);
void delay_ms(unsigned char n);
void lcd_SendByte(uchar x);
void lcd_MC(uchar x);
void lcd_MD(uchar x);
void lcd_clear(void);
void LcdIni(void);
void lcd_DrawBmp(uchar x0,uchar page,uchar width);
void lcd_hanzichuan(uchar s,uchar y,uchar k);
void lcd_hanzi(uchar x0,uchar page,uchar width);
void lcd_zifu(uchar x0,uchar page,uchar width);
void lcd_zifuchuan(uchar s,uchar y,uchar k);


void lcd_SendByte(uchar x)
{
  uchar i,n=0x80; 
  
  for(i=0;i<8;i++)   //从最高位开始发送
  {
    if (x&n) 
      P3OUT|=BIT1;   //P3.1=1,输出数据信号到液晶
    else 
      P3OUT&=~BIT1;  //P3.1=0
      n=n>>1;
      //delay_us(5);
      P3OUT|=BIT3;   //P3.3=1,输出脉冲信号
     // delay_us(5);
      P3OUT&=~BIT3;   //P3.3=0
      //delay_us(5);
      P3OUT|=BIT3;    
  }
}


void lcd_MC(uchar x)
{
  P3OUT|=BIT3;  //P3.3=1,
  P3OUT&=~BIT0;  //p3.0=0,片选有效
  P3OUT&=~BIT2;  //p3.2=0,表示送出指令
  lcd_SendByte(x);  //调用发送字节函数
  P3OUT|=BIT0;   //p3.0=1,片选无效
}



void lcd_MD(uchar x)
{
  P3OUT|=BIT3;  //P3.3=1,
  P3OUT&=~BIT0;  //p3.0=0,片选有效
  P3OUT|=BIT2;  //p3.2=0,表示送出指令
  lcd_SendByte(x);  //调用发送字节函数
  P3OUT|=BIT0;   //p3.0=1,片选无效
}
    
void lcd_clear(void)  //清屏程序
{
  uchar i,page;
 for (page=0;page<8;page++)
  {
    lcd_MC(0xB0|page); // 设置显示页面
    lcd_MC(0x10); // 设置列地址高位
    lcd_MC(0x01); // 设置列地址低位
 for (i=0;i<128;i++)
    {
      lcd_MD(0x00);//lcd_SD(0x00);
    }
  }
}


void LcdIni(void)  //液晶屏初始化
{ 
  P3DIR |=0xFF;
  lcd_MC(0xE2);     //液晶屏复位
  lcd_MC(0x2F);  //工作状态设置
  lcd_MC(0x81);  //电压模式设定
  lcd_MC(0x31);  //电压寄存器设定
  lcd_MC(0xA2);  //bias=1/9(11)
  lcd_MC(0xA0);  //ADC,clo0 maps seg0(8)
  lcd_MC(0xC0);  //remapped mode.com0-->comn(15)
  lcd_MC(0x40);  //设定起始行地址
  lcd_MC(0xAF);   //启动LCD
  lcd_clear();// 清屏
}

void lcd_hanzi(uchar x0,uchar page,uchar width)  //单个汉字显示
{
  uchar x,i=0;
  
for (x=x0+1;x<x0+width+1;x++)    //起始列地址x0,页地址page,数据宽度width
 {
  	
    // 一次显示两页
    
    lcd_MC(0xB0|page);             //设置页地址    
    lcd_MC(((x>>4)&0x0f)|0x10);    // 设置列地址高位
    lcd_MC(x&0x0F);                // 设置列地址低位
    lcd_MD(a[j][i]);             // 画上层 
      
    lcd_MC(0xB0|(page-1));         //设置页地址
    lcd_MC(((x>>4)&0x0f)|0x10);    // 设置列地址高位
    lcd_MC(x&0x0F);               //设置列地址低位   
    lcd_MD(a[j][i+width]);              // 画下层 
    i++;
  }
}

void lcd_zifu(uchar x0,uchar page,uchar width)  //单个字符显示
{
  uchar x,i=0;
  
for (x=x0+1;x<x0+width+1;x++)    //起始列地址x0,页地址page,数据宽度width
 {
  	
    // 一次显示两页
    
    lcd_MC(0xB0|page);             //设置页地址    
    lcd_MC(((x>>4)&0x0f)|0x10);    // 设置列地址高位
    lcd_MC(x&0x0F);                // 设置列地址低位
    lcd_MD(num[j][i]);             // 画上层 
      
    lcd_MC(0xB0|(page-1));         //设置页地址
    lcd_MC(((x>>4)&0x0f)|0x10);    // 设置列地址高位
    lcd_MC(x&0x0F);               //设置列地址低位   
    lcd_MD(num[j][i+width]);              // 画下层 
    i++;
  }
}
    

void lcd_hanzichuan(uchar s,uchar y,uchar k)   //一页汉字显示
{
  uchar i=0;
  for(i=0;i<1;i++)
    {  lcd_hanzi((s+i*k),y,k); j++;   }
}


void lcd_zifuchuan(uchar s,uchar y,uchar k)   //一页字符显示
{
  uchar i=0;
  for(i=0;i<1;i++)
    {  lcd_zifu((s+i*k),y,k); j++;   }
}
 
void delay_us(unsigned char n)
{
  unsigned char i;
   i=n;  
  while(i!=0)
  {
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    i--;     
  }
}
void delay_ms(unsigned char n)
{
  unsigned char i;
  i=n;
  while(i!=0)
  {  //3CLK
    delay_us(250);
    delay_us(250);
    delay_us(250);
    delay_us(250);
    i--;  //1CLK
   }
}


void main(void)
{
    WDTCTL=WDTPW+WDTHOLD;
       BCSCTL1 &= ~XT2OFF; 
       BCSCTL2 =SELM_2+SELS;  // 选择MCLK、SMCLK为XT2 
   do{
    IFG1 &= ~(OFIFG);    //清除振荡器失效标志 
    //delay_us(128);       //延时,等待XT2起振
    }
    while ((IFG1 & OFIFG) != 0);    //判断XT2是否起振 
    
    
   // delay_ms(5);
    
    //delay_ms(20);
    
     _EINT();
    
    TACTL=TASSEL_2+ID_0+MC_2+TACLR;
    TACCTL0=CM_3+CCIS_0+SCS+CAP+CCIE;
    TACCTL1=CM_1+CCIS_0+SCS+CAP+CCIE;
    P1DIR=0X00;
    P1SEL=0x0e;
    
   
    LcdIni();
    
   while(1) 
   
    {   
   
       fai=t*360/T;
       b=fai/100;
       s=(fai%100)/10;
       g=fai%10;
       
       pl=8000000/T;
       pk=pl/1000;
       pb=pl%1000/100;
       ps=pl%1000%100/10;
       pg=pl%10;
       
       
       j=1;
       lcd_hanzichuan(0,3,16);
       delay_ms(1);
       j=2;
       lcd_hanzichuan(16,3,16);
       delay_ms(1);
       j=3;
       lcd_hanzichuan(32,3,16);
       delay_ms(1);
       j=14;
       lcd_zifuchuan(48,3,8);
       delay_ms(1);
       j=pk;
       lcd_zifuchuan(56,3,8);
       delay_ms(1);
       j=pb;
       lcd_zifuchuan(64,3,8);
       delay_ms(1);
       j=ps;
       lcd_zifuchuan(72,3,8);
       delay_ms(1);
       j=pg;
       lcd_zifuchuan(80,3,8);
       delay_ms(1);
       j=12;
       lcd_zifuchuan(88,3,8);
       delay_ms(1);
       j=13;
       lcd_zifuchuan(96,3,8);
       delay_ms(1);
       
       j=7;
       lcd_hanzichuan(0,7,16);
       delay_ms(1);
       j=7;
       lcd_zifuchuan(16,7,8);
       delay_ms(1);
       j=8;
       lcd_hanzichuan(24,7,16);
       delay_ms(1);
       j=9;
       lcd_hanzichuan(40,7,16);
       delay_ms(1);
       j=10;
       lcd_hanzichuan(56,7,16);
       delay_ms(1);
       j=11;
       lcd_hanzichuan(72,7,16);
       delay_ms(1);
       
       
       j=4;
       lcd_hanzichuan(0,1,16);
       delay_ms(1);
       j=5;
       lcd_hanzichuan(16,1,16);
       delay_ms(1);
       j=6;
       lcd_hanzichuan(32,1,16);
       delay_ms(1);
       j=3;
       lcd_hanzichuan(48,1,16);
       delay_ms(1);
       j=14;
       lcd_zifuchuan(64,1,8);
       delay_ms(1);
       
       
       
      if(P1IN&BIT3)
      {           
      
        j=10;
        lcd_zifuchuan(73,1,8);
        delay_ms(1);
        j=b;
        lcd_zifuchuan(81,1,8);
        delay_ms(1);
        j=s;
        lcd_zifuchuan(89,1,8);
        delay_ms(1);
        j=g;
        lcd_zifuchuan(97,1,8);
        delay_ms(1);
       j=0;
       lcd_hanzichuan(105,1,16);
        delay_ms(200); }
      //  }
        else if(P1IN&(~BIT3)) 
       {  
        j=11;
        lcd_zifuchuan(73,1,8);
       
          j=b;
          lcd_zifuchuan(81,1,8);
          delay_ms(1);
          j=s;
          lcd_zifuchuan(89,1,8);
          delay_ms(1);
          j=g;
          lcd_zifuchuan(97,1,8);
          delay_ms(1);
         j=0;
          lcd_hanzichuan(105,1,16);
          delay_ms(200);}  
       
    };

 }
 
#pragma vector=TIMERA0_VECTOR
__interrupt void timera0(void)
{  

 
  if(v0==0)
   { 
   l=TACCR0;
     v0=1;
     }
     
      else if(v0==1)
      {
      n=TACCR0;
        v0=2;
      
        }
          else if(v0==2)
            { p=TACCR0;
               v0=0;
               c=n-l;z=p-n;
               if(c>z)
                  {t=z;}
                   else if (c<z)
                   t=c;
             }
         
             
    }
    
 
    
#pragma vector=TIMERA1_VECTOR
__interrupt void timera1(void)
 {   CCTL1&=~BIT0;
   
   if(v1==0)
    { e=TACCR1;
       v1=1;}
         else if (v1==1)
           {f=TACCR1;
            v1=0;
            T=(f-e)/2;}
            
   }                           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -