×
单片机 > 单片机程序设计 > 详情

基于STC12C5410AD的字库型12864的使用

发布时间:2020-06-23 发布时间:
|

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)。

下面我来写一个显示古诗《凉州词》的程序,这个实现起来比较简单,可以参照数据手册来看,无论什么时候,数据手册都是十分重要的,其实就是一款产品的说明书,所以学会自己阅读数据手册是很必要的哦^_^!
由于篇幅有限本文只列出了部分代码,
#include

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; i

for(j=0;j<110;j++)

{};

}

//串行发送一字节数据 

void Send_Byte(unsigned char dat)

{

     unsigned char i;

     for(i=0;i<8;i++)

           {

      delay(1);

      P1M0=0;

          P1M1=1;

               E_CLK=0; //时钟线拉低

               if(dat&0x80)

  RW_SID=1;

  else

  RW_SID=0;

               E_CLK=1;

               dat=dat<<1;

            }

}

  

//控制命令   

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(dat&0xF0);//高四位

     Send_Byte((dat&0x0F)<<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(dat&0xF0);//高四位

     Send_Byte((dat&0x0F)<<4);//低四位

     RS_CS=0;

}     


void display_1()

{

     uchar a;

     Send_command(0x80);

for(a=0;a<14;a++)

{

Send_Dat(ts[a]);

}

}


void display_2()

{

uchar b;

Send_command(0x90);

for(b=0;b<14;b++)

{

Send_Dat(tw[b]);

}

}

void display_3()

{

uchar c;

Send_command(0x88);

for(c=0;c<14;c++)

{

Send_Dat(ta[c]);

}

}

void display_4()

{

uchar d;

Send_command(0x98);

for(d=0;d<14;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


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430F5529 上手小例程2