51单片机学习32-12864显示(51单片机学习32-12864显示)

这篇讲12864液晶显示汉字

仿真图用的是我自己做的一个51单片机开发板 图纸比较大,截图可能看不清,需要的话可以私信联系我。

仿真图:

51单片机学习32-12864显示(51单片机学习32-12864显示)(1)

程序:

51单片机学习32-12864显示(51单片机学习32-12864显示)(2)

源代码:

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

sbit wr=P2^5; //数据写使能 0时 写数据到芯片T6963C

sbit rd=P2^3; //数据读使能 0时 从芯片T6963C读数据

sbit ce=P2^6; //芯片片选信号 低电平有效

sbit cd=P2^4; //WR=0 CD=1 写命令 WR=0 CD=0 写数据

//RD=0 CD=1 读命令 RD=0 CD=0 读数据

sbit rst=P2^0; //复位

void delay(uint t);

void init_12864(); //初始化

void write_data(uchar dat); //写数据

void write_cmd1(uchar cmd); //写命令

void write_cmd2(uchar dat,uchar cmd); //1个字节

void write_cmd3(uchar data1,uchar data2,uchar cmd);//2个字节

uchar read_status(); //读状态

void check_status(); //检测状态

void display_HZ(uchar x,uchar y,uchar *hz);//显示汉字程序

//注意汉字数组要加code放到外部存储器中,如果不加code则空间不够

uchar code HZ0[6][32]={

/*-- 文字: 白 --*/

{ 0x02,0x00,0x04,0x00,0x08,0x08,0x3F,0xFC,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,

0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08,0x00,0x00,},

/*-- 文字: 日 --*/

{ 0x00,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,

0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00,},

/*-- 文字: 依 --*/

{ 0x08,0x40,0x08,0x20,0x08,0x24,0x17,0xFE,0x10,0x40,0x30,0x40,0x50,0xA0,0x90,0xA4,

0x11,0xA8,0x12,0x90,0x14,0x90,0x10,0x88,0x10,0x8E,0x10,0xA4,0x10,0xC0,0x10,0x80,},

/*-- 文字: 山 --*/

{0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04,

0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00,},

/*-- 文字: 尽 --*/

{0x00,0x08,0x1F,0xFC,0x10,0x08,0x10,0x08,0x1F,0xF8,0x11,0x08,0x10,0x80,0x10,0x80,

0x10,0x40,0x16,0x20,0x21,0x90,0x40,0x0E,0x86,0x04,0x01,0x80,0x00,0xC0,0x00,0x40,},

/*-- 文字: , --*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x0C,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x00,0x00,},

};

uchar code HZ1[6][32]={

/*--文字: 黄 --*/

{0x04,0x40,0x04,0x50,0x3F,0xF8,0x04,0x40,0x04,0x44,0xFF,0xFE,0x01,0x10,0x1F,0xF8,

0x11,0x10,0x1F,0xF0,0x11,0x10,0x1F,0xF0,0x10,0x00,0x04,0x60,0x18,0x18,0x60,0x04,},

/*-- 文字: 河 --*/

{ 0x40,0x04,0x3F,0xFE,0x10,0x08,0x00,0x08,0x80,0x48,0x67,0xE8,0x24,0x48,0x0C,0x48,

0x14,0x48,0x24,0x48,0xE7,0xC8,0x24,0x48,0x20,0x08,0x20,0x08,0x20,0x28,0x20,0x10,},

/*-- 文字: 入 --*/

{ 0x04,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x80,0x02,0x80,

0x04,0x40,0x04,0x40,0x08,0x20,0x08,0x20,0x10,0x10,0x20,0x10,0x40,0x0E,0x80,0x04,},

/*-- 文字: 海 --*/

{0x02,0x00,0x42,0x08,0x33,0xFC,0x14,0x00,0x8B,0xF8,0x62,0x88,0x22,0x48,0x0A,0x08,

0x1F,0xFE,0x24,0x88,0xE4,0x48,0x24,0x08,0x27,0xFC,0x20,0x08,0x20,0x28,0x20,0x10,},

/*-- 文字: 流 --*/

{0x00,0x80,0x40,0x48,0x37,0xFC,0x10,0x40,0x80,0x90,0x61,0x08,0x27,0xFC,0x08,0x04,

0x11,0x50,0x21,0x50,0xE1,0x50,0x21,0x50,0x21,0x52,0x21,0x52,0x22,0x4E,0x24,0x40,},

/*-- 文字: 。 --*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x3C,0x00,0x66,0x00,0x66,0x00,0x66,0x00,0x3C,0x00,0x00,0x00,},

};

uchar code HZ2[6][32]={

/*-- 文字: 欲 --*/

{ 0x28,0x40,0x28,0x40,0x44,0x40,0x92,0x7C,0x10,0x84,0x29,0x28,0x46,0x20,0x82,0x20,

0x7C,0x20,0x44,0x20,0x44,0x50,0x44,0x50,0x44,0x90,0x7C,0x88,0x45,0x0E,0x02,0x04,},

/*-- 文字: 穷 --*/

{ 0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x84,0x44,0x0C,0x30,0x12,0x10,0x02,0x08,

0x3F,0xFC,0x02,0x08,0x02,0x08,0x04,0x08,0x04,0x08,0x08,0x88,0x10,0x50,0x20,0x20,},

/*-- 文字: 千 --*/

{ 0x00,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08, 0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,

0x3F,0xF8,0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,},

/*-- 文字: 里 --*/

{0x00,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,

0x3F,0xF8,0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,},

/*-- 文字: 目 --*/

{0x00,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,

0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00,},

/*-- 文字: , --*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x0C,0x00,0x1E,0x00,0x1E,0x00,0x0C,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x00,0x00,},

};

uchar code HZ3[6][32]={

/*-- 文字: 更 --*/

{ 0x00,0x04,0xFF,0xFE,0x01,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,

0x21,0x08,0x3F,0xF8,0x29,0x08,0x05,0x00, 0x02,0x00,0x05,0x80,0x18,0x70,0xE0,0x0E},

/*-- 文字: 上 --*/

{ 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x10,0x01,0xF8,0x01,0x00,0x01,0x00,

0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,},

/*-- 文字: 一 --*/

{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFF,0xFE,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},

/*-- 文字: 层 --*/

{0x00,0x04,0x1F,0xFE,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x00,0x10,0x10,0x17,0xF8,

0x10,0x00,0x10,0x04,0x1F,0xFE,0x11,0x00,0x22,0x10,0x24,0x08,0x4F,0xFC,0x80,0x04,},

/*-- 文字: 楼 --*/

{0x10,0x40,0x12,0x48,0x11,0x50,0x10,0x44,0xFF,0xFE,0x11,0x50,0x3A,0x4C,0x34,0x44,

0x50,0x80,0x5F,0xFE,0x91,0x08,0x12,0x08,0x11,0xB0,0x10,0x40,0x11,0xB0,0x16,0x08,},

/*-- 文字: 。 --*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x3C,0x00,0x66,0x00,0x66,0x00,0x66,0x00,0x3C,0x00,0x00,0x00,},

} ;

void main()

{

uchar i,j=0;

init_12864();

for(i=0;i<6;i )

display_HZ(0,1 i,HZ0[i]);//显示:白日依山尽,

for(i=0;i<6;i )

display_HZ(1,2 i,HZ1[i]);//显示:黄河入海流。

for(i=0;i<6;i )

display_HZ(2,1 i,HZ2[i]);//显示:欲穷千里目,

for(i=0;i<6;i )

display_HZ(3,2 i,HZ3[i]);//显示:更上一层楼。

}

//汉字显示函数,处在x y处显示汉字hz

void display_HZ(uchar x,uchar y,uchar *hz)////x 0-3 y 0-7

{

uchar i,j=0;

for(i=0;i<16;i )

{

write_cmd3(((j/2)<<4)|(y*2),x,0x24);//地址指针设置..低地址,高地址,命令

write_cmd2(hz[j ],0xc0);

write_cmd2(hz[j ],0xc0);

}

}

void delay(uint t)//延时函数

{

uint i,j;

for(i=0;i<t;i )

for(j=0;j<50;j );

}

void init_12864()//初始化函数

{

//rst=1;

//delay(10);

//rst=0;

//wr=1;

//rd=1;

//ce=1;

//cd=1;

//rst=1;

//delay(10);

//check_status();

write_cmd3(0x01,0x00,0x21);//光标指针设置 //寄存器设置

//check_status();

write_cmd3(0x00,0x00,0x42);//图形区首地址 //设置控制字

//check_status();

write_cmd3(16,0x00,0x43);//图形区宽度 //设置控制字

//check_status();

write_cmd1(0x80);//显示方式设置,正常显示 //模式设置

//check_status();

write_cmd1(0x98);//图形方式显示,不显示字母,只打点 //显示设置

//check_status();

write_cmd1(0xa0);//光标形状设置1 0 1 0 0 N2 N1 N0 //光标形状设置

}

void write_data(uchar dat)

{

//rd=1;

ce=0; //芯片使能

cd=0; //写数据 这句跟下面一句不能换位置

wr=0; //写使能

P0=dat;

delay(10);

ce=1;

cd=1;

wr=1;

}

void write_cmd1(uchar cmd)

{

rd=1; //这句不能去掉

ce=0;

cd=1; //写命令

wr=0; //写使能

P0=cmd;

delay(10);

ce=1;

cd=0; //1到0 变化为下一个命令做准备

wr=1;

}

//先送参数,再送指令

void write_cmd2(uchar dat,uchar cmd)

{

check_status();

write_data(dat);

check_status();

write_cmd1(cmd);

}

void write_cmd3(uchar data1,uchar data2,uchar cmd)

{

check_status();

write_data(data1);

check_status();

write_data(data2);

check_status();

write_cmd1(cmd);

}

uchar read_status()

{

uchar status;

rd=0;

wr=1;

ce=0;

cd=1;

status=P1;

return status;

}

void check_status()

{

uchar s;

while((s&0x03)!=0x03)

s=read_status();//等待位1,2置位。命令读写准备好。数据读写准备好

}

仿真结果:

51单片机学习32-12864显示(51单片机学习32-12864显示)(3)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页