3310液晶驱动
发发自己写的3310屏幕液晶驱动显示四行字厚着脸皮用最笨的方法做了。
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608300CTFLP8.jpg
(原文件名:图片 003.jpg)
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608301NOIYDM.jpg
(原文件名:图片 001.jpg)
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608302GPCNU3.jpg
(原文件名:图片 002.jpg)
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608303Q4NSGF.jpg
(原文件名:图片 003.jpg)
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608304WYWOQA.jpg
(原文件名:图片 004.jpg)
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608305ERLAN9.jpg
(原文件名:图片 005.jpg)
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608306BPBXL0.jpg
(原文件名:图片 006.jpg)
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608307KMAWB6.jpg
(原文件名:图片 007.jpg) 引用图片【楼主位】qq335702318 | 昌少
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608303Q4NSGF.jpg
(原文件名:图片 003.jpg)
经典 =========================.h文件===================================================================
#ifndef _LCD3310_h_
#define _LCD3310_H_
/**************引脚*****************/
/* 1 VDD */
sbit SCLK_3310 = P2^3; /* 2 SCLK */
sbit SDIN_3310 = P2^2; /* 3 SDIN */
sbitD_C_3310 = P2^1; /* 4 D/C */
sbit CS_3310 = P2^6; /* 5 CS */
/* 6 GND */
/* 7 Vout */
sbitRES_3310 = P2^0; /* 8 RES */
/*****************************************/
/**************函数声明***************************/
void write_3310(bit D_C,unsigned char Data);//写函数
void reset_3310(void); //复位
void clear_3310(unsigned char Data);//清屏幕
void init_3310(void); //初始化
void setXY_3310(unsigned char X,unsigned char Y);//设置坐标
void write_3310_str(unsigned char X,unsigned char Y,unsigned char str); //显示ASCII字符
void write_3310_string(unsigned char *str,unsigned char Length);//显示ASCII字符串
void display_1616CN(unsigned char X,unsigned char Y,unsigned char *str); //显示16x16点阵
void display_1212CN(unsigned char X,unsigned char Y,unsigned char WordS,unsigned char Length); //显示12x12点阵
void display_1212CNH(unsigned char X,unsigned char Y,unsigned char WordS,unsigned char Length); //显示12x12点阵上下半句合并
void display_photo(unsigned char *photo_addr);//全屏显示图像
/**************指 令 集***************************/
#define LPH7366_basic_fun_set0x20 //基本功能设置
#define LPH7366_expand_fun_set 0x21 //扩展功能设置
//D7D6D5D4D3D2D1D0
//0 0 1 0 0 PDV H
// | | |_______1->扩展指令集0->基本指令集
// | |___________1->垂直寻址 0->水平寻址
// |_______________1->低功耗模式0->正常模式
/*****************************************************/
/**************基 本 指 令 集*********************/
#define LPH7366_dis_set0x0c /*显示模式设置*/
//D7D6D5D4D3D2D1D0
//0 0 0 0 1 D 0 E
// | |_______0 0 1 1
// |_______________0 1 0 1
// 白屏 正常显示 全显 反转
/*****************************************************/
#define LPH7366_add_Yset0x40 /* 设置Y地址 */
//D7D6D5D4D3D2D1D0
//0 1 0 0 0 Y1Y2Y3
/*****************************************************/
#define LPH7366_add_Xset0x80 /* 设置X地址 */
//D7D6D5D4D3D2D1D0
//0 1 X6X5X4X3X2X1
/*****************************************************/
/***************扩 展 指 令 集 *******************/
#define LPH7366_tem_set0x06 /*温度系数设置*/
//D7D6D5D4D3D2D1D0
//0 0 0 0 0 1TC1TC0
/*****************************************************/
#define LPH7366_vot_set0xD0 /*电压系数设置*/
//D7D6D5D4D3D2D1D0
//1 vo6 vo5 vo4 vo3 vo2 vo1 vo0
/*****************************************************/
#define LPH7366_BSx_set0x11 /*偏置系统设置*/
//D7D6D5D4D3D2D1D0
//0 0 0 1 0 BS2 BS1 BS0
/*****************************************************/
/**************宏 定 义***************************/
#define Com 0 //指令
#define Dat 1 //数据
#define LINE_Y1 //Y坐标偏移量
#endif
==========================.c文件===================================================================
#include "LCD3310.h"
#include "CNPIX.h"
#include "ASCII.h"
#include "photo.h"
/**********************************************/
/* 写函数 */
/* 输入:D_C 1:数据 0:指令 */
/* Data数据或指令 */
/* 输出:无 */
/**********************************************/
void write_3310(bit D_C,unsigned char Data)
{
unsigned char i;
D_C_3310 = D_C;
for(i=0;i<8;i++) //串行发送数据
{
if(Data&0x80) //判断数据
SDIN_3310 = 1;
else
SDIN_3310 = 0;
//_nop_();
SCLK_3310 = 0;
//_nop_();
SCLK_3310 = 1;
Data<<=1; //左移1位
};
}
/**********************************************/
/* 复 位 */
/* 输入:无 */
/* 输出:无 */
/**********************************************/
void reset_3310(void)
{
RES_3310 = 1;
RES_3310 = 0;
RES_3310 = 1;
}
/**********************************************/
/* 清屏幕 */
/* 输入:Data填充字符 */
/* 输出:无 */
/**********************************************/
void clear_3310(unsigned char Data)
{
unsigned int i = 0;
write_3310(Com,0x0c); //显示模式:普通
write_3310(Com,0x80); //设置X地址:0x00
for(i = 0; i < 504; i++)
write_3310(Dat,Data); //填充Data
}
/**********************************************/
/* 初始化 */
/* 输入:无 */
/* 输出:无 */
/**********************************************/
void init_3310(void)
{
reset_3310();
write_3310(Com,LPH7366_expand_fun_set); //扩展指令集 水平寻址 活动
write_3310(Com,LPH7366_vot_set); //设置偏置电压
write_3310(Com,LPH7366_tem_set); //设置温度系数
write_3310(Com,LPH7366_BSx_set); //设置偏置系统1:48
write_3310(Com,LPH7366_basic_fun_set); //使用基本指令
clear_3310(0x00); //清屏,填充“ ”
write_3310(Com,LPH7366_dis_set); //显示模式:普通
}
/**********************************************/
/* XY轴设置函数 */
/* 输入:X:X坐标0~84Y:Y坐标0~5 */
/* 输出:无 */
/**********************************************/
void setXY_3310(unsigned char X,unsigned char Y)
{
write_3310(Com,LPH7366_basic_fun_set); //使用基本指令
write_3310(Com,LPH7366_add_Xset|X); //设置X坐标
write_3310(Com,LPH7366_add_Yset|Y); //设置Y坐标
}
/**********************************************/
/* 显示ASCII字符 */
/* 输入:X:X坐标0~84Y:Y坐标0~5 */
/* str:‘ASCII字符’ */
/* 输出:无 */
/**********************************************/
void write_3310_str(unsigned char X,unsigned char Y,unsigned char str)
{
unsigned char i=0;
setXY_3310(X,Y);
for(i=0;i<5;i++)
{
write_3310(Dat,ASCII);
};
}
/**********************************************/
/* 写 字 符 串 函 数 */
/* 输入:*str 指向字符串的指针 */
/* Length 字符串长度 */
/* 输出:无 */
/**********************************************/
void write_3310_string(unsigned char *str,unsigned char Length)
{
unsigned char i;
unsigned char L=0;
for(L=0;L<Length;L++)
{
for(i=0;i<5;i++)
{
write_3310(Dat,ASCII-0x20]);
};
};
}
/**********************************************/
/* 显示16x16点阵汉字或图像 */
/* 输入:X:X坐标0~84Y:Y坐标0~5 */
/* *str 指向点阵数据的指针 */
/* 输出:无 */
/**********************************************/
void display_1616CN(unsigned char X,unsigned char Y,unsigned char *str)
{
unsigned char i;
setXY_3310(X,Y);
for(i=0;i<17;i++)
{
write_3310(Dat,str);
};
setXY_3310(X,Y+LINE_Y);
for(i=16;i<33;i++)
{
write_3310(Dat,str);
};
}
/**********************************************/
/* 显示12x12点阵汉字或图像 */
/* 输入:X:X坐标0~84Y:Y坐标0~5 */
/* Words显示第几个汉字 */
/* Length 显示多少个汉字 */
/* 输出:无 */
/**********************************************/
void display_1212CN(unsigned char X,unsigned char Y,unsigned char WordS,unsigned char Length)
{
unsigned char x,Word;
setXY_3310(X,Y); //设置坐标
for(Word=WordS;Word<Length;Word++) //写字
{
for(x=0;x<24;x++) //写入一个12x12汉字
{
write_3310(Dat,ADD);
if(x==11)
setXY_3310(X,Y+1); //字体下半部分属于第二行,Y坐标需+1
};
// X+=12; //写一个汉字的x坐标+12
setXY_3310(X+=12,Y); //设置XY坐标
};
}
/**********************************************/
/* 显示12x12点阵汉字或图像第1.5-2行部分 */
/* 输入:X:X坐标0~84Y:Y坐标0~5 */
/* Words显示第几个汉字 */
/* Length 显示多少个汉字 */
/* 输出:无 */
/**********************************************/
void display_1212CNH(unsigned char X,unsigned char Y,unsigned char WordS,unsigned char Length)
{
unsigned char x,Word,zuhe;
setXY_3310(X,Y);
for(Word=WordS;Word<Length;Word++)
{
for(x=0;x<12;x++) //写入一个12x12汉字
{
zuhe=(ADD); //高位=这行字x的低位;低位=上一行字x+12的低位
zuhe|=(ADD<<4);
write_3310(Dat,zuhe);
};
X+=12; //写一个汉字的x坐标+12
setXY_3310(X,Y); //设置XY坐标
};
Y+=1;
X=0;
setXY_3310(X,Y);
for(Word=WordS;Word<Length;Word++)
{
for(x=0;x<12;x++) //写入一个12x12汉字
{
zuhe=(ADD>>4);
zuhe|=(ADD<<4);
write_3310(Dat,zuhe);
};
//X+=12; //写一个汉字的x坐标+12
setXY_3310(X+=12,Y); //设置XY坐标
};
}
/**********************************************/
/* 显示84x48点阵图像第1.5-2行部分 */
/* 输入:无
/* 输出:无 */
/**********************************************/
void display_photo(unsigned char *photo_addr)
{
unsigned char i,s,X,Y;
X=0x00;Y=0x00;
setXY_3310(X,Y);
for(s=0;s<42;s++)
{
if(s%7==0)
{
setXY_3310(0,Y);
Y+=1;
};
for(i=0;i<12;i++)
{
write_3310(Dat,*photo_addr++); //数组地址+1
};
(*photo_addr)++; //数组地址+12
};
}
/**********************************************/
/* 显示坐标点函数 */
/* 输入:X:X坐标0~84Y:Y坐标0~48 */
/* 输出:无 */
/**********************************************/
void display_point(unsigned char x,unsigned char y)
{
unsigned char line;
line=(1<<(y%8));
setXY_3310(x,y/8);
write_3310(Dat,line);
}
========================================================================================
其中3310的指令集在H文件已经很清楚。复位似乎只需要RES端给一个低电平脉冲就可以了。 取模工具 作者未知ourdev_608359K2O8HL.rar(文件大小:8.71M) (原文件名:3310液晶取模工具.rar)
手册ourdev_608360LQJ1B2.pdf(文件大小:753K) (原文件名:3310显示屏驱动说明.pdf)
代码ourdev_608361R7B6D8.rar(文件大小:9.32M) (原文件名:3310 屏幕.rar)
点阵取模 作者未知ourdev_608362M9U5R2.rar(文件大小:703K) (原文件名:PCtoLCD2002.rar) http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608424N6HWVZ.jpg
(原文件名:照片 013.jpg) 我也有一块3310,落灰了,打算拾起来玩玩! mark 学习下 我有一块向楼主学习 mark 收了,mark 引用图片【1楼】hepday
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608303Q4NSGF.jpg
(原文件名:图片 003.jpg) mark 收藏了。。。。 学习一下{:loveliness:}
页:
[1]