|
- #include<reg51.h>
- #include<math.h>
- #include<absacc.h>
- #define LTC1451 XBYTE[0xfaff] //设置LTC1451的访问地址
- #define DAC1 XBYTE[0xfbff] //1# DAC输入锁存器的地址
- #define DAC2 XBYTE[0xfcff]
- #define DAC3 XBYTE[0xfdff] //3# DAC输入锁存器的地址
- #define DAC4 XBYTE[0xfeff]
- #define DAOUT XBYTE[0xffff] //DAC寄存器的共同地址
- sbit din=P3^0; //定义芯片引脚变量
- sbit clk=P3^1;
- sbit cs=P3^2;
- sbit P1_7=P1^7;
- sbit P1_0=P1^0;
- sbit P1_1=P1^1;
- sbit P1_2=P1^2;
- sbit P1_3=P1^3;
- #define PI 3.1415
- void delay(unsigned int time){
- unsigned int j=0;
- for(;time>0;time--)
- for(j=0;j<125;j++);
- }
- void da(unsigned int value);
- void main(){
- unsigned int num1,num2,num3,num4,value;
- while(1){
- if(P1^0==0){
- delay(10);
- if(P1^0==0){
- for(num1=180;num1<360;num1++){ //负半周正弦波形
- value=2047 + 2047*sin((float)num1/180*PI);
- da(value);
- }
- }}
- if(P1^1==0){ //正弦?
- delay(10);
- if(P1^1==0){
- for(num2=0;num2<360;num2++)
- value=127+127*sin((float)num2/180*PI);
- }
- }
- if(P1^2==0){
- delay(10); //三角波
- if(P1^2==0){
- for(num3=0;num3<225;num3++) //上升段波形
- LTC1451=num3;
- for(num3=225;num3>0;num3--) //下降段波形
- LTC1451=num3;
- }
- }
- if(P1^3==0){
- delay(10);
- if(P1^3==0){
- for(num4=0;num4<255;num4++){
- DAC3=num4; //上锯齿送入1 #DAC
- DAC4=255-num4; //下锯齿送入2 #DAC
- DAOUT=num4; //两路同时进行D/A转换输出
- }
- }
- }
- }
- da(value);
- }
- void da(unsigned int v){ //DA转换
- char i=11;
- cs=1;
- cs=0; //CS引脚置高电平
- for(;i>=0;i--){
- din=(v>>i)& 0x01; //分解并行数据,串行送入DIN引脚
- clk=1; //发生时钟脉冲
- clk=0;
- }
- cs=1; //发出第13个脉冲
- cs=0; //CS引脚置低电平
- }
复制代码 代码有问题,有哪位大神看看什么问题,有代码再好不过了!!!!!!
da(value);有一处警告,不碍事吧。
|
-
1.png
(44.79 KB, 下载次数: 44)
例如类似这样
|