#include<reg51.h>
#include "1602.h"
#include<absacc.h>
#define DAC0832 XBYTE[0xfffe]
#define DAC0832R XBYTE[0xfffd]
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
sbit P33=P3^3;
uchar table[]="BOXINGFASHENGQI";
uchar table1[]=" sin ";
uchar table2[]=" tran ";
uchar table3[]=" square ";
uchar regi,freq=100;
uchar keyvalue;
uchar flag;//波形输出标志位
uchar code tab1[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};
uchar code tab3[2]={0,1};
void delay2(uint t) /* 延时2us函数 */
{
uint i,j;
for(i=t;i;i--)
for(j=10;j;j--);
}
void delay(uint t) /*延迟函数*/
{while(t--);}
void square() /* 方波发生函数 */
{
uint i;
while(flag)
{
DAC0832R=regi;
for(i=0;i<=63;i++) //fuzhi=63
{
DAC0832=0x00;
delay2(freq);
}
for(i=0;i<=63;i++)
{
DAC0832=0xff;
delay2(freq);
}
}
}
void sin( ) /*正弦波*/
{
unsigned int i;
while(flag)
{
DAC0832R=regi;
if(i==63*2)
i=0;
DAC0832=tab1[i++];
delay2(freq);
}
}
void tran(void) /*三角波*/
{
uchar i;
while(flag)
{
DAC0832R=regi;
for(i=0;i<=63;i++) //fuzhi=63
{
delay2(freq);
DAC0832=i;
}
for(i=63;i>=0;i--)
{
delay2(freq);
DAC0832=i;
}
if(flag==0)
{
break;
}
}
}
void main() /*主函数*/
{
EA=1;
EX0=1;//外部中断0打开
IT0=0;//低电平出发
regi=102;
init_lcd();
Print_String(0,1,table);
while(1)
{
DAC0832R=regi;
if(P1!=0)
{
//delay(3);
if(P11==0)
{
keyvalue=1;
flag=1;
Print_String(2,1,table1);//sin
}
if(P12==0)
{
keyvalue=2;
flag=1;
Print_String(2,1,table2);//tran
}
if(P13==0)
{
keyvalue=3;
flag=1;
Print_String(2,1,table3);//square
}
}
if(keyvalue)
{
if(keyvalue==1)
sin();
if(keyvalue==2)
tran();
if(keyvalue==3)
square();
}
}
}
void INT_0(void)interrupt 0 using 0
{
EX0=0;//外部中断0关闭
keyvalue=0;
if(P14==0)
{
freq=freq-10;//频率增加
}
if(P15==0)
{
freq=freq+10;
}
if(P16==0)
{
regi=regi+25.5;
}
if(P17==0)
{
regi=regi-25.5;
}
EX0=1;//外部中断0打开
}
评论0