file-type

GitHub风格的mdout主题:数学公式与语法高亮支持

ZIP文件

下载需积分: 5 | 969KB | 更新于2024-12-25 | 61 浏览量 | 0 下载量 举报 收藏
download 立即下载
它支持MathJax数学公式、美人鱼流程图和Highlight.js语法高亮,这三个功能的添加极大地增强了Markdown格式文档的展现能力和实用性。 1. Markdown格式的预览主题:Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档。它广泛用于编写README文件、在线讨论以及创建富文本。在Markdown格式中,可以通过简单的标记符号来实现标题、列表、引用、加粗、斜体等格式化效果。 2. mdout默认主题:mdout可能是一个用于Markdown文件渲染的工具或者库,而‘preview-mdout-theme-github’则是针对该工具的一个默认主题配置。由于它仿制了GitHub的样式,我们可以期待这个主题在视觉上与GitHub网站的Markdown渲染保持一致性,这为开发者提供了一种熟悉且舒适的编辑体验。 3. 支持MathJax数学公式:MathJax是一个开源的JavaScript显示引擎,它用于在网页上显示复杂的数学公式。它允许开发者在Markdown中嵌入LaTeX语法的数学公式,然后MathJax会将其转换为高质量的矢量图形。这意味着,你可以直接在Markdown文件中编写复杂的数学表达式,并且用户在阅读时可以享受到和PDF文档中类似的专业级数学公式显示效果。 4. 美人鱼流程图(Mermaid Flowcharts):美人鱼(Mermaid)是一个基于JavaScript的图表库,它允许用户通过简单的文本描述来生成流程图、序列图、甘特图等。在Markdown中引入Mermaid库,用户就可以用Markdown语法描述各种图表,然后Mermaid会自动生成相应的图表。这样的功能极大地降低了创建图表的难度,并且可以快速地在文档中插入美观的图表。 5. Highlight.js语法高亮:Highlight.js是一个广泛使用的JavaScript库,用于为代码块提供语法高亮。它支持超过200种编程语言,并且拥有众多的样式主题。在Markdown中使用Highlight.js可以使得代码块的可读性大大提高,让读者可以轻松区分代码中的不同元素,如关键字、字符串、注释等。这为开发者提供了一种更加高效和舒适的方式来阅读代码片段。 综上所述,‘preview-mdout-theme-github’是一个功能丰富的Markdown预览主题,它提供了一种简洁、高效且专业的文档编写和展示方式。通过集成MathJax、Mermaid和Highlight.js,该主题极大地拓展了Markdown的应用场景,使其不仅限于简单的文档编写,还可以用于编写技术文档、编写教案、创建在线演示文稿等需要复杂格式支持的场景。"

相关推荐

filetype

//----------------------------------------------------------------------------- // Includes //----------------------------------------------------------------------------- #include <SI_C8051F300_Register_Enums.h> #include <stdio.h> //----------------------------------------------------------------------------- // Global CONSTANTS //----------------------------------------------------------------------------- #define SYSCLK 24500000 // SYSCLK frequency in Hz #define BAUDRATE 115200 // Baud rate of UART in bps SI_SBIT(DE_RE, SFR_P0, 6); //定義P0.6 控制名稱為DE_RE SI_SBIT(LED2, SFR_P0, 1); //定義P0.1 控制名稱為LED2 SI_SBIT(LED1, SFR_P0, 0); //定義P0.0 控制名稱為LED1 SI_SBIT(LED3, SFR_P0, 2); //定義P0.2 控制名稱為LED3 SI_SBIT(LED4, SFR_P0, 3); //定義P0.3 控制名稱為LED4 SI_SBIT(LED5, SFR_P0, 7); //定義P0.7 控制名稱為LED5 //----------------------------------------------------------------------------- // Function PROTOTYPES //----------------------------------------------------------------------------- SI_INTERRUPT_PROTO(UART0_Interrupt, 4); void SYSCLK_Init (void); void UART0_Init (void); void PORT_Init (void); void Timer2_Init (int16_t); void MyDelay (uint16_t Value); #define KEY_DOWN 1 #define KEY_UP 0 #define LED_ON 0 #define LED_OFF 1 //----------------------------------------------------------------------------- // Global Variables //----------------------------------------------------------------------------- #define UART_BUFFERSIZE 6 uint8_t UART_Buffer[UART_BUFFERSIZE]; uint8_t UART_Buffer_Size = 0; uint8_t UART_Input_First = 0; uint8_t UART_Output_First = 0; uint8_t TX_Ready =1; uint8_t RX_Ready =0; static char Byte; uint8_t SnapDown_TimeCnt =0; uint8_t fSnap = 0; uint8_t RecDown_TimeCnt =0; uint8_t fRec = 0; //----------------------------------------------------------------------------- // SiLabs_Startup() Routine // ---------------------------------------------------------------------------- // This function is called immediately after reset, before the initialization // code is run in SILABS_STARTUP.A51 (which runs before main() ). This is a // useful place to disable the watchdog timer, which is enable by default // and may trigger before main() in some instances. //----------------------------------------------------------------------------- void SiLabs_Startup (void) { PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer } //----------------------------------------------------------------------------- // MAIN Routine //----------------------------------------------------------------------------- void main (void) { // enable) PORT_Init(); // Initialize Port I/O SYSCLK_Init (); // Initialize Oscillator UART0_Init(); IE_EA = 1; DE_RE =0; Timer2_Init (SYSCLK / 12 / 1000); // Init Timer2 to generate // 每1ms 計時中斷 while(1) { if(RX_Ready) { RX_Ready = 0; UART_Buffer_Size =0; if(UART_Buffer[3]==0x01)//任一鍵按下 { if(UART_Buffer[4]==0x01)//REC { fRec = KEY_DOWN; RecDown_TimeCnt=0; } else if(UART_Buffer[4]==0x02)//SNAP { fSnap = KEY_DOWN; SnapDown_TimeCnt=0; } else if(UART_Buffer[4]==0x03)//LED UP LED3 = LED_ON; else if(UART_Buffer[4]==0x04)//LED DO LED4 = LED_ON; else if(UART_Buffer[4]==0x05)//Mirror LED5 = LED_ON; } if(UART_Buffer[3]==0x00)//任一鍵放開 { if(UART_Buffer[4]==0x01)//REC { fRec = KEY_UP; } else if(UART_Buffer[4]==0x02)//SNAP { fSnap = KEY_UP; } else if(UART_Buffer[4]==0x03)//LED UP LED3 = LED_OFF; else if(UART_Buffer[4]==0x04)//LED DO LED4 = LED_OFF; else if(UART_Buffer[4]==0x05)//Mirror LED5 = LED_OFF; } IE_ES0 =1; } if(SnapDown_TimeCnt >55 && fSnap == KEY_DOWN) { LED1 = LED_ON; } else if(SnapDown_TimeCnt >55 && fSnap == KEY_UP) { LED1 =LED_OFF; SnapDown_TimeCnt =0; } else if(SnapDown_TimeCnt >45 && SnapDown_TimeCnt <55 && fSnap == KEY_UP) { LED1 = LED_ON; LED2 = LED_ON; MyDelay(1100);//延遲約0.5秒 LED1 = LED_OFF; LED2 = LED_OFF; SnapDown_TimeCnt =0; } if(RecDown_TimeCnt >55 && fRec == KEY_DOWN) { LED2 = LED_ON; } else if(RecDown_TimeCnt >55 && fRec == KEY_UP) { LED2 = LED_OFF; RecDown_TimeCnt =0; } else if(RecDown_TimeCnt >45 && RecDown_TimeCnt <55 && fRec == KEY_UP) { LED4 = LED_ON; LED5 = LED_ON; MyDelay(1100);//延遲約0.5秒 LED4 = LED_OFF; LED5 = LED_OFF; RecDown_TimeCnt =0; } } } //----------------------------------------------------------------------------- // Initialization Subroutines //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // PORT_Init //----------------------------------------------------------------------------- // // Return Value : None // Parameters : None // // Configure the Crossbar and GPIO ports. // // P0.4 digital push-pull UART TX // P0.5 digital open-drain UART RX // //----------------------------------------------------------------------------- void PORT_Init (void) { P0MDOUT |= 0x10; // set UART TX to push-pull output XBR1 = 0x03; // Enable UTX, URX as push-pull output XBR2 = 0x40; // Enable crossbar, weak pull-ups // disabled XBR0 = 0x40; P0MDOUT |= 0x40; } //----------------------------------------------------------------------------- // SYSCLK_Init //----------------------------------------------------------------------------- // // Return Value : None // Parameters : None // // This routine initializes the system clock to use the internal oscillator // at its maximum frequency. // Also enables the Missing Clock Detector. //----------------------------------------------------------------------------- void SYSCLK_Init (void) { OSCICN |= 0x03; // Configure internal oscillator for // its maximum frequency RSTSRC = 0x04; // Enable missing clock detector } //----------------------------------------------------------------------------- // UART0_Init //----------------------------------------------------------------------------- // // Return Value : None // Parameters : None // // Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1. //----------------------------------------------------------------------------- void UART0_Init (void) { SCON0 = 0x10; // SCON0: 8-bit variable bit rate // level of STOP bit is ignored // RX enabled // ninth bits are zeros // clear SCON0_RI and SCON0_TI bits if (SYSCLK/BAUDRATE/2/256 < 1) { TH1 = -(SYSCLK/BAUDRATE/2); CKCON |= 0x10; // T1M = 1; SCA1:0 = xx } else if (SYSCLK/BAUDRATE/2/256 < 4) { TH1 = -(SYSCLK/BAUDRATE/2/4); CKCON |= 0x01; // T1M = 0; SCA1:0 = 01 CKCON &= ~0x12; } else if (SYSCLK/BAUDRATE/2/256 < 12) { TH1 = -(SYSCLK/BAUDRATE/2/12); CKCON &= ~0x13; // T1M = 0; SCA1:0 = 00 } else { TH1 = -(SYSCLK/BAUDRATE/2/48); CKCON |= 0x02; // T1M = 0; SCA1:0 = 10 CKCON &= ~0x11; } TL1 = 0xff; // set Timer1 to overflow immediately TMOD |= 0x20; // TMOD: timer 1 in 8-bit autoreload TMOD &= ~0xD0; // mode TCON_TR1 = 1; // START Timer1 TX_Ready = 1; // Flag showing that UART can transmit IP |= 0x10; // Make UART high priority IE_ES0 = 1; // Enable UART0 interrupts } //----------------------------------------------------------------------------- // Interrupt Service Routines //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // UART0_Interrupt //----------------------------------------------------------------------------- // // This routine is invoked whenever a character is entered or displayed on the // Hyperterminal. // //----------------------------------------------------------------------------- SI_INTERRUPT(UART0_Interrupt, 4) { if (SCON0_RI == 1) { if( UART_Buffer_Size == 0) { // If new word is entered UART_Input_First = 0; } SCON0_RI = 0; // Clear interrupt flag Byte = SBUF0; // Read a character from UART if (UART_Buffer_Size < UART_BUFFERSIZE) { UART_Buffer[UART_Input_First] = Byte; // Store in array UART_Buffer_Size++; // Update array's size UART_Input_First++; // Update counter } if(UART_Buffer_Size >= UART_BUFFERSIZE) { RX_Ready =1; UART_Buffer_Size =0; IE_ES0 = 0; } } if (SCON0_TI == 1) // Check if transmit flag is set { SCON0_TI = 0; // Clear interrupt flag if (UART_Buffer_Size != 1) // If buffer not empty { // If a new word is being output if ( UART_Buffer_Size == UART_Input_First ) { UART_Output_First = 0; } // Store a character in the variable byte Byte = UART_Buffer[UART_Output_First]; if ((Byte >= 0x61) && (Byte <= 0x7A)) { // If upper case letter Byte -= 32; } SBUF0 = Byte; // Transmit to Hyperterminal UART_Output_First++; // Update counter UART_Buffer_Size--; // Decrease array size } else { UART_Buffer_Size = 0; // Set the array size to 0 TX_Ready = 1; // Indicate transmission complete } } } //----------------------------------------------------------------------------- // Timer2_Init //----------------------------------------------------------------------------- // // Configure Timer2 to 16-bit auto-reload and generate an interrupt at // interval specified by <counts> using SYSCLK/12 as its time base. // void Timer2_Init (int16_t counts) { TMR2CN = 0x00; // Stop Timer2; Clear TF2; // use SYSCLK/12 as timebase CKCON &= ~(CKCON_T2MH__BMASK | CKCON_T2ML__BMASK ); // Timer2 clocked based on TMR2CN_T2XCLK TMR2RL = -counts; // Init reload values TMR2 = 0xffff; // set to reload immediately IE_ET2 = 1; // enable Timer2 interrupts TMR2CN_TR2 = 1; // start Timer2 } //----------------------------------------------------------------------------- // Timer2_ISR //----------------------------------------------------------------------------- // This routine changes the state of the LED whenever Timer2 overflows. // SI_INTERRUPT(Timer2_ISR, TIMER2_IRQn) { TMR2CN_TF2H = 0; // clear Timer2 interrupt flag if(fSnap == KEY_DOWN) { SnapDown_TimeCnt++; // change state of LED if(SnapDown_TimeCnt==255) SnapDown_TimeCnt = 254; } else if(fRec == KEY_DOWN) { RecDown_TimeCnt++; // change state of LED if(RecDown_TimeCnt==255) RecDown_TimeCnt = 254; } } void MyDelay(uint16_t Value) { uint16_t i,j; for(i=0;i<Value;i++) { for(j=0;j<1000;j++) _nop_(); } } //----------------------------------------------------------------------------- // End Of File //-----------------------------------------------------------------------------

filetype

//????:??? #include <c8051f360.h> #include <stdio.h> #include <absacc.h> #define WDATADDR XBYTE[0XC009] //LCD????? #define RDATADDR XBYTE[0XC00B] //LCD????? #define WCOMADDR XBYTE[0XC008] //LCD????? #define RCOMADDR XBYTE[0XC00A] //LCD????? #define KEYCS XBYTE[0XC00C] //?????? sbit LCD_RST=P3^0; unsigned char code CHINESE1[]={"????????"}; unsigned char code CHINESE2[]={"????????"}; unsigned char code CHINESE3[]={"????????"}; unsigned char code CHINESE4[]={"????????"}; unsigned char key_num=0xff; //??? void OSC_INIT (void) { SFRPAGE=0X0F; OSCICL=OSCICL+4; OSCICN=0XC2; CLKSEL=0X30; SFRPAGE=0; } //******************************************** void IO_INIT(void) { SFRPAGE=0X0F; P0MDIN=0Xe7; P0MDOUT=0X83; P0SKIP=0XF9; P1MDIN=0XFF; P1MDOUT=0XFF; P1SKIP=0XFF; P2MDIN=0XFE; P2MDOUT=0XFF; P2SKIP=0XFF; P3MDIN=0XFF; P3MDOUT=0XFF; P3SKIP=0XFD; P4MDOUT=0XFF; XBR0=0X09; XBR1=0XC0; SFRPAGE=0X0; } //******************************************** void XRAM_INIT(void) { SFRPAGE=0X0F; EMI0CF=0X07; SFRPAGE=0; } //******************************************** void SMB_INIT(void) { SMB0CF=0XC1; } //******************************************** void UART_INIT(void) { SCON0=0X0; } //******************************************** void DAC_INIT(void) { IDA0CN=0XF2; } //******************************************** void ADC_INIT(void) { REF0CN=0; //VDD??? AMX0P=0X08; //???P20 AMX0N=0X1F; //???GND ADC0CF=0X2C; //???,????2MHZ ADC0CN=0X80; //?ADOBUSY??AD } //******************************************** void INT0_INIT(void) { IT01CF=0X05; //P0.5?INT0 IT0=1; //????? } //******************************************** void TIMER_INIT(void) { TMOD=0x11; //T0?T1??1 CKCON=0; //????12?? TL0=0X78; TH0=0XEC; //10MS TL1=0X0C; TH1=0XFE; //0.5MS TMR2CN=0X04; //16????? TMR2RLL=0XF0; //10MS TMR2RLH=0XD8; TMR3CN=0X0C; //?8??????,????1/12 TMR3RLL=0XE0; //??100us TMR3RLH=0XFF; TR0=1; TR1=1; } //*********************************************** void PCA_INIT(void) { PCA0CN=0X40; //??PCA??????? PCA0MD=0; //???????? } //*********************************************** void INT_INIT(void) { EX0=1; //INIT0,?? PX0=0; //INT0????? ET0=0; //T0 ET1=0; //T1 ET2=0; //T2 EIE1=0X0; //0X08,??ADC?? ES0=0; //uart EA=1; } //************************************************** void Init_device(void) { OSC_INIT(); IO_INIT(); XRAM_INIT(); SMB_INIT(); UART_INIT(); DAC_INIT(); ADC_INIT(); INT0_INIT(); TIMER_INIT(); PCA_INIT(); INT_INIT(); } //************************************************** //-------------------------------------------------------- void LCD_REST(void) { int i; LCD_RST=0; for(i=0;i<255;i++); LCD_RST=1; } //******************************************************** void LCD_WC(unsigned char command) //LCD??? { unsigned char a; while(a=RCOMADDR&0X80); WCOMADDR=command; } //******************************************************** void LCD_INIT(void) //LCD??? { LCD_WC(0X30); //??????? LCD_WC(0X01); LCD_WC(0X02); //?DDRAM??20H,???DDRAM??????0 LCD_WC(0X0C); //????? } //*********************************************************** void LCD_WD(unsigned char d) //LCD??? { while(RCOMADDR&0X80); WDATADDR=d; } //********************************************************** void LCD_HZ(unsigned char x,unsigned char temp[]) //?????? { int i=0; LCD_WC(x); //x????,=0x80????? while(temp[i]!=0) { LCD_WD(temp[i]); i++; } } //******************************************************** void LCD_BYTE(unsigned char x,unsigned char temp) //?????? { LCD_WC(x); //x????,=0x80????? LCD_WD(temp); } //********************************************************* void LCD_CLR(void) //LCD?? { LCD_WC(0X01); } //******************************************************** void KEY_INIT0(void) interrupt 0 { key_num=KEYCS&0x0f; } main() { // int i; Init_device(); LCD_REST(); LCD_INIT(); LCD_HZ(0x80,CHINESE1); LCD_HZ(0x90,CHINESE2); LCD_HZ(0x88,CHINESE3); LCD_HZ(0x98,CHINESE4); while(1) { if((key_num&0xf0)==0) { unsigned char temp; LCD_CLR(); LCD_BYTE(0x80,'K'); temp=key_num&0x0f; temp=temp+0x30; if(temp>=0x3a) temp=temp+0x07; LCD_BYTE(0x81,temp); key_num=0xff; } /* for(i=0;i<10000;i++) ; P1=0XAA; for(i=0;i<10000;i++) ; P1=0X55;*/ } } 帮我根据所提供的代码,设计简易数字钟设计,要求如下: (1)具有年、月、星期、日、时、分、秒计时功能; (2)具有当前时间设定功能; (3)具有到时闹铃功能,并能设定闹铃时间; (4)计时误差:≤1%; (5)显示:LCD显示。

filetype

如何配置C8051F380的io口控制这三个引脚实现数据传输: 在串行通信系统中,$CLK$(Serial Clock Input)、$DATA$(Serial Data Input)和$LE$(Load Enable)是三个关键控制引脚,其功能如下: 1. **$CLK$(时钟信号)** 作用:提供同步时序基准,控制数据传输速率。 特点: - 每个上升沿或下降沿触发$DATA$引脚的数据采样 - 频率决定通信速率,需与接收端匹配 - 示例:若时钟频率为$f=1\ \text{MHz}$,则每微秒传输1位数据 2. **$DATA$(数据信号)** 作用:承载实际传输的二进制信息流。 特点: - 采用二进制编码(如$0=0\ \text{V}$,$1=3.3\ \text{V}$) - 数据位宽由协议定义(常见8/16/32位) - 传输方向可为单向或双向 3. **$LE$(锁存使能)** 作用:控制移位寄存器的工作模式: - $LE=0$:寄存器处于**移位模式**,数据随$CLK$逐位移入 - $LE=1$:寄存器切换为**锁存模式**,将移位完成的数据输出到并行端口 ### 典型工作流程(以74HC595为例) 1. 初始化:$LE=0$,准备接收数据 2. 数据传输:在$CLK$的每个上升沿,$DATA$的1位数据移入寄存器 3. 数据锁存:当8位数据传输完成后,$LE$置1将数据输出到并行端口 4. 状态保持:$LE$恢复0,寄存器返回高阻抗状态,避免总线冲突 ### CMOS高阻抗特性 在$LE=0$状态下,移位寄存器输出端呈现高阻抗($Z$状态),此时: $$ Z = \frac{1}{j\omega C} \approx \infty \ \text{当}\ \omega \to 0 $$ 这使得多个设备可共享同一总线而不会相互干扰。

filetype

使用C8051F380单片机的外设或者普通io口来控制这三个引脚实现数据传输 ### CLK、DATA和LE引脚功能解析 在串行通信系统中,$CLK$(Serial Clock Input)、$DATA$(Serial Data Input)和$LE$(Load Enable)是三个关键控制引脚,其功能如下: 1. **$CLK$(时钟信号)** 作用:提供同步时序基准,控制数据传输速率。 特点: - 每个上升沿或下降沿触发$DATA$引脚的数据采样 - 频率决定通信速率,需与接收端匹配 - 示例:若时钟频率为$f=1\ \text{MHz}$,则每微秒传输1位数据 2. **$DATA$(数据信号)** 作用:承载实际传输的二进制信息流。 特点: - 采用二进制编码(如$0=0\ \text{V}$,$1=3.3\ \text{V}$) - 数据位宽由协议定义(常见8/16/32位) - 传输方向可为单向或双向 3. **$LE$(锁存使能)** 作用:控制移位寄存器的工作模式: - $LE=0$:寄存器处于**移位模式**,数据随$CLK$逐位移入 - $LE=1$:寄存器切换为**锁存模式**,将移位完成的数据输出到并行端口 ### 典型工作流程(以74HC595为例) 1. 初始化:$LE=0$,准备接收数据 2. 数据传输:在$CLK$的每个上升沿,$DATA$的1位数据移入寄存器 3. 数据锁存:当8位数据传输完成后,$LE$置1将数据输出到并行端口 4. 状态保持:$LE$恢复0,寄存器返回高阻抗状态,避免总线冲突 ### CMOS高阻抗特性 在$LE=0$状态下,移位寄存器输出端呈现高阻抗($Z$状态),此时: $$ Z = \frac{1}{j\omega C} \approx \infty \ \text{当}\ \omega \to 0 $$ 这使得多个设备可共享同一总线而不会相互干扰。