cyk8 发表于 2004-11-20 17:59:22

介绍一块中文液晶OCMJ5x10B

金鹏公司的 OCMJ5x10B中文液晶,自带字库,蓝屏,能显示5x10,非常漂亮,最大优势是便宜,人民币200.0元,另外显示中文和西文十分简单,asc_tran(1,0,"our AVR");//写西文               hz_tran(4,0,"我的单片机");//写中文

按照上述二句语句分别填入X与Y的坐标位置(1,0表示第一行,第一列),后面直接写中文和西文即可.不用做字库什么的.

我用mega16l已制造成产品,现将程序简化为DEMO,供大家参考(程序参考原4x8B)附该中文液晶的详细资料点击此处打开armok018502.pdf

                     

/*************************************************

                        OCMJ5x10DEMO程序(ICCAVR)   

                            作者:cyk         2004.11.5

                  1、应包含头文件slavr.h

          2、在工程选项中的Additional Lib中填入slavr

                     使编译器使用附加库文件libslavr.a

                  3、数据线D0~D7接PORTC

                     ASK=PORTD.7

                     ANSWER=PORTD.6

                     RESET=PORTC.5       

*************************************************/

#include <ioM16V.h>

#include <slavr.h>

#include <eeprom.h>

/*定义宏*/

#define data_port   PORTC            //C数据口         

#define ask         (PIND&0x80)      //询问      

#define set_answer    asm("sbi 0x12,6")//answer置一

#define clr_answer    asm("cbi 0x12,6")//answer置零

#define set_reset   asm("sbi 0x12,5")//reset 置一

#define clr_reset   asm("cbi 0x12,5")//reset 置零

#define wait          asm("nop
nop")   //空指令

#define WDR()         asm("WDR")         //喂狗



/*   定义全局变量   */

extern unsigned char *asc_p;   //液晶字符指针变量



/*   OCMJ4X8LCD初始化函数   */

void ocmj_init(void)

    {

       MCUCR=0;

       DDRC=0xff;

       PORTC=0xff;

       DDRD=0x78;

       PORTD=0xAf;

       DDRA=0xe0;

       PORTA=0x00;

       DDRB=0xf8;

       PORTB=0x27;

       clr_reset;                        //LCD复位

       delay_ms(10);

       set_reset;

       clr_answer;

       delay_ms(10);

       }



/*   写数据到LCD函数       */

void ocmj_write(unsigned char data)

    {

       while(ask!=0)

              ;

   data_port=data;

          wait;

       set_answer;

       wait;

       while(ask==0)

              ;                  

       clr_answer;

    }

/*         传送32*32ICO点阵数据到LCD函数   */

/*         x:0~15(字节为单位)y:0~64      */

/*         ico_p:指向图形数据的指针      */       

void ico_tran(unsigned char x,unsigned char y,const unsigned char *ico_p)

   {

          unsigned char i,j;

          x+=4;

          for(j=0;j<32;j++)

             {

                  for(i=0;i<4;i++)

                  {

                       ocmj_write(0xf3);

                       ocmj_write(x);

                       ocmj_write(y);

                       ocmj_write(*ico_p);

                       ico_p++;

                       x++;

                        }

                  x-=4;

                  y++;       

               }

       }

/*         传送bmp点阵数据到LCD函数      */

/*         x:0~15(字节为单位)y:0~64      */

/*         bmp_p:指向图形数据的指针      */       

/*         high:位图高度(点阵行为单位)   */

/*         width:位图宽度(以字节为单位)?*/

void bmp_tran(unsigned char x,unsigned char y,unsigned char high,unsigned char width,const unsigned char *bmp_p)

   {

          unsigned char i,j;

          x+=0;

          for(j=0;j<high;j++)

             {

                  for(i=0;i<width;i++)

                  {

                       ocmj_write(0xf3);

                       ocmj_write(x);

                       ocmj_write(y);

                       ocmj_write(*bmp_p);

                       bmp_p++;

                       x++;

                        }

                  x-=width;

                  y++;       

               }

       }       

/*       传送LCD内部汉字数据到LCD函数         */

/*       x:0x00~0x07 y:0x00~0x03          */

void hz_tran(unsigned char x,unsigned char y,unsigned char *hz_p)

    {

       x+=0;

   while((*hz_p)!=0)

          {

               ocmj_write(0xf0);

               ocmj_write(x);

               ocmj_write(y);

               ocmj_write(*hz_p-0xa0);

               hz_p++;

               ocmj_write(*hz_p-0xa0);

               hz_p++;

               if(x<0x09)

                  x++;

               else

                  {

                       x=0x00;

                       y++;

                        }       

                }

        }

/*          传送ASCII字母到LCD函数            */

/*          x:0x00~0x0f y:0~64            */       

void asc_tran(unsigned char x,unsigned char y,unsigned char *asc_p)

    {

       x+=0;

       while((*asc_p)!=0)

          {

               ocmj_write(0xf9);

               ocmj_write(x);

               ocmj_write(y);

               ocmj_write(*asc_p);

               asc_p++;

               if (x<0x13)

                  x++;

               else

                   {

                  x=0x00;

                        y+=8;                  

                   }       

                }       

       }

/*      清除部分屏幕区域函数      */       

void cls(unsigned x,unsigned y,unsigned char high,unsigned char width)

{

   unsigned char i,j;

   x+=0;

   for(j=0;j<high;j++)

      {

       for(i=0;i<width;i++)

          {

            ocmj_write(0xf0);

            ocmj_write(x);

            ocmj_write(y);

            ocmj_write(55);

                        ocmj_write(90);

            x++;

         }

       x-=width;

       y++;       

      }

}                                                                              

/*            画点函数            */

void pset(unsigned char x,unsigned char y)

   {

          ocmj_write(0xf2);

          ocmj_write(x+32);

          ocmj_write(y);

       }       

/*             画线函数          */       

void line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)

{

    unsigned char t;

        signed int xerr=0,yerr=0;

        signed int delta_x,delta_y,distance;

        signed char incx,incy;



/*         计算两个方向的长度 */

        delta_x=x2-x1;

        delta_y=y2-y1;



/* 计算增量的方向,增量为"0"表示为垂直或水平线 */

        if(delta_x>0)

             incx=1;

        else

          {

               if( delta_x==0 )

                      incx=0;

               else

                      {

                           incx=-1;

                           delta_x =-delta_x;

                          }

                }

        if(delta_y>0)

              incy=1;

        else

          {

               if( delta_y==0 )

                     incy=0;

               else

                     {

                          incy=-1;

                          delta_y =-delta_y;

                       }

                }

/*确定画线的范围 */

        if( delta_x > delta_y ) distance=delta_x;

        else distance=delta_y;



/*画线 */

        for(t=0;t<= distance+1;t++)

           {

                ocmj_write(0xf2);

          ocmj_write(x1+0);

          ocmj_write(y1);

          xerr += delta_x ;

                yerr += delta_y ;

                if( xerr > distance )

                  {

                        xerr-=distance;

                  x1+=incx;

                  }

                if( yerr > distance )

                  {

                        yerr-=distance;

                  y1+=incy;

                    }

          }

}       

                        

/*声音函数(T为发声时间)*/

void sound(int T)

      { WDR();

      SOUND_ON;

                delay_ms(T);

      SOUND_OFF;

      }





/*微秒级延时函数(mS)本延时函数实际为delay_us(int time)中的int time=1->实际等于2us */

void delay_us(int time)

{   

do

        {

        time--;

        }       

while (time>1);

}                  





/*          毫秒级延时函数        */       

void delay_ms(unsigned int time)

       {

          while(time!=0)

                    {       

                   delay_us(500);

                   time--;

                  }

       }



       char_p=adcval;

       return char_p;

        }               



        }       



         

/*       MAIN主函数*/

void main(void)

{

           ocmj_init();                               //初始化       

        ocmj_write(0xf4);                        //清屏

      asc_tran(1,0,"our AVR");                   //写西文

      hz_tran(4,0,"我的单片机");               //写中文

}





http://cache.amobbs.com/bbs_upload782111/files_1/armok018462.jpg





-----此内容被cyk8于2004-11-20,20:41:11编辑过



-----此内容被cyk8于2004-11-20,20:57:15编辑过



-----此内容被cyk8于2004-11-20,21:20:22编辑过



-----此内容被cyk8于2004-11-20,21:22:28编辑过



-----此内容被cyk8于2004-11-20,21:30:09编辑过


-----此内容被cyk8于2004-11-21,16:48:19编辑过

armok 发表于 2004-11-20 18:39:50

jiuri 发表于 2004-11-20 19:25:06

漂亮

armok 发表于 2004-11-20 19:48:53

cpu100 发表于 2004-11-20 20:26:47

个人感觉这块液晶的一级字库不够用,还是st7920

用的舒服,驱动也简单

cyk8 发表于 2004-11-20 21:35:18

cpu100兄:其实该公司的中文液晶分B,C.其中C系列用的就是st7920芯片,型号为OCMJ4x16B,不知 cpu100兄能否将C程序让我看看,对OCMJ4x16B中文液晶我还是有兴趣的.

xiaoke 发表于 2004-11-20 23:04:33

5*10个汉字200元是否不便宜?用192*128点阵LCD自己做字库多少钱?

xiha365 发表于 2004-11-21 15:16:01

自已做个字库就是存储器的价钱了,10块吧

液晶就不知道了

这个液晶是带MCU的吧,控制显示才会那么简单

DX们可以加个试验来做啊,3310+字库+AVR控制接口=中文汉显模块<50块钱

Melin 发表于 2004-11-22 01:45:08

好像有很多种的液晶显示器了!如果谁可以把它们整理一下就好了!!做成表格!各项特性参数,基本价格,接口方式,驱动程序等一目了然!!

armok 发表于 2004-11-22 04:23:28

xian123 发表于 2011-12-8 12:46:16

要用到这个了,来借鉴一下,多谢咯

vc9181 发表于 2014-7-3 16:24:45

好资料 ,自己动手改成51的{:lol:}

bias 发表于 2014-7-3 17:45:36

200还叫便宜?....我估计100多点可以买一个4.3寸的串口屏,可以只显示黑色和白色当作黑白用,对比度肯定比这种STN屏的效果好得多。

marshallemon 发表于 2014-7-3 18:51:32

价格真不是一般的贵,卖100块就不少了

DevLabs 发表于 2014-7-3 19:03:48

又见挖坟高手......
页: [1]
查看完整版本: 介绍一块中文液晶OCMJ5x10B