📄 oscilloscope2.c
字号:
//{
// Vertical_Gain_B=Vertical_Gain_B_Grade;
lcd_clear();
lcd_write_sentence(1,0,"当前垂直增益档位");
lcd_write_sentence(2,2,"B 路");
//lcd_write_sentence(3,1,"0.01V/div");
//lcd_write_command(0x8A);
//lcd_write_data(0x30+Vertical_Gain_B_Grade);
switch(Vertical_Gain_B_Grade)
{
case 0:
lcd_write_sentence(3,1,"10mV/div");
break;
case 1:
lcd_write_sentence(3,1,"20mV/div");
break;
case 2:
lcd_write_sentence(3,1,"50mv/div");
break;
case 3:
lcd_write_sentence(3,1,"0.1V/div");
break;
case 4:
lcd_write_sentence(3,1,"0.2V/div");
break;
case 5:
lcd_write_sentence(3,1,"0.5v/div");
break;
case 6:
lcd_write_sentence(3,1,"1V/div");
break;
case 7:
lcd_write_sentence(3,1,"2v/div");
break;
default:
break;
}
}
//***************************************************************************************
void Vertical_MoveA()
{
Shift_Flag=1;
ledcursor=2;
Key_Flag=6;
Led_On=1;
Glint_Flag=1;
lcd_clear();
lcd_write_sentence(1,0,"按加减键上下移动");
lcd_write_sentence(2,1,"A 路波形");
distab[0]=0x00;
distab[1]=0x00;
distab[2]=0x00;
distab[3]=0x10;
distab[4]=0x10;
distab[5]=0x10;
distab[6]=0x10;
distab[7]=0x04;
}
//***************************************************************************************
void Vertical_MoveB()
{
Shift_Flag=1;
ledcursor=2;
Key_Flag=7;
lcd_clear();
Led_On=1;
Glint_Flag=1;
lcd_write_sentence(1,0,"按加减键上下移动");
lcd_write_sentence(2,1,"B 路波形");
distab[0]=0x00;
distab[1]=0x00;
distab[2]=0x00;
distab[3]=0x10;
distab[4]=0x10;
distab[5]=0x10;
distab[6]=0x10;
distab[7]=0x05;
}
//***************************************************************************************
void Frequence_Measure() //测量当前波形的频率和波形
{
long temph,templ;
unint temp;
//Frequence_Measure_Flag=!Frequence_Measure_Flag;
//while(Frequence_Measure_Flag)
//{
unint i=5000;
Frequence_Start=1;
Frequence_Start=0;
while(--i);
temph=Wave_Frequence_High;
templ=Wave_Frequence_Low;
//templ=(templ+temph<<8)*3052/100;
//temph=temph<<8;
//temp=(templ+temph)*61;
//Wave_Frequence=temp>>1;
Wave_Frequence=(templ+temph*0x100)*2;
//Wave_Frequence=10000000/(templ+temph*0x100);
lcd_clear();
lcd_write_sentence(1,0,"当前频率: ");
//lcd_write_sentence(2,1,"A 路波形");
lcd_write_command(0x91);
temp=Wave_Frequence/10000;
lcd_write_data(0x30+temp);
Wave_Frequence%=10000;
temp=Wave_Frequence/1000;
lcd_write_data(0x30+temp);
Wave_Frequence%=1000;
temp=Wave_Frequence/100;
lcd_write_data(0x30+temp);
Wave_Frequence%=100;
temp=Wave_Frequence/10;
lcd_write_data(0x30+temp);
Wave_Frequence%=10;
temp=Wave_Frequence;
lcd_write_data(0x30+temp);
//Wave_Frequence%=10000;
lcd_write_sentence(2,4," HZ");
//}
//lcd_write_sentence(2,5,"暂停");
//以下为测量幅度
temp=Wave_Amplitude_Add;
Wave_Amplitude=temp;
lcd_write_sentence(3,0,"当前幅度: ");
lcd_write_command(0x99);
temp=Wave_Amplitude/100;
lcd_write_data(0x30+temp);
Wave_Amplitude%=100;
temp=Wave_Amplitude/10;
lcd_write_data(0x30+temp);
Wave_Amplitude%=10;
temp=Wave_Amplitude;
lcd_write_data(0x30+temp);
//Wave_Frequence%=10000;
lcd_write_sentence(4,4," V");
}
//***************************************************************************************
void enter_down()
{
unint temp;
Enter=!Enter;
//Led_On=0;
Glint_Flag=!Glint_Flag;
Shift_Flag=0;
switch(Key_Flag)
{
case 1:
X_Frequence=distab[4]*10000+distab[3]*1000+distab[2]*100+distab[1]*10+distab[0];
//Frequence*=5;
temp=_iror_(X_Frequence,8);
X_Freq_High=temp;
temp=X_Frequence%256;
X_Freq_Low=temp;
Enter=0;
lcd_clear();
lcd_write_sentence(1,0,"频率设置成功!");
lcd_write_sentence(2,1,"当前频率:");
lcd_write_command(0x89);
lcd_write_data(0x30+distab[4]);
lcd_write_data(0x30+distab[3]);
lcd_write_data(0x30+distab[2]);
lcd_write_data(0x30+distab[1]);
lcd_write_data(0x30+distab[0]);
lcd_write_sentence(3,4,"HZ");
break;
case 2:
Enter=0;
lcd_clear();
X_Pos=distab[2]*100+distab[1]*10+distab[0];
if(X_Pos>200)
{
X_Pos=0;
lcd_write_sentence(2,0,"输入范围太大!");
}
else
{
X_Move=X_Pos;
lcd_write_sentence(1,0,"水平移相成功");
lcd_write_sentence(2,1,"当前水平偏移:");
lcd_write_command(0x8a);
lcd_write_data(0x30+distab[2]);
lcd_write_data(0x30+distab[1]);
lcd_write_data(0x30+distab[0]);
}
break;
case 3:
Enter=0;
lcd_clear();
Trigger_V=distab[2]*100+distab[1]*10+distab[0];
if(Trigger_V>500)
{
lcd_write_sentence(1,0,"电平输入太大!");
lcd_write_sentence(2,0,"请重新输入!");
Trigger_V=0;
}
else
{
Trigger_Voltage=Trigger_V/2;
lcd_write_sentence(1,0,"触发电平设置成功");
lcd_write_sentence(2,1,"当前触发电平:");
lcd_write_command(0x89);
lcd_write_data(0x30+distab[2]);
lcd_write_sentence(3,2,".");
lcd_write_data(0x30+distab[1]);
lcd_write_data(0x30+distab[0]);
lcd_write_sentence(3,4,"V");
}
break;
case 6:
Vertical_Pos_A=distab[2]*100+distab[1]*10+distab[0];
Vertical_Move_A=Vertical_Pos_A;
lcd_clear();
lcd_write_sentence(1,1,"当前垂直偏移A:");
lcd_write_command(0x91);
lcd_write_data(0x30+distab[2]);
lcd_write_data(0x30+distab[1]);
lcd_write_data(0x30+distab[0]);
break;
case 7:
Vertical_Pos_B=distab[2]*100+distab[1]*10+distab[0];
Vertical_Move_B=Vertical_Pos_B;
lcd_clear();
lcd_write_sentence(1,1,"当前垂直偏移B:");
lcd_write_command(0x91);
lcd_write_data(0x30+distab[2]);
lcd_write_data(0x30+distab[1]);
lcd_write_data(0x30+distab[0]);
break;
default:
break;
}
}
//***************************************************************************************
void keyprg(unchar key) //键盘键值执行的程序
{
//unchar i;
if((key<=9)&Shift_Flag)
{
distab[ledcursor]=keynum; //键值送入distab最低位保存
if(ledcursor>0) //光标移位
ledcursor--;
else
ledcursor=0;
display(0); //显示键值
}
else
{
switch(key)
{
case 0x00:
Set_X_Freq();
break;
case 0x01:
Set_X_Pos();
break;
case 0x02:
Set_Trigger_Voltage();
break;
case 0x03:
Lock_Current_Wave();
break;
case 0x04:
Single_Select();
break;
case 0x05:
Vertical_GainA();
break;
case 0x06:
Vertical_GainB();
break;
case 0x07:
Vertical_MoveA();
break;
case 0x08:
Vertical_MoveB();
break;
case 0x09:
//Select_AB_Channel();
Input_Select();
break;
case 0x0A:
//Reset();
//Input_Select();
Frequence_Measure();
break;
case 0x0B: //功能键F2
Shift_Flag=!Shift_Flag;
break;
case 0x0C: //KeyprgBack();
if(ledcursor<7) //光标移位
ledcursor++;
else
ledcursor=0;
display(0); //显示键值
break;
case 0x0D: //加
if(distab[ledcursor]<0x09)
distab[ledcursor]++;
else
distab[ledcursor]=0;
display(0); //显示键值
break;
case 0x0E: //减
if(distab[ledcursor]>0)
distab[ledcursor]--;
else
distab[ledcursor]=9;
display(0); //显示键值
break;
case 0x0F:
enter_down();
break;
default:
break;
}
}
}
//**************************************************************************************
void intt0() interrupt 0
{
//EX0=0; //关键盘中断,禁止相应其他按键
keynum=P1; //从p1口读入键盘值
keynum=keynum&0x0f; //取低四位;
keyprg(keynum);
//if(enter) //不是enter键,屏蔽中断
//EX0=1;
}
//**************************************************************************************
void Initial8155()
{
CMD8155=0x0f; //PA,PB基本输出方式,PC作为控制信号
}
//**************************************************************************************
void clock0_initial()
{
TMOD=0x01;
TF0=0;
TH0=00;
TL0=00;
TR0=0;
}
void clock0_int() interrupt 1
{
TH0=00;
TL0=00;
tempflag=!tempflag;
if(!Single_Flag)
Single_Auto_Select=tempflag;
//PA8155=tempflag;
//PB8155=tempflag;
}
//**************************************************************************************
void main()
{
//uint i;
//while(i--);
EX0=1;
ET0=1;
EA=1;
lcd_init();
Initial8155();
display(0);
lcd_write_passage("南开大学信科院电信系:史永杰,余建伟,岳文赫-- 简易示波器");
//lcd_clear();
//lcd_write_sentence(4,4,"南开大学");
FpgaInitial();
clock0_initial();
while(1)
{
if(Glint_Flag)
glint();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -