代码高亮效果-Arduino中文社区 - Powered by Discuz! Archiver

珜羽 发表于 2012-5-17 01:45

代码高亮效果

本帖最后由 珜羽 于 2012-5-17 01:56 编辑

#include <reg51.H>#include <intrins.h> sbit lcd_sclk = P3 ^ 2; /*接口定义:lcd_sclk就是LCD的sclk*/sbit lcd_sid = P3 ^ 1; /*接口定义:lcd_sid就是LCD的sid*/sbit lcd_rs = P3 ^ 0; /*接口定义:lcd_rs就是LCD的rs*/sbit lcd_reset = P1 ^ 0; /*接口定义:lcd_reset就是LCD的reset*/sbit lcd_cs1 = P1 ^ 1; /*接口定义:lcd_cs1就是LCD的cs1*/ sbit Rom_IN = P1 ^ 2; /*字库IC接口定义:Rom_IN就是字库IC的SI*/sbit Rom_OUT = P1 ^ 3; /*字库IC接口定义:Rom_OUT就是字库IC的SO*/sbit Rom_SCK = P1 ^ 4; /*字库IC接口定义:Rom_SCK就是字库IC的SCK*/sbit Rom_CS = P1 ^ 5; /*字库IC接口定义Rom_CS就是字库IC的CS#*/ #define uchar unsigned char#define uint unsigned int#define ulong unsigned long uchar code jiong1[] = /*--文字:囧--*/{    /*-- 宋体12;此字体下对应的点阵为:宽x高=16x16   --*/    0x00, 0xFE, 0x82, 0x42, 0xA2, 0x9E, 0x8A, 0x82, 0x86, 0x8A, 0xB2, 0x62, 0x02, 0xFE, 0x00, 0x00,    0x00, 0x7F, 0x40, 0x40, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x40, 0x40, 0x7F, 0x00, 0x00}; uchar code lei1[] = /*--文字:畾--*/{    /*-- 宋体12;此字体下对应的点阵为:宽x高=16x16   --*/    0x80, 0x80, 0x80, 0xBF, 0xA5, 0xA5, 0xA5, 0x3F, 0xA5, 0xA5, 0xA5, 0xBF, 0x80, 0x80, 0x80, 0x00,    0x7F, 0x24, 0x24, 0x3F, 0x24, 0x24, 0x7F, 0x00, 0x7F, 0x24, 0x24, 0x3F, 0x24, 0x24, 0x7F, 0x00}; /*写指令到LCD模块*/voidtransfer_command_lcd(int data1){    char i;    lcd_rs = 0;    for(i = 0; i < 8; i++)    {      lcd_sclk = 0;      if(data1 & 0x80) lcd_sid = 1;      else lcd_sid = 0;      lcd_sclk = 1;      data1 = data1 <<= 1;    }} /*写数据到LCD模块*/voidtransfer_data_lcd(int data1){    char i;    lcd_rs = 1;    for(i = 0; i < 8; i++)    {      lcd_sclk = 0;      if(data1 & 0x80) lcd_sid = 1;      else lcd_sid = 0;      lcd_sclk = 1;      data1 = data1 <<= 1;    }} /*延时*/void delay(int i){    int j, k;    for(j = 0; j < i; j++)      for(k = 0; k < 500; k++);} /*等待一个按键,我的主板是用P2.0与GND之间接一个按键*/void waitkey(){repeat:    if (P2 & 0x01) goto repeat;    else delay(6);    if (P2 & 0x01) goto repeat;    else      delay(40);;} /*LCD模块初始化*/voidinitial_lcd(){    lcd_cs1 = 0;    Rom_CS = 1;    lcd_reset = 0;      /*低电平复位*/    delay(20);    lcd_reset = 1;      /*复位完毕*/    delay(20);    transfer_command_lcd(0xe2);   /*软复位*/    delay(5);    transfer_command_lcd(0x2c);/*升压步聚1*/    delay(5);    transfer_command_lcd(0x2e);/*升压步聚2*/    delay(5);    transfer_command_lcd(0x2f);/*升压步聚3*/    delay(5);    transfer_command_lcd(0x23);/*粗调对比度,可设置范围0x20~0x27*/    transfer_command_lcd(0x81);/*微调对比度*/    transfer_command_lcd(0x28);/*0x28,微调对比度的值,可设置范围0x00~0x3f*/    transfer_command_lcd(0xa2);/*1/9偏压比(bias)*/    transfer_command_lcd(0xc8);/*行扫描顺序:从上到下*/    transfer_command_lcd(0xa0);/*列扫描顺序:从左到右*/    transfer_command_lcd(0x40);/*起始行:第一行开始*/    transfer_command_lcd(0xaf);/*开显示*/    lcd_cs1 = 1;} /*全屏清屏*/voidclear_screen(){    unsigned char i, j;    lcd_cs1 = 0;    Rom_CS = 1;    for(i = 0; i < 9; i++)    {      transfer_command_lcd(0xb0 + i);      transfer_command_lcd(0x10);      transfer_command_lcd(0x00);      for(j = 0; j < 132; j++)      {            transfer_data_lcd(0x00);      }    }    lcd_cs1 = 1;}/*显示16x16点阵图像、汉字、生僻字或16x16点阵的其他图标*/voiddisplay_graphic_16x16(uint page, uint column, uchar *dp){    uint i, j;    uchar page_address;    uchar column_address_L, column_address_H;     page_address = 0xb0 + page - 1;    column_address_L = (column & 0x0f) - 1;    column_address_H = ((column >> 4) & 0x0f) + 0x10;    lcd_cs1 = 0;    Rom_CS = 1;     for(j = 0; j < 2; j++)    {      transfer_command_lcd(page_address + j); /*设置页地址*/      transfer_command_lcd(column_address_H); /*设置列地址的高4位*/      transfer_command_lcd(column_address_L); /*设置列地址的低4位*/      for (i = 0; i < 16; i++)      {            transfer_data_lcd(*dp);               /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/            dp++;      }    }    lcd_cs1 = 1;} /*显示8x16点阵图像、ASCII, 或8x16点阵的自造字符、其他图标*/voiddisplay_graphic_8x16(uint page, uchar column, uchar *dp){    uint i, j;    uchar page_address;    uchar column_address_L, column_address_H;    lcd_cs1 = 0;    page_address = 0xb0 + page - 1;    column_address_L = (column & 0x0f) - 1;    column_address_H = ((column >> 4) & 0x0f) + 0x10;     for(j = 0; j < 2; j++)    {      transfer_command_lcd(page_address + j); /*设置页地址*/      transfer_command_lcd(column_address_H); /*设置列地址的高4位*/      transfer_command_lcd(column_address_L); /*设置列地址的低4位*/      for (i = 0; i < 8; i++)      {            transfer_data_lcd(*dp);               /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/            dp++;      }    }    lcd_cs1 = 1;} /*显示5*7点阵图像、ASCII, 或5x7点阵的自造字符、其他图标*/voiddisplay_graphic_5x7(uint page, uchar column, uchar *dp){    uint col_cnt;    uchar page_address;    uchar column_address_L, column_address_H;    page_address = 0xb0 + page - 1;     lcd_cs1 = 0;     column_address_L = (column & 0x0f) - 1;    column_address_H = ((column >> 4) & 0x0f) + 0x10;     transfer_command_lcd(page_address);      /*Set Page Address*/    transfer_command_lcd(column_address_H);    /*Set MSB of column Address*/    transfer_command_lcd(column_address_L);    /*Set LSB of column Address*/     for (col_cnt = 0; col_cnt < 8; col_cnt++)    {      transfer_data_lcd(*dp);      dp++;    }    lcd_cs1 = 1;} /****送指令到晶联讯字库IC***/voidsend_command_to_ROM( uchar datu ){    uchar i;    for(i = 0; i < 8; i++ )    {      if(datu & 0x80)            Rom_IN = 1;      else            Rom_IN = 0;      datu = datu << 1;      Rom_SCK = 0;      Rom_SCK = 1;    }} /****从晶联讯字库IC中取汉字或字符数据(1个字节)***/static ucharget_data_from_ROM( ){     uchar i;    uchar ret_data = 0;    Rom_SCK = 1;    for(i = 0; i < 8; i++)    {      Rom_OUT = 1;      Rom_SCK = 0;      ret_data = ret_data << 1;      if( Rom_OUT )            ret_data = ret_data + 1;      else            ret_data = ret_data + 0;      Rom_SCK = 1;    }    return(ret_data);} /*从相关地址(addrHigh:地址高字节,addrMid:地址中字节,addrLow:地址低字节)中连续读出DataLen个字节的数据到 pBuff的地址*//*连续读取*/voidget_n_bytes_data_from_ROM(uchar addrHigh, uchar addrMid, uchar addrLow, uchar *pBuff, uchar DataLen ){    uchar i;    Rom_CS = 0;    lcd_cs1 = 1;    Rom_SCK = 0;    send_command_to_ROM(0x03);    send_command_to_ROM(addrHigh);    send_command_to_ROM(addrMid);    send_command_to_ROM(addrLow);    for(i = 0; i < DataLen; i++ )      *(pBuff + i) = get_data_from_ROM();    Rom_CS = 1;} /******************************************************************/ ulongfontaddr = 0;voiddisplay_GB2312_string(uchar y, uchar x, uchar *text){    uchar i = 0;    uchar addrHigh, addrMid, addrLow ;    uchar fontbuf[32];    while((text[i] > 0x00))    {      if(((text[i] >= 0xb0) && (text[i] < 0xf7)) && (text[i+1] >= 0xa1))      {            /*国标简体(GB2312)汉字在高通字库IC中的地址由以下公式来计算:*/            /*Address = ((MSB - 0xB0) * 94 + (LSB- 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0*/            /*由于担心8位单片机有乘法溢出问题,所以分三部取地址*/            fontaddr = (text[i] - 0xb0) * 94;            fontaddr += (text[i+1] - 0xa1) + 846;            fontaddr = (ulong)(fontaddr * 32);             addrHigh = (fontaddr & 0xff0000) >> 16; /*地址的高8位,共24位*/            addrMid = (fontaddr & 0xff00) >> 8;/*地址的中8位,共24位*/            addrLow = fontaddr & 0xff;       /*地址的低8位,共24位*/         get_n_bytes_data_from_ROM(addrHigh, addrMid, addrLow, fontbuf, 32 ); /*取32个字节的数据,存到"fontbuf"*/            display_graphic_16x16(y, x, fontbuf); /*显示汉字到LCD上,y为页地址,x为列地址,fontbuf[]为数据*/            i += 2;            x += 16;      }      else if((text[i] >= 0x20) && (text[i] <= 0x7e))      {            unsigned char fontbuf[16];            fontaddr = (text[i] - 0x20);            fontaddr = (unsigned long)(fontaddr * 16);            fontaddr = (unsigned long)(fontaddr + 0x3b7c0);            addrHigh = (fontaddr & 0xff0000) >> 16;            addrMid = (fontaddr & 0xff00) >> 8;            addrLow = fontaddr & 0xff;          get_n_bytes_data_from_ROM(addrHigh, addrMid, addrLow, fontbuf, 16 ); /*取16个字节的数据,存到"fontbuf"*/             display_graphic_8x16(y, x, fontbuf); /*显示8x16的ASCII字到LCD上,y为页地址,x为列地址,fontbuf[]为数据*/            i += 1;            x += 8;      }      else            i++;    } } voiddisplay_string_5x7(uchar y, uchar x, uchar *text){    unsigned char i = 0;    unsigned char addrHigh, addrMid, addrLow ;    while((text[i] > 0x00))    {       if((text[i] >= 0x20) && (text[i] <= 0x7e))      {            unsigned char fontbuf[8];            fontaddr = (text[i] - 0x20);            fontaddr = (unsigned long)(fontaddr * 8);            fontaddr = (unsigned long)(fontaddr + 0x3bfc0);            addrHigh = (fontaddr & 0xff0000) >> 16;            addrMid = (fontaddr & 0xff00) >> 8;            addrLow = fontaddr & 0xff;          get_n_bytes_data_from_ROM(addrHigh, addrMid, addrLow, fontbuf, 8); /*取8个字节的数据,存到"fontbuf"*/             display_graphic_5x7(y, x, fontbuf); /*显示5x7的ASCII字到LCD上,y为页地址,x为列地址,fontbuf[]为数据*/            i += 1;            x += 8;      }      else            i++;    } }//===============main program===================void main(void){    Rom_CS = 1;    initial_lcd();    while(1)    {      clear_screen();    //clear all dots      Rom_SCK = 0;      display_GB2312_string(1, 1, "12864,带中文字库"); /*在第1页,第1列,显示一串16x16点阵汉字或8x16的ASCII字*/      Rom_SCK = 0;      display_GB2312_string(3, 1, "16X16简体汉字库,"); /*在第3页,第1列,显示一串16x16点阵汉字或8x16的ASCII字.以下雷同*/      Rom_SCK = 0;      display_GB2312_string(5, 1, "或8X16点阵ASCII,");      Rom_SCK = 0;      display_GB2312_string(7, 1, "或5X7点阵ASCII码");      waitkey();      clear_screen();      Rom_SCK = 0;      display_GB2312_string(1, 1, "GB2312简体字库及");      display_GB2312_string(3, 1, "有图型功能,可自");      display_GB2312_string(5, 1, "编大字或图像或生");      display_GB2312_string(7, 1, "僻字,例如:囧");      display_graphic_16x16(7, 81, jiong1);               /*在第7页,第81列显示单个自编生僻汉字“囧”*/      display_graphic_16x16(7, 97, lei1);               /*在第7页,第97列显示单个自编生僻汉字"畾“*/      waitkey();      clear_screen();      display_GB2312_string(1, 1, "<!@#$%^&*()_-+\/");/*在第1页,第1列,显示一串16x16点阵汉字或8*16的ASCII字*/      display_string_5x7(3, 1, "<!@#$%^&*()_-+\/");   /*在第3页,第1列,显示一串5x7点阵的ASCII字*/      display_string_5x7(4, 1, "JLXELECTRONICS ");      display_string_5x7(5, 1, "CO.,LTD.estab- ");      display_string_5x7(6, 1, "lished atyear");      display_string_5x7(7, 1, "2004.focusLCM");      display_string_5x7(8, 1, "755-29784961-809");      waitkey();    }}

珜羽 发表于 2012-5-17 02:00

代码完成后用CoolFormatydmgsh对代码进行格式化。修改缩进,排版,是代码美观一些。

然后用notepad++对代码进行高亮显示,用插件高亮输出RTF格式。


然后打开复制,论坛发帖是有从word复制的功能。贴在里面就OK了。

coloz 发表于 2012-5-17 14:42

#include <iostream>
void show(){
std::cout<<"hello world";
}
int main(){
show();
}

acetuo 发表于 2013-11-15 10:28

没搞清楚楼主的目的是什么!!!!!

新月 发表于 2013-12-4 07:34

这好像是单片机写LCD的C语言程序。

kuanshizhuo 发表于 2013-12-9 21:38


没搞清楚楼主的目的是什么!!!!!

jinxie0731 发表于 2016-7-2 19:08

路过,Arduino IDE能实现这样的高亮显示就好了。
页: [1]
查看完整版本: 代码高亮效果