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

📄 pproject.i

📁 AVRkaifashili.rar
💻 I
📖 第 1 页 / 共 2 页
字号:
#line 1 "E:\张军\AVR\光盘内容\实例源文件\第五章程序\Project\Pproject.c"

#line 1 "C:/icc/include/io8535v.h"




#line 7 "C:/icc/include/io8535v.h"


#line 10 "C:/icc/include/io8535v.h"




























































































































































































































































































































































































































#line 3 "E:\张军\AVR\光盘内容\实例源文件\第五章程序\Project\Pproject.c"
#line 1 "C:/icc/include/macros.h"






























#line 33 "C:/icc/include/macros.h"











void _StackCheck(void);
void _StackOverflowed(char);




#line 4 "E:\张军\AVR\光盘内容\实例源文件\第五章程序\Project\Pproject.c"




#line 1 "E:\张军\AVR\光盘内容\实例源文件\第五章程序\Project/project.h"
const char QFDZ[4][32]={
{0x10,0x10,0x17,0x15,0x95,0x75,0x57,0x10,0x10,0x13,0x30,0xD0,0x57,0x10,0x10,0x00,
0x00,0x00,0xFE,0x20,0x24,0x22,0xFC,0x00,0x00,0xF8,0x02,0x01,0xFE,0x00,0x00,0x00},
{0x10,0x10,0x10,0x10,0x10,0x10,0x9F,0x52,0x32,0x12,0x12,0x13,0x10,0x10,0x10,0x00,
0x02,0x02,0x04,0x08,0x30,0xC0,0x00,0x00,0x04,0x02,0x02,0xFC,0x00,0x00,0x00,0x00},
{0x00,0x44,0x4E,0x54,0x64,0x47,0x54,0x4E,0x44,0x00,0x1F,0x00,0x00,0xFF,0x00,0x00,
 0x00,0x42,0x43,0x42,0x44,0xFC,0x44,0x48,0x48,0x00,0xF0,0x02,0x01,0xFE,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char DL[2][32]={
{0x00,0x44,0x4E,0x54,0x64,0x47,0x54,0x4E,0x44,0x00,0x1F,0x00,0x00,0xFF,0x00,0x00,
 0x00,0x42,0x43,0x42,0x44,0xFC,0x44,0x48,0x48,0x00,0xF0,0x02,0x01,0xFE,0x00,0x00},
{0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x4F,0x48,0x50,0x50,0x60,0x60,0x40,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x02,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
const char State1[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State2[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State3[3][32]={

{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State4[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State5[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State6[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State7[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State8[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State9[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State10[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,
 0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State11[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,
 0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State12[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,
 0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State13[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,
 0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State14[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,
 0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State15[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,
 0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
const char State16[3][32]={
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00,
 0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00},
{0x08,0x0A,0x49,0x38,0x08,0x0F,0x08,0x00,0x00,0x00,0xFF,0x08,0x08,0x08,0x08,0x00,
 0x08,0x08,0xD0,0x30,0xD0,0x10,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00}
};
#line 9 "E:\张军\AVR\光盘内容\实例源文件\第五章程序\Project\Pproject.c"

 unsigned char Key_Value;
 unsigned char State_Flag;
 unsigned char Ack_Flag;
 unsigned char Pre_Flag;
 unsigned char Move_Flag;
 unsigned char Spec_Flag;
 unsigned char EOM_Flag=1;
 unsigned char Pst_Flag;
 unsigned char State=1;
 unsigned char Spec;
 unsigned char Speed=20;
 unsigned char Word_Number;







 unsigned char Snd_Info[]={0,17};
 unsigned char Snd_Pre_Info[]={18,0,19};
 unsigned char Snd_Spec[]={21,22};
 unsigned char Snd_Welc=20;








 unsigned char text[32];
 unsigned char next[32];



#pragma interrupt_handler Key_Scan:2
#pragma interrupt_handler Receive_EOM:3

void delay(unsigned char i)
{for(;i!=0;i--)asm("nop");}



void Set_SCL(unsigned char i)
{
 if(i)
(*(volatile unsigned char *)0x3B) |=0x80;
 else
(*(volatile unsigned char *)0x3B) &=0x7f;
}


void Set_SDA(unsigned char i)
{
 if(i)
(*(volatile unsigned char *)0x3B) |=0x40;
 else
(*(volatile unsigned char *)0x3B) &=0xbf;
}


void Start()
{
 Set_SDA(1);
 Set_SCL(1);
 delay(100);
 Set_SDA(0);
 delay(100);
 Set_SCL(0);
}


void Stop()
{
 Set_SDA(0);
 delay(100);
 Set_SCL(1);
 delay(100);
 Set_SDA(1);
 delay(100);
 Set_SCL(0);
}


void Ack()
{
 Set_SDA(0);
 delay(50);
 Set_SCL(1);
 delay(100);
 Set_SCL(0);
 delay(50);
 Set_SDA(1);
}


void Nack()
{
 Set_SDA(1);
 delay(50);
 Set_SCL(1);
 delay(100);
 Set_SCL(0);
 delay(50);
 Set_SDA(0);
}


void Check_Ack()
{
 Set_SDA(1);
 Set_SCL(1);
 Ack_Flag=0;
(*(volatile unsigned char *)0x3A) &=0xbf;
 if(!(((*(volatile unsigned char *)0x39) & 0x40)>>6))
 {
  delay(50);
  Set_SCL(0);
  delay(100);
 }
 else
 {
  Ack_Flag=1;
  delay(50);
  Set_SCL(0);
  delay(100);
 }
(*(volatile unsigned char *)0x3A) |=0xff;
}


void Write_Bit0()
{
 Set_SDA(0);
 Set_SCL(1);
 delay(100);
 Set_SCL(0);
}


void Write_Bit1()
{
 Set_SDA(1);
 Set_SCL(1);
 delay(100);
 Set_SCL(0);
 Set_SDA(0);
}


void Write_Byte(unsigned char Data)
{
 unsigned char i;
 for(i=0;i<8;i++)
 {
  if(Data & 0x80)
   Write_Bit1();
  else
   Write_Bit0();
  Data <<=1;
 }
}


 unsigned char Read_Byte()
{
 unsigned char Read_Data=0xff;
 unsigned char j;
 for (j=0;j<8;j++)
 {
  Set_SDA(1);
  Set_SCL(1);
(*(volatile unsigned char *)0x3A) &=0xbf;

  if(((*(volatile unsigned char *)0x39) & 0x40)==0)
  {
   Read_Data <<=1;
   Read_Data=(Read_Data & 0xfe);
   Set_SCL(0);
  }
  else
  {
   Read_Data <<=1;
   Read_Data =( Read_Data  | 0x01);
   Set_SCL(0);
  }
 }
(*(volatile unsigned char *)0x3A) |=0x40;
 return(Read_Data);
}


void Write_1byte(unsigned char Slave,unsigned char Address,unsigned char Data)
{
 Start();
 Write_Byte(Slave);
 do
 {
  Check_Ack();
 }
 while(Ack_Flag==1);
 Write_Byte(Address);
 do
 {
  Check_Ack();
 }
 while(Ack_Flag==1);
 Write_Byte(Data);
 do
 {
  Check_Ack();
 }
 while(Ack_Flag==1);
 Stop();
}


void Write_2byte(unsigned char Slave,unsigned char Address,unsigned char Data0,unsigned char Data1)
{
 Start();
 Write_Byte(Slave);
 do
 {
  Check_Ack();
 }
 while(Ack_Flag==1);
 Write_Byte(Address);
 do
 {
  Check_Ack();
 }
 while(Ack_Flag==1);
 Write_Byte(Data0);
 do
 {
  Check_Ack();
 }
 while(Ack_Flag==1);
 Write_Byte(Data1);
 do
 {
  Check_Ack();
 }
 while(Ack_Flag==1);
 Stop();
}


⌨️ 快捷键说明

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