# 代码编辑器 **Repository Path**: wekay/code4STC51 ## Basic Information - **Project Name**: 代码编辑器 - **Description**: 本代码编辑器实现的目标功能: 1.常用的代码编辑功能,提高编辑效率的功能,如语法高亮显示,输入自动补全(基于QsciScintilla),函数列表,函数跳转,包含文件打开。 2. 设置编译器路径,编译器参数(SDCC)。 3. 生成C51的hex文件后,可以选择串口对目标芯片(STC12、STC15、STC8)下载。 4. C51工程采用《code::blocks》的组织方式,用后缀名为.cbp的xml的文件组织,可以直接打开《code::blocks》的工程文件(for MCS51). - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: https://blog.csdn.net/hwd00001/article/details/103021804 - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 15 - **Created**: 2023-03-28 - **Last Updated**: 2023-03-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 这里提供本编辑器可执行文件(exe)的下载链接: 1.Code51.[Code51_STC](https://download.csdn.net/download/hwd00001/12364125) 2.百度盘链接::https://pan.baidu.com/s/1Ihxb7WX0ozUuRs3KFyzApQ 提取码:i6my 3.源代码:百度盘链接:https://pan.baidu.com/s/1jlRvWgN2LFHTtnKogeUZZw 提取码:w437 4.源代码的码云链接:https://gitee.com/huangweide001/code4STC51 ## 1、菜单栏 ### 1.1菜单-->file ![除了example,其它都是常见的功能](https://images.gitee.com/uploads/images/2020/0605/153307_e4ae7eb2_5494481.png) example子菜单在实现时,要求将文件夹《example》放在与软件相同的目录下。example里面有子文件夹,例如图中的《01BasicCode》《02display》等。《01BasicCode》下面又有子文件夹,例如图中的《01target001》,后者里面就有一个同名的.cbp的文件,也就是《01target001.cbp》。如果工程文件名和所在目录不同名,将会检测不到工程文件,不能添加到example菜单中。详细的实现参考第8章[《子菜单及对话框》](https://blog.csdn.net/hwd00001/article/details/103135250)的相关源码注释。 ### 1.2菜单-->edit ![重点看Find](https://images.gitee.com/uploads/images/2020/0605/153307_1454370d_5494481.png) 重点介绍“Find”,查找的窗口如下: ![查找窗口](https://images.gitee.com/uploads/images/2020/0605/153307_838d7866_5494481.png) 如果打开查找窗口时已有选择文字, 所选文字将自动传入;当然也可以复制粘贴,手动输入。查找后的结果显示在“built output”窗口。双击窗口将读取鼠标所在行的文字对应的文件名和行数,进行跳转。 ![查找结果双击跳转](https://images.gitee.com/uploads/images/2020/0605/153307_65a87f85_5494481.png) 具体实现请参考第7章[《编译器命令与信息输出视图》](https://blog.csdn.net/hwd00001/article/details/103122721)。 ### 1.3菜单-->project![菜单-project](https://images.gitee.com/uploads/images/2020/0605/153307_64217288_5494481.png) “project”菜单的第4项是Built(编译工程),第5项是Clean(清除工程),第6项是Download(下载hex文件到目标芯片),第7项是Built and load(编译后下载hex文件,综合了4和6),第8项是最近打开的工程。编译工程就是调用SDCC的编译命令,写成了单独一个类《compileProject.py》,将在第7章[《编译器命令与信息输出视图》](https://blog.csdn.net/hwd00001/article/details/103122721)中详讲。 ![编译工程结果](https://images.gitee.com/uploads/images/2020/0605/153307_7c50863e_5494481.png) 下载hex文件也是一个类Programmer,在第9章[《STC51烧写协议及实现》](https://blog.csdn.net/hwd00001/article/details/103140833)中详讲。 ![下载hex结果](https://images.gitee.com/uploads/images/2020/0605/153307_c289b181_5494481.png) ### 1.4菜单-->setting ![菜单setting](https://images.gitee.com/uploads/images/2020/0605/153307_2283633b_5494481.png) #### 1.4.1芯片选择 菜单-->Setting(设置)包含4个子项,上图是“Chip”芯片选择,目前支持笔者手头上的芯片型号有: 1】STC12C5A08S2 2】STC15F2K60S2 3】STC8F2K32S2 4】STC8A8K64S4A12(与STC8F2K32S2相同协议) 芯片内部配置信息都不支持修改。支持的晶振频率也有限。参见第9章[《STC51烧写协议及实现》](https://blog.csdn.net/hwd00001/article/details/103140833)的介绍。 #### 1.4.2串口选择 ![串口选择](https://images.gitee.com/uploads/images/2020/0605/153307_10107ff3_5494481.png) 自动检测已有串口。 #### 标题1.4.3下载方式选择 ![下载方式选择窗口](https://images.gitee.com/uploads/images/2020/0605/153307_a7552255_5494481.png) 下载hex文件的方式:1】冷启动;2】发送[0x5a,0x3a,0x6c];3】自定义数据,输入时用空格隔开,2个十六进制数字对齐。 波特率是指目标芯片运行时的下载口的波特率。 #### 1.4.4编译器选项 ![编译器选项](https://images.gitee.com/uploads/images/2020/0605/153307_240e9df1_5494481.png) 编译器路径选择后保存在软件目录下的《setting.ini》文件中;外部ram则保存于工程文件《xxx.cbp》中。 ## 1.5菜单-->tool ![在这里插入图片描述](https://images.gitee.com/uploads/images/2020/0605/153308_fcef888f_5494481.png) 这个菜单目前有两个子项,第一个“Encode to UTF8”的功能是将“GB2313”编码的文件转换为“utf8”编码的文件。主要是考虑从keilC51转过来的文件有乱码,需要进行转换。 第二个是“串口工具”几乎完全借用网友ColinFred的代码,见链接:[Python3+PyQT5+Pyserial 实现简单的串口工具](https://blog.csdn.net/windowsyun/article/details/80001488)。主要考虑是一边用串口调试单片机程序,一边用串口下载,经常是下载时串口被占用,集成一个串口工具,下载前判断一下是否已经打开,如果打开就顺便关闭。串口工具相关的代码分析见第11章:[11--集成串口工具](https://blog.csdn.net/hwd00001/article/details/103510106) ## 1.6菜单-->window ![菜单window](https://images.gitee.com/uploads/images/2020/0605/153307_99ca26db_5494481.png) 这个window菜单只有“Project-Viewer”和“Built-viewer”是我加上去的,其它的都是《PYTHON QT GUI快速编程 PYQT编程指南》第9章第5节的例程照抄的。当“工程窗口”被关闭后,“Project-Viewer”处于不打钩状态,此时点击“Project-Viewer”,将使“工程窗口”重新出现。“Built-viewer”和“编译输出窗口”也是一样的关系。 # 2.工具栏 ![工具栏](https://images.gitee.com/uploads/images/2020/0605/153307_4f8334a3_5494481.png) 工具栏是把菜单中使用频率高的功能放到工具栏来。 # 3.右键菜单 ## 3.1工程窗口右键菜单 这部分的源码分析在第4章[《xml格式的工程文件与树状列表部件》](https://blog.csdn.net/hwd00001/article/details/103069177)。 ### 3.1.1添加文件 ![在这里插入图片描述](https://images.gitee.com/uploads/images/2020/0605/153307_c21a9f01_5494481.png) 在工程窗口中,右击除了文件名以外的地方都默认为添加文件;不过最好准确的添加,比如c文件右击“source”添加到《source》,h文件右击“header”添加到《header》。 ### 3.1.2删除文件 ![删除文件](https://images.gitee.com/uploads/images/2020/0605/153307_850c9d5a_5494481.png) 右击文件名,显示删除文件菜单。 ## 3.2编辑区右键菜单 这部分的代码分析在第5章[《多文档编辑区介绍》](https://blog.csdn.net/hwd00001/article/details/103082826)。 ### 3.2.1跳转到函数体 ![跳转到函数体](https://images.gitee.com/uploads/images/2020/0605/153307_014654ac_5494481.png) 当鼠标位于函数名时,右击将出现这个菜单,然后左击实现跳转到函数体。应该把宏定义跳转也包括进来,目前没有完成。 ## 3.2.2跳转(打开)到包含文件 ![打开包含文件](https://images.gitee.com/uploads/images/2020/0605/153308_073ac7ef_5494481.png) 当鼠标停留在#include行,右击将出现这个菜单,然后左击实现跳转到(或者打开)包含文件。 # 3.信息输出区的双击跳转 ![在这里插入图片描述](https://images.gitee.com/uploads/images/2020/0605/153308_b64e31e3_5494481.png) 当编译工程出现警告(warning)或者错误(error)时,双击该警告或者错误,将跳转到警告(错误)所在的源代码行。源码分析在第7章[《编译器命令与信息输出视图》](https://blog.csdn.net/hwd00001/article/details/103122721)第2节。