详解51单片机12864应用程序

发布时间:2018-11-21 阅读量:755 来源: 发布人:

单片机作为计算机发展的一个重要分支领域,根据目前发展情况,从不同角度单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。那么,本文介绍的将是51单片机12864应用程序。


详解51单片机12864应用程序


程序:


详解51单片机12864应用程序


源代码:

#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单片机12864应用程序

相关资讯
无源晶振YSX321SL应用于高精度HUD平视显示系统YXC3225

在现代汽车行业中,HUD平视显示系统正日益成为驾驶员的得力助手,为驾驶员提供实时导航、车辆信息和警示等功能,使驾驶更加安全和便捷。在HUD平视显示系统中,高精度的晶振是确保系统稳定运行的关键要素。YSX321SL是一款优质的3225无源晶振,拥有多项卓越特性,使其成为HUD平视显示系统的首选。

拥有卓越性能的高精度超薄低功耗心电贴—YSX211SL

随着医疗技术的进步,心电监护设备在日常生活和医疗领域中起到了至关重要的作用。而无源晶振 YSX211SL 作为一种先进的心电贴产品,以其独特的优势在市场上备受瞩目。

可编程晶振选型应该注意事项

对于可编程晶振选型的话,需要根据企业的需求选择。在选择可编程晶振的时候注重晶振外观、晶振的频率、晶振的输出模式、晶振的型号等等,这些都是要注意的,尤其是晶振的频率和晶振输出模式以及晶振的型号都是需要注意的。

性能高的服务器—宽电压有源晶振YSO110TR 25MHZ,多种精度选择支持±10PPM—±30PPM

在现代科技发展中,服务器扮演着越来越重要的角色,为各种应用提供强大的计算和数据存储能力。而高品质的服务器组件是确保服务器稳定运行的关键。YSO110TR宽电压有源晶振,作为服务器的重要组成部分,具备多项优势,成为业界必备的可靠之选。

差分晶振怎么测量

其实对于差分晶振怎么测量方式有很多种,主要还是要看自己选择什么样的方式了,因为选择不同的测量方式步骤和操作方式是不同的。关于差分晶振怎么测量的方式,小扬给大家详细的分享一些吧!