19264液晶完整驱动程序 带字库st7920芯片驱动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "hf19264.h"
//此驱动是在mega32l上实现的
//如果换芯片在.H文件修改管脚即可
//192x64分辨率
//使用2个ST7920驱动芯片驱动
//带中文字库
//作者:不嗨皮先生
//选用时请注明!
//---------发送单字节至HF19264-------------------------
//bit 1选择上屏 0选择下屏
void SendByteTo19264(u8 data,u8 bit)
{
u8 i;
for(i=0;i<8;i++)
{
if(data&0x80)
set_19264data;
else
clr_19264data;
_nop_();
_nop_();
if(bit)
set_19264sclku;
else
set_19264sclkd;
data<<=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
clr_19264sclku;
clr_19264sclkd;
}
clr_19264data;
}
//-----------发送一条指令或数据至JM12864--------------
//select为1发送数据 为0发送指令
void SendStringTo19264(u8 bit,u8 select,u8 data)
{
set_19264cs;
if(select)
SendByteTo19264(0xfa,bit);//写资料到RAM
else
SendByteTo19264(0xf8,bit);//写指令
SendByteTo19264(0xf0&data,bit);//发送高四位
SendByteTo19264(data<<4,bit);//发送低四位
clr_19264cs;
}
//------------------初始化JM12864---------------------
void Init_19264()
{
clr_19264cs;
clr_19264sclku;
clr_19264sclkd;
clr_19264data;
SendStringTo19264(upscreen,0,0x30); //使能基本指令 8位数据格式(在XY12864中)
//001DL X RE XX
/* DL=1,8位MPU接口;DL=0,4位MPU接口
RE=1,扩充指令集;RE=0,基本指令集
同一指令的动作不能同时改变DL和RE,需先改变DL再改变RE才能确保设置正确*/
SendStringTo19264(downscreen,0,0x30);
_delay_us(200);
SendStringTo19264(upscreen,0,0x30);
SendStringTo19264(downscreen,0,0x30);
_delay_us(80);
SendStringTo19264(upscreen,0,0x02); //把DDRAM地址计数器调整为00H,游标回原点,不影响显示DDRAM
SendStringTo19264(downscreen,0,0x02);
_delay_us(80);
SendStringTo19264(upscreen,0,0x06); //0000 01 I/D S S为0,I/D为1(0)是游变右(左)移 DDRAM地址计数器(AC)加(减)1
// S为1,I/D为1(0)时画面整体左(右)移
SendStringTo19264(downscreen,0,0x06);
_delay_us(80);
SendStringTo19264(upscreen,0,0x0c); //0000 1DCB D=1(0)整体显示开(关),但是不改变DDRAM 内容
// C=1(0)游标开(关), B=1(0)游标位置显示反白开(关)
SendStringTo19264(downscreen,0,0x0c);
_delay_us(80);
SendStringTo19264(upscreen,0,0x14); //0001 S/C R/L XX 这条指令不改变DDRAM的内容
/* S/C R/L 方向 AC的值
L L 游标向左移动 AC=AC-1
L H 游标向右移动 AC=AC+1
H L 显示向左移动,游标跟着移动 AC=AC
H H 显示向右移动,游标跟着移动 AC=AC */
SendStringTo19264(downscreen,0,0x14);
_delay_us(80);
SendStringTo19264(upscreen,0,0x01); //清除屏幕
显示,把DDRAM地址计数器调整为00H
SendStringTo19264(downscreen,0,0x01);
_delay_ms(3);
}
//------------------清屏JM12864---------------------
void screen_chear()
{
SendStringTo19264(upscreen,0,0x01);
SendStringTo19264(downscreen,0,0x01);
}
//----------------按坐标屏幕显示汉字-----------------
//一共4行12个汉字列
void display_chinese(u8 hang,u8 lie,u8 *array)
{
u8 addr,i;
switch(hang)
{
case 1:
case 3: addr=0x80;break;
case 2:
case 4: addr=0x90;break;
default:return;
}
if(lie>12)return;
if(hang<3)
SendStringTo19264(upscreen,0,addr+lie-1);
else
SendStringTo19264(downscreen,0,addr+lie-1);
for(i=0;i<12;i++)
{
if(*array=='\0')return;
if(hang<3)
{
SendStringTo19264(upscreen,1,*array++);
SendStringTo19264(upscreen,1,*array++);
}
else
{
SendStringTo19264(downscreen,1,*array++);
SendStringTo19264(downscreen,1,*array++);
}
}
}
/*下面是.H文件*/
#ifndef _HF19264_H_
#define _HF19264_H_
//--------------------------------------------------------
#include
#include
#include "typedefine.h"
#include "define.h"
//--------------------------------------------------------
//19264带字库屏使用两个ST7920驱动芯片
#define hf19264_data PB3 //数据
#define hf19264_cs PB4 //片选
#define hf19264_sclku PB2 //上屏时序
#define hf19264_sclkd PA4 //下屏时序
#define clr_19264data cbi(PORTB,hf19264_data)
#define set_19264data sbi(PORTB,hf19264_data)
#define clr_19264cs cbi(PORTB,hf19264_cs)
#define set_19264cs sbi(PORTB,hf19264_cs)
#define clr_19264sclku cbi(PORTB,hf19264_sclku)
#define set_19264sclku sbi(PORTB,hf19264_sclku)
#define clr_19264sclkd cbi(PORTA,hf19264_sclkd)
#define set_19264sclkd sbi(PORTA,hf19264_sclkd)
#define pin_19264data PINB&(1<
#define upscreen 1
#define downscreen 0
//--------------------------------------------------------
void SendByteTo19264(u8 nbit,u8 bit);
void SendStringTo19264(u8 bit,u8 select,u8 data);
void Init_19264();
void screen_chear();
void display_chinese(u8 hang,u8 lie,u8 *array);
//--------------------------------------------------------
#endif