📄 htd30v02.c
字号:
//06.08.02 显示板显示一直GOOD修改 LINE 6747
//06.08.03 1)修改IC卡值改变 LINE 1586. 2)打印格式
//06.08.03 1)修改停车前15分钟的记录 LINE 5010
//06.08.03 1)打印停车前15分钟的记录时 以最后一记录时间为准向前推15分钟 LINE 6982
//06.08.03 修改国标最近两天的疲劳记录(以停车时间为准) case up_tire
//06.08.03 断电作为停车处理,记录断电前20秒所有数据 LINE 5295
//06.08.04 //c 使卡在拔掉后断电
//06.08.04 //cc04 修改两天里程
//06.08.05 确定两日历天内的开车时间 LINE 4333 void hour_2day(void)
/////////////////////调试////////////////////////////////////////////////////////////////
//CC调试NEED_INI
///////////////////////////////////////////////////////////////////////////////////////////////////
//system include
#include "AT89X52.H"
#include "common.h"
#include "string.h"
#include "STDIO.H"
#include "INTRINS.H"
#include "absacc.h"
#include "intrins.h"
//usb include
//#include "COMMON.H"
#include "SL811.H"
#include "TPBULK.H"
#include "HAL.H"
#include "HPI.H"
//MEMORY UNIT DEFINED
#include "FM3164.H"
#include "FLASH.H"
#include "CARD_SAME.H"
#include "CARD_DRIVER.H"
#include "CARD_MANAGE.H"
#include "SHOW_MEMO.H"
#define com1_rece_buf UartCmdBlock.Com1_Rece_Buf
#define com1_send_buf UartRspBlock.Com1_Send_Buf
#define flash_mid_add low_word_flash.byte_flash_add.Flash_Mid_Add
#define flash_low_add low_word_flash.byte_flash_add.Flash_Low_Add
#define LOW_WORD_FLASH low_word_flash.word_flash_add;
extern FILE_INFO xdata ThisFile;
extern unsigned char xdata DBUF[2060];
extern SYS_INFO_BLOCK xdata DeviceInfo;
//extern XXGFLAGS bdata bXXGFlags;
extern bit SLAVE_FOUND; // Slave USB device found
extern bit TIMEOUT_ERR; // timeout error during data endpoint transfer
extern bit DATA_STOP; // device unplugged during data transfer
extern bit bData1;
extern void fat_to_time(uchar *fat_style_ptr,uchar *target_time_ptr);
extern void time_to_fat(uchar *source_time_ptr,ulong *fat_style_ptr);
uchar xdata sel_hc377 _at_ 0xa000; //p15=0,p16=1,p17=1
//uchar xdata sel_sl811_memo _at_ 0x6000; //p15=1,p16=0,p17=0
//uchar xdata sel_sl811_data _at_ 0x6001; //p15=1,p16=0,p17=0
//port define
sbit FM3164_SCL=P1^0;
sbit FM3164_SDA=P1^1;
sbit CARD_SCL=P1^2;
sbit CARD_SDA=P1^3;
sbit EEPCON=P1^4; //=1表示外存储器控制权给显示部分,=0表示外存储器控制权给主控部分
sbit SEL_OTHERS=P1^5;
sbit SEL_IN_LOW=P1^6;
sbit SEL_IN_HIGH=P1^7;
sbit SPEED_IN=P3^2;
//sbit S_SDA=P1^3; //cc 修改硬件前
sbit S_SDA=P3^3; //cc 修改硬件后
sbit USBIN=P3^4; //检测PC-USB的5V,0为与PC电源相连
sbit MASTER_SLAVER=P3^5; //master/slave usb的主从控制,0控制为MAST,1为SLAVE
//bit direct address flags define
uchar data mirror_377;
//sbit a16=mirror_377^0;
//sbit a17=mirror_377^1;
//sbit a18=mirror_377^2;
//sbit a19=mirror_377^3;
//sbit a20=mirror_377^4;
//sbit rst811=mirror_377^5;
//sbit o1=mirror_377^6;
//sbit ext_vcc=mirror_377^7;
//uchar bdata in_buffer1;
//sbit in1=in_buffer1^0;
//sbit in2=in_buffer1^1;
//sbit in3=in_buffer1^2;
//sbit in4=in_buffer1^3;
//sbit in5=in_buffer1^4;
//sbit in6=in_buffer1^5;
//sbit in7=in_buffer1^6;
//sbit skid=in_buffer1^7;
//uchar bdata in_buffer2;
//sbit in9=in_buffer2^0;
//sbit in10=in_buffer2^1;
//sbit in11=in_buffer2^2;
//sbit in12=in_buffer2^3;
//sbit in13=in_buffer2^4;
//sbit in_user=in_buffer2^5;
//sbit keelover=in_buffer2^6;
//sbit card_find=in_buffer2^7;
uchar card_out1;
uchar bdata flag1;
sbit dingshi=flag1^0; //设定的时间到标志
sbit keel_start=flag1^1; //当前的倾覆数据开始,用来判断结束
sbit receive_ok=flag1^2; //=1 主通道有命令进入标志
sbit start_rece1=flag1^3; //=1 means had get the head of channle 1
sbit bit_rate=flag1^4; //=1 means 115200bps,=0 means 9600bps
sbit jly_dkq=flag1^5; //=0是记录仪,=1是读卡器
sbit show_ok=flag1^6; //display department is ready set bit 1
sbit temp_bit=flag1^7; //临时使用的位标志
uchar bdata flag2;
sbit sel_ir=flag2^0; //选择了红外传输=1
sbit second_inc=flag2^1; //秒到标志
sbit minute_inc=flag2^2; //分钟到标志
sbit hour_inc=flag2^3; //小时到标志
sbit day_inc=flag2^4; //天到标志
sbit full_read=flag2^5; //进入全读模式
sbit over_skid=flag2^6; //刹车时间超标标志
sbit keel_over=flag2^7; //倾覆标志
uchar bdata flag3;
sbit pre_over_speed=flag3^0; //预超速超标标志
sbit over_pos_acc=flag3^1; //正向加速度超标标志
sbit over_neg_acc=flag3^2; //负向加速度超标标志
sbit user_triger=flag3^3; //用户触发标志
sbit lost_touch=flag3^4; //一旦需要将波特率从115200降为9600时置1
sbit full_frame=flag3^5; //进入32768字节读取模式
sbit check_show=flag3^6; //定时检查显示部分是否有请求要求响应
sbit head_tail=flag3^7; //=1表示代表国标命令查询小时速度时的第一个数据是在FLASH中后64字节,=0表示在FLASH中前64字节
uchar bdata flag4;
sbit old_card_exist=flag4^0; //上次判断时卡存在标志
sbit card_in=flag4^1; //卡插入判到
sbit card_out=flag4^2; //卡拔出判到
sbit send_ext_ok=flag4^3; //在有扩展数据要输出时扩展通讯数据发送完毕时=1,否则为0
sbit old_start=flag4^4; //上一秒的起停状况,0表示停车状态,1表示启动状态
sbit time_100ms=flag4^5; //100毫秒到标志
sbit head_local=flag4^6; //=1表示代表国标命令查询小时速度时的第一个数据是在FLASH中(由flash_address.flash_page指示),=0表示在FM3164中
sbit send_ok=flag4^7; //在有扩展数据要输出时通讯数据头发送完毕,或者在无扩展数据要输出时所有数据发送完毕的时候=1,否则为0
uchar bdata flag5; //该字节需要在RUN_SYMBOL中进行保存
sbit now_start=flag5^0; //当前在行进中置1,保存在铁电中便于断电恢复
sbit have_speed=flag5^1; //have one minute speed in this hour at least,保存在铁电中便于断电恢复
sbit now_log_on=flag5^2; //=1表示当前的登录状态为有效,保存在铁电中便于断电恢复
sbit over_time_save=flag5^3; //用来描述当前的超驾记录是否被记录下来
sbit in_touch=flag5^4; //进入了通讯有效区,115200BPS,此时主机与上位机联系成功,可自由通讯直至该标志失效,但未必是与操作软件握手的标志
sbit now_bps=flag5^5; //判断当时的通讯标志,在115200=1,在9600=0
sbit write_flash=flag5^6; //当前正在进行写入FLASH的标志
sbit over_speed=flag5^7; //超速标志
uchar bdata op_mode;
sbit need_ini=op_mode^0; //未经初次初始化,需要进行
sbit normal_mode=op_mode^1; //=1当前在装车模式,判断是否退出主循环
sbit need_assemble=op_mode^2; //为1当前在归库模式,需要执行装车命令后才可使用
sbit adjust_mode=op_mode^3; //为1当前在调试模式,可以当作正常已执行装车命令的记录仪使用
sbit ext_ram=op_mode^4; //当前在写FLASH,被中断打断就要置1便于写程序重新开始
sbit modechanged=op_mode^5; //=0表示在Normal模式,=1表示模式已改变
sbit mastermode=op_mode^6; //=0表示在Slave模式,=1表示在Master模式
sbit operatmode=op_mode^7; //=0表示Master或Slave模式未初始化,=1表示已初始化
uchar bdata tire_symbol;
sbit find_tire=tire_symbol^0; //当前已经判断得到了疲劳驾驶,一旦停车或断电就将记录
sbit taken_start=tire_symbol^1; //当前已经判断得到了用于统计疲劳驾驶的开车时间,存放在oldstarttime中,在find_tire由0变1时写入该驾驶员当前疲劳指针所指位置,在find_tire由1变0时清除
sbit interval_symbol=tire_symbol^2;//当前的设定间隔有非0的速度,需要在存满后转移到FLASH中去
sbit zone1_over=tire_symbol^3; //FLASH第1区的数据即将溢出的标志,=1表示在每次登录的时候要用语音提示“请您上传数据”
sbit zone2_over=tire_symbol^4; //FLASH第2区的数据即将溢出的标志,=1表示在每次登录的时候要用语音提示“请您上传数据”
sbit zone3_over=tire_symbol^5; //FLASH第3区的数据即将溢出的标志,=1表示在每次登录的时候要用语音提示“请您上传数据”
sbit zone4_over=tire_symbol^6; //FLASH第4区的数据即将溢出的标志,=1表示在每次登录的时候要用语音提示“请您上传数据”
sbit zone5_over=tire_symbol^7; //FLASH第5区的数据即将溢出的标志,=1表示在每次登录的时候要用语音提示“请您上传数据”
uchar bdata s_order1;
sbit time_flash=s_order1^0; //时间刷新
sbit speed_flash=s_order1^1; //速度刷新
sbit vcc_flash=s_order1^2; //车辆特征系数刷新
sbit driver_flash=s_order1^3; //驾驶员代码刷新
sbit distance_flash=s_order1^4; //总里程刷新
sbit tire_over=s_order1^5; //语音信息申请刷新
sbit pre_sp_flash=s_order1^6; //预超速限刷新
sbit over_sp_flash=s_order1^7; //超速限刷新
uchar bdata s_order2;
sbit sp_15_flash=s_order2^0; //停车前15分钟平均车速刷新
sbit tire_flash=s_order2^1; //疲劳记录刷新
sbit udisk_in=s_order2^2; //优盘插入
sbit trans_flash=s_order2^3; //传输数据比例刷新
sbit mode_change=s_order2^4; //操作状态变更
sbit type_change=s_order2^5; //操作类型变更
sbit card_change=s_order2^6; //卡状态变化
sbit show_trans=s_order2^7; //正在与上位机通讯
uchar bdata s_order3;
sbit start_stop=s_order3^0; //当前车辆起停状态变化
sbit pre_tire_flash=s_order3^1;
sbit over_tire_flash=s_order3^2;
uchar bdata s_ask1;
sbit ask_log_off=s_ask1^0; //注销请求
sbit print_enter=s_ask1^1; //打印确认
sbit ask_tire=s_ask1^2; //疲劳记录申请
sbit ask_15min=s_ask1^3; //停车前15分钟速度数据申请
sbit ask_distance=s_ask1^4; //总里程数据申请
sbit data_lost=s_ask1^5; //上位机发送信息缺损
sbit ask_host=s_ask1^6; //申请主机通讯联机
sbit down_to_card=s_ask1^7; //用户干预要求将信息下载到用户卡中
//uchar bdata s_ask2;
uchar bdata s_card_type;
sbit card_exist=s_card_type^0; //=1 means card is plug in卡插入/拔出
sbit card_type=s_card_type^1; //管理卡/个人卡,=1表示是管理员卡,=0代表是普通卡,该位只在card_exist=1且card_right=1即有合法卡的情况下才有意义;
sbit card_right=s_card_type^2; //非法卡/合法卡,=1表示是合法卡,=0代表是非法卡,该位只在card_exist=1即有卡的情况下才有意义;
sbit right_driver=s_card_type^3; //非法/合法驾驶员
sbit log_status=s_card_type^4; //登录/注销
sbit licence_ok=s_card_type^5; //驾照有效/失效
sbit have_order=s_card_type^6; //有/无命令要执行
sbit order_confirm=s_card_type^7;//命令执行正确/错误
uchar idata recorder_status; //记录仪的状态字,轮询的第2字,%4=0。。。
uchar bdata connect_status; //连接状态字,轮询的第1字,它的状态必须被及时信息更新,保证实时性
sbit poll_jly_dkq=connect_status^0; //BIT0:0为读卡器,1为记录仪
sbit poll_card_exist=connect_status^1; //BIT1:0为无卡,1为有卡
sbit poll_card_right=connect_status^2; //BIT2:0为卡无效,1为卡有效
sbit poll_card_type=connect_status^3; //BIT3:0为管理卡,1为用户卡
sbit poll_recorder_pass=connect_status^4; //BIT4:0为主机写密码校验已通过,1为未通过
sbit poll_card_pass=connect_status^5; //BIT5:0为卡的写密码校验已通过,1为未通过
sbit poll_undefined0=connect_status^6; //BIT6:未定义
sbit poll_available=connect_status^7; //BIT7:设备合法为1,非法为0
bit uart_in_dbuf;
//uchar xdata speed_down;
xdata BYTE set_time;
xdata time_set1;
xdata after_set_1;
xdata uchar c_time[6];
xdata uchar now_in_order;
xdata uchar modify_password;
uchar xdata usb_link_time;
//xdata uchar ptr_c;
xdata uchar old_user_triger,now_user_triger;
xdata uchar last_neg_once;
xdata union
{
uchar temp_byte[2];
uint temp_word;
}tempx;
xdata uchar head_tail1;
typedef struct
{
uchar speed_per;
uchar status1_per;
uchar status2_per;
}SPEED_STATUS,*PSPEED_STATUS;
data union
{
uchar temp_byte[2];
uint temp_word;
}tempc,tempd;
data union
{
ulong temp_long;
uint temp_word[2];
uchar temp_byte[4];
}tempe;
data union
{
uint flash_page;
uchar flash_arr[2];
struct
{
uchar page_MSB;
uchar page_LSB;
}flash_byte;
}flash_address;
data union
{
uint add_word;
uchar add_byte[2];
}add_start; //I2C start address that need operate
idata union{
uint km_word;
uchar km_byte[2];
}km_pulse;
idata union{
ulong distance_long; //now distance unit is 0.1km,read it every power on,re-caculate per_day or km_pulse changed
uchar distance_byte[4];
}distance;
typedef struct //用来传递参数的结构,每次从
{
uint ptr_address; //指针的地址
uint data_address; //数据要被记录的指针
uchar page_number; //每个页面可记录的条数
uchar info_number; //记录满后要转移到FLASH的序号
}SAVE_TO_MEM;
uchar idata time5ms;
uchar idata tail_time; //上电的时间秒数或者最后记录的尾限,用来限定负向作用域的大小,超过16后停止自增,在事件触发当时如果该字节的数额不足,将以此为负向作用域的大小
uchar idata pos_time; //正向作用域时间秒数,只可由事件触发后变大,每秒自减1,为0后停止自减,
uchar idata neg_time; //负向作用域时间秒数,只可由事件触发后变大,每秒自增1,超过16后停止自增,每当事件标志有效时判断该字节为8的倍数时进行写FLASH并减8,直至为零
uchar idata now_control; //按照0-7位分别对应1-7合法及非法驾驶员的关系,分别在检测到开车时把对应的位置1,而在每一个可以被6整除的分钟到达时写入,上电时需要对记录队列进行检查重置,并将该值清0
uchar idata tempi; //临时变量
uchar idata uart_sendhead;
uchar idata uart_sendtail;
uchar idata uart_recehead;
uchar idata uart_recetail;
xdata int uart_recehead1;
xdata int uart_recetail1;
uchar idata times;
uchar idata flash_high_add;
uchar xdata after_b4_sd;
uchar xdata mod_driver;
uchar xdata tempy;
union
{
struct
{
uchar Flash_Mid_Add;
uchar Flash_Low_Add;
}byte_flash_add;
uint word_flash_add;
}low_word_flash;
uchar idata bitrate_time;
uchar idata checksum_rece; //uart data checksum,is result of all receive data xor
uchar idata checksum_send; //uart data checksum,is result of all send data xor
uchar idata over_sp_time; //连续超速的时间,超过10秒(待定)的将被作为真正的超速记录下来
uchar idata now_speed; //当前秒的车速
uchar idata now_driver_num; //无卡登录是8,0-6是合法驾驶员,7是非法驾驶员,每次变换登录时和修改驾驶员代码时修改
uint idata old_second_pulse; //上一秒的脉冲,用来甄别是否需要向显示部分发送新的速度
uchar idata speed_peak; //峰值速度
uchar idata time20ms;
uchar data tempa,tempb;
uchar idata last_8second; //按位判断,每秒左移一位并将末位的根据该秒是/否发生速度置1/清0,最后的5位是用来确定启动的条件,而末位是用来判定停车的条件
uchar idata temp_arr[9];
uchar idata last_keel; //按位判断,每0.2秒左移一位并将末位的根据是/否发生倾覆置1/清0,最后的5位是用来确定倾覆的条件,而末位是用来判定退出倾覆的条件
uchar idata old_card_type;
uchar idata now_time[6];
uchar data interval_speed; //区间时间内的平均速度
uchar idata interval_status1; //区间时间内的状态,如果任何一个0.2秒有效就认为是有效
uchar idata interval_status2; //区间时间内的状态,如果任何一个0.2秒有效就认为是有效
uchar idata interval_second; //区间记录当前已经出现的秒数
uint idata interval_pulse; //区间时间内的脉冲数,用来统计区间平均速度
uchar idata toggle_time; //记录进入当前USB模式的时间,用来判断是否需要切换模式
uchar data pulse_period; //存放最后0.2秒的脉冲数
uchar data old_pulse_period; //存放最后0.2秒的脉冲数
uint xdata pulse_period_20;
uint data speed_pulse;
uchar xdata stop_20_time;
ulong data day_pulse;
uchar idata order_name;
uchar idata time_uart;
uchar xdata begin_tire;
uchar xdata stop_time[6];
bit mma;
//uchar record_pt; //now the localation will be recorded in ram
//uchar keel_time;
//uchar period_pulse;
//uchar second_pt;
//uchar old_order1; //用来判断是否有发布命令的变化,确定是否要写入显示部分的IIC
//uchar old_order2; //用来判断是否有发布命令的变化,确定是否要写入显示部分的IIC
//uchar idata last_frame; //全读的上次发送的帧号
uint xdata over_skid_time;
uchar xdata no_skid;
uchar xdata have_int;
uchar xdata tire_alarm;
uchar idata in_buffer1;
uchar idata in_buffer2;
uchar xdata hour_pulse;
uchar xdata usb_time;
uchar xdata alarm_time;
uchar xdata error_time;
uchar xdata now_status; //当前的记录仪所在模式:空白/调试/入库/使用
ulong xdata drive_time;
uint xdata spare_time;
uint xdata hour_number;
uint xdata second_pulse;
uint xdata minute_pulse;
uint xdata old_minute_pulse;
uint xdata over_speed_time;
uchar xdata car_mode;
uchar xdata flash_buf[128] _at_ 0x0280;
uchar xdata eep_buf[32];
uchar xdata now_recorder[4]; //now what the ic card pluged into,it series num will be record
uchar xdata now_driver[3];
uchar xdata old_time[6];
uchar xdata last_time[6];
uchar xdata oldstarttime[6];
uchar xdata oldstoptime[6];
uchar xdata log_user[8]; //当前登录的用户识别码,在通讯握手后移交到下位机
xdata struct
{
SPEED_STATUS speed_status[40]; //100
uchar last_ptr; //指向最后一个已经被写到的EEP的位置的偏移量
uchar now_ptr; //当前的记录偏移量
}sp_st_ram _at_ 0x0100;
UART_RECE_BLOCK xdata UartCmdBlock _at_ 0x0200;
UART_SEND_BLOCK xdata UartRspBlock _at_ 0x0240;
xdata union{
ulong cal_long;
uint cal_word[2];
uchar cal_byte[4];
}caculate;
xdata union
{
uchar para_vehi[16];
struct
{
uchar mute_8_sw;
uchar keel_detect_sw;
uchar print_plus_sw;
uchar function_sw;
uchar pre_oversp_lmt;
uchar oversp_lmt;
uchar rec_interval;
uchar pos_acc_lmt;
uchar neg_acc_lmt;
uchar tire_print;
uchar skid_remain_time;
uchar nullity_07;
uchar nullity_8f;
uchar run_sec;
uchar rest_sec;
uchar over_time_set;
}para_arr;
}parameter;
xdata union{
uint vcc_word; //the vcc*8 of the vehicle,read it every power on
uchar vcc_byte[2];
}vcc;
uchar code firmware_ver[8]={0x00,0x01,0x05,0x06,0x01,0x00,0x00,0x00}; //硬件的版本号和日期,根据实际的内容要作修改,本例为V0。01,2005/06/01。00:00:00
uchar code print0[]={0X1B,0X40,0X1C,0X26,0X1C,0X69,0X0}; /*set print */
uchar code print1[]={0XB3,0XB5,0XC5,0XC6,0XBA,0XC5,0XC2,0XEB,0X3A,0x20}; //车牌号码:
uchar code print2[]={0XB3,0XB5,0XC5,0XC6,0XB7,0XD6,0XC0,0XE0,0X3A,0x20}; //车牌分类:
uchar code print3[]={0XBC,0XDD,0XCA,0XBB,0XD4,0XB1,0XB4,0XFA,0XC2,0XEB,0X3A,0x20}; //驾驶员代码:
uchar code print4[]={0XBC,0XDD,0XCA,0XBB,0XD6,0XA4,0XBA,0XC5,0XC2,0XEB,0X3A,0x20}; //驾驶证号码:
uchar code print5[]={0XB2,0XBB}; //不
uchar code print6[]={0XCA,0XC7,0XB1,0XBE,0XB3,0XB5,0XBA,0XCF,0XB7,0XA8,0XBC,0XDD,0XCA,0XBB,0XD4,0XB1}; //是本车合法驾驶员
uchar code print7[]={0XB4,0XF2,0XD3,0XA1,0XCA,0XB1,0XBC,0XE4,0X3A,0x20}; //打印时间:
uchar code print8[]={0XC4,0XEA,0XD4,0XC2,0XC8,0XD5,0XCA,0XB1,0XB7,0XD6,0XC3,0XEB}; //年月日时分秒
uchar code print9[]={0XB4,0XCB,0XB4,0XCE,0XCD,0XA3,0XB3,0XB5,0XC7,0XB0,0X31,0X35,0XB7,0XD6,0XD6,0XD3,0XB1,0XBE}; //此次停车前15分钟本
uchar code print10[]={0XC8,0XCB}; //人
uchar code print11[]={0XB3,0XB5}; //车
uchar code print12[]={0XB5,0XC4,0XC6,0XBD,0XBE,0XF9,0XCB,0XD9,0XB6,0XC8,0X20,0X20,0X20,0X20,0X20,0X20,0X6B,0X6D,0X2F,0X68}; //的平均速度 km/h
uchar code print13[]={0XBC,0XDD,0XCA,0XBB,0XD6,0XA4,0XBA,0XC5,0XC2,0XEB,0XCE,0XAA}; //驾驶证号码为
uchar code print14[]={0XB5,0XC4,0XD7,0XEE,0XBD,0XFC,0XC6,0XA3,0XC0,0XCD,0XBC,0XDD,0XCA,0XBB,0XBC,0XC7,0XC2,0XBC,0XA3,0XBA,0x20};//的最近疲劳驾驶记录:
uchar code print15[]={0XB4,0XD3}; //从
uchar code print16[]={0XB5,0XBD}; //到
uchar code print17[]={0XCD,0XA3,0XB3,0XB5,0XC7,0XB0,0X32,0X30,0XC3,0XEB,0XD2,0XC9,0XB5,0XE3,0XCA,0XFD,0XBE,0XDD,0X3A,0x20}; //停车前20秒疑点数据:
uchar code print18[]={0XCD,0XA3,0XB3,0XB5,0XCA,0XB1,0XBC,0XE4,0X3A,0x20}; // 停车时间:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -