|
发表于 2011-7-22 16:55:53
|
显示全部楼层
有谁知道的回答一下呀~我也遇到类似的问题
#include "DA.h"
void Global_Delay_Us(unsigned int n);
//DA GPIOE OUT 输出!!
#define GPIOE_Mode_Out_DA(All) { \
GPIO_InitTypeDef GPIO_InitStructure;\
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 |GPIO_Pin_12; \
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; \
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; \
GPIO_Init(GPIOA, &GPIO_InitStructure); \
}
///*-------------------这是第一种宏定义方法-----------------------------------*/
//#define CS_538_1 GPIOB->BSRR=GPIO_Pin_3 // GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
//#define CS_538_0 GPIOB->BRR =GPIO_Pin_3 //
//
//#define DIN_538_1 GPIOB->BSRR=GPIO_Pin_4 //
//#define DIN_538_0 GPIOB->BRR =GPIO_Pin_4 //
//
//#define SCLK_538_1 GPIOB->BSRR=GPIO_Pin_6 //
//#define SCLK_538_0 GPIOB->BRR =GPIO_Pin_6 //
/*-------------------这是第二种宏定义方法-----------------------------------*/
#define DIN_538_0 GPIO_WriteBit(GPIOA, GPIO_Pin_10,Bit_RESET)
#define DIN_538_1 GPIO_WriteBit(GPIOA, GPIO_Pin_10,Bit_SET)
#define SCLK_538_0 GPIO_WriteBit(GPIOA, GPIO_Pin_11,Bit_RESET)
#define SCLK_538_1 GPIO_WriteBit(GPIOA, GPIO_Pin_11,Bit_SET)
#define CS_538_0 GPIO_WriteBit(GPIOA, GPIO_Pin_12,Bit_RESET)
#define CS_538_1 GPIO_WriteBit(GPIOA, GPIO_Pin_12,Bit_SET)
#define DA_DATAOUT GPIOA->ODR //ODR 端口输出的数据寄存器 //GPIO_Write(GPIOE, date) //PD[0..7]--(LCD)D0~D7
/*****************************************************************
函数名称:void DA_GPIOE_Output(void)
输入参数:NULL
输出参数:dat
函数功能:向电阻网络输出DA的值 12位的DA的数值有4096个值 所以dat的
值可以从0变到4096
*******************************************************************/
void DA_GPIOE_Output(unsigned int dat)
{
unsigned long date;
float dattt;
dattt=(dat/3.3)*1000;
date=dattt*4096;
date=date<<4;
GPIOE_Mode_Out_DA(All);
DA_DATAOUT=0xffff;
}
//MAX538
void Delay_538(unsigned int t)
{
while(t--);
}
/*****************************************************************
函数名称:void DAC_538(unsigned int dat)
输入参数:NULL
输出参数:dat
函数功能:538的驱动程序
*******************************************************************/
void DAC_538(unsigned int dat)
{
unsigned int volt;
unsigned char i;
volt=dat|0x1000;
GPIOE_Mode_Out_DA(All);
SCLK_538_0;
CS_538_0;
Global_Delay_Us(5);
for(i=0;i<16;i++)
{
SCLK_538_1;
Global_Delay_Us(5);
if(volt&0x8000)
DIN_538_1;
else
DIN_538_0;
SCLK_538_0;
Global_Delay_Us(5);
volt<<=1;
}
CS_538_1;
SCLK_538_1;
Global_Delay_Us(5);
}
/*****************************************************************
函数名称:
输入参数:NULL
输出参数:
函数功能:
*******************************************************************/
void DA_Output_Date(unsigned int dat)
{
static float voltage;
float date;
voltage=4.16;
date=(float)dat/1000*voltage/4096;
DAC_538((unsigned int)dat);
} |
|