STATIC_COMMAND_START STATIC_COMMAND_END
时间: 2024-03-29 19:33:26 浏览: 18
STATIC_COMMAND_START和STATIC_COMMAND_END是两个特殊标记,用于标识一个静态命令的开始和结束。静态命令是指在对话中由用户直接输入的命令,而不是提出问题或者寻求解决方案。这些命令通常用于执行特定的操作或者触发某些功能。
在CSDN的C知道中,我们使用这两个标记来识别并处理静态命令。当用户输入一个静态命令时,我们会根据具体的命令进行相应的处理,例如执行搜索、打开链接、展示特定内容等。
请告诉我您具体想要了解的静态命令,我将为您提供更详细的信息。
相关问题
SSD1309 SPI驱动代码
以下是一个基于STM32的SSD1309 SPI驱动代码示例:
```c
#include "stm32f10x.h"
#include "stm32f10x_spi.h"
#define SSD1309_DC_PIN GPIO_Pin_6
#define SSD1309_DC_PORT GPIOB
#define SSD1309_CS_PIN GPIO_Pin_7
#define SSD1309_CS_PORT GPIOB
#define SSD1309_RST_PIN GPIO_Pin_8
#define SSD1309_RST_PORT GPIOB
#define SSD1309_WIDTH 128
#define SSD1309_HEIGHT 64
static uint8_t ssd1309_buffer[SSD1309_WIDTH * SSD1309_HEIGHT / 8];
void ssd1309_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
/* GPIO clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
/* SPI clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
/* Configure SCK, MOSI and NSS pins as Alternate Function Push Pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure DC, CS and RST pins as Output Push Pull */
GPIO_InitStructure.GPIO_Pin = SSD1309_DC_PIN | SSD1309_CS_PIN | SSD1309_RST_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(SSD1309_DC_PORT, &GPIO_InitStructure);
/* Set RST pin low to reset SSD1309 */
GPIO_ResetBits(SSD1309_RST_PORT, SSD1309_RST_PIN);
Delay(10);
GPIO_SetBits(SSD1309_RST_PORT, SSD1309_RST_PIN);
Delay(10);
/* Configure SPI */
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
/* Enable SPI */
SPI_Cmd(SPI2, ENABLE);
/* Initialize SSD1309 */
ssd1309_command(0xAE); // Display off
ssd1309_command(0xD5); // Set display clock divide ratio/oscillator frequency
ssd1309_command(0x80); // Set divide ratio
ssd1309_command(0xA8); // Set multiplex ratio
ssd1309_command(0x3F); // Set to 64 COM lines
ssd1309_command(0xD3); // Set display offset
ssd1309_command(0x00); // No offset
ssd1309_command(0x40); // Set display start line
ssd1309_command(0x8D); // Charge pump
ssd1309_command(0x14); // Enable charge pump
ssd1309_command(0x20); // Set memory addressing mode
ssd1309_command(0x00); // Horizontal addressing mode
ssd1309_command(0xA0); // Set segment remap
ssd1309_command(0xC8); // Set COM output scan direction
ssd1309_command(0xDA); // Set COM pins hardware configuration
ssd1309_command(0x12); // Alternative configuration
ssd1309_command(0x81); // Set contrast control
ssd1309_command(0xCF); // Set contrast
ssd1309_command(0xD9); // Set pre-charge period
ssd1309_command(0xF1); // Phase 1 period of 15 DCLKs, Phase 2 period of 1 DCLK
ssd1309_command(0xDB); // Set VCOMH deselect level
ssd1309_command(0x40); // 0.77*VCC
ssd1309_command(0xA4); // Set entire display on/off
ssd1309_command(0xA6); // Set normal display
ssd1309_command(0xAF); // Display on
}
void ssd1309_command(uint8_t cmd)
{
GPIO_ResetBits(SSD1309_DC_PORT, SSD1309_DC_PIN);
GPIO_ResetBits(SSD1309_CS_PORT, SSD1309_CS_PIN);
SPI_I2S_SendData(SPI2, cmd);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET);
GPIO_SetBits(SSD1309_CS_PORT, SSD1309_CS_PIN);
}
void ssd1309_data(uint8_t *data, uint32_t size)
{
GPIO_SetBits(SSD1309_DC_PORT, SSD1309_DC_PIN);
GPIO_ResetBits(SSD1309_CS_PORT, SSD1309_CS_PIN);
while (size--) {
SPI_I2S_SendData(SPI2, *data++);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET);
}
GPIO_SetBits(SSD1309_CS_PORT, SSD1309_CS_PIN);
}
void ssd1309_display(void)
{
ssd1309_command(0x21); // Set column address
ssd1309_command(0x00); // Column start address
ssd1309_command(0x7F); // Column end address
ssd1309_command(0x22); // Set page address
ssd1309_command(0x00); // Page start address
ssd1309_command(0x07); // Page end address
ssd1309_data(ssd1309_buffer, sizeof(ssd1309_buffer));
}
void ssd1309_clear(void)
{
memset(ssd1309_buffer, 0, sizeof(ssd1309_buffer));
}
```
这个驱动代码基于STM32F10x系列芯片,使用SPI2控制SSD1309 OLED显示屏。在初始化函数`ssd1309_init()`中,首先配置GPIO和SPI,然后通过I/O口控制SSD1309的复位和初始化。接着,发送一系列命令配置SSD1309的工作模式和显示参数。在`ssd1309_command()`和`ssd1309_data()`函数中,使用SPI接口向SSD1309发送命令和数据。最后,`ssd1309_display()`函数将屏幕缓存中的数据写入SSD1309,`ssd1309_clear()`函数将屏幕缓存清空。
帮我把一下lisp代码转成C#,实现相同的功能:(vl-load-com) ; 加载VL函数 (setq source_text nil) ; 设源文字为全局变量 (defun c:22 (/ en en_data en1 en1_data ent entype i ob pt ss ss_data) (setvar "cmdecho" 0) (setvar "ErrNo" 0) (command "_.undo" "begin") (if (= source_text nil) (if (setq en (nentsel "\n请选择源文字(右键退出):")) (setq en_data (entget (car en)) entype (cdr (assoc 0 en_data)) source_text (if (= entype "ATTDEF")(cdr (assoc 2 en_data))(cdr (assoc 1 en_data)));如果是属性字,则取“标记”为源文字 ) ) (if (and (= (setq en (nentsel (strcat "\n请选择源文字: 默认:" source_text))) nil) (= (getvar "ErrNo") 52)) (setvar "ErrNo" 0) (if en (setq en_data (entget (car en)) entype (cdr (assoc 0 en_data)) source_text (if (= entype "ATTDEF")(cdr (assoc 2 en_data))(cdr (assoc 1 en_data))) ) (setvar "ErrNo" 52) ) ) ) (prompt "\n请选择要修改内容的文字:") (while (/= (getvar "ErrNo") 52) (prompt (strcat "\n文字内容将被刷成:" source_text)) (if (and (setq ss (ssget ":S" '((0 . "*TEXT,TCH_DRAWINGNAME,TCH_ELEVATION,INSERT,ATTDEF,ATTRIB")))) source_text) (progn (if (= (caar (setq ss_data (ssnamex ss 0))) 1) (progn ; 点选时 (setq ent (ssname ss 0) pt (cadr (last (car ss_data))) en1 (car (nentselp pt)) en1_data (entget en1) entype (cdr (assoc 0 en1_data)) ob (vlax-ename->vla-object en1) ) (wenzishua entype ob source_text en1 ent) (princ) ) (progn ; 框选时 (setq i 0) (repeat (sslength ss) (setq en1 (ssname ss i) ent en1 en1_data (entget en1) entype (cdr (assoc 0 en1_data)) ob (vlax-ename->vla-object en1) ) (wenzishua entype ob source_text en1 ent) (setq i (1+ i)) ) ; end repeat ) ) ) ) ) ; end while (command ".undo" "_end") (setvar "ErrNo" 0) (setvar "cmdecho" 1) (princ) ) (defun wenzishua (entype ob source_text en1 ent) ; cad文字的内容格式刷 (if (or (= entype "TEXT") (= entype "MTEXT") ) (progn (vla-put-TextString ob source_text) (entupd en1) (entupd ent) ) ) ; 天正文字的内容格式刷 (if (or (= entype "TCH_TEXT") (= entype "TCH_ELEVATION") ) (progn (vlax-put-property ob 'Text source_text) (entupd en1) (entupd ent) ) ) ; 天正图名、标高的内容格式刷 (if (= entype "TCH_DRAWINGNAME") (progn (vlax-put-property ob 'NameText source_text) (entupd en1) (entupd ent) ) ) ; 属性文字 只改"标记" (if (= entype "ATTDEF") (progn (vla-put-TagString ob source_text);改标记 (entupd en1) (entupd ent) ) ) ; 块中属性文字 只改"默认" (if (= entype "ATTRIB") (progn (vla-put-TextString ob source_text);改默认 (entupd en1) (entupd ent) ) ) )
以下是将Lisp代码转换为C#的代码:
```csharp
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using System.Collections.Generic;
public static class Program
{
private static string source_text = null;
[CommandMethod("22")]
public static void ChangeTextContent()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
ed.WriteMessage("\n请选择源文字(右键退出):");
PromptSelectionOptions pso = new PromptSelectionOptions();
pso.MessageForAdding = "\n请选择源文字: 默认:" + source_text;
pso.RejectObjectsFromNonCurrentSpace = true;
pso.RejectObjectsOnLockedLayers = true;
pso.SingleOnly = true;
pso.AllowDuplicates = false;
pso.SinglePickInSpace = true;
pso.SingleOnly = true;
PromptSelectionResult psr = ed.GetSelection(pso);
if (psr.Status != PromptStatus.OK)
return;
if (source_text == null)
{
source_text = GetSourceText(psr.Value[0]);
}
else
{
psr = ed.GetSelection(pso);
if (psr.Status != PromptStatus.OK)
return;
source_text = GetSourceText(psr.Value[0]);
}
ed.WriteMessage("\n请选择要修改内容的文字:");
pso.MessageForAdding = "\n请选择要修改内容的文字:";
pso.SingleOnly = false;
psr = ed.GetSelection(pso);
if (psr.Status != PromptStatus.OK)
return;
SelectionSet ss = psr.Value;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
foreach (SelectedObject so in ss)
{
Entity ent = tr.GetObject(so.ObjectId, OpenMode.ForWrite) as Entity;
if (ent == null)
continue;
switch (ent.GetRXClass().DxfName)
{
case "TEXT":
case "MTEXT":
ent.UpgradeOpen();
DBText text = ent as DBText;
text.TextString = source_text;
ent.DowngradeOpen();
ent.Update();
break;
case "TCH_TEXT":
case "TCH_ELEVATION":
ent.UpgradeOpen();
MText mtext = ent as MText;
mtext.Contents = source_text;
ent.DowngradeOpen();
ent.Update();
break;
case "TCH_DRAWINGNAME":
ent.UpgradeOpen();
TcHText tchText = ent as TcHText;
tchText.NameText = source_text;
ent.DowngradeOpen();
ent.Update();
break;
case "ATTRIB":
ent.UpgradeOpen();
AttributeReference attRef = ent as AttributeReference;
if (attRef != null && attRef.Tag == "标记")
{
attRef.UpgradeOpen();
attRef.TagString = source_text;
attRef.DowngradeOpen();
}
ent.Update();
break;
case "INSERT":
BlockReference br = ent as BlockReference;
if (br != null)
{
foreach (ObjectId arId in br.AttributeCollection)
{
AttributeReference ar = tr.GetObject(arId, OpenMode.ForWrite) as AttributeReference;
if (ar == null)
continue;
if (ar.Tag == "标记")
{
ar.UpgradeOpen();
ar.TagString = source_text;
ar.DowngradeOpen();
ar.Update();
}
else if (ar.Tag == "默认")
{
ar.UpgradeOpen();
ar.TextString = source_text;
ar.DowngradeOpen();
ar.Update();
}
}
}
break;
default:
break;
}
}
tr.Commit();
}
}
private static string GetSourceText(ObjectId id)
{
string text = string.Empty;
using (Transaction tr = id.Database.TransactionManager.StartTransaction())
{
Entity ent = tr.GetObject(id, OpenMode.ForRead) as Entity;
if (ent == null)
return string.Empty;
switch (ent.GetRXClass().DxfName)
{
case "TEXT":
case "MTEXT":
DBText dbText = ent as DBText;
if (dbText != null)
text = dbText.TextString;
break;
case "TCH_TEXT":
case "TCH_ELEVATION":
MText mtext = ent as MText;
if (mtext != null)
text = mtext.Contents;
break;
case "TCH_DRAWINGNAME":
TcHText tchText = ent as TcHText;
if (tchText != null)
text = tchText.NameText;
break;
case "ATTDEF":
AttributeDefinition attDef = ent as AttributeDefinition;
if (attDef != null && attDef.Tag == "标记")
text = attDef.TagString;
break;
case "INSERT":
BlockReference br = ent as BlockReference;
if (br != null)
{
foreach (ObjectId arId in br.AttributeCollection)
{
AttributeReference ar = tr.GetObject(arId, OpenMode.ForRead) as AttributeReference;
if (ar == null)
continue;
if (ar.Tag == "标记")
{
text = ar.TagString;
break;
}
else if (ar.Tag == "默认")
{
text = ar.TextString;
break;
}
}
}
break;
default:
break;
}
tr.Commit();
}
return text;
}
}
```
请注意,由于Lisp和C#有很大的不同,因此在转换过程中,一些细节和逻辑可能会有所不同。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)