#include <msp430x14x.h>
#define uint unsigned int
#define uchar unsigned char
#define DIN_H P2OUT|=0X10 //ads1216数据输入,MSP430输出
#define DIN_L P2OUT&=0XEF
#define SCLK_H P2OUT|=0X20
#define SCLK_L P2OUT&=0XDF
#define CS_H P2OUT|=0X40
#define CS_L P2OUT&=0XBF
#define DRDY P2IN&BIT7
#define DOUT P2IN&BIT3 //ads1216数据输出,MSP430输入
const uchar Data[19]={0x3F,0x06,0x5B,0x4F,//0,1,2,3
0x66,0x6D,0x7D,0x07,//4,5,6,7
0x7F,0x6F,0x77,0x7C,//8,9,A,b
0x39,0x5E,0x79,0x71,//C,d,E,F
0x40,0x76,0x00};//-,H,全灭
const uint Add[7]={0x0800,0x0900,0x0a00,0x0b00,0x0c00,0x0d00,0x0e00};
void write_byte(uchar wdata);
/*******************************************
函数名称:delay_1us
功 能:延时参数倍us
参 数:delay
返回值 :无
********************************************/
void delay_10us(uint delay)
{
while(delay--)
_NOP();
}
/*******************************************
函数名称:point_init
功 能:I/O口方向初始化
参 数:无
返回值 :无
********************************************/
void point_init()
{
P5DIR = 0Xff; //P5口接LED灯,全部为输出,8个LED灯
P4DIR = 0X80; //P4.7接LED灯,方向为输出;其他全部接按键,共七个按键,按键为输入
P2DIR = 0X70; //
}
/*******************************************
函数名称:write_ch451
功 能:对ch451写数据
参 数:写入的数据
返回值 :无
********************************************/
void write_ch451(uint data)
{
uchar i;
P6OUT&=~BIT0;
for(i=0;i<12;i++)
{
if(data&1)
P6OUT|=BIT1;
else P6OUT&=~BIT1;
P6OUT&=~BIT2;
data=data>>1;
P6OUT|=BIT2;
}
P6OUT|=BIT0;
}
/*******************************************
函数名称:init_ch451
功 能:对ch451初始化
参 数:无
返回值 :无
********************************************/
void init_ch451()
{
P6DIR |= 0x07;//设置P6的第三位为输出
P6OUT&=~BIT1;//DAIN输出低脉冲,通知CH451使能4线串行接口
P6OUT|=BIT1;
write_ch451(0x0201);//芯片内部复位
write_ch451(0x0401);//设置为显示,关闭看门狗、键盘等
write_ch451(0x0570);//设置显示参数
}
/*******************************************
函数名称:display_ch451
功 能:显示七位数据
参 数:无
返回值 :无
********************************************/
void display_ch451()
{
write_ch451(Add[0]|Data[7]);//加载字数据;
write_ch451(Add[1]|Data[6]);
write_ch451(Add[2]|Data[5]);
write_ch451(Add[3]|Data[4]);
write_ch451(Add[4]|Data[3]);
write_ch451(Add[5]|Data[2]);
write_ch451(Add[6]|Data[1]);
}
/*******************************************
函数名称:clocl_init
功 能:系统时钟初始化
参 数:无
返回值 :无
********************************************/
void clock_init()
{
BCSCTL1 = 0xc7; //XT1CLK,0分频.时钟频率为4MHz
}
/*******************************************
函数名称:start_ad1216
功 能:开始启动AD1216
参 数:无
返回值 :无
********************************************/
void start_ad1216()
{
CS_L; //CS接低电平,使能
_NOP();
SCLK_H;
_NOP();
write_byte(0x51); //
write_byte(0x00); //
// write_byte(0x0e); //
write_byte(0x34); //
}
/*******************************************
函数名称:write1
功 能:给AD1216写1
参 数:无
返回值 :无
********************************************/
void write1()
{
DIN_H;
_NOP();
SCLK_L;
_NOP();
SCLK_H;
_NOP();
}
/*******************************************
函数名称:write0
功 能:给AD1216写0
参 数:无
返回值 :无
********************************************/
void write0()
{
DIN_L;
_NOP();
SCLK_L;
_NOP();
SCLK_H;
_NOP();
}
/*******************************************
函数名称:write_byte
功 能:给AD1216写一个字节
参 数:无
返回值 :无
********************************************/
void write_byte(uchar wdata)
{
uchar i=0;
for(i=0;i<8;i++)
{
if(wdata & 0x80)write1();
else write0();
wdata <<= 1;
}
_NOP();
}
/*******************************************
函数名称:read_8bit
功 能:读8位数据
参 数:无
返回值 :所读数据
********************************************/
uchar read_8bit()
{
uchar i,rdata_8bit;
uchar flag;
for(i=0;i<8;i++)
{
SCLK_L;
_NOP();
SCLK_H;
_NOP();
flag = DOUT;
rdata_8bit <<= 1;
if(flag)rdata_8bit |= 0x01;
_NOP();
}
return rdata_8bit;
}
/*******************************************
函数名称:read_24bit
功 能:读24位数据
参 数:转换后数据存储的地址
返回值 :无
********************************************/
void read_24bit(uchar *rdata)
{
uchar i,j;
uchar flag;
for(j=0;j<3;j++)
for(i=0;i<8;i++)
{
SCLK_L;
_NOP();
SCLK_H;
_NOP();
flag = DOUT;
rdata[j] <<= 1;
if(flag)rdata[j] |= 0x01;
_NOP();
}
}
/*******************************************
函数名称:ad1216
功 能:ad转换函数
参 数:转换数据的地址
返回值 :无
********************************************/
void ad1216(uchar *ad_data)
{
write_byte(0x01); //读数据命令
_NOP();
_NOP();
_NOP();
read_24bit(ad_data);
}
/*******************************************
函数名称:main
功 能:主函数
参 数:无
返回值 :无
********************************************/
void main( void )
{
// uchar ad[3]={0x00,0x00,0x00};
uchar ad_8bit=0xff;
WDTCTL = WDTPW + WDTHOLD; //关狗
clock_init(); //系统时钟初始化
point_init(); //端口初始化
init_ch451(); //数码管驱动CH451初始化
display_ch451(); //显示
while(1)
{
P5OUT = 0X00;
CS_L; //CS接低电平,使能
_NOP();
SCLK_H;
_NOP();
write_byte(0x50);
write_byte(0x00);
write_byte(0x11);
_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
write_byte(0x11);
write_byte(0x00);
_NOP();_NOP();_NOP();
ad_8bit=read_8bit();
// while(DRDY)ad1216(ad);
write_ch451(Add[0]|Data[ad_8bit&0x0f]);
write_ch451(Add[1]|Data[(ad_8bit>>4)&0x0f]);
// write_ch451(Add[2]|Data[ad[1]&0x0f]);
// write_ch451(Add[3]|Data[(ad[1]>>4)&0x0f]);
// write_ch451(Add[4]|Data[ad[2]&0x0f]);
// write_ch451(Add[5]|Data[(ad[2]>>4)&0x0f]);
}
}
|