#include <reg52.H> //77E58库函数
#include <absacc.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sfr T2MOD =0xc9;
#define COM XBYTE[0x6000] //8279命令口
#define DAT XBYTE[0x4000] //8279数据口
#define DAA 0x01
#define DBB 0x02
#define DCC 0x04
#define DDD 0x08
#define DEE 0x10
#define DFF 0x20
#define DGG 0x40
unsigned char code table[]=
{DAA+DBB+DCC+DDD+DEE+DFF,//0
DBB+DCC,//1
DAA+DBB+DDD+DEE+DGG,//2
DAA+DBB+DCC+DDD+DGG,//3
DFF+DGG+DBB+DCC,//4
DAA+DFF+DGG+DCC+DDD,//5
DAA+DFF+DEE+DDD+DCC+DGG,//6
DAA+DBB+DCC+DFF,//7
DAA+DBB+DCC+DDD+DEE+DFF+DGG,//8
DAA+DBB+DCC+DDD+DFF+DGG,//9
DAA+DBB+DCC+DEE+DFF+DGG,//A
DCC+DDD+DEE+DFF+DGG,//B
DAA+DDD+DEE+DFF,//C
DBB+DCC+DDD+DEE+DGG,//D
DAA+DDD+DEE+DFF+DGG,//E
DAA+DEE+DFF+DGG,//F
DAA+DBB+DEE+DFF+DGG,//16
0x00,//17
DBB+DCC+DDD,//18
DDD};//19
unsigned char data cont0[16]={0x00,0x02,0x04,0x07,0x09,
0x0b,0x0c,0x0e,0x01,0x03,0x05,0x06,0x0a,16,0x0d,17};//键表
uchar data keynum;//按键数值和临时单元
uchar display_table[8];
uchar disp_statu=8;//=0 设定频率 =1 设定幅值 8 显示频率 2 显示幅值
uchar wave_kind=0;
uchar wave_aa=10;//默认幅值为1V
uchar wave_add;//波形起始地址
unsigned long disp_temp1;
unsigned long wave_ff=100;//默认频率为100
//uchar wave_fw=0;//默认步进为10Hz
void dispz(void);//点亮所有八位数据
void delay_1s(void);
void service_int0(void) interrupt 0
{
unsigned char j;
union uuu
{
unsigned long lword;
unsigned char byte[4];
} set_f;
j=DAT;
keynum=cont0[j];
j=keynum;
if(j==4)//选择方波
{
display_table[0]=0x0f;
display_table[1]=0x0f;
display_table[2]=19;
display_table[3]=17;
display_table[4]=17;
display_table[5]=17;
display_table[6]=17;
display_table[7]=17;
dispz();
wave_kind=1;
wave_ff=100;
disp_statu=0;
}
else if(j==0)//选择正弦波
{
display_table[0]=5;
display_table[1]=0x0f;
display_table[2]=19;
display_table[3]=17;
display_table[4]=17;
display_table[5]=17;
display_table[6]=17;
display_table[7]=17;
dispz();
wave_kind=0;
wave_ff=100;
disp_statu=0;
}
else if(j==9)//选择三角波
{
display_table[0]=0x0a;
display_table[1]=0x0f;
display_table[2]=19;
display_table[3]=17;
display_table[4]=17;
display_table[5]=17;
display_table[6]=17;
display_table[7]=17;
dispz();
wave_kind=2;
wave_ff=100;
disp_statu=0;
}
else if(j==12)//选择锯齿波
{
display_table[0]=18;
display_table[1]=0x0f;
display_table[2]=19;
display_table[3]=17;
display_table[4]=17;
display_table[5]=17;
display_table[6]=17;
display_table[7]=17;
dispz();
wave_ff=100;
wave_kind=3;
disp_statu=0;
}
else if(j==1)//设定频率
{
disp_statu=0;
switch(wave_kind)
{
case 0://显示正弦频率
display_table[1]=0x0f;
display_table[2]=wave_ff/100000;
disp_temp1=wave_ff%100000;
display_table[3]=disp_temp1/10000;
disp_temp1=disp_temp1%10000;
display_table[4]=disp_temp1/1000;
disp_temp1=disp_temp1%1000;
display_table[5]=disp_temp1/100;
disp_temp1=disp_temp1%100;
display_table[6]=disp_temp1/10;
disp_temp1=disp_temp1%10;
display_table[7]=disp_temp1;
dispz();
break;
case 1://显示方波
display_table[1]=0x0f;
display_table[2]=wave_ff/100000;
disp_temp1=wave_ff%100000;
display_table[3]=disp_temp1/10000;
disp_temp1=disp_temp1%10000;
display_table[4]=disp_temp1/1000;
disp_temp1=disp_temp1%1000;
display_table[5]=disp_temp1/100;
disp_temp1=disp_temp1%100;
display_table[6]=disp_temp1/10;
disp_temp1=disp_temp1%10;
display_table[7]=disp_temp1;
dispz();
break;
case 2://显示三角波
display_table[1]=0x0f;
display_table[2]=wave_ff/100000;
disp_temp1=wave_ff%100000;
display_table[3]=disp_temp1/10000;
disp_temp1=disp_temp1%10000;
display_table[4]=disp_temp1/1000;
disp_temp1=disp_temp1%1000;
display_table[5]=disp_temp1/100;
disp_temp1=disp_temp1%100;
display_table[6]=disp_temp1/10;
disp_temp1=disp_temp1%10;
display_table[7]=disp_temp1;
dispz();
break;
case 3://显示锯齿波
display_table[1]=0x0f;
display_table[2]=wave_ff/100000;
disp_temp1=wave_ff%100000;
display_table[3]=disp_temp1/10000;
disp_temp1=disp_temp1%10000;
display_table[4]=disp_temp1/1000;
disp_temp1=disp_temp1%1000;
display_table[5]=disp_temp1/100;
disp_temp1=disp_temp1%100;
display_table[6]=disp_temp1/10;
disp_temp1=disp_temp1%10;
display_table[7]=disp_temp1;
dispz();
break;
}
}
else if(j==2)//增加频率值
{
if(disp_statu==0)//容许调整频率
{
if((wave_ff>=100)&&(wave_ff<1000))
{
wave_ff=wave_ff+10;
}
else if((wave_ff>=1000)&&(wave_ff<999999))
{
wave_ff=wave_ff+1000;
}
display_table[2]=wave_ff/100000;
disp_temp1=wave_ff%100000;
display_table[3]=disp_temp1/10000;
disp_temp1=disp_temp1%10000;
display_table[4]=disp_temp1/1000;
disp_temp1=disp_temp1%1000;
display_table[5]=disp_temp1/100;
disp_temp1=disp_temp1%100;
display_table[6]=disp_temp1/10;
disp_temp1=disp_temp1%10;
display_table[7]=disp_temp1;
dispz();
}
}
else if(j==3)//频率值加10000
{
if(disp_statu==0)//容许调整频率
{
if((wave_ff>=1000)&&(wave_ff<999999))
{
wave_ff=wave_ff+10000;
}
display_table[2]=wave_ff/100000;
disp_temp1=wave_ff%100000;
display_table[3]=disp_temp1/10000;
disp_temp1=disp_temp1%10000;
display_table[4]=disp_temp1/1000;
disp_temp1=disp_temp1%1000;
display_table[5]=disp_temp1/100;
disp_temp1=disp_temp1%100;
display_table[6]=disp_temp1/10;
disp_temp1=disp_temp1%10;
display_table[7]=disp_temp1;
dispz();
}
}
else if(j==5)//显示幅值
{
disp_statu=1;
wave_aa=10;
switch(wave_kind)
{
case 0://显示正弦频率
display_table[0]=5;
display_table[1]=0x0a;
display_table[2]=19;
display_table[3]=17;
display_table[4]=17;
display_table[5]=17;
display_table[6]=1;
display_table[7]=0;
dispz();
break;
case 1://显示方波
display_table[0]=0x0f;
display_table[1]=0x0a;
display_table[2]=19;
display_table[3]=17;
display_table[4]=17;
display_table[5]=17;
display_table[6]=1;
display_table[7]=0;
dispz();
break;
case 2://显示三角波
display_table[0]=0x0a;
display_table[1]=0x0a;
display_table[2]=19;
display_table[3]=17;
display_table[4]=17;
display_table[5]=17;
display_table[6]=1;
display_table[7]=0;
dispz();
break;
case 3://显示锯齿波
display_table[0]=18;
display_table[1]=0x0a;
display_table[2]=19;
display_table[3]=17;
display_table[4]=17;
display_table[5]=17;
display_table[6]=1;
display_table[7]=0;
dispz();
break;
}
}
else if(j==6)//频率值减
{
if(disp_statu==0)//容许调整频率
{
if((wave_ff>100)&&(wave_ff<2000))
{
wave_ff=wave_ff-10;
}
else if((wave_ff>=2000)&&(wave_ff<999999))
{
wave_ff=wave_ff-1000;
}
display_table[2]=w