📄 oscilloscope3.c
字号:
#include"global.h"
#include"oscilloscope.h"
#include"LCD/lcd.h"
//included"include.h"
//*****************************************************************************************************
void delay200ms()
{
int i=10000,j=1000;
for(;i>0;i--)
for(;j>0;j--);
}
//***************************************************************************************
void display(unchar dot)
{
unchar i;
LedMode=1;
DisCmd=SCODE; //采用软件译码
LedMode=0;
if(Led_On)
{
for(i=0;i<8;i++) //将distab中的数据送如7218
{
if((i==dot)&(dot!=0))
DisData=ledtab[distab[i]]+0x80; //查表转化并将字型送入7218
else
DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
}
}
}
//***************************************************************************************
void distab_clear()
{
unchar i;
for(i=0;i<8;i++)
{
distab[i]=0x10;
}
}
//***************************************************************************************
void glint() //glintflag为1闪烁,flag为0,不闪烁;
{
unchar i;
while(Glint_Flag&Led_On) //光标位置闪烁
{
LedMode=1;
DisCmd=SCODE; //采用软件译码
LedMode=0;
for(i=0;i<8;i++) //将distab中的数据送如7218
{
if(i==LED_CURSOR)
DisData=0x80; //查表转化并将字型送入7218
else
DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
}
delay200ms();
LedMode=1;
DisCmd=SCODE;
display(0);
delay200ms();
}
}
//***************************************************************************************
/*初始化:A0F3:1, A0F4:2, A0F5:00, A0F6:0, A0F7:2, A0F8:00, A0F9:0,
A0FA:00, A0FB:0, A0FC:40, A0FD:00;初始挡位, A0FE:00 */
void FpgaInitial() //初始化程序
{
Select_AB=1;
Vertical_Gain_A_Grade=7;
Vertical_Move_A=0;
//Select_A=0;
Vertical_Gain_B_Grade=7;
Vertical_Move_B=0;
Single_Auto_Select=0;
Trigger_Voltage=127;
Lock_Wave=0;
X_Freq_High=0x03;
X_Freq_Low=0xE8;
X_Move=0;
Frequence_Start=0;
}
//***************************************************************************************
void Set_X_Freq() //设置X轴扫描频率,Key_Flag:1
{
Shift_Flag=1;
//unint Freq,temp;
Led_On=1;
Key_Flag=1;
LED_CURSOR=4;
Glint_Flag=1;
distab[0]=0x00;
distab[1]=0x00;
distab[2]=0x00;
distab[3]=0x00;
distab[4]=0x00;
distab[5]=0x10;
distab[6]=0x10;
distab[7]=0x01;
display(0);
lcd_clear();
lcd_write_sentence(1,0,"请输X 轴扫描频率");
lcd_write_sentence(2,1,"频率范围:");
lcd_write_sentence(3,1,"0-100KHZ");
}
//***************************************************************************************
void Set_X_Pos() //设置波形在X轴上的移位
{
Shift_Flag=1;
lcd_clear();
Key_Flag=2;
LED_CURSOR=2;
Glint_Flag=1;
Led_On=1;
distab[0]=0x00;
distab[1]=0x00;
distab[2]=0x00;
distab[3]=0x10;
distab[4]=0x10;
distab[5]=0x10;
distab[6]=0x10;
distab[7]=0x02;
display(0);
lcd_write_sentence(1,0,"请输入水平移相");
lcd_write_sentence(2,1,"位置范围:");
lcd_write_sentence(3,2,"0-200");
}
void Set_Trigger_Voltage() //设置触发电平
{
Shift_Flag=1;
lcd_clear();
Key_Flag=3;
LED_CURSOR=2;
Led_On=1;
Glint_Flag=1;
distab[0]=0x00;
distab[1]=0x00;
distab[2]=0x00;
distab[3]=0x10;
distab[4]=0x10;
distab[5]=0x10;
distab[6]=0x10;
distab[7]=0x03;
//display(2);
lcd_write_sentence(1,0,"请输入触发电平");
lcd_write_sentence(2,1,"电平范围:");
lcd_write_sentence(3,2,"0-5V");
}
//***************************************************************************************
void Lock_Current_Wave() //锁存当前波形
{
//Special_Down_Flag;
Lock_Wave_Flag=!Lock_Wave_Flag;
Led_On=0;
//Lock_Wave=Lock_Wave_Flag;
lcd_clear();
if(Lock_Wave_Flag)
{
lcd_write_sentence(2,1,"波形锁存成功!");
Lock_Wave=1;
}
else
{
lcd_write_sentence(2,1,"波形解除锁定!");
Lock_Wave=0;
}
}
//***************************************************************************************
void Single_Select() //单步,连续选择
{
//Special_Down_Flag
lcd_clear();
Led_On=0;
Single_Flag=!Single_Flag;
//Single_Auto_Select=Single_Flag;
lcd_clear();
lcd_write_sentence(2,1,"当前触发状态:");
if(Single_Flag)
{
lcd_write_sentence(3,2,"单步");
TR0=0;
Single_Auto_Select=1;
Single_Auto_Select=0;
}
else
{
lcd_write_sentence(3,2,"连续");
TR0=1;
}
}
//***************************************************************************************
void Input_Select() //AD114输入选择
{
unchar temp1,temp2;
temp1=AD_Channel%3;
temp2=PB8155;
temp2=temp2&0xFC;
switch(temp1)
{
case 0:
//AD_Controll=0;
PB8155=temp2;
lcd_clear();
lcd_write_sentence(2,1,"A 路选通");
lcd_write_sentence(3,1,"B 路关闭");
Select_AB=1;
break;
case 1:
//AD_Controll=0;
PB8155=temp2+2;
Select_AB=2;
lcd_clear();
lcd_write_sentence(2,1,"A 路关闭");
lcd_write_sentence(3,1,"B 路选通");
break;
case 2:
//AD_Controll=1;
lcd_clear();
PB8155=temp2+1;
lcd_write_sentence(2,1,"A 路选通");
lcd_write_sentence(3,1,"B 路选通");
Select_AB=3;
break;
}
AD_Channel++;
}
//***************************************************************************************
void Vertical_GainA() //垂直增益选择(共8档,A,B路相同)
{
unchar temp;
Led_On=1;
Key_Flag=4;
if(Vertical_Gain_A_Grade<7)
{
Vertical_Gain_A_Grade++;
}
else
Vertical_Gain_A_Grade=0;
distab_clear();
distab[0]=Vertical_Gain_A_Grade;
display(0);
temp=PB8155;
temp=temp&0x03;
PB8155=temp+_crol_(Vertical_Gain_A_Grade,5);
//if(Vertical_Gain_A_Grade>2)
//Vertical_Gain_A_Grade=0;
//else
//{
// Vertical_Gain_B=Vertical_Gain_B_Grade;
lcd_clear();
lcd_write_sentence(1,0,"当前垂直增益档位");
lcd_write_sentence(2,2,"(A,B)");
//lcd_write_sentence(3,1,"0.01V/div");
//lcd_write_command(0x8A);
//lcd_write_data(0x30+Vertical_Gain_B_Grade);
switch(Vertical_Gain_A_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_GainB()
{
unchar temp;
Led_On=1;
Key_Flag=5;
if(Vertical_Gain_B_Grade<7)
{
Vertical_Gain_B_Grade++;
}
else
Vertical_Gain_B_Grade=0;
distab_clear();
distab[0]=Vertical_Gain_B_Grade;
display(0);
temp=PB8155;
temp=temp&0x03;
PB8155=temp+_crol_(Vertical_Gain_B_Grade,5);
//if(Vertical_Gain_A_Grade>2)
//Vertical_Gain_A_Grade=0;
//else
//{
// 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() //波形在Y轴方向平移
{
Shift_Flag=1;
LED_CURSOR=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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -