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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7726|回复: 6

代码高亮效果

[复制链接]
发表于 2012-5-17 01:45 | 显示全部楼层 |阅读模式
本帖最后由 珜羽 于 2012-5-17 01:56 编辑

#include <reg51.H>
#include <intrins.h>
sbit lcd_sclk = P3 ^ 2; /*接口定义:lcd_sclk就是LCDsclk*/
sbit lcd_sid = P3 ^ 1; /*接口定义:lcd_sid就是LCDsid*/
sbit lcd_rs = P3 ^ 0; /*接口定义:lcd_rs就是LCDrs*/
sbit lcd_reset = P1 ^ 0; /*接口定义:lcd_reset就是LCDreset*/
sbit lcd_cs1 = P1 ^ 1; /*接口定义:lcd_cs1就是LCDcs1*/
sbit Rom_IN = P1 ^ 2; /*字库IC接口定义:Rom_IN就是字库ICSI*/
sbit Rom_OUT = P1 ^ 3; /*字库IC接口定义:Rom_OUT就是字库ICSO*/
sbit Rom_SCK = P1 ^ 4; /*字库IC接口定义:Rom_SCK就是字库ICSCK*/
sbit Rom_CS = P1 ^ 5; /*字库IC接口定义Rom_CS就是字库ICCS#*/
#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.0GND之间接一个按键*/
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);  /*粗调对比度,可设置范围0x200x27*/
    transfer_command_lcd(0x81);  /*微调对比度*/
    transfer_command_lcd(0x28);  /*0x28,微调对比度的值,可设置范围0x000x3f*/
    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;
}
/******************************************************************/
ulong  fontaddr = 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[32]"*/
            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[32]"*/
            display_graphic_8x16(y, x, fontbuf); /*显示8x16ASCII字到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[32]"*/
            display_graphic_5x7(y, x, fontbuf); /*显示5x7ASCII字到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点阵汉字或8x16ASCII*/
        Rom_SCK = 0;
        display_GB2312_string(3, 1, "16X16简体汉字库,"); /*在第3页,第1列,显示一串16x16点阵汉字或8x16ASCII.以下雷同*/
        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*16ASCII*/
        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格式。
QQ截图20120517015946.png

然后打开复制,论坛发帖是有从word复制的功能。贴在里面就OK了。
发表于 2012-5-17 14:42 | 显示全部楼层
[mw_shl_code=cpp,true]#include <iostream>
void show(){
std::cout<<"hello world";
}
int main(){
show();
}[/mw_shl_code]
发表于 2013-11-15 10:28 | 显示全部楼层
没搞清楚楼主的目的是什么!!!!!
发表于 2013-12-4 07:34 | 显示全部楼层
这好像是单片机写LCD的C语言程序。
发表于 2013-12-9 21:38 | 显示全部楼层

没搞清楚楼主的目的是什么!!!!!
发表于 2016-7-2 19:08 | 显示全部楼层
路过,Arduino IDE能实现这样的高亮显示就好了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 05:08 , Processed in 0.101486 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表