模块是LM12864FBC-1液晶屏 控制IC是S6B0108

[复制链接]
3215|1
 楼主| ma9801 发表于 2008-6-20 13:08 | 显示全部楼层 |阅读模式
模块LM12864FBC-1<br />这块液晶的引脚为<br />1--CS1<br />2--CS2<br />3--GND<br />4--VCC<br />5--V0<br />6--D/I(RS)<br />7--R/W<br />8--EN<br />9~16--D0~D7<br />17--BLA<br />18--BLK<br />19--NC<br />20--Vout<br /><br />奇怪没有RST复位引脚,说明书上面Vout和VCC接一个25K的电位器分压给V0调对比度即可,对比度是可以调整了<br />&nbsp;&nbsp;&nbsp;想做一个驱动显示几个汉字<br />&nbsp;&nbsp;&nbsp;程序如下:&nbsp;<br />&nbsp;&nbsp;&nbsp;#include&nbsp;&lthidef.h&gt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;common&nbsp;defines&nbsp;and&nbsp;macros&nbsp;*/<br />#include&nbsp;&lt6812a64.h&gt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;derivative&nbsp;information&nbsp;*/<br />#include&nbsp;&quot;my_vectors.h&quot;<br />#include&nbsp;&quot;main_asm.h&quot;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;interface&nbsp;to&nbsp;my&nbsp;assembly&nbsp;module&nbsp;*/<br /><br /><br /><br /><br />///////////接口相关宏定义///////////////////<br />#define&nbsp;CS1&nbsp;PTT_PTT0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//块1&nbsp;&nbsp;左边<br />#define&nbsp;CS2&nbsp;PTT_PTT1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//块2&nbsp;&nbsp;右边<br />#define&nbsp;D_I&nbsp;&nbsp;PTT_PTT2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//A0为1时是数据,0时为指令数据<br />#define&nbsp;R_W&nbsp;&nbsp;PTT_PTT3&nbsp;&nbsp;&nbsp;&nbsp;//为1时是读,为0时是写&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;E&nbsp;&nbsp;&nbsp;PTT_PTT4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//允许装载数据<br />#define&nbsp;DATA&nbsp;PORTB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据<br />//////////////////////////////////////<br /><br />#pragma&nbsp;CODE_SEG&nbsp;__NEAR_SEG&nbsp;NON_BANKED&nbsp;/*&nbsp;Interrupt&nbsp;section&nbsp;for&nbsp;this&nbsp;module.&nbsp;Placement&nbsp;will&nbsp;be&nbsp;in&nbsp;NON_BANKED&nbsp;area.&nbsp;*/<br />//interrupt&nbsp;void&nbsp;RTI_ISR(void)&nbsp;{&nbsp;/*&nbsp;simple&nbsp;RTI&nbsp;interrupt&nbsp;service&nbsp;routine&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;clear&nbsp;RTIF&nbsp;bit&nbsp;*/<br />&nbsp;//&nbsp;&nbsp;static&nbsp;i=0;<br />&nbsp;//闪烁小灯,每隔400ms闪烁一次<br />//&nbsp;i++;<br />//&nbsp;if(i&gt100){PTT_PTT5=~PTT_PTT5;PORTA_BIT0=PTT_PTT5;PORTA_BIT2=~PORTA_BIT0;i=0;&nbsp;}<br />//&nbsp;CRG**_RTIF=1;<br />&nbsp;&nbsp;//CRG**&nbsp;=&nbsp;0x80;&nbsp;&nbsp;<br />//}<br /><br />#pragma&nbsp;CODE_SEG&nbsp;DEFAULT<br />static&nbsp;void&nbsp;RTIInit(void)&nbsp;{<br />&nbsp;&nbsp;/*&nbsp;setup&nbsp;of&nbsp;the&nbsp;RTI&nbsp;interrupt&nbsp;frequency&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;adjusted&nbsp;to&nbsp;get&nbsp;1&nbsp;millisecond&nbsp;(1.024&nbsp;ms)&nbsp;with&nbsp;16&nbsp;MHz&nbsp;oscillator&nbsp;*/<br />&nbsp;&nbsp;/*--------锁相环初始化-------*/<br />&nbsp;CLKSEL=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//disable&nbsp;pll;<br />&nbsp;PLLCTL=0xe1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CLOCK&nbsp;MONITOR=ON,PLL=ON,AUTO&nbsp;SELECT,是默认设置<br />&nbsp;SYNR=14;REFDV=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bus&nbsp;clock&nbsp;=20M<br />&nbsp;PLLCTL=0x60;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//自动锁定<br />&nbsp;asm&nbsp;NOP;asm&nbsp;NOP;asm&nbsp;NOP;<br />&nbsp;while(!CRG**_LOCK);<br />&nbsp;CLKSEL=0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//pll&nbsp;start<br />&nbsp;&nbsp;RTICTL&nbsp;=&nbsp;0x1F;&nbsp;/*&nbsp;set&nbsp;RTI&nbsp;prescaler&nbsp;*/&nbsp;<br />&nbsp;//&nbsp;CRGINT_RTIE=1;&nbsp;&nbsp;//允许RTI中断&nbsp;<br />&nbsp;&nbsp;asm&nbsp;CLI;<br />&nbsp;&nbsp;//CRGINT&nbsp;=&nbsp;0x80;&nbsp;/*&nbsp;enable&nbsp;RTI&nbsp;interrupts&nbsp;*/&nbsp;<br />&nbsp;&nbsp;DDRT_DDRT5=1;<br />&nbsp;&nbsp;DDRA_BIT0=1;<br />&nbsp;&nbsp;DDRA_BIT2=1;<br />&nbsp;&nbsp;RDRT=0xff;<br />&nbsp;&nbsp;RDRIV=0x93;<br />&nbsp;&nbsp;DDRB=0xff;&nbsp;&nbsp;&nbsp;&nbsp;////PORTB为输出引脚<br />&nbsp;&nbsp;DDRT=0xff;&nbsp;&nbsp;&nbsp;////PORT&nbsp;T&nbsp;为输出引脚<br />}<br /><br /><br />/*忙判别*/<br />void&nbsp;lcd_busy(void)&nbsp;{DDRB_BIT7=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;D_I=0;R_W=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1){E=1;_asm&nbsp;nop;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!PORTB_BIT7)break;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;E=0;DDRB_BIT7=1;<br />}<br />/*设置xy*/<br />void&nbsp;set_xy(unsigned&nbsp;char&nbsp;x,unsigned&nbsp;char&nbsp;y)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(x&gt=64)&nbsp;{CS1=0;CS2=1;}&nbsp;else&nbsp;{CS2=0;CS1=1;}<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_busy();<br />&nbsp;&nbsp;&nbsp;&nbsp;E=1;D_I=0;R_W=0;PORTB=0x40|x;E=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_busy();<br />&nbsp;&nbsp;&nbsp;&nbsp;E=1;D_I=0;R_W=0;PORTB=0xb8|y;E=0;<br />}<br />void&nbsp;lw(unsigned&nbsp;char&nbsp;x,unsigned&nbsp;char&nbsp;y,unsigned&nbsp;char&nbsp;dd)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;set_xy(x,y);<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd_busy();E=1;D_I=1;R_W=0;PORTB=dd;E=0;<br />&nbsp;}<br />/*显示初始化*/<br />void&nbsp;lcd_init(void)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*开显示*/<br />&nbsp;&nbsp;&nbsp;&nbsp;E=1;D_I=0;R_W=0;PORTB=0x3f;E=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(y=0;y&lt8;y++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(x=0;x&lt128;x++)&nbsp;lw(x,y,0x00);&nbsp;//清空屏幕<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;Lcd_off(void){<br />&nbsp;&nbsp;&nbsp;E=1;D_I=0;R_W=0;PORTB=0x3e;E=0;<br />}<br /><br /><br /><br /><br />/*汉字点阵的提取:采用软件&quot;字模提取软件&quot;,读法:先读前8行,黑点处为1,依次读完这16列,然后读后8行,依次再读完16列。*/<br />unsigned&nbsp;char&nbsp;hz[]={<br />/*汉字:一&nbsp;&nbsp;&nbsp;*/<br />//0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x80,0x00,<br />//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /><br />&nbsp;0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,<br />&nbsp;0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x03,0x00,0x01,0x00,0x00,0x00,<br /><br />/*汉字:倪*/<br />//0x80,0x40,0xf0,0x0f,0x02,0x00,0xfe,0x92,0x92,0x81,0x91,0x92,0x92,0xfe,0x00,0x00,<br />//0x00,0x00,0x7f,0x00,0x40,0x20,0x11,0x0c,0x03,0x00,0x3f,0x40,0x40,0x41,0x78,0x00,<br /><br />0x01,0x00,0x02,0x00,0x0F,0xFE,0xF0,0x00,0x40,0x02,0x00,0x04,0x7F,0x88,0x49,0x30,<br />0x49,0xC0,0x81,0x00,0x89,0xFC,0x49,0x02,0x49,0x02,0x7F,0x82,0x00,0x1E,0x00,0x00,<br />/*汉字:水*/<br />//0x00,0x10,0x10,0x10,0x90,0x70,0x00,0xff,0x20,0x60,0x90,0x08,0x04,0x00,0x00,0x00,<br />//0x10,0x10,0x08,0x06,0x01,0x40,0x80,0x7f,0x00,0x00,0x01,0x06,0x0c,0x18,0x08,0x00,<br /><br />0x00,0x08,0x08,0x08,0x08,0x10,0x08,0x60,0x09,0x80,0x0E,0x02,0x00,0x01,0xFF,0xFE,<br />0x04,0x00,0x06,0x00,0x09,0x80,0x10,0x60,0x20,0x30,0x00,0x18,0x00,0x10,0x00,0x00,<br /><br />/*汉字:好*/<br />//0x10,0x10,0xf0,0x1f,0x10,0xf0,0x80,0x82,0x82,0x82,0xf2,0x8a,0x86,0x82,0x80,0x00,<br />//0x80,0x43,0x22,0x14,0x0c,0x73,0x20,0x00,0x40,0x80,0x7f,0x00,0x00,0x00,0x00,0x00,<br /><br />0x08,0x01,0x08,0xC2,0x0F,0x44,0xF8,0x28,0x08,0x30,0x0F,0xCE,0x01,0x04,0x41,0x00,<br />0x41,0x02,0x41,0x01,0x4F,0xFE,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x00,0x00,<br /><br />/*汉字:人*/<br />//0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x3f,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />//0x00,0x40,0x20,0x10,0x0c,0x03,0x00,0x00,0x01,0x06,0x0c,0x18,0x30,0x60,0x20,0x00<br /><br />0x00,0x00,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x30,0x00,0xC0,0x03,0x00,0xFC,0x00,<br />0x43,0x80,0x00,0x60,0x00,0x30,0x00,0x18,0x00,0x0C,0x00,0x06,0x00,0x04,0x00,0x00<br /><br />};<br /><br />/*显示汉字,注意本函数参数&nbsp;x&nbsp;为屏幕横着的坐标(范围从0~128),y为屏幕纵向的坐标(范围为0~8),n为要显示数足hz[]中的第几个字符<br />注意:由于本例显示的是16*16点阵,所以第一个字符占据横着16个点,纵向16个点,也就是纵向2页,所以下一个字符应该从第2页开始,再下一个从第4页开始<br />如主程序中调用的dh(0,0,0);&nbsp;dh(0,2,1);&nbsp;dh(0,4,2);&nbsp;*/<br />void&nbsp;dh(unsigned&nbsp;char&nbsp;x,unsigned&nbsp;char&nbsp;y,unsigned&nbsp;char&nbsp;n)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,dd;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;i&lt16;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd=hz[i+n*32];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lw(x+i,y,dd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd=hz[i+n*32+16];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lw(x+i,y+1,dd);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;main(void)&nbsp;{<br />&nbsp;&nbsp;RTIInit();<br />&nbsp;&nbsp;/*&nbsp;put&nbsp;your&nbsp;own&nbsp;code&nbsp;here&nbsp;*/<br />&nbsp;&nbsp;EnableInterrupts;<br />&nbsp;&nbsp;asm_main();<br />&nbsp;&nbsp;lcd_init();<br />&nbsp;&nbsp;dh(0,0,0);&nbsp;//在横向0,纵向0页处显示汉字&nbsp;&quot;一&quot;<br />&nbsp;&nbsp;dh(0,2,1);&nbsp;//在横向0,纵向第2页处显示汉字&nbsp;&quot;倪&quot;<br />&nbsp;&nbsp;dh(0,4,2);&nbsp;//在横向0,纵向第四页处显示汉字&nbsp;&quot;水&quot;<br />&nbsp;&nbsp;dh(18,0,3);&nbsp;//在横向第18点,纵向0页处显示汉字&nbsp;&quot;好&quot;<br />&nbsp;&nbsp;dh(18,2,4);<br />&nbsp;&nbsp;//Lcd_off();<br />&nbsp;&nbsp;for(;;);&nbsp;/*&nbsp;wait&nbsp;forever&nbsp;*/<br />}<br />抱歉这个程序其本是网上得到的,在这谢谢网友们的无私贡献!!<br />&nbsp;&nbsp;各位有谁做过这块液晶的驱动的,能否给个程序参考以下&nbsp;<br />&nbsp;&nbsp;QQ:89590025<br />&nbsp;&nbsp;MSN:canon_me@hotmail.com
ldlglyld 发表于 2008-6-20 13:32 | 显示全部楼层

给你发了手册,收下看看吧

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部