基于STC12C5410AD的字库型12864的使用
12864和1602还是有一些相似之处的,但是论功能来看,12864还是强大很多的!
12864的操作方式有两种----(串行和并行),就我个人而言是比较倾向于串行的,虽然程序稍微麻烦一点,但是很节省GPIO的资源,这是很重要的,12864也可以实现绘制各种图形的功能,和1602相似,个人认为还是弄一个比较好用的取模软件比较好,生成代码后就可以显示自己想要的图形了(1602的使用里是有介绍的^_^)!
STC12C5410AD这款单片机和51单片机是十分相似的,相对比51而言,它更有了推挽输出功能,AD转换功能等;它内部锁相环也照比51强大的多,最高工作频率可达30+M。它的基本操作方法和51是一样的。
我来简单的介绍一下12864的显示问题:
1、字符产生ROM(CGROM)
里面提供了8192(213)个汉字GB2132宋体
2、显示数据RAM(DDRAM)
内部提供64*2位空间,最多可控制4行16字,也就是16个中文字型显示,当写入显示数据RAM时,可分别显示CGROM和CGRAM的字型,可以用来显示三种字型:半角英文数字型、CGRAM字型和CGROM的中文字型,三种字型的选择,由在DDRAM总写入的编码选择,在0000H—0006H的编码中(其代码分别为0000、0002、0004、0006共四个)将选择CGRAM的自定义字型,02H—7FH的编码中将显示半角英文数字型的字型(也就是ASCII码,大小为16*8),至于A1以上的编码将自动结合下一个位元组,组成两个位元组的编码,从而形成一个中文字型的编码,也就是说显示一个汉字要两个ASCII码显示的位置,即大小为16*16。BIG(A140—D75F),GB(A1A0—F7FF)。
下面我来写一个显示古诗《凉州词》的程序,这个实现起来比较简单,可以参照数据手册来看,无论什么时候,数据手册都是十分重要的,其实就是一款产品的说明书,所以学会自己阅读数据手册是很必要的哦^_^!
由于篇幅有限本文只列出了部分代码,完整的源代码下载地址:http://www.51hei.com/f/1286452.rar 以下是部分代码
#include intrins.h>
sbit E_CLK =P1^2; //时钟使能
sbit RW_SID=P1^1;//串行数据输入、输出端
sbit RS_CS =P1^0;//片选端
//宏定义
#define uint unsigned int
#define uchar unsigned char
//下面是数组定义
uchar code ts[]={"黄河远上白云间"};
uchar code tw[]={"一片孤城万仞山"};
uchar code ta[]={"羌笛何须怨杨柳"};
uchar code tb[]={"春风不度玉门关"};
//延时子函数
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=0; ixms; i++)
for(j=0;j110;j++)
{};
}
//串行发送一字节数据
void Send_Byte(unsigned char dat)
{
unsigned char i;
for(i=0;i8;i++)
{
delay(1);
P1M0=0;
P1M1=1;
E_CLK=0; //时钟线拉低
if(dat0x80)
RW_SID=1;
else
RW_SID=0;
E_CLK=1;
dat=dat1;
}
}
//控制命令
void Send_command(unsigned char dat)
{
P1M0=0;
P1M1=1;
RS_CS=1;
Send_Byte(0xF8);//11111,00,0 RW=0,RS=0 同步标志
Send_Byte(dat0xF0);//高四位
Send_Byte((dat0x0F)4);//低四位
RS_CS=0;
}
//显示数据或单字节字符
void Send_Dat(unsigned char dat)
{
RS_CS=1;
Send_Byte(0xFA);//11111,01,0 RW=0,RS=1
Send_Byte(dat0xF0);//高四位
Send_Byte((dat0x0F)4);//低四位
RS_CS=0;
}
void display_1()
{
uchar a;
Send_command(0x80);
for(a=0;a14;a++)
{
Send_Dat(ts[a]);
}
}
void display_2()
{
uchar b;
Send_command(0x90);
for(b=0;b14;b++)
{
Send_Dat(tw[b]);
}
}
void display_3()
{
uchar c;
Send_command(0x88);
for(c=0;c14;c++)
{
Send_Dat(ta[c]);
}
}
void display_4()
{
uchar d;
Send_command(0x98);
for(d=0;d14;d++)
{
Send_Dat(tb[d]);
}
}
//初始化 LCD
void init(void)
{
P1M0=0;
P1M1=1;
RS_CS=0;
delay(1);
Send_command(0x30);//功能设置,一次送8位数据,基本指令集
Send_command(0x0c);//0000,1100 整体显示,游标on,游标位置on
Send_command(0x01);//0000,0001 清DDRAM
Send_command(0x02);//0000,0010 DDRAM地址归位
Send_command(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC
}
void main(void)
{
init();
delay(1);
display_1();
display_2();
display_3();
display_4();
while(1);
}
STC12C5410AD 12864 DDRAM 相关文章:
- STC12C5410AD AD转换示例程序(12-02)
- MMA7260的STC12C5410AD单片机程序(12-01)
- STC12C5410AD学习板---红外解码(11-18)
- STC12C5410AD学习板---串口通信(11-18)
- STC12C5410AD学习板---PWM练习(11-18)
- STC12C5410AD学习板---AD按键测试程序(11-18)