介绍一块中文液晶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编辑过 漂亮 个人感觉这块液晶的一级字库不够用,还是st7920
用的舒服,驱动也简单 cpu100兄:其实该公司的中文液晶分B,C.其中C系列用的就是st7920芯片,型号为OCMJ4x16B,不知 cpu100兄能否将C程序让我看看,对OCMJ4x16B中文液晶我还是有兴趣的. 5*10个汉字200元是否不便宜?用192*128点阵LCD自己做字库多少钱? 自已做个字库就是存储器的价钱了,10块吧
液晶就不知道了
这个液晶是带MCU的吧,控制显示才会那么简单
DX们可以加个试验来做啊,3310+字库+AVR控制接口=中文汉显模块<50块钱 好像有很多种的液晶显示器了!如果谁可以把它们整理一下就好了!!做成表格!各项特性参数,基本价格,接口方式,驱动程序等一目了然!! 要用到这个了,来借鉴一下,多谢咯 好资料 ,自己动手改成51的{:lol:} 200还叫便宜?....我估计100多点可以买一个4.3寸的串口屏,可以只显示黑色和白色当作黑白用,对比度肯定比这种STN屏的效果好得多。
价格真不是一般的贵,卖100块就不少了 又见挖坟高手......
页:
[1]