分享到:
/********************************************************* 程序功能: 特别说明: ----------------------------------------------------------- 通信格式: ----------------------------------------------------------- 测试说明: **********************************************************/ #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]); } }
(0 )
(0 )


发表回复
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖