⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 da.c

📁 Proteus环境下DAC0832数模转换程序与电路.
💻 C
字号:
#include<reg51.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
code unsigned char Sintab[128]={64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,
						109,111,113,115,117,118,120,121,123,124,125,126,126,
						127,127,127,127,127,127,127,126,126,125,124,123,121,
						120,118,117,115,113,111,109,106,104,102,99,96,94,91,
						88,85,82,79,76,73,70,67,64,60,57,54,51,48,45,42,39,
						36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,
						1,0,0,0,0,0,0,0,1,1,2,3,4,6,7,9,10,12,14,16,18,21,23,
						25,28,31,33,36,39,42,45,48,51,54,57,60};
 char counter_10,k,m=1;      //置标志和常数、变量
 void timer0int()	        	//定时器\计数器设置
 {TMOD=0X51;
   TH0=0XB0;
   TL0=0X3C;
   TH1=0xff;
   TL1=0xff;
   ET1=1;
   TR1=1;
   ET0=1;
   TR0=1;
   EA=1;
 }
void timer0() interrupt 1 using 1		    //定时器溢出中断服务程序
{  TH0=0XB0;
   TL0=0X3C;
  counter_10++;
  if(counter_10==20)counter_10=0; 
  }
void timer1() interrupt 3 using 0		     //计数器1溢出中断服务程序
  {TH1=0xff;
   TL1=0xff;
   TR1=1;
   EA=1;
   k++;
   if(k==4)k=0;
   }
void int0() interrupt 2 using 0
{
 m++;
 if(m==10)m=0;
 }
void fang(void)			  //方波
{uchar i;
while(k==2)
 {if(i<=120/m)
 P1=0;
 else P1=128/m;
 i++;
 if(i==240/m)i=0;
 }
}
void juchi(void)			  //锯齿波
{uchar i=0;
 while(k==1)
 {P1=i;
  i++;
 if(i==248/m)i=0;
 }
 }
void sanjiao(void)			  //三角波
{uchar i,n;
while(k==3)
 { P1=i;
   if(n==1)i--;
   else i++;
   if(i==128/m)n=1;
   if(i==0)n=0;
 }
}
void sin(void)				  //正弦波
{uchar i;
 while(k==0)
{i++;
if(i==128)i=0;
P1=Sintab[i];
}
}
 void main()			//主程序
 {timer0int();
  while(1)
 {
  if(k==0)sin();
   if(k==1)juchi();
   if(k==2)fang();
   if(k==3)sanjiao();
  } 
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -