📄 mymusic.c
字号:
//---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---//
//使用方法:
//1: 初始化: 按照PWM方式初始化,输出时开蜂鸣音
//2: 定义: 包括<音符定义> <口线定义> <周期数组> <音乐数据表>
//3: 因为不同的振荡源频率不同,分频系数不同,则需要改变音符对应的周期,则直接修改<<单片机音乐蜂鸣用频率 周期关系表.xls>>
// 中对应变量即可,然后把结果复制到周期数组即可
//4: 音乐编辑方法为: 第1字节为音符节拍数,单位为1/8节拍,如果一个音符为1拍,则数据为8,依此类推
// 第2字节为音符,对应1~7的低音(l1~l7) 中音(m1~m7) 高音(h1~h7),休止符为xz, 根据简谱或五线谱编辑即可
//5: 音乐选择通过Music_Select()实现, 音乐输出通过Musicing()实现,每10毫秒调用一次.
//6: buzstp为一个标志,musicing()函数只清这标志,置位由使用程序完成
//7: 原来事业部使用的旧的音乐,不是标准的音符,所以设置单独的程序,选择音乐后,必须设置music_sel_ts_flg=1;,设置标准程序,无需清0
//8: 如果需要在两个音符间插入间隔,则需要设置休止符,休止符输出频率为前面一个频率,但节拍关闭
//---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---*---+-+-+-+---//
//本程序为完全我自己写的音乐蜂鸣程序,分成两种情况,第1种是单字节表示频率,另一种是双字节表示频率
//分别对应8位PWM和16位PWM,
//对于8位PWM,如果输入频率是8M,64分频后,可以满足最低490HZ,最高125KHZ的情况
//对于16位PWM,如果输入频率是8M,不分频,可以满足最低122HZ,最高8MHZ的情况,即使输入频率16M,仍然可以实现
//低音Do(262HZ)的发音,而且发音频率准确
//音乐存放格式为:
//音乐组织以每分88拍(考虑计算方便,取每分钟93拍,即每拍640毫秒)为基准,4分音符为一拍,也就是一拍为640毫秒,
//存放以1/8拍为单位,即以80毫秒为单位存放节拍长度
//第1字节为长度, 存放以1/8拍为单位,最多可以存放32拍,实际存放4拍即可,保留最高3个位
//第2字节为音符,分别按照下面的定义给出, 另建一个数组, 存放各音符频率对应的PWM周期值
//这个周期值将建立一个EXCEL 表, 只需填入PWM信号源频率 分频值即可得到.
//考虑有的单片机只有8位PWM,则建立两种表,分别针对8位PWM和16位PWM
//音乐中,0为休止符,则实际程序将发出战况比为100%的信号.
//特殊音乐选择
#define MF2591 1
#define MF2165 2
#define MF2220 3
#define MF2294 4
#define MF2370 5
#define MF2427 6
#define MF2525 7
#define MF2564 8
#define MFPWON 9 //开机
#define MFSTRT 10 //启动
#define MFPASU 11 //暂停
#define MFERRO 12 //故障
#define MFNWTR 13 //无水检测
#define MFZHQI 14 //周期检测
#define MFSELF 15 //音乐自检
#define MFEND 16 //结束
#define MFPOFF 17 //关机
#define MF2304 18
//音符定义
#define xz 0 //休止符
#define l1 1 //低音 1
#define l2 2 //低音 2
#define l3 3 //低音 3
#define l4 4 //低音 4
#define l5 5 //低音 5
#define l6 6 //低音 6
#define l7 7 //低音 7
#define m1 8 //中音 1
#define m2 9 //中音 2
#define m3 10 //中音 3
#define m4 11 //中音 4
#define m5 12 //中音 5
#define m6 13 //中音 6
#define m7 14 //中音 7
#define h1 15 //高音 1
#define h2 16 //高音 2
#define h3 17 //高音 3
#define h4 18 //高音 4
#define h5 19 //高音 5
#define h6 20 //高音 6
#define h7 21 //高音 7
//特殊频率音乐处理用定义,编写时直接写Y+频率值即可,简单方便
#define Y1543 1
#define Y1572 2
#define Y1736 3
#define Y1760 4
#define Y1838 5
#define Y1968 6
#define Y2049 7
#define Y2066 8
#define Y2092 9
#define Y2128 10
#define Y2165 11
#define Y2220 12
#define Y2228 13
#define Y2232 14
#define Y2242 15
#define Y2294 16
#define Y2304 17
#define Y2310 18
#define Y2347 19
#define Y2370 20
#define Y2404 21
#define Y2415 22
#define Y2427 23
#define Y2463 24
#define Y2525 25
#define Y2564 26
#define Y2577 27
#define Y2591 28
#define Y2604 29
#define Y2632 30
#define Y2732 31
#define Y2740 32
#define Y2809 33
//8位PWM 对应的周期值
//const unsigned char pwm8b_mc[]={0,239,216,190,179,159,142,127,120,106,95,89,80,71,63,60,53,47,45,40,36,32};
const unsigned char pwm8b_mc[]={0,120,106,95,89,80,71,63,60,53,47,45,40,36,32,30,27,24,22,20,18,16,};
//16位PWM 对应的周期值--高字节在前
const unsigned char pwm16b_mc[]={0,0,59,192,54,17,47,108,44,197,39,220,35,131,31,161,
29,224,26,153,23,182,22,95,19,238,17,193,15,209,14,240,13,76,11,219,11,47,9,247,8,225,7,232};
//10位PWM 对应的周期值--高字节在前
const unsigned char pwm10b_mc[]={0,0,3,188,3,97,2,247,2,204,2,126,2,56,1,250,
1,222,1,170,1,123,1,102,1,63,1,28,0,253,0,239,0,213,0,190,0,179,0,159,0,142,0,127};
//分别对应频率为
// Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15 Y16 Y17 Y18 Y19 Y20 Y21
//1572 1760 1968 2049 2092 2128 2165 2220 2228 2232 2242 2294 2304 2310 2347 2370 2404 2415 2427 2463 2525
// Y22 Y23 Y24 Y25 Y26 Y27 Y28 Y29
//2564 2577 2591 2604 2632 2732 2740 2809 的PWM值 Y0为0
const unsigned char pwm8b_ts[]={0,81,80,72,71,68,64,61,61,60,59,58,56,56,56,56,54,54,54,53,53,52,52,52,51,50,49,49,48,48,47,46,46,44};
//音乐输出方式:
// 读出第1字节,确定音乐长度,读出第2字节为对应音符 .
// 第1字节低5位乘以8送计时器,用于计时,计时单位为10毫秒
// 第2字节再查表pwm8b_mc[]或pwm10b_mc[]或pwm16b_mc[],查出对应PWM周期值,送PWM周期寄存器.
//给出音乐表头地址的同时,给出该节音乐的音符数量,也可以直接使用SIZE OF ()伪指令取得长度,除以2即为音符数量.
/***********************************************************************/
/* */
/* FILE :MYMUSIC.c */
/* DATE :Fri, Aug 26, 2005 */
/* DESCRIPTION :Main Program */
/* CPU TYPE :H8/36014F */
/* */
/* This file is generated by Hitachi Project Generator (Ver.2.1). */
/* */
/***********************************************************************/
#define uchar unsigned char
#define uint unsigned int
void ini_pp(void);
void emi_p(void);
void ini_ram(void);
void delayus(uchar dlt);
void Buzzing(void);
void Music_Select(void);
void Musicing(void);
#include "iodefine.h"
#include <machine.h>
//-----------------------------------------------------------------
#define passz_kx IO.PDR1.BIT.B7 //过零口线
#define Buzzeron() TV.TCSRV.BIT.OS=6;
#define Buzzeroff() TV.TCSRV.BIT.OS=0;
#define RESET_WATCHDOG() {WDT.TCSRWD.BIT.B6WI=0; WDT.TCSRWD.BIT.TCWE=1; WDT.TCWD=0x00; WDT.TCSRWD.BIT.TCWE=0; WDT.TCSRWD.BIT.B6WI=1;}
#define PORT1 IO.PDR1.BYTE
#define PORT2 IO.PDR2.BYTE
#define PORT5 IO.PDR5.BYTE
#define PORT7 IO.PDR7.BYTE
#define PORT8 IO.PDR8.BYTE
#define PORTB IO.PDRB.BYTE
#define portmr1 IO.PMR1.BYTE
#define portmr5 IO.PMR5.BYTE
#define portcr1 IO.PCR1
#define portcr2 IO.PCR2
#define portcr5 IO.PCR5
#define portcr7 IO.PCR7
#define portcr8 IO.PCR8
#define portur1 IO.PUCR1.BYTE
#define portur5 IO.PUCR5.BYTE
//-----------------------------------------------------------------
union
{
unsigned char STAFLG;
struct {
unsigned DYON_FLG:1;
unsigned START_FLG:1;
unsigned PAUSE_FLG:1;
unsigned BOOK_FLG:1;
unsigned :1;
unsigned :1;
unsigned HTTB:1;
unsigned OPDR:1;
}STAFLGbits;
}STAFLGU;
#define staflg STAFLGU.STAFLG
#define dyonflg STAFLGU.STAFLGbits.DYON_FLG
#define startflg STAFLGU.STAFLGbits.START_FLG
#define pauseflg STAFLGU.STAFLGbits.PAUSE_FLG
#define bookflg STAFLGU.STAFLGbits.BOOK_FLG
#define opendrflg STAFLGU.STAFLGbits.OPDR
#define hurttbflg STAFLGU.STAFLGbits.HTTB
//////////////////////////有关定义开始//////////////////////////////////////
//-------------------- 位变量定义 --------------------
volatile union
{
unsigned char BYTE;
struct
{
unsigned S7:1;
unsigned S6:1;
unsigned S5:1;
unsigned S4:1;
unsigned S3:1;
unsigned S2:1;
unsigned S1:1;
unsigned S0:1;
}BIT;
}MFLGU;
#define musicflg MFLGU.BYTE
#define mflg10ms MFLGU.BIT.S7 //到达10毫秒标志,每10毫秒处理一次音乐
#define buzstp MFLGU.BIT.S6 //音乐输出停止标志 0:停止 1:正在输出 这个标志不在音乐丰满程序中置位,只清0
#define musicruning MFLGU.BIT.S5 //音乐是否正在输出 1:是 0:未
#define music_1st_flg MFLGU.BIT.S4 //重新设置了音乐后,初次进入音乐输出程序 1:否 0:初次进入
#define music_sel_ts_flg MFLGU.BIT.S3 //选择特殊音乐标志
//-------------------- 变量定义 --------------------
unsigned char btMusicSet; //音乐选择
unsigned char music_pai_ct; //音乐音符输出时间保存
unsigned char music_yinf_nu; //音乐音符数量保存
unsigned char music_peri; //读出的音符周期保存
unsigned char *music_ptr; //音乐起始地址
//-------------------- 特殊功能寄存器定义 --------------------
#define pwm_period TV.TCORA //周期
#define pwm_duty TV.TCORB //占空比
#define jiepai_kx IO.PDR1.BIT.B2 //节拍控制
#define pwm_period_h TV.TCORA //周期--高字节
#define pwm_period_l TV.TCORA //周期--低字节
#define pwm_duty_h TV.TCORB //占空比--高字节
#define pwm_duty_l TV.TCORB //占空比--低字节
//////////////////////////有关定义结束//////////////////////////////////////
uchar jsq10ms; //10毫秒计时用
//音乐存放格式为:
//音乐组织以每分88*2拍(考虑计算方便,取每分钟93*2拍,即每拍320毫秒)为基准,4分音符为一拍,也就是一拍为320毫秒,
//存放以1/8拍为单位,即以40毫秒为单位存放节拍长度
//第1字节为长度, 存放以1/8拍为单位,最多可以存放32拍,实际存放4拍即可,保留最高3个位
//第2字节为音符,分别按照下面的定义给出, 另建一个数组, 存放各音符频率对应的PWM周期值
//这个周期值将建立一个EXCEL 表, 只需填入PWM信号源频率 分频值即可得到.
//考虑有的单片机只有8位PWM,则建立两种表,分别针对8位PWM和16位PWM
//音乐中,0为休止符,则实际程序将发出战况比为100%的信号.
//-------------------- 音乐数据表 ------------------------------------------------------------
//My Bonnie
const unsigned char mybonie[]={8,l5,8,m3,8,m2,8,m1,8,m2,8,m1,8,l6,8,l5,8,l3,8,l3,8,l3,8,l3,8,l5,8,m3,8,m2,8,m1,8,m1,8,l7,8,m1,8,m2,8,m2,8,m2,
8,m2,8,m2,8,l5,8,m3,8,m2,8,m1,8,m2,8,m1,8,l6,8,l5,8,l3,8,l3,16,l3,8,l5,8,l6,8,m2,8,m1,8,l7,8,l6,8,l7,8,m1,8,m1,8,m1};
//You are my sunshine
const unsigned char mysunshine[]={8,l5,8,m1,8,m2,16,m3,16,m3,16,m3,8,m2,8,m3,16,m1,16,m1,8,m1,8,m1,8,m2,8,m3,16,m4,
16,m6,16,m5,8,m4,16,m3,16,m3,8,m3,8,m1,8,m2,8,m3,16,m4,16,m6,16,m6,8,m5,8,m4,16,m3,16,m1,24,m1,8,m2,24,m3,8,m4,
24,m2,8,m3,32,m1,8,m1,8,l5,8,m1,8,m2,16,m3,16,m3,16,m3,8,m2,8,m3,32,m1,16,m1,8,m2,8,m3,16,m4,16,m6,16,m6,8,m5,8,m4,32,m3};
//铃儿响叮当
const unsigned char jingle_bell1[]=
{8,l5,8,m3,8,m2,8,m1,16,l5,8,0,4,l5,4,l5,
8,l5,8,m3,8,m2,8,m1,8,l6,8,l6,8,l6,8,0,
8,l6,8,m4,8,m3,8,m2,24,l7,8,0,
8,m5,8,m5,8,m4,8,m2,24,m3,8,0,
8,l5,8,m3,8,m2,8,m1,8,l5,8,l5,8,l5,8,0,
8,l5,8,m3,8,m2,8,m1,8,l6,8,l6,8,l6,8,l6,
8,l6,8,m4,8,m3,8,m2,8,m5,1,0,8,m5,1,0,8,m5,1,0,8,m5,
8,m6,8,m5,8,m4,8,m2,8,m1,24,0,
8,m3,1,0,8,m3,1,0,16,m3,1,0,8,m3,1,0,8,m3,1,0,16,m3,1,0,
8,m3,8,m5,12,m1,4,m2,24,m3,8,m3,
16,m4,1,0,12,m4,1,0,4,m4,1,0,8,m4,16,m3,4,m3,4,m2,
8,m3,8,m2,8,m2,8,m3,16,m2,16,m5,
8,m3,1,0,8,m3,1,0,16,m3,1,0,8,m3,1,0,8,m3,1,0,16,m3,1,0,
8,m3,8,m5,12,m1,4,m2,24,m3,8,m3,
16,m4,1,0,12,m4,1,0,4,m4,1,0,8,m4,16,m3,1,0,4,m3,1,0,4,m3,
8,m5,8,m4,8,m3,8,m2,32,m1,
};
//铃儿响叮当
const unsigned char jingle_bell2[]=
{
8,m3,1,0,8,m3,1,0,16,m3,1,0,8,m3,1,0,8,m3,1,0,16,m3,1,0,
8,m3,8,m5,12,m1,4,m2,24,m3,8,m3,
16,m4,1,0,12,m4,1,0,4,m4,1,0,8,m4,16,m3,1,0,4,m3,1,0,4,m3,
8,m5,8,m4,8,m3,8,m2,32,m1,
};
//新年快乐
const unsigned char happy_new_year[]=
{
8,m1,1,0,8,m1,8,l5,8,m3,1,0,8,m3,8,m1,4,m1,4,m3,8,m5,8,m5,
4,m4,4,m3,16,m2,4,m2,4,m3,16,m4,4,m3,4,m2,8,m3,8,m1,
4,m1,4,m3,8,m2,8,l5,4,l7,4,m2,16,m1
};
//GOOD NIGHT
const unsigned char good_night[]=
{
8,m5,8,m6,8,m4,16,m3,1,0,8,m3,8,m2,8,m1,8,l7,
16,m1,8,m3,8,m4,8,m3,8,m6,7,m5,1,0,7,m5,1,0,7,m5,1,0,
8,m4,8,m3,8,m2,16,m3,8,m1,1,0,16,m1,1,0,8,m1,1,0,
16,m1,1,0,8,m1,16,l5,1,0,8,l5,16,m1
};
//小小的船
const unsigned char small_boat[]=
{
8,h1,8,m7,8,h1,16,m6,8,m5,8,m4,8,m2,8,m6,24,m5,
16,m6,8,m5,8,m4,8,m2,8,m6,24,m4,8,m6,8,m5,8,m6,8,m4,1,0,8,m4,8,m2,8,m4,8,h1,8,m6,
24,m5,8,m6,8,m5,8,m6,8,h2,8,h3,8,h2,16,m6,8,m5,8,m4,8,m2,8,m4,24,m4
};
//蓝色多瑙河--调太高,难以播放
const unsigned char blue_danube[]=
{
8,m1,8,m3,8,m5,1,0,24,m5,1,0,24,m5,1,0,8,m5,8,0,8,m1,
8,m1,8,m3,8,m5,1,0,24,m5,1,0,24,m5,1,0,8,m5,8,0,8,l7,
8,l7,8,m2,8,m6,1,0,24,m6,1,0,24,m6,1,0,8,m6,8,0,8,l7,
8,l7,8,m2,8,m6,1,0,24,m6,1,0,24,m6,1,0,8,m6,8,0,8,m1,
8,m1,8,m3,8,m5,1,0,24,h1,1,0,24,h1,1,0,8,h1,8,0,8,m1,
8,m1,8,m3,8,m5,1,0,24,h1,1,0,24,h1,1,0,8,h1,8,0,8,m2,
8,m2,8,m4,8,m6,1,0,24,m6,1,0,8,m6,8,m4,8,m5,24,h3,
};
//致爱丽丝
const unsigned char to_anlice[]=
{
2,h3,2,h2,2,h3,2,h2,2,h3,2,h7,2,h2,2,h1,4,m6,2,0,2,m1,2,m3,2,m6,4,m7,2,0,2,m3,2,m5,2,m7,4,h1,
2,0,2,m3,2,h3,2,h2,2,h3,2,h2,2,h3,2,h7,2,h2,2,h1,4,m6,2,0,2,m1,2,m3,2,m6,4,m7,2,0,2,m3,2,h1,2,m7,4,m6,
2,0,2,m7,2,h1,2,h2,4,h3,2,0,2,m5,2,h4,2,h3,4,h2,2,0,2,m4,2,h3,2,h2,4,h1,2,0,2,m3,2,h2,2,h1,4,m7,
2,0,2,m3,2,h3,2,m3,2,h3,2,m3,2,m3,2,h2,2,h3,2,h2,2,h3,2,h2,2,h3,2,h2,2,h3,2,h2,2,h3,2,h2,2,h3,2,m7,2,h2,2,h1,4,m6,
2,0,2,m1,2,m3,2,m6,2,m7,2,0,2,m3,2,m5,2,m7,2,h1,2,0,2,m3,2,h3,2,h2,2,h3,2,m7,2,h2,2,h1,4,m6,
};
//回家
const unsigned char go_home[]=
{
8,0,8,0,4,m6,4,m5,1,m4,2,m3,1,m2,8,m1,1,0,7,m1,1,0,7,m1,1,0,7,m1,8,m1,1,0,7,m1,1,0,7,m1,8,0,
4,m2,4,m3,4,m3,4,m5,8,m5,8,0,4,m2,4,m3,4,m3,4,m5,8,m5,8,0,4,m5,4,m6,4,m6,2,m3,2,m1,4,m2,8,m2,1,0,7,m2,,1,0,7,m2,8,0,
4,m2,4,m3,4,m3,4,m5,8,m5,8,0,4,m2,4,m3,4,m3,4,m5,8,m5,8,0,4,m5,4,m6,4,m6,2,m3,2,m1,4,m2,8,m2,1,0,7,m2,,1,0,7,m2,4,m6,4,m7,
8,h1,4,m7,4,h1,4,h1,4,m6,4,m7,4,h1,8,h1,4,m7,4,h1,8,h1,2,0,2,m3,2,m6,2,m7,8,h1,2,m7,2,h1,4,h3,4,h3,4,h2,4,h1,4,m7,8,m7,1,0,8,m7,4,0,4,m3,4,m6,4,m7,
8,h1,4,m7,4,h1,4,h1,4,m6,4,m7,4,h1,8,h1,4,m7,4,h1,8,h1,2,0,2,m3,2,m6,2,m7,8,h1,2,m7,2,h1,4,h3,4,h3,4,h2,4,h1,4,m7,6,m2,2,m3,2,0,4,0,4,m3,4,m6,4,m7,
};
//以下为原来事业部使用的音乐数据,程序进行了单独的特殊处理
const unsigned char openbuz[]={10,Y2304,10,0,10,Y2463,10,0,10,Y2740,10,0};
const unsigned char closebuz[]={10,Y2304,10,0,10,Y2066,10,0,10,Y2304,10,0,10,Y1736,10,0,10,Y2066,10,0,10,Y1838,10,0,10,Y1543,10,0};
const unsigned char pausebuz[]= {5,Y2732,15,0};
const unsigned char startbuz[]={5,Y2732,5,0,5,Y2564,5,0,5,Y2415,5,0,5,Y2310,5,0,5,Y2165,5,0};
const unsigned char endbuz[]=
{10,Y1968,20,0,30,Y1572,20,0,10,Y1968,20,0,20,Y1572,15,0,5,Y1968,15,0,10,Y2347,15,0,10,Y2347,10,0,10,Y2092,10,0,10,Y1968,10,0,
10,Y1760,10,0,5,Y1572,10,0,5,Y1572,15,0};
const unsigned char errbuz[]=
{15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,
15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,
15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,
15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,
15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,15,Y2732,10,0,15,Y2128,10,0,};
const unsigned char testbuz[]=
{5,Y2128,5,Y2242,5,0,5,Y2228,5,0,5,Y2564,5,0,5,Y2732,5,0,5,Y2294,5,0,5,Y2415,5,0,
5,Y2463,5,0,5,Y2347,5,0,5,Y2092,5,0,5,Y1968,5,0,5,Y2165,5,0,5,Y2128,5,0,
5,Y2049,5,0,5,Y2525,5,0,5,Y2604,5,0,5,Y2809,5,0,5,Y2404,5,0,5,Y2577,5,0,5,Y2632,5,0,5,Y2347,5,0,5,
Y2242,5,0,5,Y1968,5,0,5,Y2232,5,0,5,Y2128,5,0,5,Y2809,5,0};
const unsigned char lastbuz[]={5,Y2304,5,0,5,Y2463,5,0};
const unsigned char nwbuz[]={5,Y2732,5,0,5,Y2732,5,0};
const unsigned char lkeybuz[]={10,Y2304,10,0};
const unsigned char mf2591[]={5,Y2591,15,0};
const unsigned char mf2220[]={5,Y2220,15,0};
const unsigned char mf2165[]={5,Y2165,15,0};
const unsigned char mf2294[]={5,Y2294,15,0};
const unsigned char mf2370[]={5,Y2370,15,0};
const unsigned char mf2732[]={5,Y2732,15,0};
const unsigned char mf2427[]={5,Y2427,15,0};
const unsigned char mf2525[]={5,Y2525,15,0};
const unsigned char mf2564[]={5,Y2564,15,0};
//-------------------- 音乐数据表--结束 ------------------------------------------------------------
#ifndef PWM8B_CM
#define PWM8B_CM
#endif
//-----------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -