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

📄 一些常用的c语言音响程序(5):收音头控制程序(有些难度) - enbia's blog.mht

📁 一些常用的C语言音响程序(5):收音头控制程序(有些难度)
💻 MHT
📖 第 1 页 / 共 5 页
字号:
=3D=20
((freq + 1070) * 1000) / (FM_FREF=20
*100);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;Tuner_Set_Freque=
ncy_Int();<BR><BR>&nbsp;&nbsp;dwPLL_Shadow_IN2=20
|=3D BO2_ON; =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
Unmute<BR><BR>&nbsp;&nbsp;Write_LC72131(MODE_IN1,=20
dwPLL_Shadow_IN1);&nbsp;&nbsp;<BR>&nbsp;&nbsp;Write_LC72131(MODE_IN2,=20
dwPLL_Shadow_IN2);&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;// save the current=20
count<BR>&nbsp;&nbsp;Write_EEPROM(EE_CURCNT_LOW, cur_count[band] &amp; =
0xff);=20
Write_EEPROM(EE_CURCNT_HIGH, cur_count[band] &gt;&gt;=20
8);<BR><BR>&nbsp;&nbsp;return=20
(Count_To_Freq());<BR>}<BR><BR>//----------------------------------------=
-----------------------------------<BR>//=20
Tuner_Step<BR>//---------------------------------------------------------=
------------------<BR>WORD=20
Tuner_Step(BYTE ctrl){<BR><BR>&nbsp;&nbsp;if (ctrl !=3D SET)return=20
Tuner_Set_Frequency(ctrl,=20
0);<BR>}<BR><BR>//-------------------------------------------------------=
--------------------<BR>//=20
Tuner_Scan<BR>//---------------------------------------------------------=
------------------<BR>int=20
Tuner_Scan(BYTE ctrl){<BR>BAND_INFO code *pBInfo;<BR>WORD =
temp;<BR>register BYTE=20
j;<BR><BR>&nbsp;&nbsp;switch(band){<BR>&nbsp;&nbsp;&nbsp;&nbsp;case=20
BAND_AM:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (b_amstep) pBInfo =3D =

&amp;BandInfo_AM_10KHz; else pBInfo =3D &amp;BandInfo_AM_9KHz;=20
break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case=20
BAND_FM:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (b_fmstep) pBInfo =3D =

&amp;BandInfo_FM_100KHz; else pBInfo =3D &amp;BandInfo_FM_50KHz;=20
break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case=20
BAND_SW:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;}<B=
R><BR>&nbsp;&nbsp;if=20
(ctrl =3D=3D INQUIRE){<BR>&nbsp;&nbsp;&nbsp;&nbsp;return=20
(Count_To_Freq());<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else if (ctrl =3D=3D=20
UP){<BR>&nbsp;&nbsp;&nbsp;&nbsp;cur_count[band] +=3D pBInfo -&gt;=20
CntStep;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else if (ctrl =3D=3D DOWN){=20
<BR>&nbsp;&nbsp;&nbsp;&nbsp;cur_count[band] -=3D pBInfo -&gt;=20
CntStep;<BR>&nbsp;&nbsp;}<BR><BR>//&nbsp;&nbsp;Temp_Mute(1);<BR><BR>&nbsp=
;&nbsp;Tuner_Set_Frequency_Int();<BR><BR>&nbsp;&nbsp;Write_LC72131(MODE_I=
N1,=20
dwPLL_Shadow_IN1);&nbsp;&nbsp;<BR>&nbsp;&nbsp;Write_LC72131(MODE_IN2,=20
dwPLL_Shadow_IN2);&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;// Wait =
PLL Lock=20
-----------------------------------------------------------<BR>&nbsp;&nbs=
p;Pause(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nb=
sp;<BR>&nbsp;&nbsp;for=20
(j=3D0; j&lt;255; j++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;if=20
(PIN_TUNER_DO)break;<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;dwPLL_Shadow_IN2=
 &amp;=3D=20
DO_MODE_MASK;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// set DO =
mode, end=20
uc<BR>&nbsp;&nbsp;dwPLL_Shadow_IN2 |=3D=20
DO_MODE_END_UC;<BR><BR>&nbsp;&nbsp;dwPLL_Shadow_IN1 |=3D=20
CTE_ON;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;//=20
IF count start<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;Write_LC72131(MODE_IN1,=20
dwPLL_Shadow_IN1);&nbsp;&nbsp;<BR>&nbsp;&nbsp;Write_LC72131(MODE_IN2,=20
dwPLL_Shadow_IN2);&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;// Wait Gate over=20
-----------------------------------------------------<BR>&nbsp;&nbsp;for =
(j=3D0;=20
j&lt;10; j++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!PIN_TUNER_DO)=20
break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// =
break when=20
gate ends<BR>&nbsp;&nbsp;&nbsp;&nbsp;os_wait2(K_TMO,=20
1);<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;// Gate time =
over<BR>&nbsp;&nbsp;temp =3D=20
Read_72131() &amp; 0x0fffff;<BR><BR>&nbsp;&nbsp;dwPLL_Shadow_IN2 |=3D =
BO2_ON;=20
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
Unmute<BR>&nbsp;&nbsp;Write_LC72131(MODE_IN2,=20
dwPLL_Shadow_IN2);&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;// save the current=20
count<BR>&nbsp;&nbsp;Write_EEPROM(EE_CURCNT_LOW, cur_count[band] &amp; =
0xff);=20
Write_EEPROM(EE_CURCNT_HIGH, cur_count[band] &gt;&gt; =
8);<BR><BR>&nbsp;&nbsp;if=20
((temp &gt;=3D pBInfo -&gt; IFCntMin) &amp;&amp; (temp &lt;=3D pBInfo =
-&gt;=20
IFCntMax)){<BR>&nbsp;&nbsp;&nbsp;&nbsp;return=20
-(Count_To_Freq());<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else=20
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return=20
(Count_To_Freq());<BR>&nbsp;&nbsp;}<BR>}<BR><BR>//-----------------------=
----------------------------------------------------<BR>//=20
Tuner_Get_Stereo<BR>//---------------------------------------------------=
------------------------<BR>BOOL=20
Tuner_Get_Stereo(void){<BR><BR>&nbsp;&nbsp;if (band =3D=3D BAND_FM)=20
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (!(Read_72131() &amp;=20
0x800000));<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else=20
<BR>&nbsp;&nbsp;&nbsp;&nbsp;return=20
0;<BR>}<BR><BR>//--------------------------------------------------------=
-------------------<BR>//=20
Tuner_Set_Frequency_Int<BR>//--------------------------------------------=
-------------------------------<BR>static=20
void Tuner_Set_Frequency_Int(void){<BR>BAND_INFO code=20
*pBInfo;<BR><BR>&nbsp;&nbsp;switch(band){<BR>&nbsp;&nbsp;&nbsp;&nbsp;case=
=20
BAND_AM:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (b_amstep) pBInfo =3D =

&amp;BandInfo_AM_10KHz; else pBInfo =3D &amp;BandInfo_AM_9KHz;=20
break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case=20
BAND_FM:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (b_fmstep) pBInfo =3D =

&amp;BandInfo_FM_100KHz; else pBInfo =3D &amp;BandInfo_FM_50KHz;=20
break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case=20
BAND_SW:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;}<B=
R><BR>&nbsp;&nbsp;dwPLL_Shadow_IN1=20
=3D 0; dwPLL_Shadow_IN2 =3D 0;<BR><BR>&nbsp;&nbsp;// Check Boundary=20
-----------------------------------------------------<BR>&nbsp;&nbsp;if=20
(cur_count[band] &gt; pBInfo -&gt;=20
CntMax){<BR>&nbsp;&nbsp;&nbsp;&nbsp;cur_count[band] =3D pBInfo -&gt; =
CntMin;=20
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
Cycling<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else if (cur_count[band] &lt; =
pBInfo=20
-&gt; CntMin){<BR>&nbsp;&nbsp;&nbsp;&nbsp;cur_count[band] =3D pBInfo =
-&gt; CntMax;=20
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
Cycling<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;// IN2 Mode=20
-----------------------------------------------------------<BR>&nbsp;&nbs=
p;dwPLL_Shadow_IN2=20
|=3D =
GATE_TIME_32MS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;//=20
Gate Time =3D 4ms<BR>&nbsp;&nbsp;dwPLL_Shadow_IN2 |=3D=20
0x100000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;//=20
IFS<BR><BR>&nbsp;&nbsp;if (band =3D=3D=20
BAND_AM){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
Set Band <BR>&nbsp;&nbsp;&nbsp;&nbsp;dwPLL_Shadow_IN2 |=3D BO1_ON;=20
<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else if (band =3D=3D=20
BAND_FM){<BR>&nbsp;&nbsp;&nbsp;&nbsp;dwPLL_Shadow_IN2 |=3D=20
BO4_ON;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;if=20
(!bST_MONO) {dwPLL_Shadow_IN2 |=3D BO3_ON;}&nbsp;&nbsp;&nbsp;&nbsp;//=20
Stereo<BR><BR>//&nbsp;&nbsp;dwPLL_Shadow_IN2 &amp;=3D=20
DO_MODE_MASK;<BR>&nbsp;&nbsp;dwPLL_Shadow_IN2 |=3D=20
DO_MODE_UNLOCK;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;//<BR><BR>&nbsp;&nbsp;//=20
IN1 Mode=20
-----------------------------------------------------------<BR><BR>&nbsp;=
&nbsp;if=20
(band =3D=3D=20
BAND_AM){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
Set Frequency<BR>&nbsp;&nbsp;&nbsp;&nbsp;dwPLL_Shadow_IN1 |=3D =
(cur_count[band]=20
&lt;&lt; 4); <BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else=20
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;dwPLL_Shadow_IN1 |=3D cur_count[band];=20
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;=
dwPLL_Shadow_IN1=20
|=3D pBInfo -&gt; =
DivMode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Set=20
DIv Mode<BR>&nbsp;&nbsp;dwPLL_Shadow_IN1 |=3D pBInfo -&gt;=20
DivRefPara;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Set DIV Ref=20
Para<BR>}<BR><BR>//------------------------------------------------------=
---------------------<BR>//=20
Count_To_Freq<BR>//------------------------------------------------------=
---------------------<BR>static=20
WORD Count_To_Freq(void){<BR>BAND_INFO code=20
*pBInfo;<BR><BR>&nbsp;&nbsp;switch(band){<BR>&nbsp;&nbsp;&nbsp;&nbsp;case=
=20
BAND_AM:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (b_amstep) pBInfo =3D =

&amp;BandInfo_AM_10KHz; else pBInfo =3D &amp;BandInfo_AM_9KHz;=20
break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case=20
BAND_FM:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (b_fmstep) pBInfo =3D =

&amp;BandInfo_FM_100KHz; else pBInfo =3D &amp;BandInfo_FM_50KHz;=20
break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;case=20
BAND_SW:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;}<B=
R><BR>&nbsp;&nbsp;if=20
((band =3D=3D BAND_AM) || (band =3D=3D =
BAND_SW)){<BR>&nbsp;&nbsp;&nbsp;&nbsp;return=20
cur_count[band] * pBInfo -&gt; FRef - =
450;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else=20
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return cur_count[band] * ((FM_FREF =
*100)/1000) -=20
1070;<BR>&nbsp;&nbsp;}<BR>}<BR><BR>#define =
LC72131_DELAY()&nbsp;&nbsp;{_nop_();=20
_nop_();=20
_nop_();}<BR><BR>//------------------------------------------------------=
---------------------<BR>//=20
Write_LC72131_Addr<BR>//&nbsp;&nbsp;addr: the addr of the control =
register<BR>//=20
value: the valude to set to=20
<BR>//-------------------------------------------------------------------=
--------<BR>static=20
void Write_LC72131_Addr(BYTE addr){<BR>register BYTE=20
i;<BR><BR>&nbsp;&nbsp;PIN_TUNER_CE =3D 0;<BR>&nbsp;&nbsp;PIN_TUNER_CL =
=3D=20
1;<BR><BR>&nbsp;&nbsp;LC72131_DELAY();<BR><BR>&nbsp;&nbsp;for (i =3D 8; =
i&gt;0;=20
--i){ <BR>&nbsp;&nbsp;&nbsp;&nbsp;PIN_TUNER_CL =3D=20
0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LC72131_DELAY();<BR><BR>&nbsp;&nbsp;&nbsp;&=
nbsp;if=20
(addr &amp; 0x01) PIN_TUNER_DI=3D1; else=20
PIN_TUNER_DI=3D0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;addr &gt;&gt;=3D=20
1;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LC72131_DELAY();<BR><BR>&nbsp;&nbsp;&nb=
sp;&nbsp;PIN_TUNER_CL=20
=3D=20
1;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LC72131_DELAY();<BR>&nbsp;&nbsp;}<BR>}<=
BR><BR>//----------------------------------------------------------------=
-----------<BR>//=20
Write_LC72131<BR>//&nbsp;&nbsp;addr: the addr of the control =
register<BR>//=20
value: the valude to set to=20
<BR>//-------------------------------------------------------------------=
--------<BR>static=20
void Write_LC72131(BYTE addr, DWORD value){<BR>register BYTE=20
i;<BR><BR>&nbsp;&nbsp;// Send the addr byte first=20
------------//<BR>&nbsp;&nbsp;Write_LC72131_Addr(addr);<BR><BR>&nbsp;&nbs=
p;PIN_TUNER_CE=20
=3D 1;<BR>&nbsp;&nbsp;LC72131_DELAY();<BR><BR>&nbsp;&nbsp;// Send the =
control=20
value in following------------//<BR>&nbsp;&nbsp;for (i =3D 24; i&gt;0; =
--i){=20
<BR>&nbsp;&nbsp;&nbsp;&nbsp;PIN_TUNER_CL =3D=20
0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LC72131_DELAY();<BR><BR>&nbsp;&nbsp;&nbsp;&=
nbsp;if=20
(value &amp; 0x01) PIN_TUNER_DI=3D1; else=20
PIN_TUNER_DI=3D0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;value &gt;&gt;=3D=20
1;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LC72131_DELAY();<BR><BR>&nbsp;&nbsp;&nb=
sp;&nbsp;PIN_TUNER_CL=20
=3D=20
1;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LC72131_DELAY();<BR>&nbsp;&nbsp;}<BR><B=
R>&nbsp;&nbsp;PIN_TUNER_CE=20
=3D=20
0;<BR>}<BR><BR>//--------------------------------------------------------=
-------------------<BR>//=20
Read_LC72131<BR>//&nbsp;&nbsp;addr: the addr of the control =
register<BR>//=20
return value=20
<BR>//-------------------------------------------------------------------=
--------<BR>static=20
DWORD Read_72131(void){<BR>register BYTE i;<BR>DWORD temp =3D=20
0;<BR><BR>&nbsp;&nbsp;// Send the addr byte first=20
------------//<BR>&nbsp;&nbsp;Write_LC72131_Addr(MODE_OUT);<BR><BR>&nbsp;=
&nbsp;PIN_TUNER_CE=20
=3D 1;<BR>&nbsp;&nbsp;LC72131_DELAY();<BR><BR>&nbsp;&nbsp;// read the =
value dword=20
------------//<BR>&nbsp;&nbsp;for (i=3D24; i&gt;0;=20
--i){<BR>&nbsp;&nbsp;&nbsp;&nbsp;PIN_TUNER_CL =3D=20
0;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LC72131_DELAY();<BR><BR>&nbsp;&nbsp;&nb=
sp;&nbsp;temp=20
&lt;&lt;=3D 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (PIN_TUNER_DO) temp |=3D=20
1;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;PIN_TUNER_CL =3D=20
1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;LC72131_DELAY();<BR>&nbsp;&nbsp;}<BR><BR>&n=
bsp;&nbsp;PIN_TUNER_CE=20
=3D 0;<BR><BR>&nbsp;&nbsp;return=20
temp;<BR>}<BR><BR>=E5=A4=B4=E6=96=87=E4=BB=B6=E5=A6=82=E4=B8=8B=EF=BC=9A<=
BR><BR>#ifndef&nbsp;&nbsp;__TUNER_INT_H__<BR>#define=20
__TUNER_INT_H__<BR><BR>#include &lt;types.h&gt;<BR><BR>//=20
----------------------------------------------------------------<BR>// =
Control=20
Pins<BR>//=20
----------------------------------------------------------------<BR>exter=
n BOOL=20
PIN_TUNER_DO;<BR>extern BOOL PIN_TUNER_CL;<BR>extern BOOL=20
PIN_TUNER_DI;<BR>extern BOOL PIN_TUNER_CE;<BR><BR>// use 24c02, 0x80 -=20
0xff<BR><BR>enum TUNER_EE {<BR>&nbsp;&nbsp;EE_AMSTEP =3D=20
0x80,<BR>&nbsp;&nbsp;EE_BAND,<BR>&nbsp;&nbsp;EE_CURCNT_LOW,<BR>&nbsp;&nbs=
p;EE_CURCNT_HIGH,<BR><BR>&nbsp;&nbsp;EE_PRESET_BASE&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
To store the preset station&nbsp;&nbsp; <BR>};<BR><BR>#define=20
MAX_PRESET_NUMBER&nbsp;&nbsp;0x29&nbsp;&nbsp;&nbsp;&nbsp;// can store 20 =

channels for each band<BR><BR>//=20
-------------------------------------------------------------<BR>// =
Tuner Modle:=20
T-989 of Guangzhou Youshen<BR>//=20
-------------------------------------------------------------<BR><BR>// =

⌨️ 快捷键说明

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