急求,,能给一份DAC0832和c51单片机的仿真吗,能够完成输出三角波,方波,正弦波。有程序,

发布网友 发布时间:2022-04-23 13:46

我来回答

2个回答

热心网友 时间:2023-10-16 10:22

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define DAC0832 P2          //将DAC0832定义为P2口;

#define ALL 65536           //将ALL定义为65536;

#define Fosc 12000000       //频率为12M

uchar TH_0,TL_0,flag1,flag=0;

uint  FREQ=100,num; //起始频率设定为100HZ

float temp;

uchar code sin_num[]={     

0,0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,2,2,2,

2,    3,  3,  4,  4,  4,  5,  5,  6,  6,  7,7,8,8,9,9,

10,   10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21,

22,   23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36,37,

38,   39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 54, 55, 56,

57,   59, 60, 61, 63, , 66, 67, 68, 70, 71, 73, 74, 75, 77, 78,

80,   81, 83, 84, 86, 87, , 90, 92, 93, 95, 96, 98, 99, 101,102,

104,  106,    107,    109,    110,    112,    113,    115,    116,    118,    120,121,123,124,126,128,

129,  131,    132,    134,    135,    137,    139,    140,    142,    143,    145,    146,148,    149,151,153,

154,  156,    157,    159,    160,    162,    163,    165,    166,    168,    169,171,172,174,175,177,

178,  180,    181,    182,    184,    185,    187,    188,    1,    191,    192,194,195,196,198,199,

200,  201,    203,    204,    205,    206,    208,    209,    210,    211,    213,214,215,216,217,218,

219,  220,    221,    223,    224,    225,    226,    227,    228,    229,    230,230,231,232,233,234,

235,  236,    237,    237,    238,    239,    240,    240,    241,    242,    243,243,244,245,245,246,

246,  247,    247,    248,    248,    249,    249,    250,    250,    251,    251,    251,252,252,253,253,

253,  253,    254,    254,    254,    254,    254,    255,    255,    255,    255,    255,255,255,255,255

};

/***********端口设置***************/

sbit cs=P3^6;

sbit change=P3^2; 


/***********延时函数:延时1ms*********/

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

/***********初始化函数***********/

void init()

{

TMOD=0X01;   //设定工作模式 1

temp=ALL-Fosc/12.0/256/FREQ; //定时器初值计算?

TH_0=(uint)temp/256;

TL_0=(uint)temp%256;

EA=1;     //开总中断

EX0=1;    //开外部中断

IT0=1;    //设定下降沿有效工作方式

ET0=1;    //设定定时器工作在定时方式

TR0=1;    //开定时器中断


/************切换波形函数********************/

void changefreq(void)

{

if(change==0)

{flag++;    if(flag==4) {flag=0;num=0;}}

TH_0=(uint)temp/256;

TL_0=(uint)temp%256;

}  

/***********三角波发生函数**********************/

void sanjiaobo(void)

{

for(num=0;num<255;num++)

{cs=0;DAC0832=num;cs=1;}

for(num=255;num>0;--num)

{cs=0;DAC0832=num;cs=1;}

}

/************方波发生函数*********************/

void fangbo(void)

{

cs=0;DAC0832=0XFF;cs=1;

for(num=0;num<255;num++);

cs=0;DAC0832=0X00;cs=1;

for(num=255;num>0;num--);

}

/************锯齿波发生函数**********************/

void juchibo(void)

{

cs=0;DAC0832=++num;cs=1;

}

/*************正弦波发生函数********************/

void zhengxianbo(void)

{

for(num=0;num<255;num++)

{cs=0;DAC0832=sin_num[num];cs=1;}

for(num=255;num>0;num--)

{cs=0;DAC0832=sin_num[num];cs=1;}

}

/*************外部中断服务函数***********************/

void ext0() interrupt 0

{

changefreq(); //引用频率改变函数

}

/**************定时器中断函数****************/

void timer0() interrupt 1

{

TH0=TH_0;TL0=TL_0;  //重新装初值

TR0=0;

switch(flag)

{

case 0: {sanjiaobo();TR0=1;break;}  

case 1: {fangbo();TR0=1;break;}

case 2: {juchibo();TR0=1;break;}

case 3: {zhengxianbo();TR0=1;break;} 

default: ;

}

}


/**************主函数********************/

void main()

{

init();

while(1);

}

热心网友 时间:2023-10-16 10:22

朋友,我这儿有一个输出三角波的,有程序和仿真,其他波形的,自己仿照着写吧。。希望对您有帮助。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com