DAC0832波形圖C語言程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define DAC 0x7fff //定義DAC端口地址
uchar code SINTAB[]={0x7F,0x89,0x94,0x9F,0xAA,0xB4,0xBE,0xC8,0xD1,0xD9,0xE0,0xE7,
0xED,0xF2,0xF7,0xFA,0xFC,0xFE,0xFF};
uchar bdata Tbase=0x20;
sbit KST=Tbase^0; //階梯波標(biāo)志
sbit KTRI=Tbase^1; //三角波標(biāo)志
sbit KSQ=Tbase^2; //方波標(biāo)志
sbit KSIN=Tbase^3; //正弦波標(biāo)志
sbit K1=P1^0; //K1鍵
sbit K2=P1^2; //K2鍵
sbit K3=P1^4; //K3鍵
sbit K4=P1^6; //K4鍵
/**************延時(shí)函數(shù)*******************/
void delay()
{
uchar i;
for(i=0;i<0xff;i++);
}
/**************階梯波函數(shù)*******************/
void st()
{
uchar i=0;
while(KST)
{
XBYTE[DAC]=i++; //啟動(dòng)DAC
}
}
/**************三角波函數(shù)*******************/
void tri()
{
uchar i=0;
XBYTE[DAC]=i;
do
{
XBYTE[DAC]=i;
i++;
}
while(i<0xff);
do
{
XBYTE[DAC]=i;
i--;
}
while(i>0x0);
}
/**************方波函數(shù)*******************/
void sq()
{
XBYTE[DAC]=0x00;
delay();
XBYTE[DAC]=0xff;
delay();
}
/**************正弦波函數(shù)*******************/
void sin()
{
uchar i;
for(i=0;i<18;i++)XBYTE[DAC]=SINTAB[i]; //第1個(gè)1/4周期
for(i=18;i>0;i--)XBYTE[DAC]=SINTAB[i]; //第2個(gè)1/4周期
for(i=0;i<18;i++)XBYTE[DAC]=~SINTAB[i]; //第3個(gè)1/4周期
for(i=18;i>0;i--)XBYTE[DAC]=~SINTAB[i]; //第4個(gè)1/4周期
}
/**************主函數(shù)*******************/
main()
{
EX0=1;IT0=1;EA=1;
while(1){
if(KST==1)st();
if(KTRI==1)tri();
if(KSQ==1)sq();
if(KSIN==1)sin();
}
}
/**************INT0中斷服務(wù)函數(shù)*******************/
void int0() interrupt 0 using 1
{
if(K1==0) //判斷梯形波是否按下
{
Tbase=0;
KST=1;
}
if(K2==0) //判斷三角波是否按下
{
Tbase=0;
KTRI=1;
}
if(K3==0) //判斷方波是否按下
{
Tbase=0;
KSQ=1;
}
if(K4==0) //判斷正弦波是否按下
{
Tbase=0;
KSIN=1;
}
}