⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oscilloscope3.c

📁 单片机通过DA对信号采样
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -