注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
zhanghua1209的个人空间 https://home.eeworld.com.cn/space-uid-429572.html [收藏] [复制] [分享] [RSS]
日志

单通道多次dtc测电压(2553)

已有 751 次阅读2012-7-23 12:37 |

#include"msp430g2553.h"
#define uint unsigned int
#define uchar unsigned char
uint c[32],b;
uint i=0;
float n,v;
uint d1,d2,d3,d4,d5;
uchar a1[]={"12864          "};
uchar a2[]={"液晶显示           "};
uchar a3[]={"哈喽                        "};
#define SID  BIT1
#define SCLK BIT2
#define CS   BIT0
#define SID_1  P2OUT |= SID
#define SID_0  P2OUT &= ~SID
#define SCLK_1 P2OUT |= SCLK
#define SCLK_0 P2OUT &= ~SCLK
#define CS_1   P2OUT |= CS
#define CS_0   P2OUT &= ~CS
void send_command(uchar command_data)//写命令
{
 uchar i;
 uchar i_data;
 i_data=0xf8;
 CS_1;
 SCLK_0;
 for(i=0;i<8;i++)
 {
   SID_0;
 if(i_data&0x80)
  SID_1 ;
 _delay_cycles(100);
 SCLK_0;
    SCLK_1;
   _delay_cycles(10);
    i_data<<=1;
 }
 i_data=command_data;
 i_data&=0xf0;
 for(i=0;i<8;i++)
 { SID_0;
 if(i_data&0x80)
  SID_1 ;
 _delay_cycles(100);
  SCLK_0;
    SCLK_1;
    _delay_cycles(10);
    i_data<<=1;
 }
 i_data=command_data;
 i_data<<=4;
 for(i=0;i<8;i++)
 { SID_0;
 if(i_data&0x80)
  SID_1 ;
    _delay_cycles(100);
    SCLK_0;
    SCLK_1;
    _delay_cycles(10);
    i_data<<=1;
 }
 CS_0;
  _delay_cycles(100);
}
void send_data(uchar command_data)//写数据
{
 uchar i;
 uchar i_data;
 i_data=0xfa;
 CS_1;
 SCLK_0;
 for(i=0;i<8;i++)
 { SID_0;
 if(i_data&0x80)
  SID_1 ;
 _delay_cycles(100);
 SCLK_0;
    SCLK_1;
    _delay_cycles(10);
    i_data<<=1;
 }
 i_data=command_data;
 i_data&=0xf0;
 for(i=0;i<8;i++)
 { SID_0;
 if(i_data&0x80)
  SID_1 ;
 i_data<<=1;
    _delay_cycles(100);
    SCLK_0;
    SCLK_1;
    _delay_cycles(10);
 }
 i_data=command_data;
 i_data<<=4;
 for(i=0;i<8;i++)
 { SID_0;
 if(i_data&0x80)
  SID_1 ;
 i_data<<=1;
    _delay_cycles(100);
    SCLK_0;
    SCLK_1;
    _delay_cycles(10);
 }
 CS_0;
  _delay_cycles(100);
}
void lcd_init(void)//液晶初始化
{
 send_command(0x30);
  _delay_cycles(50);
 send_command(0x0c);
  _delay_cycles(50);
 send_command(0x01);
  _delay_cycles(50);
}
void display_s1()//第一行
{
uchar a;
send_command(0x80);
for(a=0;a<16;a++)
{
send_data(a1[a]);
}
}
void display_s2()//第二行
{
uchar a;
send_command(0x90);
for(a=0;a<16;a++)
{
send_data(a2[a]);
}
}
void display_s3()//第三行
{
 uchar a;
send_command(0x88);
for(a=0;a<16;a++)
{
send_data(a3[a]);
}
}
void display_ad()//第四行
{
send_command(0x98);
send_data('D');
send_data('V');
send_data(d1+0x30);
send_data('.');
send_data(d2+0x30);
send_data(d3+0x30);
send_data(d4+0x30);
}
void jisuan(float x)
{      uint y;
 y=x*1000;
   d1=0;d2=0;d3=0;d4=0;d5=0;
          d1=y/1000;
          d2=y%1000;
          d3=d2%100;
          d4=d3%10;
          d2=d2/100;
          d3=d3/10;
}
/*
 * main.c
 */
void main(void)
{
   WDTCTL=WDTHOLD+WDTPW;
   P2SEL=0x00;
   P2DIR = BIT1 + BIT2 + BIT0+BIT3;
   P2OUT&=~BIT3;
   ADC10CTL1|= INCH_4 + CONSEQ_2; //   采样触发源选择ADC10SC 输入通道A4  4分频    单通道多次转换
   ADC10CTL0=SREF_1+REFON+REF2_5V+MSC+ADC10IE+ADC10ON;// 参考电压选择基准电压  打开内部参考电压发生器 参考电压选择2.5V 一次触发连续执行 开启AD功能
   ADC10AE0|=0X10;//开启通道4 (使能)
   ADC10DTC1 = 0x20;//转换32次
   lcd_init(); //液晶初始化
   _delay_cycles(10);
      while(1)
      {
      ADC10CTL0&=~ENC;//关闭采样使能
   while(ADC10CTL1&BUSY);//判断是否有采样或转换动作
   ADC10SA = (unsigned int)c;
   ADC10CTL0|=ADC10SC+ENC;//开始采样
   _bis_SR_register(LPM0_bits+GIE);//关闭cpu,开启中断
   _NOP();
   _NOP();
      }
}
#pragma vector=ADC10_VECTOR
 __interrupt void ADC10_ISR(void)
 {
     uint j;
     b=0;
    for(j=0;j<32;j++)
        {
         b+=c[j];
        }
        b=b/32;
        v=(b*2.5)/1023;
        jisuan(v);
         display_s1();
         display_s2();
         display_s3();
         display_ad();
        _delay_cycles(10);
          __bic_SR_register_on_exit(CPUOFF);

 }
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章