📄 jzht.c
字号:
#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]=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==10) //确认键
{
if(wave_kind==0)//设定正弦波
{
wave_add=0;
wave_add=wave_add+wave_aa;
if(wave_add&&0x01)
{
INT1=1;
}
else
{
INT1=0;
}
P1=wave_add;//选择地址
}
if(wave_kind==1)//设定方波
{
wave_add=0x40;
wave_add=wave_add+wave_aa;
if(wave_add&0x01)
{
INT1=1;
}
else
{
INT1=0;
}
P1=wave_add;//选择地址
}
if(wave_kind==2)//设定三角波4
{
wave_add=0x80;
wave_add=wave_add+wave_aa;
if(wave_add&0x01)
{
INT1=1;
}
else
{
INT1=0;
}
P1=wave_add;//选择地址
}
if(wave_kind==3)//设定锯齿波600~790h
{
wave_add=0xc0;
wave_add=wave_add+wave_aa;
if(wave_add&0x01)
{
INT1=1;
}
else
{
INT1=0;
}
P1=wave_add;//选择地址
}
//插入频率设定程序
//根据wave_ff频率数值,计算定时器2的装入值
set_f.lword=1500000/wave_ff;
set_f.lword=65536-set_f.lword;
TR2=0;
RCAP2H=set_f.byte[2];
RCAP2L=set_f.byte[3];
TR2=1;
disp_statu=8;
}
else if(j==11)//幅值加0.1V
{
if(disp_statu==1)//容许调整幅值
{
if((wave_aa>=10)&&(wave_aa<50))
{
wave_aa=wave_aa+1;
}
display_table[6]=wave_aa/10;
display_table[7]=wave_aa%10;
dispz();
}
}
else if(j==14)//幅值减0.1V
{
if(disp_statu==1)//容许调整幅值
{
if((wave_aa>10)&&(wave_aa<=50))
{
wave_aa=wave_aa-1;
}
display_table[6]=wave_aa/10;
display_table[7]=wave_aa%10;
dispz();
}
}
else
{
}
}
void delay_1s(void) //1秒延时子程
{
unsigned int idata i,j;
for(i=0;i<150;i++)
{
for(j=0;j<900;j++)
{
}
}
}
void dispz(void)//显示函数
{
COM=0x87;
DAT=table[display_table[7]];
COM=0x86;
DAT=table[display_table[6]];
COM=0x85;
DAT=table[display_table[5]];
COM=0x84;
DAT=table[display_table[4]];
COM=0x83;
DAT=table[display_table[3]];
COM=0x82;
DAT=table[display_table[2]]|0x08;
COM=0x81;
DAT=table[display_table[1]];
COM=0x80;
DAT=table[display_table[0]];
}
void main(void)
{
unsigned int temp;
for(temp=0;temp<20000;temp++)
{}
COM=0x00;
COM=0x3f;//键盘显示方式,时钟分频
EX0=1;
IT0=1;
T2CON=0;
T2MOD=2;
TR2=0;
RCAP2H=0xff;
RCAP2L=0x00;
TR2=1;
EA=1;
display_table[0]=8;
display_table[1]=8;
display_table[2]=8;
display_table[3]=8;
display_table[4]=8;
display_table[5]=8;
display_table[6]=8;
display_table[7]=8;
dispz();
wave_kind=0;
wave_ff=100;
wave_aa=10;
disp_statu=8;
for(;;)
{
if(disp_statu==8)//显示频率
{
if(wave_kind==0)
{
display_table[0]=5;
}
else if(wave_kind==1)
{
display_table[0]=0x0f;
}
else if(wave_kind==2)
{
display_table[0]=0x0a;
}
else if(wave_kind==3)
{
display_table[0]=18;
}
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();
delay_1s();
if(disp_statu==8)
{disp_statu=2;}
}
else if(disp_statu==2)//显示幅值
{
if(wave_kind==0)
{
display_table[0]=5;
}
else if(wave_kind==1)
{
display_table[0]=0x0f;
}
else if(wave_kind==2)
{
display_table[0]=0x0a;
}
else if(wave_kind==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]=wave_aa/10;
display_table[7]=wave_aa%10;
dispz();
delay_1s();
if(disp_statu==2)
{disp_statu=8;}
}
else
{
delay_1s();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -