qq335702318 发表于 2010-12-31 21:08:03

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)

hepday 发表于 2010-12-31 21:10:05

引用图片【楼主位】qq335702318 | 昌少
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608303Q4NSGF.jpg
(原文件名:图片 003.jpg)
经典

qq335702318 发表于 2010-12-31 21:14:50

=========================.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端给一个低电平脉冲就可以了。

qq335702318 发表于 2011-1-1 01:08:32

取模工具 作者未知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)

b60885262 发表于 2011-1-1 15:47:14

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608424N6HWVZ.jpg
(原文件名:照片 013.jpg)

goodboy3021 发表于 2011-1-10 21:25:16

我也有一块3310,落灰了,打算拾起来玩玩!

xuhui798 发表于 2011-1-12 16:43:20

mark 学习下

myljd01 发表于 2011-1-17 10:35:59

我有一块向楼主学习

alexliu0915 发表于 2011-1-25 18:03:57

mark

liuchengliaaa 发表于 2011-5-26 23:53:18

收了,mark

z317946208 发表于 2011-11-4 21:20:15

引用图片【1楼】hepday
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_608303Q4NSGF.jpg
(原文件名:图片&nbsp;003.jpg)

simon110 发表于 2012-2-9 23:44:27

mark

yy434722402 发表于 2012-5-4 00:03:58

收藏了。。。。

maxims 发表于 2012-10-31 21:20:21

学习一下{:loveliness:}
页: [1]
查看完整版本: 3310液晶驱动