📄 12864lcd显示.c
字号:
//12864LCD显示温度&时钟程序
#include <AT89X52.h>
sbit Bell_Out = P1^0;//闹钟管脚输出,低有效
sbit DQ = P1^4;//ds1820data//温感数据口
sbit clock_clk = P3^5;//ds1302_clk//时钟同步
sbit clock_dat = P3^6;//ds1302_dat//时钟数据
sbit clock_Rst = P3^7;//ds1302_Rst//时钟复位
//键盘扫描
sbit Add_Key = P1^1;//加1键
sbit Dec_Key = P1^2;//减1键
sbit OK_Key = P1^3;//确定键
//引脚定义
sbit CS = P3^0; //片选 高电平有效 单片LCD使用时可固定高电平
sbit SID = P3^1; //数据
sbit SCLK = P3^2; //时钟
//为了编程方便定义的位变量
sbit a0 = ACC ^ 0;
sbit a1 = ACC ^ 1;
sbit a2 = ACC ^ 2;
sbit a3 = ACC ^ 3;
sbit a4 = ACC ^ 4;
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;
bit flag, Bell_Swh,Hourb,Minb,Kgb; //闹钟调时闪烁标志位
bit sec=0,min=0,hour=0,year=0,mon=0,day=0,weekk=0; //光标闪烁标志位
unsigned char id; //调时钟闪烁变量
unsigned char id2; //调闹钟闪烁变量
unsigned char d; //温度传送高4位字节
unsigned char e; //温度传送低4位字节
unsigned char S_1302; //读取小时寄存器数据
unsigned char H_1302; //读取分钟寄存器数据
unsigned char H_Bell; //读取闹钟RAM小时数据
unsigned char S_Bell; //读取闹钟RAM分钟数据
//Function Definition 函数声明
void Delay(int num); //延迟uM
void Init_DS18B20(void); //初始化温度感应器
unsigned char ReadOneChar(void); //读取温度传感器字节
void WriteOneChar(unsigned char dat); //发送指令到温度传感器
unsigned int ReadTemperature(void); //读取温度数据并转换为10进制
void clock_out(unsigned char dd); //1302时钟接收一个字节
unsigned char clock_in(void); //1302时钟发送一个字节
unsigned char read_clock(unsigned char ord); //读取1302时钟时间寄存器
void write_clock(unsigned char ord, unsigned char dd); //写数据或指令到1302
void Disp(void); //时间界面光标闪烁
void id_case1_key(void); //时间界面上下按键判别
void id_case2_key(void); //闹钟界面上下按键判别
void Set_time(unsigned char sel,bit sel_1); //判别时间光标位置,加或减
void Init_1302(void); //初始化时钟IC
void Timer0_Init(void); //TO中断初始化
void Set_Bell(unsigned char sel, bit sel_1); //判别闹钟时间光标位置,家或减
void Bell(void); //驱动蜂鸣器
//12864函数
void Write_char(bit start, unsigned char ddata); //写数据或者指令
void Send_byte(unsigned char bbyte); //发送一个字节
void Delaynms(unsigned int di); //延迟uM
void Lcd_init(void); //初始化LCD屏幕
void Disp_img(unsigned char *img); //插入LOGO 128*64
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s);//指定LCD位置写字符
void LCD_set_xy( unsigned char x, unsigned char y ); //指定LCD位置
unsigned char code num[]={"0123456789 :."};
unsigned char code yi[]={"一"};
unsigned char code er[]={"二"};
unsigned char code san[]={"三"};
unsigned char code si[]={"四"};
unsigned char code wu[]={"五"};
unsigned char code liu[]={"六"};
unsigned char code ri[]={"日"};
unsigned char code guan[]={"关"};
unsigned char code kai[]={"开"};
unsigned char code bt[]={"电子万年历"};
unsigned char code nian[]={"年"};
unsigned char code yue[]={"月"};
unsigned char code xq[]={"星期"};
unsigned char code sw[]={"室温"};
unsigned char code ssd[]={"℃"};
unsigned char code nzbz []={"ON"};
unsigned char code nzsd []={"闹钟设定"};
unsigned char code colon []={":"};
unsigned char code nzsjd []={"闹钟时候到!"};
unsigned char code xsfz[]={"H : M"};
unsigned char code space_c[]={" "};
//插入图片
unsigned char code logo[]={
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,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x06,0x00,0x00,0x30,0x00,0x00,0x37,0xF8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x06,0x00,0x01,0x20,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x06,0x00,0x02,0x60,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x38,0x06,0x00,0x16,0x40,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x06,0x00,0x24,0x00,0x3F,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0F,0x00,0x64,0x01,0xFF,0xF0,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0x1F,0x00,0x60,0x0F,0xFF,0xFC,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x17,0xBF,0xE0,0x60,0x3F,0xFF,0xFE,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0x80,0x80,0xFF,0x00,0x3F,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x00,
0x00,0x7E,0x01,0x81,0xF8,0x00,0x0F,0x01,0xE0,0x00,0x00,0x00,0x00,0x01,0xE6,0x00,
0x00,0x0E,0x03,0x43,0xEF,0xFC,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x03,0x7F,0x00,
0x00,0x0E,0x03,0x07,0xCF,0xFE,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x06,0x19,0x80,
0x00,0x0E,0x06,0x0F,0xBF,0xFE,0x0F,0x80,0xC0,0x00,0x3F,0x80,0x00,0x06,0x00,0xC0,
0x60,0x0E,0x06,0x1F,0x3F,0xBE,0x0F,0x00,0xC0,0x00,0xFF,0xC0,0x00,0x04,0x00,0xC0,
0x60,0x0E,0x0E,0x3C,0x7F,0x9E,0x0F,0x10,0xC0,0x81,0x80,0x60,0x01,0x84,0x00,0xC0,
0x60,0x0E,0x0C,0x38,0xFF,0xFE,0x1E,0x10,0xC1,0x83,0x00,0x21,0xC6,0x8C,0x00,0x60,
0x38,0x1E,0x18,0x70,0xFF,0xFE,0x3C,0x30,0xC3,0x0E,0x00,0x63,0x2C,0x8C,0xE0,0x30,
0x7F,0x9E,0x18,0x71,0xFF,0xFC,0x78,0x70,0xC3,0x18,0x00,0x62,0x29,0x8D,0xF8,0x18,
0x3E,0xBF,0x18,0xE1,0xFF,0xFC,0xF0,0x7C,0xC2,0x10,0x01,0xC2,0x25,0xF9,0x1E,0x08,
0x30,0x76,0x18,0xC1,0xFF,0xF1,0xE0,0xEC,0xC0,0x30,0x03,0x02,0x24,0xF9,0x03,0x8C,
0x20,0x66,0x11,0xC0,0xFF,0xE7,0x80,0x82,0x60,0x10,0x02,0x06,0x64,0x19,0x00,0x84,
0x20,0xC6,0x11,0x80,0xFF,0x9F,0x00,0x00,0xF0,0x19,0xC2,0x06,0x64,0x1F,0x10,0xCC,
0x01,0xC4,0x09,0x80,0x7F,0x7C,0x00,0x00,0xF8,0x0F,0x63,0x06,0x2C,0x1E,0x38,0xC8,
0x01,0x84,0x01,0x80,0x00,0xF8,0x0C,0x00,0xD8,0x00,0x23,0x06,0x38,0x12,0x01,0x98,
0x01,0x04,0x01,0x80,0x07,0xE0,0x18,0x00,0xCC,0x00,0x31,0x03,0x19,0xF6,0x01,0xF0,
0x00,0x04,0x01,0x98,0x7F,0x00,0x30,0x00,0x86,0x00,0x11,0x01,0x18,0x37,0x81,0x80,
0x00,0x04,0x01,0xC7,0xFC,0x00,0xE0,0x00,0x87,0x00,0x19,0x81,0x98,0x1D,0x9F,0x00,
0x00,0x04,0x01,0xC0,0x00,0x01,0x80,0x01,0x83,0x80,0x18,0xF0,0x98,0x18,0x03,0x00,
0x03,0x04,0x00,0xE0,0x00,0x07,0x00,0x01,0x01,0xC0,0xF8,0xD8,0x98,0xA8,0x03,0x00,
0x07,0x04,0x00,0xF0,0x00,0x1E,0x00,0x03,0x00,0xE0,0xC0,0x08,0x99,0xEF,0x3E,0x00,
0x0E,0x04,0x00,0x7C,0x00,0x7C,0x00,0x06,0x00,0x60,0xC0,0x08,0x99,0x12,0x36,0x00,
0x1C,0x04,0x00,0x3F,0xCF,0xF0,0x00,0x0C,0x00,0x30,0x40,0x0C,0x99,0x10,0x02,0x00,
0x3C,0x04,0x00,0x0F,0xFF,0xC0,0x00,0x38,0x00,0x18,0x7F,0xF8,0xFF,0x18,0x06,0x00,
0x3C,0x04,0x00,0x03,0xFF,0x00,0x00,0x60,0x00,0x00,0x3F,0xF0,0x66,0x1F,0xFC,0x00,
0x3C,0x04,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0C,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0C,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0C,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x18,0x04,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,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,
};
void Lcd_init(void) //初始化LCD
{
Delaynms(10); //启动等待,等LCD进入工作状态
CS=1;
Write_char(0,0x30); //8 位数据,基本指令集
Write_char(0,0x0c); //显示打开,光标关,反白关
Write_char(0,0x01); //清屏,将DDRAM的地址计数器归零
}
void Write_char(bit start, unsigned char ddata) //发送指令或者数据
{
unsigned char start_data,Hdata,Ldata;
if(start==0)
start_data=0xf8; //写指令
else
start_data=0xfa; //写数据
Hdata=ddata&0xf0; //取高四位
Ldata=(ddata<<4)&0xf0; //取低四位
Send_byte(start_data); //发送起始信号
Delaynms(5); //延时420u秒是必须的
Send_byte(Hdata); //发送高四位
Delaynms(1); //延时72u秒是必须的
Send_byte(Ldata); //发送低四位
Delaynms(1); //延时72u秒是必须的
}
void Send_byte(unsigned char bbyte) //串口发送一个字节(底层函数)
{
unsigned char i;
for(i=0;i<8;i++) //循环8位(一个字节)
{
SID=bbyte&0x80; //取出最高位
SCLK=1;
SCLK=0;
bbyte<<=1; //左移1位
}
}
void Delaynms(unsigned int di)
{
unsigned int i,db;
for(i=0;i<di;i++)
for(db=0;db<10;db++); //延迟72u秒左右以12MHz晶振
}
void Disp_img(unsigned char *img) //插入LOGO函数
{
unsigned char i,j;
unsigned int k = 0;
Write_char(0,0x36); //图形方式LCD指令
for(i=0;i<32;i++) //循环上半屏填充点
{
Write_char(0,0x80+i); //指定上半屏横坐标位置
Write_char(0,0x80); //指定上半屏纵坐标位置
for(j=0;j<16;j++)
{
Write_char(1,img[k++]); //填充对应点阵
}
}
for(i=0;i<32;i++) //循环下半屏填充点
{
Write_char(0,0x80+i);
Write_char(0,0x88);
for(j=0;j<16;j++)
{
Write_char(1,img[k++]);
}
}
}
void Clr_Scr(void) //清屏函数
{
Write_char(0,0x01);
}
void LCD_set_xy( unsigned char x, unsigned char y ) //指定LCD位置X为行Y为列
{
unsigned char address;
switch(x) //选择函数
{
case 0:
address = 0x80 + y;
break;
case 1:
address = 0x80 + y;
break;
case 2:
address = 0x90 + y;
break;
case 3:
address = 0x88 + y;
break;
case 4:
address = 0x98 + y;
break;
default:
address = 0x80 + y;
break;
}
Write_char(0, address); //写指令指定位置
}
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)//指定位置写字符串
{
LCD_set_xy( X, Y );
while (*s) //循环写字符串
{
Write_char( 1, *s ); //写数据
s ++;
Delaynms(1);
}
}
void LCD_Write_number(unsigned char s) //数字显示函数
{
Write_char(1,num[s]); //写数据
Delaynms(1);
}
void LCD_Write_week(unsigned char s) //星期显示
{
switch(s)
{
case 1:
LCD_Write_string(3,2,yi);
break;
case 2:
LCD_Write_string(3,2,er);
break;
case 3:
LCD_Write_string(3,2,san);
break;
case 4:
LCD_Write_string(3,2,si);
break;
case 5:
LCD_Write_string(3,2,wu);
break;
case 6:
LCD_Write_string(3,2,liu);
break;
case 7:
LCD_Write_string(3,2,ri);
break;
case 8:
LCD_Write_string(3,2,space_c);//显示空格,为调整时间用
break;
default:
break;
}
}
void Delay(int num) //延迟Nu秒函数
{
while(num--);
}
void Init_DS18B20(void) //初始化温度传感器ds1820
{
unsigned char x=0;
DQ = 1; //DQ复位
Delay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
Delay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
Delay(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
Delay(20);
}
unsigned char ReadOneChar(void) //读取温度传感器一个字节
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat) //发送指令到温度传感器
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01; //低位到高位
Delay(5);
DQ = 1;
dat>>=1; //右移1位
}
}
unsigned int ReadTemperature(void) //读取温度数值
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5; //放大10倍输出并四舍五入
return(t);
}
void clock_out(unsigned char dd) //1302时钟接收一个字节
{
ACC=dd;
clock_dat=a0; clock_clk=1; clock_clk=0;
clock_dat=a1; clock_clk=1; clock_clk=0;
clock_dat=a2; clock_clk=1; clock_clk=0;
clock_dat=a3; clock_clk=1; clock_clk=0;
clock_dat=a4; clock_clk=1; clock_clk=0;
clock_dat=a5; clock_clk=1; clock_clk=0;
clock_dat=a6; clock_clk=1; clock_clk=0;
clock_dat=a7; clock_clk=1; clock_clk=0;
}
unsigned char clock_in(void) //1302时钟发送一个字节
{
clock_dat=1;
a0=clock_dat;
clock_clk=1; clock_clk=0; a1=clock_dat;
clock_clk=1; clock_clk=0; a2=clock_dat;
clock_clk=1; clock_clk=0; a3=clock_dat;
clock_clk=1; clock_clk=0; a4=clock_dat;
clock_clk=1; clock_clk=0; a5=clock_dat;
clock_clk=1; clock_clk=0; a6=clock_dat;
clock_clk=1; clock_clk=0; a7=clock_dat;
return(ACC); //还原一个字节
}
unsigned char read_clock(unsigned char ord) //读取时钟数据
{
unsigned char dd=0;
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
clock_out(ord);
dd=clock_in();
clock_Rst=0;
clock_clk=1;
return(dd);
}
void write_clock(unsigned char ord, unsigned char dd)//写入时钟数据
{
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
clock_out(ord);
clock_out(dd);
clock_Rst=0;
clock_clk=1;
}
void Disp(void) //时间界面光标闪烁
{
unsigned int i=0;
unsigned char a=0,b=0,c=0,f=0;
i=ReadTemperature(); //读温度并送显
a=i/100;
LCD_set_xy(4,2);
LCD_Write_number(a);
b=i/10-a*10;
LCD_Write_number(b);
LCD_Write_number(12);//.
c=i-a*100-b*10;
LCD_Write_number(c);
if(hour==1) //小时闪烁标志位
{
if(flag==1) //光标闪烁
{
d=read_clock(0x85); //读小时
e=d;
d=d>>4; //十位数据
e=e&0x0f; //个位数据
LCD_set_xy(3,3); //指定LCD屏位置
LCD_Write_number(d); //写入十位数值
LCD_Write_number(e); //写入个位数值
}
else
{
LCD_set_xy(3,3);
LCD_Write_number(10); //显示空格
LCD_Write_number(10); //显示空格
}
}
else
{
d=read_clock(0x85); //读小时
e=d;
d=d>>4;
e=e&0x0f;
LCD_set_xy(3,3);
LCD_Write_number(d);
LCD_Write_number(e);
}
if(flag == 0)
LCD_Write_number(11); //显示:
else
LCD_Write_number(10); //显示空格
if(min==1) //分钟闪烁标志位
{
if(flag==1)
{
d=read_clock(0x83); //读分钟
e=d;
d=d>>4;
e=e&0x0f;
LCD_Write_number(d);
LCD_Write_number(e);
}
else
{
LCD_Write_number(10); //显示空格
LCD_Write_number(10);
}
}
else
{
d=read_clock(0x83); //读分钟
e=d;
d=d>>4;
e=e&0x0f;
LCD_Write_number(d);
LCD_Write_number(e);
}
if(flag == 0)
LCD_Write_number(11); //显示:
else
LCD_Write_number(10); //显示空格
if(sec==1) //秒闪烁标志位
{
if(flag==1)
{
d=read_clock(0x81); //读秒
e=d;
d=d>>4;
e=e&0x0f;
LCD_Write_number(d); //送显示
LCD_Write_number(e);
}
else
{
LCD_Write_number(10); //显示数字空格
LCD_Write_number(10);
}
}
else
{
d=read_clock(0x81); //读秒
e=d;
d=d>>4;
e=e&0x0f;
LCD_Write_number(d);
LCD_Write_number(e);
}
if(year==1) //年闪烁标志位
{
if(flag==1)
{
d=read_clock(0x8d); //读年
e=d;
d=d>>4;
e=e&0x0f;
LCD_set_xy(2,2);
LCD_Write_number(d);
LCD_Write_number(e);
}
else
{
LCD_set_xy(2,2);
LCD_Write_number(10); //显示空格
LCD_Write_number(10);
}
}
else
{
d=read_clock(0x8d); //读年
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -