#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h"
#include "intrins.h"
#include "ST7565.h"
#include "LCDFont.h"
#define Page0 0xb0 //第0页地址
#define Page_max 0xb8 //最大页地址,第8页
#define Column_h 0x10 //列地址(高位)
#define Column_l 0x00 //列地址(低位)
//--------------------------------------------------------- 4线SPI接口
sbit SDO = P1^0;//串行数据 AAAAAAAAA
sbit SCLK = P1^1;//串行时钟
sbit CD = P1^2;//命令/数据切换 AAAAAAAA
sbit RSTB = P1^3;
sbit CS0 = P1^4;//片选信号
//--------------------------------------------------------------------------
//清屏函数
void clear_screen(uchar xx)
{
uchar i,j;
for(i=0;i<8;i++)
{
CS0=0;
Write_ST7567_COM(0xb0+i); //SET PAGE 0---8
Write_ST7567_COM(0x10); //SET COLUMN MSB
Write_ST7567_COM(0x00); //SET CLUMN LSB
for(j=0;j<128;j++)
{
Write_ST7567_DATA(xx);
}
}
}
//显示图片函数
void Display_pic1()
{
uint i,j,adressd=0;
for(i=0;i<8;i++)
{
CS0=0;
Write_ST7567_COM(0xb0+i);
Write_ST7567_COM(0x10);
Write_ST7567_COM(0x00);
for(j=0;j<96;j++)
{
Write_ST7567_DATA(graphic1[adressd]);
adressd++;
}
}
}
//写命令函数
void Write_ST7567_COM(uchar COMDADA_4SPI)
{
uchar bit8;
CD=0;
CS0=0;
for(bit8=0;bit8<8;bit8++)
{
SCLK=0;
if((COMDADA_4SPI&0x80)==0x80)
SDO=1;
else
SDO=0;
// SCL=0;
SCLK=1;
COMDADA_4SPI=(COMDADA_4SPI<<1);
}
// CS1=1;
}
//写数据函数
void Write_ST7567_DATA(uchar DATA_4SPI)
{
uchar bit8;
CD=1;
CS0=0;
for(bit8=0;bit8<8;bit8++)
{
SCLK=0;
if((DATA_4SPI&0x80)==0x80)
SDO=1;
else
SDO=0;
SCLK=1;
DATA_4SPI=(DATA_4SPI<<1);
}
// CS1=1;
}
//软件延时(不怎么准
void Delay_ms(unsigned long value)
{
uint i,j;
for (i=0;i<value;i++)
for (j=0;j<500;j++);
}
//硬件复位函数
void HDReset()
{
RSTB=0;
Delay_ms(2);
RSTB=1;
Delay_ms(4);
}
///****************************************************************************/
////函数名称:WRITE_STRING(uchar plat,uchar column,uchar xs,uchar chr, uchar c)
////函数功能:显示字符
////输入参数:plat 行地址
////输入参数:column 列地址
////输入参数:chr 显示数值
////输入参数:fs 显示方式(0,反显,否则正常显示)
////返 回 值:无
///****************************************************************************/
void WRITE_STRING(uchar plat, uchar column, uchar chr, uchar fs)
{
uchar page,page1,col,col_h,col_l;
uchar i,a,j=0;
page1= plat*2;
page=page1+Page0;
col=column*8;
col_h=((col>>4)|0xf0)&0x1f;
col_l=col&0x0f;
chr=chr-' ';//得到偏移后的值
for(a = 0; a <2; a++)
{
Write_ST7567_COM(col_h);
Write_ST7567_COM(col_l);
Write_ST7567_COM(page+a);
for(i = 0; i <8; i ++ )
{
if(fs == 0){Write_ST7567_DATA(s0[chr][j++]);}
if(fs == 1){Write_ST7567_DATA(~(s0[chr][j++]));}
}
}
}
///****************************************************************************/
////函数名称:Disp_Nub8X16(uchar Row,uchar Col,uchar Number,uchar fs)
////函数功能:将数据显示出来
////输入参数:low 行地址
////输入参数:Col 列地址
////输入参数:Number 显示数值
////输入参数:fs 显示方式(0,反显,否则正常显示)
////返 回 值:无
///****************************************************************************/
void Disp_Nub8X16(uchar Row,uchar Col,uchar Number,uchar fs)
{
uchar page,page1,col,col_h,col_l,chr;
uchar i,a,j=0;
page1=Row*2;
page=page1+Page0;
col=Col*8;
col_h=((col>>4)|0xf0)&0x1f;
col_l=col&0x0f;
if(Number<11)//十进制数据
{
chr=Number+16;
}
else//十六进制数据
{
chr=Number-32;
}
for(a = 0; a <2; a++)
{
Write_ST7567_COM(col_h);
Write_ST7567_COM(col_l);
Write_ST7567_COM(page+a);
for(i = 0; i <8; i ++ )
{
if(fs == 0){Write_ST7567_DATA(s0[chr][j++]);}
if(fs == 1){Write_ST7567_DATA(~(s0[chr][j++]));}
}
}
}
//清屏函数
void Lcd12864_ClearScreen(void)
{
uchar i, j;
for(i=0; i<8; i++)
{
Write_ST7567_COM(0xB0+i);
Write_ST7567_COM(0x10);
Write_ST7567_COM(0x00);
for(j=0; j<128; j++)
{
Write_ST7567_DATA(0x00);
}
}
}
///****************************************************************************/
////函数名称:Init_ST7567()
////函数功能:初始化液晶屏
////输入参数:无
////返 回 值:无
//// TIPS:命令符见ST7567数据手册
///****************************************************************************/
void Init_ST7567()
{
HDReset();//硬复位
Timer0_Delay1ms(100);
Write_ST7567_COM(0xe2);//软复位
Write_ST7567_COM(0xaf);//0xaf显示器开
Write_ST7567_COM(0x2f);//0x2f升压电路,电压管理电路,
Write_ST7567_COM(0x25);//0x20-0x27为V5电压内部电阻调整设置
Write_ST7567_COM(0x81);// SET EV 调对比度
Write_ST7567_COM(0x18);//0x01-0x3f电量寄存器设置模式
Write_ST7567_COM(0xa0);//0xa0为Segment正向,0xa1 为Segment反向
Write_ST7567_COM(0xc8);//0xc0正向扫描,0xc8反射扫描
Write_ST7567_COM(0xa6);//0xa6正向显示,0xa7反向显示
Write_ST7567_COM(0xa4);//0xa4正常显示,0xa5全屏点亮
Write_ST7567_COM(0xf8);//背压比设置
Write_ST7567_COM(0x00);//00--10
Lcd12864_ClearScreen();//清屏
}
void main(void)
{
Set_All_GPIO_Quasi_Mode;
Init_ST7567();
Lcd12864_ClearScreen();
//Disp_Nub8X16(0, 0, 3, 0);
WRITE_STRING(1, 0 + 3, 'W', 0);
WRITE_STRING(1, 1 + 3, 'h', 0);
WRITE_STRING(1, 2 + 3, 'y', 0);
WRITE_STRING(1, 3 + 3, 'C', 0);
WRITE_STRING(1, 4 + 3, 'a', 0);
WRITE_STRING(1, 5 + 3, 'n', 0);
WRITE_STRING(1, 6 + 3, '.', 0);
WRITE_STRING(1, 7 + 3, 'c', 0);
WRITE_STRING(1, 8 + 3, 'n', 0);
while(1);
}
离线
正在学习这个,中文怎么显示?
离线
电脑字模软件把字符生成数组, 然后把这个数组拷贝到显示缓冲区就可以了。
我试试,谢谢啦。
离线
显示坐标图有什么方法?修改整屏显示缓存,定时刷新?
离线
显示坐标图有什么方法?修改整屏显示缓存,定时刷新?
对,一般都是这么做的。
离线