实例介绍
【实例截图】
【核心代码】
#include"msp430x26x.h"
#include"stdio.h"
#include"math.h"
#include"LCD.h"
#include"icc.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define Num_of_Results 16
float Ratio=3.02;
uint t,temp,temp1=100,temp2=100;
uint add_10=1,add_100=1;
uchar state,cnt=0,cnt1=0,EndFlag=0,LoadFlag=1;
uchar table[4];
void CLOCK_Init();
void ADC12_Init();
void DAC12_Init();
void TimeA_Init();
void GPIO_Init();
void Transform();
void Sum();
void delay(uint z);
void fuzai();
void Transform_dis(uint sum,uchar state,uchar type);
uchar table1[16]=" 欢迎光临 ";
uchar table2[16]="简易直流电子负载";
uchar table3[16]="章之倚 罗志强";
uchar table4[16]="指导老师:陈丹江";
uchar table5[16]="采样电流:";
uchar table6[16]="设置电流:";
uchar table7[16]="采样电压";
uchar table8[16]="负载调整率";
main(void)
{
WDTCTL=WDTPW WDTHOLD;
if(CALBC1_1MHZ==0XFF ||CALDCO_1MHZ==0XFF)
{
while(1);
}
CLOCK_Init();
Init_LCD();//初始化液晶
_EINT();
GPIO_Init();
DAC12_Init();
Disp_string(1,1,table1);
Disp_string(1,2,table2);
Disp_string(1,3,table3);
Disp_string(1,4,table4);
delay(30000);
Write_cmd(0x00);
while(1)
{
Transform();
Sum();
if(EndFlag==0)
{
P4OUT|=BIT5;
}
else
{
DAC12_0DAT=temp2*Ratio;
}
if(LoadFlag==0)
{
fuzai();
}
}
}
/*****************************************
1ms延时程序 8M晶振
*****************************************/
void delay(uint z)
{
unsigned int i,j;
for(i = 0;i<500;i )
for(j=0;j<z;j )
{;;};
}
/******************************************
时钟初始函数
******************************************/
void CLOCK_Init() //配置MCLK,SMCLK均为8MHz
{
BCSCTL2=SELM_0 DIVM_0 DIVS_0;
if(CALBC1_8MHZ!=0xFF)
{
//__delay_cycles(10000);
DCOCTL=0x00;
BCSCTL1=CALBC1_16MHZ;
DCOCTL=CALDCO_16MHZ;
}
BCSCTL1|=XT2OFF DIVA_0;
}
/******************************************
时钟初始函数
******************************************/
/*void CLOCK_Init()
{
//P5DIR=BIT4;
//P5SEL=BIT4;
//P1DIR=BIT4;
//P1SEL=BIT4;
DCOCTL =CALDCO_16MHZ;
BCSCTL1=0x00FD;
BCSCTL2=SELM_2 DIVS_3;
}*/
/******************************************
GPIO初始化函数
******************************************/
void GPIO_Init()
{
P4DIR=BIT5;
P4OUT&=~BIT5;
P2DIR=0X00;
P2IES=0xFF;
P2IE =0XFF;
P2IFG=0x00;
}
/******************************************
DAC1初始函数
******************************************/
void DAC12_Init()
{
P6DIR=BIT6;
P6SEL=BIT6;
DAC12_0CTL = DAC12SREF_3 DAC12IR DAC12AMP_5; // Int ref gain 1
//DAC12_0DAT = 0x0666; // 1.0V (2.5V = 0x0FFFh)
DAC12_0CTL|=DAC12IE;
}
/*****************************************
配置ads1115
*****************************************/
void Confige1115(uchar chanel)
{
unsigned char i;
switch(chanel)
{
case 0: table[2] = 0xC8; break;//设置配置寄存器的高八位1100 0101,即AINp=AIN0,AINn=GND;满量程FS= -4.096;连续转换模式
case 1: table[2] = 0xD4; break;
case 2: table[2] = 0xE2; break;
case 3: table[2] = 0xF2;break;
default:break;
}
table[0] = 0x90;//CMD_Write;
table[1] = 0x01;//指向配置寄存器
table[3] = 0xe3;//设置配置寄存器的低八位1100 0101,即
start();//发送起始信号
for(i=0;i<4;i )
{
shout(table[i]);//将table里面的数写入ads1115
_NOP();
}
stop();//发送停止信号
}
/*******************************************
指向ADS1115指针寄存器用于准备读取数据
*******************************************/
void PointRegister (void)
{
unsigned char i;
table[0] = 0x90;//写
table[1] = 0x00;//指针指向转换寄存器
start();//发送起始信号
for(i=0;i<2;i )
{
shout(table[i]);//将table里面的数写入ads1115
delay(5);
}
stop();//发送停止信号
}
/*******************************************
读转换寄存器里面的值
*******************************************/
uint read()
{
uint result,resulth,resultl;
start();
shout(0x91);
resulth = shin(); //高八位
resultl = shin(); //底八位
stop();
result=(resulth<<8)|resultl;
if(result>0x7fff)
result=~result 1;//用于测量负电压,负电压从8000~ffff,负电压与正关于0有类似对称关系,按位取反后 1相同
return result;
}
/******************************************
获取最终模数转换之后的结果
*******************************************/
uint getad(uchar chanel)
{
uint value;
Confige1115(chanel);
_NOP();
PointRegister();
_NOP();
value=read();
return value;
}
/********************************************/
/* 采样值加权平均 */
/*******************************************/
void Sum(void)
{
uint i,j;
ulong sumA3=0,sumA4=0;
for(i=0;i<16;i )
{
sumA3 =getad(0);
}
sumA3>>=4;
Transform_dis(sumA3,0,0);
for(j=0;j<16;j )
{
sumA4 =getad(1);
}
sumA4>>=4;
Transform_dis(sumA4,1,1);
}
/*******************************************
电流转化函数
********************************************/
void Transform()
{
uchar dl[5];
dl[0]=temp2/1000 0x30;
dl[1]=temp2%1000/100 0x30;
dl[2]=temp2%1000%100/10 0x30;
dl[3]=temp2%1000%100%10 0x30;
dl[4]='\0';
if(dl[0]==0x30)
{
dl[0]=0x20;
}
Disp_string(1,1,table6);
Disp_string(6,1,dl);
Disp_string(8,1,"mA");
}
/*******************************************
负载调整率
*******************************************/
void fuzai()
{
float avg=0,volt1=0,volt2=0;
uchar voltdis[5];
Disp_string(1,4,table8);
DAC12_0DAT=3020;
delay(100);
volt1=getad(1);
DAC12_0DAT=0;
delay(100);
volt2=getad(1);
avg=(volt2-volt1)*100/volt2;
voltdis[0]=((uint)(avg*10))/100 0x30;
voltdis[1]=((uint)(avg*10))%100/10 0x30;
voltdis[2]='.';
voltdis[3]=((uint)(avg*10))%10 0x30;
voltdis[4]='%';
Disp_string(6,4,voltdis);
LoadFlag=~LoadFlag;
}
/*******************************************/
/* 电压、温度装换函数 */
/*******************************************/
void Transform_dis(uint sum,uchar state,uchar type)
{
float DataTemp;
float constI=0.048;
float constV=0.686;
uint Curr_Volt;
uint temp,temp1,temp2;
uchar display[6];
DataTemp=sum;
if(type==0)
{
DataTemp=DataTemp*constI;
Curr_Volt=(uint)DataTemp-10;
display[0]=(Curr_Volt/1000) 0x30; /*取千位*/
temp=Curr_Volt-((display[0]-0x30)*1000);
display[1]=(temp/100) 0x30; /*取百位*/
temp1=temp-((display[1]-0x30)*100);
display[2]=(temp1/10) 0x30; /*取十位*/
display[3]=(temp1-(display[2]-0x30)*10) 0x30; /*取个位*/
display[4]='\0';
Disp_string(1,3,table5);
Disp_string(6,3,display);
Disp_string(8,3,"mA");
type=0;
}
else
{
DataTemp=DataTemp*constV;
Curr_Volt=(uint)DataTemp-40;
if(Curr_Volt>18050)
{
P4OUT|=BIT5;
}
if(Curr_Volt<17950&&EndFlag==1)
{
P4OUT&=~BIT5;
}
if(Curr_Volt>10000)
{
display[0]=(Curr_Volt/10000) 0x30; /*取千位*/
temp=Curr_Volt-((display[0]-0x30)*10000);
display[1]=(temp/1000) 0x30; /*取百位*/
temp1=temp-((display[1]-0x30)*1000);
display[3]=(temp1/100) 0x30; /*取十位*/
temp2=(temp1-(display[3]-0x30)*100); /*取个位*/
display[4]=(temp2/10) 0x30;
display[5]=temp2%10 0x30;
display[2]='.';
display[6]='\0';
}
else
{
display[0]=(Curr_Volt/1000) 0x30; /*取千位*/
temp=Curr_Volt-((display[0]-0x30)*1000);
display[2]=(temp/100) 0x30; /*取百位*/
temp1=temp-((display[2]-0x30)*100);
display[3]=(temp1/10) 0x30; /*取十位*/
display[4]=(temp1-(display[3]-0x30)*10) 0x30; /*取个位*/
display[1]='.';
display[5]='\0';
}
Disp_string(1,2,table7);
Disp_string(5,2,display);
Disp_string(8,2,"V");
type=0;
}
}
/*******************************************
PORT2中断函数
*******************************************/
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
if(0xFF !=(P2IN & 0xFF))
delay(10);
if(0xFF !=(P2IN & 0XFF))
{
while(0xFF !=( P2IN & 0xFF));
switch (P2IFG)
{
case 0x01:
if(temp2<1000)
{
temp2=temp2 10;
}
else
{
temp2=1000;
}
P2IFG&=0X00;
break;
case 0x02:
if(temp2>100)
{
temp2=temp2-10;
}
else
{
temp2=100;
};
P2IFG&=0X00;
break;
case 0x08: if(temp2<1000)
{
temp2=temp2 100;
}
else
{
temp2=1000;
}
P2IFG&=0X00;
break;
case 0x20:
if(temp2>100)
{
temp2=temp2-100;
}
else
{
temp2=100;
}
P2IFG&=0X00;
break;
case 0x04: if(cnt%2==0) //开路
{
P4OUT|=BIT5;
EndFlag=1;
cnt ;
}
else
{
P4OUT&=~BIT5;
EndFlag=0;
cnt ;
}
P2IFG&=0X00;
break;
case 0x10: Ratio =0.01; //电流系数微调
P2IFG&=0X00;
break;
case 0x40: Ratio-=0.01; //电流系数微调
P2IFG&=0X00;
break;
case 0x80: if(cnt1%2==0) //开路
{
LoadFlag=1;
cnt1 ;
}
else
{
LoadFlag=0;
cnt1 ;
}
break;
default: P2IFG &=0x00; // P2.0-P2.2 IO口中断标志位清除
break;
}
P2IFG&=0X00;
}
else
{
P2IFG&=0X00;
}
}
标签: 智能车
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论