- #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);有一處警告,不礙事吧。
|