搜索
bottom↓
回复: 13

3310液晶驱动

[复制链接]

出0入0汤圆

发表于 2010-12-31 21:08:03 | 显示全部楼层 |阅读模式
发发自己写的3310屏幕液晶驱动
显示四行字厚着脸皮用最笨的方法做了。



(原文件名:图片 003.jpg)


(原文件名:图片 001.jpg)


(原文件名:图片 002.jpg)


(原文件名:图片 003.jpg)


(原文件名:图片 004.jpg)


(原文件名:图片 005.jpg)


(原文件名:图片 006.jpg)


(原文件名:图片 007.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-12-31 21:10:05 | 显示全部楼层
引用图片【楼主位】qq335702318 | 昌少
-----------------------------------------------------------------------

(原文件名:图片 003.jpg)
经典

出0入0汤圆

 楼主| 发表于 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    */
sbit  D_C_3310 = P2^1;      /* 4 D/C            */
sbit   CS_3310 = P2^6;      /* 5 CS            */
                            /* 6 GND            */
                            /* 7 Vout    */
sbit  RES_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_set  0x20 //基本功能设置
#define LPH7366_expand_fun_set 0x21 //扩展功能设置
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   1   0   0   PD  V   H
//                      |   |   |_______1->扩展指令集  0->基本指令集
//                      |   |___________1->垂直寻址    0->水平寻址
//                      |_______________1->低功耗模式  0->正常模式
/*****************************************************/

/**************  基 本 指 令 集  *********************/                                                                                                                                     
#define LPH7366_dis_set  0x0c          /*显示模式设置*/
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   0   0   1   D   0   E
//                      |       |_______0    0        1    1
//                      |_______________0    1        0    1
//                                      白屏 正常显示 全显 反转
/*****************************************************/
#define LPH7366_add_Yset  0x40          /* 设置Y地址 */
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   1   0   0   0   Y1  Y2  Y3
/*****************************************************/
#define LPH7366_add_Xset  0x80          /* 设置X地址 */
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   1   X6  X5  X4  X3  X2  X1
/*****************************************************/
/***************  扩 展 指 令 集   *******************/
#define LPH7366_tem_set  0x06          /*温度系数设置*/
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   0   0   0   1  TC1  TC0
/*****************************************************/
#define LPH7366_vot_set  0xD0          /*电压系数设置*/
//  D7  D6  D5  D4  D3  D2  D1  D0
//  1   vo6 vo5 vo4 vo3 vo2 vo1 vo0  
/*****************************************************/
#define LPH7366_BSx_set  0x11          /*偏置系统设置*/
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   0   1   0   BS2 BS1 BS0
/*****************************************************/





/**************  宏 定 义  ***************************/
#define Com 0                   //指令
#define Dat 1                   //数据
#define LINE_Y  1           //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);                 //显示模式:普通
}



/**********************************************/
/*      X  Y  轴  设  置  函  数              */
/* 输入:X:X坐标0~84  Y: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~84  Y: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-0x20]);
};
}


/**********************************************/
/*              写 字 符 串 函 数             */
/* 输入:*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[str[L]-0x20]);
  };
};
}


/**********************************************/
/*        显示16x16点阵汉字或图像             */
/* 输入:X:X坐标0~84  Y: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~84  Y: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[Word][x]);
  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~84  Y: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[Word-7][x+12]);            //高位=这行字x的低位;低位=上一行字x+12的低位
zuhe|=(ADD[Word][x]<<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[Word][x]>>4);
zuhe|=(ADD[Word][x+12]<<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~84  Y: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端给一个低电平脉冲就可以了。

出0入0汤圆

 楼主| 发表于 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)

出0入0汤圆

发表于 2011-1-1 15:47:14 | 显示全部楼层

(原文件名:照片 013.jpg)

出0入0汤圆

发表于 2011-1-10 21:25:16 | 显示全部楼层
我也有一块3310,落灰了,打算拾起来玩玩!

出0入0汤圆

发表于 2011-1-12 16:43:20 | 显示全部楼层
mark 学习下

出0入0汤圆

发表于 2011-1-17 10:35:59 | 显示全部楼层
我有一块  向楼主学习

出0入0汤圆

发表于 2011-1-25 18:03:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-26 23:53:18 | 显示全部楼层
收了,mark

出0入0汤圆

发表于 2011-11-4 21:20:15 | 显示全部楼层
引用图片【1楼】hepday
-----------------------------------------------------------------------

(原文件名:图片&nbsp;003.jpg)

出0入0汤圆

发表于 2012-2-9 23:44:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-5-4 00:03:58 | 显示全部楼层
收藏了。。。。

出0入0汤圆

发表于 2012-10-31 21:20:21 | 显示全部楼层
学习一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 14:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表