作业帮 > 综合 > 作业

基于AT89C51和DAC0832、LM324的波形发生器能发生正弦,方波,三角波,锯齿波四种波形用C语言编写,

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/06/11 04:05:37
基于AT89C51和DAC0832、LM324的波形发生器能发生正弦,方波,三角波,锯齿波四种波形用C语言编写,
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcdrs=P3^2;sbit lcdrw=P3^3;sbit lcde=P3^4;sbit d=P2^7;sbit s1=P2^0;sbit s2=P2^1;sbit s3=P2^2;sbit cs=P3^5;sbit wr=P3^6;uchar slnum,a,ys,j;uint fre;void delay(uint z){   uint i,j;   for(i=z;i>0;i--)      for(j=110;j>0;j--);}void delay1(uint y){  uint i;  for(i=y;i>0;i--); }uchar code tosin[256]={0x80,0x82,0x85,0x88,0x8b,0x8e,0x91,0x94,0x97,0x9a,0x9d,0xa0,0xa3,0xa6,0xa9,0xac,0xaf,0xb2,0xb6,0xb9,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};void write_com(uchar com){   lcdrs=0;   P1=com;   delay(5);   lcde=1;   delay(5);   lcde=0;}void write_data(uchar date){   lcdrs=1;   P1=date;   delay(5);   lcde=1;   delay(5);   lcde=0;}void init(){  lcdrw=0;  lcde=0;  wr=0;  cs=0;  write_com(0x38);  write_com(0x0c);  write_com(0x06);  write_com(0x01);  write_com(0x80+0x00);  write_data(0x77);       //写wave  write_data(0x61);  write_data(0x76);  write_data(0x65);  write_data(0x3a);  write_data(0x80+0x40);  //写f    write_data(0x66);  write_data(0x3a);}void write_f(uint date) //写频率{   uchar qian,bai,shi,ge;   qian=date/1000;   bai=date/100%10;   shi=date/10%10;   ge=date%10;   write_com(0x80+0x42);   write_data(0x30+qian);   write_data(0x30+bai);   write_data(0x30+shi);   write_data(0x30+ge);   write_data(0x48);   write_data(0x5a);}void xsf()   //显示频率{  if(slnum==1)  {     fre=(1000/(9+3*ys)); write_f(fre);  }  if(slnum==2)  {     fre=(100000/(3*ys)); write_f(fre);  }   if(slnum==3)  {     fre=(1000/(15+3*ys)); write_f(fre);  }   }void keyscanf(){   d=0;   if(s1==0)   {      delay(5);  if(s1==0)  {     while(!s1); slnum++; if(slnum==1) {    ys=0;write_com(0x80+0x05);write_data(0x73);   //写sine:write_data(0x69);write_data(0x6e);write_data(0x65);write_data(0x20);write_data(0x20); } if(slnum==2) {    ys=10;write_com(0x80+0x05);write_data(0x73);   //写squraewrite_data(0x71);write_data(0x75);write_data(0x61);write_data(0x72);write_data(0x65); } if(slnum==3) {    ys=0;write_com(0x80+0x05);   //写trainwrite_data(0x74);write_data(0x72);write_data(0x61);write_data(0x69);write_data(0x6e);write_data(0x20); } if(slnum==4) {    slnum=0;P1=0;write_com(0x80+0x05);write_data(0x20);write_data(0x20);write_data(0x20);write_data(0x20);write_data(0x20);write_data(0x20);write_com(0x80+0x42);write_data(0x20);write_data(0x20);write_data(0x20);write_data(0x20);write_data(0x20);write_data(0x20); }  }   }   if(s2==0)   {      delay(5);  if(s2==0)  {    while(!s2);ys++;  }   }   if(s3==0)   {      delay(5);  if(s3==0)  {    while(!s3);ys--;  }   }}void main(){   init();   while(1)   {      keyscanf();  if(slnum==1)//正弦波//  {     for(j=0;j<255;j++) {    P0=tosin[j];delay(ys); }  }  if(slnum==2)  //方波//  {     P0=0xff; delay1(ys); P0=0; delay1(ys);  }  if(slnum==3)  //三角波//  {     if(a<128) {    P0=a;delay1(ys); } else {    P0=255-a;delay1(ys); } a++;  }  if(!(s1&s2&s3))  {     xsf();  }   }}
再问: 谢谢你的程序,请问仿真成功了吗?
再答: 成功的