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

📄 main.c

📁 NIOS II 的几个源代码
💻 C
字号:
#include <stdio.h>
#include <sys/unistd.h>
#include <math.h>
#include <string.h>

#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "mydata.h"
#include "draw.h"
#include "main.h"
#include "math.h"

/*************************************************/
alt_u8 Logo_Txt[] = {"-==- 简 易 频 谱 分 析 仪 -==-"};
alt_u8 WaveGrid[GD_H][GD_W];    //频谱仪参考格子
alt_u16 OldWaveDat[WAVE_DOTS];    
alt_u16 WaveDatBuff[WAVE_DOTS]; //波形缓冲区
alt_u32 Xr[WAVE_DOTS],Xi[WAVE_DOTS];
alt_u16 SampleTable[SAMPLE_RATES] = {48828,24414,9766,   
									                   4883, 2441, 977,
									                   488,  244,  98  };

alt_u8 SampleRateTxt[] = {"分辨率:"};
alt_u8 SampleContext[SAMPLE_RATES][10] = {"1Hz/点  ", "2Hz/点  ", "5Hz/点  ",
                                          "10Hz/点 ", "20Hz/点 ", "50Hz/点 ", 
                                          "100Hz/点", "200Hz/点", "500Hz/点"};
alt_u16 Frequence[SAMPLE_RATES] = {1, 2, 5, 10, 20, 50, 100, 200, 500};
alt_u8 ButtonTxt[] = {"按键操作说明"};
alt_u8 Operate_Txt[][15] = { "S1->增加分辨率", "S5->减小分辨率"};                              
alt_u8 Param_Txt[] = { "频率:"};

alt_u8 WaveTxt[][75] = {      "    如果采用实验箱上的模拟信号源,请将高速ADC&DAC模块的跳线",
                              "放至“内”端;如果要使用外部信号源,则放至“外”段,然后从",
                              "ADC_IN输入信号,输入信号的峰峰值度不能超过2.5伏。"};
/*************************************************/
alt_u8 myButton;
alt_u8 Sample_Index;
alt_u8 KeyPressedFlag;
alt_u8 CalCount;
int main(void)
{
	alt_u16 i;
	printf("Exp24 - Simple Spectrum Analyser!\n");

	DrawFillRect(0, 0, 640, 480, COLOR_BLACK);
  DrawFillRect(WAVE_X - 16, WAVE_Y - 16, 432, 8, COLOR_YELLOW);
  DrawFillRect(WAVE_X - 16, WAVE_Y + 328, 432, 8, COLOR_YELLOW);
  DrawFillRect(WAVE_X - 17, WAVE_Y - 16, 8, 352, COLOR_YELLOW);
  DrawFillRect(WAVE_X + 408, WAVE_Y - 8, 8, 336, COLOR_YELLOW);
  Draw_Grid(WAVE_X, WAVE_Y);   //初始化并显示示波器参考格子

  //显示操作说明
  DrawFillRect(HELP_X - 8, HELP_Y - 8, 144, 90, COLOR_PURPLE);
  DisplayAnyString(ButtonTxt, HELP_X + 2, HELP_Y, COLOR_PURPLE, COLOR_RED);

  for(i=0; i<2; i++)
    DisplayAnyString(Operate_Txt[i], HELP_X + 1, HELP_Y + i*25 + 32, COLOR_PURPLE, COLOR_CYAN);

  //显示标题和Logo图标
  DisplayAnyString(Logo_Txt, 192, 16, COLOR_BLACK, COLOR_WHITE);
  DrawFillRect(LOGO_X - 8, LOGO_Y - 8, 144, 88, COLOR_PURPLE);
  Display_Pic(LOGO_X, LOGO_Y, 128, 72, mLogo, COLOR_RED);

  //显示波形参数边框
  DrawFillRect(PARAM_X - 8, PARAM_Y - 8, 144, 88, COLOR_PURPLE);
  DisplayAnyString(Param_Txt, PARAM_X + 2, PARAM_Y + 8, COLOR_PURPLE, COLOR_YELLOW);
  
  //初始化频谱仪频谱分辨率
  Sample_Index = 3;
  DisplayAnyString(SampleRateTxt, TV_X, TV_Y, COLOR_PURPLE, COLOR_YELLOW);
  IOWR_ALTERA_AVALON_PIO_DATA(SAMPLE_RATE_BASE, SampleTable[Sample_Index]);
  //其它说明
  for(i=0; i<3; i++)
    DisplayAnyString(WaveTxt[i], OTHER_X, OTHER_Y + i * 17, COLOR_BLACK, COLOR_CYAN);

   for(i=0; i<GD_W; i++)
    OldWaveDat[i] = 0x80;
 
  Start_DFT_Once();   //启动一次外部数据采集和DFT变换
  while(1)
	{
    if(IORD_ALTERA_AVALON_PIO_DATA(DFT_END_BASE))
    {
      Start_DFT_Once();
      DFT();
      Display_Wave(WAVE_X, WAVE_Y, OldWaveDat, COLOR_BLACK);
      Draw_Grid(WAVE_X, WAVE_Y);   //初始化并显示示波器参考格子
   	  Display_Wave(WAVE_X, WAVE_Y, WaveDatBuff, COLOR_RED);
    }
    IOWR_ALTERA_AVALON_PIO_DATA(IRAM_ADDR_BASE, 0);
    //计算波形参数
    CalCount = (CalCount + 1) % 10;
    if(CalCount == 0)
    {
      //----频率值
      Cal_Disp_Freq(WaveDatBuff);
    } 
    //按键处理
    myButton = IORD_ALTERA_AVALON_PIO_DATA(EXT_BUTTON_BASE) & 0x03;
    if(myButton != 0x03)
    {
      if(!KeyPressedFlag)
      {
        KeyPressedFlag = true;
        switch(myButton)
        {
          case  0x02: Sample_Index = (Sample_Index + SAMPLE_RATES - 1) % SAMPLE_RATES;
                      break;
          case  0x01: Sample_Index = (Sample_Index + 1) % SAMPLE_RATES;
                      break;
          default:    break; 
        }
        IOWR_ALTERA_AVALON_PIO_DATA(SAMPLE_RATE_BASE, SampleTable[Sample_Index]);
      }
    }
    else
      KeyPressedFlag = false;
    //显示当前时间轴信息
    DisplayAnyString(SampleContext[Sample_Index], TV_X + 56, TV_Y, COLOR_PURPLE, COLOR_YELLOW);
    usleep(20000);
	}
	
	return 0;
}

/*******************************************************/
void Display_Pic(alt_u16 x, alt_u8 y, alt_16 w, alt_u16 h, alt_u8 *bmp, alt_u16 color) //显示图片
{
  alt_u16 i, j;
  alt_u8 dot;
  for(j=0; j<h; j++)
  {
      for(i=0; i<w; i++)
      {
        if(i%8 == 0)
          dot = *bmp++;
        if(dot & 0x80)
           Draw_Pixel(x+i, y+j, color);
        dot <<= 1;
      }
  }
}

/*******************************************************/
void Draw_Grid(alt_u16 xp, alt_u16 yp)   //初始化并显示示波器参考格子
{
  alt_u16 i, j;
  alt_u16 grid_color = COLOR_GREEN;
  //初始化格子:320*400
  //边框
  DrawLine(WAVE_X, WAVE_Y, WAVE_X+GD_W, WAVE_Y, grid_color);
  DrawLine(WAVE_X, WAVE_Y+GD_H, WAVE_X+GD_W, WAVE_Y+GD_H, grid_color);
  DrawLine(WAVE_X, WAVE_Y, WAVE_X, WAVE_Y+GD_H, grid_color);
  DrawLine(WAVE_X+GD_W, WAVE_Y, WAVE_X+GD_W, WAVE_Y+GD_H, grid_color);
  //内部虚线
  for(j=0; j<GD_H; j+=40)
    for(i=0; i<GD_W; i+=8)
      Draw_Pixel(xp+i, yp+j, grid_color);
  //内部虚线
  for(j=0; j<GD_H; j+=8)
    for(i=0; i<GD_W; i+=40)
      Draw_Pixel(xp+i, yp+j, grid_color);
  //加粗中心线
  for(i=0; i<GD_W; i+=8)
  {
    Draw_Pixel(xp+i, yp+GD_H/2-1, grid_color);
    Draw_Pixel(xp+i, yp+GD_H/2+1, grid_color);
  }
  for(i=0; i<GD_W; i+=4)
      Draw_Pixel(xp+i, yp+GD_H/2, grid_color);
  for(i=0; i<GD_H; i+=8)
  {
    Draw_Pixel(xp+GD_W/2-1, yp+i, grid_color);
    Draw_Pixel(xp+GD_W/2+1, yp+i, grid_color);
  }
  for(i=0; i<GD_H; i+=4)
      Draw_Pixel(xp+GD_W/2, yp+i, grid_color);
}

void Start_DFT_Once(void)   //启动一次DFT变换
{
  IOWR_ALTERA_AVALON_PIO_DATA(IRAM_ADDR_BASE, 0x3ff);
  IOWR_ALTERA_AVALON_PIO_DATA(IRAM_ADDR_BASE, 0);
}
		
void DFT(void)    //读取数据并计算幅值
{
  alt_u32 i;
  alt_u32 xr_temp,xi_temp,temp;
  
  for(i=0; i<WAVE_DOTS; i++)
  {
    IOWR_ALTERA_AVALON_PIO_DATA(IRAM_ADDR_BASE, i);
    Xr[i] = (IORD_ALTERA_AVALON_PIO_DATA(IRAM_DAT_BASE)>>15);
    IOWR_ALTERA_AVALON_PIO_DATA(IRAM_ADDR_BASE, i + 0x200);
    Xi[i] = (IORD_ALTERA_AVALON_PIO_DATA(IRAM_DAT_BASE)>>15);
    xr_temp = Xr[i]*Xr[i];
    xi_temp = Xi[i]*Xi[i];
    temp = sqrt(xr_temp + xi_temp);
    WaveDatBuff[i] = temp;
  }
}

void Display_Wave(alt_u16 xp, alt_u16 yp, alt_u16 *wave, alt_u16 color)  //显示波形
{
   alt_u16 i,k;
   alt_u16 m, n;
   OldWaveDat[0] = *wave;
   m = *wave++ + 2;
   for(i=1; i<GD_W; i++)
   {
      OldWaveDat[i] = *wave;
      n = *wave++ + 2;
      for(k=m;k<=n;k++)
        Draw_Pixel(xp+i, yp+GD_H-k, color);
      for(k=n;k<=m;k++)
        Draw_Pixel(xp+i, yp+GD_H-k, color);                    
      m = n;
   }   
}

void FillBlank(alt_u8 *buff)
{
  alt_u8 i=0;
  while(buff[i] <= '0')
  {
    buff[i++] = ' ';
    if(buff[i] > '0')
      break;
  }
}

//----频率值
void Cal_Disp_Freq(alt_u16 *buff)
{
  alt_u16 i;
  alt_u32 freq_rst;
  alt_u16 temp;
  alt_u8 freq[8] = {"    KHz"};
  alt_u16 max_value = 0;
  alt_u16 max_pos;
  for(i=WAVE_DOTS; i>0; i--)
  {
    if(buff[i-1] > max_value)
    {
        max_pos = i - 1;
        max_value = buff[i-1];
    }
  }
  freq_rst = max_pos * Frequence[Sample_Index];
  if(freq_rst < 10000)  //<10KHz
  {
    temp = 1000;
    for(i=0; i<4; i++)
    {
      freq[i+1] = freq_rst/temp + '0';
      freq_rst %= temp;
      temp /= 10;
    }
  }
  else if(freq_rst < 100000)  //<100KHz)
  {
    freq_rst /= 100;
    temp = 100;
    for(i=0; i<3; i++)
    {
      freq[i] = freq_rst/temp + '0';
      freq_rst %= temp;
      temp /= 10;
      }
      freq[3] = freq[2];
      freq[2] = '.';
    }
    else    //>=100KHz
    {
      freq_rst /= 1000;
      temp = 100;
      for(i=0; i<3; i++)
      {
        freq[i+1] = freq_rst/temp + '0';
        freq_rst %= temp;
        temp /= 10;
      }
    }
    FillBlank(freq);
    DisplayAnyString(freq, PARAM_X + 48, PARAM_Y + 8, COLOR_PURPLE, COLOR_YELLOW);
}

/************************************************************/
alt_u8 mLogo[128*72] = {
/*--  宽度x高度=128x72  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF0,0x00,0x00,0x00,0x3F,0xFE,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xC0,0x00,0x07,0xFF,0xFC,0x00,0x00,0x01,0xFF,0xFF,0x80,0x00,
0x00,0x7F,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,0xFE,0x00,0x00,0x07,0xFF,0xFF,0xE0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xFC,0x00,0x3F,0xFF,0xFF,0x80,0x00,0x1F,0xFF,0xFF,0xF8,0x00,
0x00,0x7F,0xFF,0xFF,0xFE,0x00,0x7F,0xFF,0xFF,0x80,0x00,0x3F,0xFF,0xFF,0xFC,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xFF,0x00,0x7F,0xE1,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0xFE,0x00,
0x00,0x7F,0xFF,0xFF,0xFF,0x00,0x7F,0xC0,0xFF,0x80,0x00,0xFF,0xFE,0x7F,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xF0,0x0F,0xFF,0x00,0x7F,0xE1,0xFF,0x80,0x00,0xFF,0xF0,0x0F,0xFF,0x00,
0x00,0x7F,0xF0,0x07,0xFF,0x00,0x7F,0xF7,0xFF,0x00,0x01,0xFF,0xE0,0x0F,0xFE,0x00,
0x00,0x7F,0xF0,0x0F,0xFF,0x00,0x3F,0xFF,0xFE,0x00,0x01,0xFF,0xE0,0x0F,0xC0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xFF,0x00,0x1F,0xFF,0xF8,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xFE,0x00,0x0F,0xFF,0xE0,0x00,0x01,0xFF,0xC0,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xFE,0x00,0x3F,0xFF,0x80,0x00,0x01,0xFF,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xE3,0xF0,0x01,0xFF,0xC0,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xF3,0xFF,0x01,0xFF,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xE0,0x07,0xFF,0x3F,0xFF,0xFF,0x01,0xFF,0xE0,0x07,0x00,0x00,
0x00,0x7F,0xF3,0xFF,0xF0,0x0F,0xFE,0x1F,0xFF,0xFE,0x01,0xFF,0xE0,0x0F,0xF0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xF0,0x7F,0xFC,0x0F,0xFC,0x0F,0xFF,0xFC,0x01,0xFF,0xE0,0x0F,0xFF,0x00,
0x00,0x7F,0xF0,0x3F,0xFE,0x0F,0xFC,0x07,0xFF,0xFC,0x00,0xFF,0xF0,0x1F,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xF0,0x1F,0xFF,0x0F,0xFE,0x00,0xFF,0xFE,0x00,0x7F,0xFC,0xFF,0xFE,0x00,
0x00,0x7F,0xF0,0x1F,0xFF,0x0F,0xFF,0x01,0xFF,0xFF,0x80,0x7F,0xFF,0xFF,0xFE,0x00,
0x00,0x7F,0xF0,0x0F,0xFF,0x8F,0xFF,0xCF,0xFF,0xFF,0xC0,0x3F,0xFF,0xFF,0xFC,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xF0,0x07,0xFF,0xC7,0xFF,0xFF,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0xF8,0x00,
0x00,0x7F,0xF0,0x07,0xFF,0xC3,0xFF,0xFF,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xF0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xF0,0x03,0xFF,0xE0,0x7F,0xFF,0xF0,0x7E,0x00,0x01,0xFF,0xFF,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x80,0x1C,0x00,0x00,0x3F,0xFE,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xFE,0x00,0x00,0x7C,0x84,0x00,0x00,0x7F,0x88,0x00,0x00,0x0C,0x02,0x00,
0x00,0x01,0x00,0x00,0x00,0x10,0x44,0x00,0x00,0x00,0x3E,0x00,0x00,0x12,0x12,0x00,
0x00,0x02,0x00,0x00,0x00,0x10,0x24,0x00,0x00,0x3F,0x2A,0x00,0x00,0x11,0x12,0x00,
0x00,0x1F,0xF8,0x00,0x00,0x10,0x14,0x00,0x00,0x41,0x2A,0x00,0x00,0x20,0x92,0x00,
0x00,0x20,0x04,0x00,0x00,0x7F,0x0C,0x00,0x00,0x3F,0x2A,0x00,0x00,0xDE,0x52,0x00,
0x00,0x20,0x04,0x00,0x00,0x18,0x84,0x00,0x00,0x00,0x2A,0x00,0x00,0x21,0x12,0x00,
0x00,0x20,0x04,0x00,0x00,0x14,0x44,0x00,0x00,0x7F,0x2A,0x00,0x00,0x21,0x12,0x00,
0x00,0x20,0x04,0x00,0x00,0x34,0x24,0x00,0x00,0x52,0xAA,0x00,0x00,0x21,0x12,0x00,
0x00,0x3F,0xFC,0x00,0x00,0x32,0x04,0x00,0x00,0x54,0xAA,0x00,0x00,0x21,0x12,0x00,
0x00,0x20,0x04,0x00,0x00,0x50,0x0E,0x00,0x00,0x5E,0x9C,0x00,0x00,0x27,0x12,0x00,
0x00,0x20,0x04,0x00,0x00,0x13,0xF4,0x00,0x00,0x68,0x8C,0x00,0x00,0x20,0x52,0x00,
0x00,0x20,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x48,0x8A,0x00,0x00,0x20,0x42,0x00,
0x00,0x20,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x48,0xBE,0x00,0x00,0x20,0x42,0x00,
0x00,0x3F,0xFC,0x00,0x00,0x10,0x04,0x00,0x00,0x43,0xC1,0x00,0x00,0x1F,0x9C,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -