当前位置:首页 > 技术学院 > 热搜器件
[导读]#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,

#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; //阶梯波标志

sbit KTRI=Tbase^1; //三角波标志

sbit KSQ=Tbase^2; //方波标志

sbit KSIN=Tbase^3; //正弦波标志

sbit K1=P1^0; //K1键

sbit K2=P1^2; //K2键

sbit K3=P1^4; //K3键

sbit K4=P1^6; //K4键

/**************延时函数*******************/

void delay()

{

uchar i;

for(i=0;i<0xff;i++);

}

/**************阶梯波函数*******************/

void st()

{

uchar i=0;

while(KST)

{

XBYTE[DAC]=i++; //启动DAC

}

}

/**************三角波函数*******************/

void tri()

{

uchar i=0;

XBYTE[DAC]=i;

do

{

XBYTE[DAC]=i;

i++;

}

while(i<0xff);

do

{

XBYTE[DAC]=i;

i--;

}

while(i>0x0);

}

/**************方波函数*******************/

void sq()

{

XBYTE[DAC]=0x00;

delay();

XBYTE[DAC]=0xff;

delay();

}

/**************正弦波函数*******************/

void sin()

{

uchar i;

for(i=0;i<18;i++)XBYTE[DAC]=SINTAB[i]; //第1个1/4周期

for(i=18;i>0;i--)XBYTE[DAC]=SINTAB[i]; //第2个1/4周期

for(i=0;i<18;i++)XBYTE[DAC]=~SINTAB[i]; //第3个1/4周期

for(i=18;i>0;i--)XBYTE[DAC]=~SINTAB[i]; //第4个1/4周期

}

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

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中断服务函数*******************/

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;

}

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭