📄 oscilloscope.c
字号:
lcd_write_sentence(3,1,"0.1V/div");
break;
case 2:
lcd_write_sentence(3,1,"1V/div");
break;
default:
break;
}
}
}
//***************************************************************************************
void Vertical_GainB()
{
Led_On=0;
Vertical_Gain_B_Grade++;
if(Vertical_Gain_B_Grade>2)
Vertical_Gain_B_Grade=0;
else
{
Vertical_Gain_B=Vertical_Gain_B_Grade;
lcd_clear();
lcd_write_sentence(1,0,"当前垂直增益档位");
lcd_write_sentence(2,3,"B 路");
switch(Vertical_Gain_B_Grade)
{
case 0:
lcd_write_sentence(3,1,"0.01V/div");
break;
case 1:
lcd_write_sentence(3,1,"0.1V/div");
break;
case 2:
lcd_write_sentence(3,1,"1V/div");
break;
default:
break;
}
}
}
//***************************************************************************************
void Vertical_MoveA()
{
Shift_Flag=1;
ledcursor=2;
Key_Flag=4;
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=5;
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 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 4:
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 5:
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();
break;
case 0x0A:
Reset();
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 main()
{
unchar j=0;
EX0=1;
EA=1;
lcd_init();
display(0);
lcd_write_passage("南开大学信科院电信系:史永杰,余建伟,岳文赫-- 简易示波器");
//lcd_clear();
//lcd_write_sentence(4,4,"南开大学");
FpgaInitial();
while(1)
{
if(Glint_Flag)
glint();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -