基于51单片机汉字显示器12864应用软件程序源码

/***************************************************************/
//液晶字体处理部分
typedef struct typFNT_GB16
{
    char Index[2];
    char Mask[32];
};

code
struct typFNT_GB16  GB_16[]=
{

"李",//0
{
0x01,0x00,0x01,0x00,0x7F,0xFC,0x03,0x80,0x05,0x40,0x09,0x30,0x31,0x0E,0xDF,0xE4,
0x00,0x80,0x01,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00
},

"菁",//1
{
0x04,0x40,0xFF,0xFE,0x05,0x40,0x3F,0xF8,0x01,0x00,0x1F,0xF0,0x01,0x00,0xFF,0xFE,
0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x30
},

"川",//2
{
0x10,0x04,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,
0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x20,0x84,0x20,0x04,0x40,0x00    
},

"带",//3
{
0x09,0x10,0x09,0x10,0x7F,0xFE,0x09,0x10,0x09,0x10,0x7F,0xFE,0x41,0x04,0x81,0x08,
0x1F,0xF0,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x50,0x11,0x20,0x01,0x00,0x01,0x00
},

"温",//4
{
0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,
0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00
},

"度",//5
{
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,
0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04
},

"传",//6
{
0x10,0x40,0x18,0x48,0x17,0xFC,0x20,0x40,0x20,0x80,0x60,0x84,0xAF,0xFE,0x20,0x80,
0x21,0x08,0x23,0xFC,0x20,0x08,0x21,0x10,0x20,0xA0,0x20,0x40,0x20,0x20,0x00,0x00
},

"感",//7
{
0x00,0x50,0x00,0x48,0x3F,0xFC,0x20,0x40,0x3F,0x48,0x20,0x48,0x2F,0x30,0x29,0x20,
0x4F,0x32,0x40,0x4A,0x80,0x06,0x09,0x08,0x28,0x84,0x28,0x16,0x67,0xF0,0x00,0x00
},

"器",//8
{
0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,0x01,0x10,0x01,0x08,0xFF,0xFC,0x06,0xC0,
0x18,0x30,0xE0,0x0E,0x3E,0xFC,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8,0x00,0x00
},

"的",//9
{
0x10,0x80,0x10,0x80,0x20,0x80,0x7C,0xFC,0x45,0x04,0x45,0x04,0x46,0x04,0x7C,0x84,
0x44,0x44,0x44,0x64,0x44,0x24,0x44,0x04,0x7C,0x04,0x44,0x28,0x40,0x10,0x00,0x00
},

"数",//10
{
0x08,0x20,0x49,0x30,0x2A,0x20,0x1C,0x20,0xFF,0x7E,0x1C,0x44,0x2B,0x44,0x48,0xC4,
0x08,0x28,0xFF,0x28,0x12,0x10,0x34,0x10,0x0C,0x28,0x32,0x4E,0xC0,0x84,0x00,0x00
},

"字",//11
{
0x02,0x00,0x01,0x00,0x3F,0xFC,0x20,0x04,0x40,0x08,0x1F,0xE0,0x00,0x40,0x00,0x80,
0x01,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00
},

"示",//12
{
0x00,0x00,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,
0x11,0x20,0x11,0x10,0x21,0x08,0x41,0x0C,0x81,0x04,0x01,0x00,0x05,0x00,0x02,0x00
},

"波",//13
{
0x20,0x40,0x10,0x40,0x10,0x40,0x07,0xFE,0x84,0x44,0x54,0x40,0x54,0x40,0x17,0xF8,
0x25,0x08,0x24,0x90,0xE4,0x90,0x24,0x60,0x28,0x60,0x28,0x98,0x31,0x0E,0x26,0x04
},

"器",//14
{
0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,0x01,0x10,0x01,0x08,0xFF,0xFC,0x06,0xC0,
0x18,0x30,0xE0,0x0E,0x3E,0xFC,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8,0x00,0x00
},

"设",//15
{
0x40,0x00,0x21,0xF0,0x31,0x10,0x21,0x10,0x01,0x10,0x01,0x10,0xE2,0x0E,0x25,0xF8,
0x21,0x08,0x21,0x08,0x20,0x90,0x20,0x90,0x28,0x60,0x30,0x90,0x23,0x0E,0x0C,0x04
},

"计",//16
{
0x40,0x20,0x20,0x20,0x30,0x20,0x20,0x20,0x00,0x20,0xF3,0xFE,0x10,0x20,0x10,0x20,
0x10,0x20,0x10,0x20,0x10,0x20,0x12,0x20,0x14,0x20,0x18,0x20,0x10,0x20,0x00,0x20
},

"者",//17
{
0x01,0x00,0x01,0x08,0x3F,0xEC,0x01,0x10,0x01,0x20,0x7F,0xFE,0x00,0x80,0x03,0x00,
0x07,0xF8,0x1C,0x08,0xE4,0x08,0x07,0xF8,0x04,0x08,0x04,0x08,0x07,0xF8,0x04,0x08
},

"2",//18
{
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x04,0x00,
0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x42,0x00,0x7E,0x00,0x00,0x00,0x00,0x00
},

"0",//19
{
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x24,0x00,0x42,0x00,0x42,0x00,0x42,0x00,
0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x24,0x00,0x18,0x00,0x00,0x00,0x00,0x00
},

"0",//20
{
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x24,0x00,0x42,0x00,0x42,0x00,0x42,0x00,
0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x24,0x00,0x18,0x00,0x00,0x00,0x00,0x00
},

"7",//21
{
0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x44,0x00,0x44,0x00,0x08,0x00,0x08,0x00,
0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00
},

"1",//22
{
0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x70,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x00,0x00,0x00,0x00
},

"2",//23
{
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x04,0x00,
0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x42,0x00,0x7E,0x00,0x00,0x00,0x00,0x00
},

"/",//24
{
0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,
0x08,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x00,0x00
} ,

"当",//25
{
0x00,0x80,0x10,0x90,0x08,0x98,0x0C,0x90,0x08,0xA0,0x00,0x80,0x3F,0xFC,0x00,0x04,
0x00,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x3F,0xFC,0x00,0x04,0x00,0x00    
}  ,

"前",//26
{
0x08,0x10,0x06,0x18,0x04,0x20,0xFF,0xFE,0x00,0x00,0x3E,0x08,0x22,0x48,0x3E,0x48,
0x22,0x48,0x22,0x48,0x3E,0x48,0x22,0x48,0x22,0x48,0x2A,0x08,0x24,0x28,0x00,0x10
    
},

"温",//27
{
0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,
0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00

},

"度",//28
{
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,
0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04
}};

/*************************************************************/
#include<reg51.h>//头文件
#include<ziku.c>//包含字库.c
#include <absacc.h>//好汉.h
#include <intrins.h>//包含.h

#define uchar unsigned char//char宏定义
#define uint unsigned int//int宏定义

/**************************************************************
*12864液晶的定义(T6963驱动)                                  *
***************************************************************/
sbit REST = P2^0;//复位脚
sbit C_D = P2^1;//L:data   H:code
sbit C_E = P2^2;//Chip enable signal, active"L"
sbit R_D = P2^3;//read signal, active"L"
sbit rw= P2^4;//write signal, active"L"

#define width                       15 //显示区宽度
#define Graphic                   1
#define TXT                        0
#define LcmLengthDots            128
#define LcmWidthDots             64


/**************************12864液晶的相关函数**********************/                                           
void delay_nms(uint i)//延时函数
{
    while(i)
    i--;
}
void write_com(uchar com)//对液晶写一个指令
{     
    C_E = 0;    
    C_D = 1;
    R_D = 1;
    P0=com;
    W_R = 0;// write      
    _nop_();                    
    W_R = 1;// disable write
    C_E = 1;
    C_D = 0;

}
int sadsa;

void write_dat(uchar dat)//对液晶写一个数据
{
    C_E=0;
    C_D=0;
    R_D=1;
    P0=dat;
    W_R=0;
    _nop_();
    W_R=1;
    C_E=1;
    C_D=1;
}
 void write_dc(uchar com,uchar dat)     //写一个指令和一个数据
{
    write_date(dat);
    write_commond(com);
}

//写两个数据和一个指令
void write_ddc(uchar com,uchar dat1,uchar dat2)
{
    write_date(dat1);
    write_date(dat2);
    write_commond(com);
}

//LCD初始化函数
void F12864_init(void)
{    
    REST=0;
    delay_nms(2000);//压实一大段时间                    
    REST=1;//高电平复位
    write_ddc(0x40,0x00,0x00);                          //设置文本显示区首地址
    write_ddc(0x41,128/8,0x00);                          //设置文本显示区宽度
    write_ddc(0x42,0x00,0x08);                          //设置图形显示区首地址0x0800
    write_ddc(0x43,128/8,0x00);                          //设置图形显示区宽度
    write_commond(0xA0);                         //设置光标形状 8x8方块
    write_commond(0x80);                         //显示方式设置 文本and图形(异或)
    write_commond(0x92);                         //设置光标
    write_commond(0x9F);                         //显示开关设置 文本开,图形开,光标闪烁关                                 

}
//**************************//清显示存储器函数

void F12864_clear(void)
{
    unsigned int i;
    write_ddc(0X24,0x00,0x00);                             //置地址指针为从零开始
   write_commond(0xb0);                                     //自动写
    for(i = 0;i < 128 * 64 ;i++)write_date(0x00); // 清一屏
    write_commond(0xb2);                                     // 自动写结束
    write_ddc(0x24,0x00,0x00);                             // 重置地址指针
  
}

//设定显示的地址
void goto_xy(uchar x,uchar y,uchar mode)
{
     uint  temp;
     temp = 128 / 8 * y + x;
     if(mode)//mode = 1为Graphic
     {                                        //如果图形模式要加上图形区首地址0x0800
         temp = temp + 0x0100;
     }
     write_ddc(0x24,temp & 0xff,temp / 256);      //地址指针位置
}

//显示一个ASCII码函数
void Putchar(uchar x,uchar y,uchar Charbyte)
{
     goto_xy(x,y,TXT);
     write_dc(0xC4,Charbyte-32);              //数据一次读写方式 //查字符rom
     
}

void display_string(uchar x,uchar y,uchar *p)
{
    while(*p != 0)
    {
        if(x > 15 )                          //自动换行     128*64
        {
            x = 0;
            y++;
        }
        Putchar(x,y,*p);
        ++x;
        ++p;
    }
}

//显示一串汉字,j = k + n为(n为要显示的字的个数),k为选择从哪个字开始
void dprintf_hanzi_string_1(struct typFNT_GB16 code *GB_16,uint X_pos,uint Y_pos,uchar j,uchar k)
{  
    unsigned int address;
    unsigned char m,n;

    while(k < j)
    {
        
        m = 0;
        address = LcmLengthDots / 8 * Y_pos + X_pos + 0x0800;
        for(n = 0;n < 16;n++)                                     //计数值16
        {
           write_ddc(0x24,(uchar)(address),(uchar)(address>>8));  //设置显示存储器地址
           write_dc(0xc0,GB_16[k].Mask[m++]);                     //写入汉字字模左部
           write_dc(0xc0,GB_16[k].Mask[m++]);                     //写入汉字字模右部
          
           address = address + 128/8;                           //修改显示存储器地址,显示下一列(共16列)
        }

        X_pos += 2;
        k++;
    }
}

void main()//主函数
{

    F12864_init();//初始化12864
    F12864_clear();//清屏12864
    while(1)//循环
    {
        dprintf_hanzi_string_1(GB_16,0,0,10,3);//带温度传感器的
        //dprintf_hanzi_string_1(GB_16,3,18,15,10);// 数字示波器
        dprintf_hanzi_string_1(GB_16,1,18,18,15);//  设计者

        display_string(7,3,":2008/5");                                

    }
}

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GJZGRB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值