标题:
proteus 示波器和keil c代码结合能同时发出至少4种不同的波形吗?
[打印本页]
作者:
zhuhaiya
时间:
2019-12-14 21:00
标题:
proteus 示波器和keil c代码结合能同时发出至少4种不同的波形吗?
#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)
下载附件
2019-12-14 20:55 上传
例如类似这样
作者:
51hei**1140
时间:
2019-12-14 22:06
你好!
如果同时输出四种波形,需要四路独立输出才可
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1