新鲜出炉的at91rm9200控制st7920液晶的串行驱动

[复制链接]
3440|4
 楼主| wangkj 发表于 2007-11-9 15:39 | 显示全部楼层 |阅读模式
仅仅使用pc14,pc15两个GPIO,外加电源线两条。(未测试,供参考)。<br />最近几天有空了测试<br />这种液晶是最常见的&nbsp;12832,12864控制器,他们都是通用的。<br />硬件:sck&nbsp;-&nbsp;pc14&nbsp;&nbsp;sid&nbsp;-&gt&nbsp;pc15&nbsp;<br />psb&nbsp;-&nbsp;GND&nbsp;,&nbsp;CS&nbsp;-&nbsp;VCC<br /><br /><br />/*-------------------------------------------------------------------------------------<br />date:20071109<br />author:&nbsp;wkj<br />ver&nbsp;1.0<br />stc7920&nbsp;&nbsp;lcd&nbsp;driver<br />---------------------------------------------------------------------------------------*/<br />#include&nbsp;&ltsys/types.h&gt<br />#include&nbsp;&ltstdio.h&gt<br />#include&nbsp;&ltstdarg.h&gt<br />#include&nbsp;&ltstdlib.h&gt<br />#include&nbsp;&ltstring.h&gt<br />#include&nbsp;&ltunistd.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&lterrno.h&gt<br />#include&nbsp;&ltsignal.h&gt<br />#include&nbsp;&lttime.h&gt<br />#include&nbsp;&ltsys/time.h&gt<br />#include&nbsp;&ltsys/ioctl.h&gt<br />#include&nbsp;&ltsys/stat.h&gt<br />#include&nbsp;&ltsys/file.h&gt<br />#include&nbsp;&quot;gpio.h&quot;<br />#include&nbsp;&quot;main.h&quot;<br />#include&nbsp;&quot;io.h&quot;<br />#include&nbsp;&ltstdarg.h&gt<br />#include&nbsp;&ltmemory.h&gt<br />#include&nbsp;&lterrno.h&gt<br />#include&nbsp;&ltsys/types.h&gt<br />#include&nbsp;&ltsys/socket.h&gt<br />#include&nbsp;&ltsys/mman.h&gt<br />#include&nbsp;&ltsys/ioctl.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&ltsignal.h&gt<br /><br />//当前像素位置&nbsp;和当前显示页&nbsp;<br />static&nbsp;unsigned&nbsp;char&nbsp;PixX,page;<br />#define&nbsp;DEBUGMSG(x,&nbsp;y,&nbsp;args...)&nbsp;printf(y,&nbsp;##args)<br />void&nbsp;&nbsp;&nbsp;&nbsp;*map_base;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//phy&nbsp;0xffff&nbsp;f000&nbsp;virtual&nbsp;address<br />//clock&nbsp;input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同步时钟输入端<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_CLK_0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt14;&nbsp;//PC14&nbsp;as&nbsp;0;&nbsp;A0=0<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_CLK_1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt14;&nbsp;//PC14&nbsp;as&nbsp;1;&nbsp;A0=1<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RW_SID_0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt15;&nbsp;//PC15&nbsp;as&nbsp;0&nbsp;;&nbsp;RW=0&nbsp;<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RW_SID_1&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt15;&nbsp;//PC15&nbsp;as&nbsp;1&nbsp;;&nbsp;RW=1<br /><br />void&nbsp;delay(unsigned&nbsp;long&nbsp;int&nbsp;n)<br />{<br />&nbsp;&nbsp;unsigned&nbsp;long&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;for(i=0;&nbsp;i&ltn*10;&nbsp;i++)&nbsp;{;}<br />}<br /><br />&nbsp;//串行发送一字节数据<br />void&nbsp;SendByte(unsigned&nbsp;char&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_CLK_0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dat&0x80)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RW_SID_1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RW_SID_0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_CLK_1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dat=dat&lt&lt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />//写控制命令<br />void&nbsp;SendCMD(unsigned&nbsp;char&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte(0xF8);//11111,00,0&nbsp;RW=0,RS=0&nbsp;同步标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte(dat&0xF0);//高四位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte((dat&0x0F)&lt&lt4);//低四位<br />}<br /><br />//写显示数据或单字节字符<br />void&nbsp;SendDat(unsigned&nbsp;char&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte(0xFA);//11111,01,0&nbsp;RW=0,RS=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte(dat&0xF0);//高四位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte((dat&0x0F)&lt&lt4);//低四位<br />}<br /><br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;写汉字到LCD&nbsp;指定的位置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_add显示RAM的地址<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dat1/dat2显示汉字编码<br />*/<br />void&nbsp;display(unsigned&nbsp;char&nbsp;x_add,unsigned&nbsp;char&nbsp;dat1,unsigned&nbsp;char&nbsp;dat2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(x_add);//1xxx,xxxx&nbsp;设定DDRAM&nbsp;7位地址xxx,xxxx到地址计数器AC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(dat1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(dat2);<br />}<br /><br />//初始化&nbsp;LCM<br />void&nbsp;initlcm(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x30);//功能设置,一次送8位数据,基本指令集<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x0C);//0000,1100&nbsp;&nbsp;整体显示,游标off,游标位置off<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x01);//0000,0001&nbsp;清DDRAM<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x02);//0000,0010&nbsp;DDRAM地址归位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x80);//1000,0000&nbsp;设定DDRAM&nbsp;7位地址000,0000到地址计数器AC<br />}<br /><br /><br />//////////////////////////////////////////<br />unsigned&nbsp;char&nbsp;SetLcdDisplayCharPos(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;if&nbsp;((row&nbsp;&lt&nbsp;2)&nbsp;&&&nbsp;(col&nbsp;&lt&nbsp;16))//英文字符为2行16列&nbsp;<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x80&nbsp;+&nbsp;row&nbsp;*&nbsp;16&nbsp;+&nbsp;col);//发送设定DDRAM地址row&nbsp;*&nbsp;16&nbsp;+&nbsp;col命令&nbsp;<br />&nbsp;&nbsp;&nbsp;return&nbsp;1;&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;else&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;<br />}&nbsp;<br /><br />void&nbsp;LcdDisplayChar(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col,&nbsp;unsigned&nbsp;char&nbsp;*&nbsp;string)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;if&nbsp;(SetLcdDisplayCharPos(row,&nbsp;col))&nbsp;<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendDat(*string);&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />}&nbsp;<br /><br />unsigned&nbsp;char&nbsp;SetLcdDisplayChinsePos(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;if&nbsp;((row&nbsp;&lt&nbsp;2)&nbsp;&&&nbsp;(col&nbsp;&lt&nbsp;8))//汉字字符为2行8列(偶数对齐)&nbsp;<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x80&nbsp;+&nbsp;row&nbsp;*&nbsp;16&nbsp;+&nbsp;col&nbsp;*&nbsp;2);//发送设定DDRAM地址row&nbsp;*&nbsp;16&nbsp;+&nbsp;col&nbsp;*&nbsp;2命令&nbsp;<br />&nbsp;&nbsp;&nbsp;return&nbsp;1;&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;<br />}&nbsp;<br /><br />void&nbsp;LcdDisplayChinse(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col,&nbsp;unsigned&nbsp;char&nbsp;*&nbsp;string)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;if&nbsp;(SetLcdDisplayChinsePos(row,&nbsp;col))&nbsp;<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendDat(*string);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendDat(*(string&nbsp;+&nbsp;1));&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />}&nbsp;<br /><br />void&nbsp;LcdDisplayString(unsigned&nbsp;char&nbsp;*&nbsp;string)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;while(*string)&nbsp;SendDat(*string&nbsp;++);&nbsp;<br />}&nbsp;<br /><br /><br />//////////////////////////////////////////<br /><br />FILE&nbsp;*f;<br />int&nbsp;n,fd;<br />main(void)<br />{<br />char&nbsp;num,status=0;<br />int&nbsp;i,j,count;<br />int&nbsp;ch;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<br />printf(&quot;start
&quot;);<br />if((fd&nbsp;=&nbsp;open(&quot;/dev/mem&quot;,&nbsp;O_RDWR&nbsp;|&nbsp;O_SYNC))&nbsp;==&nbsp;-1){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEBUGMSG(DEBUG_ERR,&nbsp;&quot;gpio:&nbsp;Error&nbsp;opening&nbsp;/dev/mem
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//map&nbsp;0xffff<br />map_base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;mmap(0,&nbsp;MAP_SIZE,&nbsp;PROT_READ&nbsp;|&nbsp;PROT_WRITE,&nbsp;MAP_SHARED,&nbsp;fd,&nbsp;AT91_SYS);//AT91_SYS&nbsp;=&nbsp;0xffff&nbsp;f000<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_PER&nbsp;))))&nbsp;=&nbsp;(0x1&lt&lt15)|(0x1&lt&lt14);&nbsp;//PC15&nbsp;PC14&nbsp;as&nbsp;gpio&nbsp;;1&nbsp;bit&nbsp;set&nbsp;to&nbsp;GPIO&nbsp;and&nbsp;zero&nbsp;bit&nbsp;no&nbsp;effect<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_OER&nbsp;))))&nbsp;=&nbsp;(0x1&lt&lt15)|(0x1&lt&lt14);;//as&nbsp;output<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_PUER&nbsp;))))&nbsp;=&nbsp;(0x1&lt&lt15)|(0x1&lt&lt14);;//use&nbsp;up&nbsp;resistor<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initlcm();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x81);//1000,0001&nbsp;设定DDRAM&nbsp;7位地址000,0001到地址计数器AC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(0x33);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(0x42);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(0x43);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(0x44);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br /><br />&nbsp;&nbsp;SetLcdDisplayChinsePos(0,&nbsp;0);//汉字定位到上行左端&nbsp;<br />&nbsp;&nbsp;LcdDisplayString(&quot;汉字显示演示程序&quot;);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65535);<br />&nbsp;&nbsp;SetLcdDisplayCharPos(1,0);//字符定位到下行左端&nbsp;<br />&nbsp;&nbsp;LcdDisplayString(&quot;0123456789ABCDEF&quot;);&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65535);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x80,0xb0,0xb2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x81,0xbb,0xD5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x82,0xb5,0xe7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x83,0xc1,0xA6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x84,0xc5,0xe0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x85,0xD1,0xb5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x86,0xd6,0xD0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x87,0xd0,0xc4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x90,0xb0,0xb2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x91,0xbb,0xD5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x92,0xb5,0xe7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x93,0xc1,0xA6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x94,0xc5,0xe0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x95,0xD1,0xb5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x96,0xd6,0xD0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x97,0xd0,0xc4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x88,0xb0,0xb2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x89,0xbb,0xD5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8A,0xb5,0xe7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8B,0xc1,0xA6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8C,0xc5,0xe0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8D,0xD1,0xb5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8E,0xd6,0xD0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8F,0xd0,0xc4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x98,0xb0,0xb2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x99,0xbb,0xD5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9A,0xb5,0xe7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9B,0xc1,0xA6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9C,0xc5,0xe0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9D,0xD1,0xb5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9E,0xd6,0xD0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9F,0xd0,0xc4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;close(fd);<br />}<br /><br />
john_light 发表于 2007-11-9 17:01 | 显示全部楼层

最近正在看内核模块的编程部分

路过支持一下。
 楼主| wangkj 发表于 2007-11-10 10:45 | 显示全部楼层

显示结果

  
 楼主| wangkj 发表于 2007-11-10 10:48 | 显示全部楼层

lcd有反应了,但是不正常

成功了50%
 楼主| wangkj 发表于 2007-11-10 12:50 | 显示全部楼层

正常的程序

cs接vcc;sid,clk&nbsp;10K上拉<br /><br /><br />/*-------------------------------------------------------------------------------------<br />date:20071109<br />author:&nbsp;wkj<br />ver&nbsp;1.0<br />stc7920&nbsp;&nbsp;lcd&nbsp;driver<br />---------------------------------------------------------------------------------------*/<br />#include&nbsp;&ltsys/types.h&gt<br />#include&nbsp;&ltstdio.h&gt<br />#include&nbsp;&ltstdarg.h&gt<br />#include&nbsp;&ltstdlib.h&gt<br />#include&nbsp;&ltstring.h&gt<br />#include&nbsp;&ltunistd.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&lterrno.h&gt<br />#include&nbsp;&ltsignal.h&gt<br />#include&nbsp;&lttime.h&gt<br />#include&nbsp;&ltsys/time.h&gt<br />#include&nbsp;&ltsys/ioctl.h&gt<br />#include&nbsp;&ltsys/stat.h&gt<br />#include&nbsp;&ltsys/file.h&gt<br />#include&nbsp;&quot;gpio.h&quot;<br />#include&nbsp;&quot;main.h&quot;<br />#include&nbsp;&quot;io.h&quot;<br />#include&nbsp;&ltstdarg.h&gt<br />#include&nbsp;&ltmemory.h&gt<br />#include&nbsp;&lterrno.h&gt<br />#include&nbsp;&ltsys/types.h&gt<br />#include&nbsp;&ltsys/socket.h&gt<br />#include&nbsp;&ltsys/mman.h&gt<br />#include&nbsp;&ltsys/ioctl.h&gt<br />#include&nbsp;&ltfcntl.h&gt<br />#include&nbsp;&ltsignal.h&gt<br /><br />//&micro;±&Ccedil;°&Iuml;&ntilde;&Euml;&Oslash;&Icirc;&raquo;&Ouml;&Atilde;&nbsp;&ordm;&Iacute;&micro;±&Ccedil;°&Iuml;&Ocirc;&Ecirc;&frac34;&Ograve;&sup3;&nbsp;<br />static&nbsp;unsigned&nbsp;char&nbsp;PixX,page;<br />#define&nbsp;DEBUGMSG(x,&nbsp;y,&nbsp;args...)&nbsp;printf(y,&nbsp;##args)<br />void&nbsp;&nbsp;&nbsp;&nbsp;*map_base;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//phy&nbsp;0xffff&nbsp;f000&nbsp;virtual&nbsp;address<br />//clock&nbsp;input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&Iacute;&not;&sup2;&frac12;&Ecirc;±&Ouml;&Oacute;&Ecirc;&auml;&Egrave;&euml;&para;&Euml;<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_CLK_0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt14;&nbsp;//PC14&nbsp;as&nbsp;0;&nbsp;A0=0<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_CLK_1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt14;&nbsp;//PC14&nbsp;as&nbsp;1;&nbsp;A0=1<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RW_SID_0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_CODR))))&nbsp;=&nbsp;0x1&lt&lt15;&nbsp;//PC15&nbsp;as&nbsp;0&nbsp;;&nbsp;RW=0&nbsp;<br />#define&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RW_SID_1&nbsp;&nbsp;&nbsp;&nbsp;*((unsigned&nbsp;long*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_SODR))))&nbsp;=&nbsp;0x1&lt&lt15;&nbsp;//PC15&nbsp;as&nbsp;1&nbsp;;&nbsp;RW=1<br /><br />void&nbsp;delay(unsigned&nbsp;long&nbsp;int&nbsp;n)<br />{<br />&nbsp;&nbsp;unsigned&nbsp;long&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;for(i=0;&nbsp;i&ltn*10;&nbsp;i++)&nbsp;{;}<br />}<br /><br />&nbsp;//&acute;&reg;&ETH;&ETH;·&cent;&Euml;&Iacute;&Ograve;&raquo;×&Ouml;&frac12;&Uacute;&Ecirc;&yacute;&frac34;&Yacute;<br />void&nbsp;SendByte(unsigned&nbsp;char&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;1
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_CLK_0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;2
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dat&0x80)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;3
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RW_SID_1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;4
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;5
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RW_SID_0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_CLK_1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;8
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dat=dat&lt&lt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />//&ETH;&acute;&iquest;&Oslash;&Ouml;&AElig;&Atilde;ü&Aacute;&icirc;<br />void&nbsp;SendCMD(unsigned&nbsp;char&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte(0xF8);//11111,00,0&nbsp;RW=0,RS=0&nbsp;&Iacute;&not;&sup2;&frac12;±ê&Ouml;&frac34;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte(dat&0xF0);//&cedil;&szlig;&Euml;&Auml;&Icirc;&raquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte((dat&0x0F)&lt&lt4);//&micro;&Iacute;&Euml;&Auml;&Icirc;&raquo;<br />}<br /><br />//&ETH;&acute;&Iuml;&Ocirc;&Ecirc;&frac34;&Ecirc;&yacute;&frac34;&Yacute;&raquo;ò&micro;&yen;×&Ouml;&frac12;&Uacute;×&Ouml;·&ucirc;<br />void&nbsp;SendDat(unsigned&nbsp;char&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte(0xFA);//11111,01,0&nbsp;RW=0,RS=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte(dat&0xF0);//&cedil;&szlig;&Euml;&Auml;&Icirc;&raquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendByte((dat&0x0F)&lt&lt4);//&micro;&Iacute;&Euml;&Auml;&Icirc;&raquo;<br />}<br /><br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&ETH;&acute;&ordm;&ordm;×&Ouml;&micro;&frac12;LCD&nbsp;&Ouml;&cedil;&para;¨&micro;&Auml;&Icirc;&raquo;&Ouml;&Atilde;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_add&Iuml;&Ocirc;&Ecirc;&frac34;RAM&micro;&Auml;&micro;&Oslash;&Ouml;·<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dat1/dat2&Iuml;&Ocirc;&Ecirc;&frac34;&ordm;&ordm;×&Ouml;±à&Acirc;&euml;<br />*/<br />void&nbsp;display(unsigned&nbsp;char&nbsp;x_add,unsigned&nbsp;char&nbsp;dat1,unsigned&nbsp;char&nbsp;dat2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(x_add);//1xxx,xxxx&nbsp;&Eacute;è&para;¨DDRAM&nbsp;7&Icirc;&raquo;&micro;&Oslash;&Ouml;·xxx,xxxx&micro;&frac12;&micro;&Oslash;&Ouml;·&frac14;&AElig;&Ecirc;&yacute;&AElig;÷AC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(dat1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(dat2);<br />}<br /><br />//&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&nbsp;LCM<br />void&nbsp;initlcm(void)<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x30);//&sup1;&brvbar;&Auml;&Uuml;&Eacute;è&Ouml;&Atilde;&pound;&not;&Ograve;&raquo;&acute;&Icirc;&Euml;&Iacute;8&Icirc;&raquo;&Ecirc;&yacute;&frac34;&Yacute;&pound;&not;&raquo;ù±&frac34;&Ouml;&cedil;&Aacute;&icirc;&frac14;&macr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x0C);//0000,1100&nbsp;&nbsp;&Otilde;&ucirc;&Igrave;&aring;&Iuml;&Ocirc;&Ecirc;&frac34;&pound;&not;&Oacute;&Icirc;±êoff&pound;&not;&Oacute;&Icirc;±ê&Icirc;&raquo;&Ouml;&Atilde;off<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x01);//0000,0001&nbsp;&Ccedil;&aring;DDRAM<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x02);//0000,0010&nbsp;DDRAM&micro;&Oslash;&Ouml;·&sup1;é&Icirc;&raquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x80);//1000,0000&nbsp;&Eacute;è&para;¨DDRAM&nbsp;7&Icirc;&raquo;&micro;&Oslash;&Ouml;·000&pound;&not;0000&micro;&frac12;&micro;&Oslash;&Ouml;·&frac14;&AElig;&Ecirc;&yacute;&AElig;÷AC<br />}<br /><br /><br />//////////////////////////////////////////<br />unsigned&nbsp;char&nbsp;SetLcdDisplayCharPos(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;if&nbsp;((row&nbsp;&lt&nbsp;2)&nbsp;&&&nbsp;(col&nbsp;&lt&nbsp;16))//&Oacute;&cent;&Icirc;&Auml;×&Ouml;·&ucirc;&Icirc;&ordf;2&ETH;&ETH;16&Aacute;&ETH;&nbsp;<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x80&nbsp;+&nbsp;row&nbsp;*&nbsp;16&nbsp;+&nbsp;col);//·&cent;&Euml;&Iacute;&Eacute;è&para;¨DDRAM&micro;&Oslash;&Ouml;·row&nbsp;*&nbsp;16&nbsp;+&nbsp;col&Atilde;ü&Aacute;&icirc;&nbsp;<br />&nbsp;&nbsp;&nbsp;return&nbsp;1;&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;else&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;<br />}&nbsp;<br /><br />void&nbsp;LcdDisplayChar(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col,&nbsp;unsigned&nbsp;char&nbsp;*&nbsp;string)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;if&nbsp;(SetLcdDisplayCharPos(row,&nbsp;col))&nbsp;<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendDat(*string);&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />}&nbsp;<br /><br />unsigned&nbsp;char&nbsp;SetLcdDisplayChinsePos(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;if&nbsp;((row&nbsp;&lt&nbsp;2)&nbsp;&&&nbsp;(col&nbsp;&lt&nbsp;8))//&ordm;&ordm;×&Ouml;×&Ouml;·&ucirc;&Icirc;&ordf;2&ETH;&ETH;8&Aacute;&ETH;(&Aring;&frac14;&Ecirc;&yacute;&para;&Ocirc;&AElig;&euml;)&nbsp;<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x80&nbsp;+&nbsp;row&nbsp;*&nbsp;16&nbsp;+&nbsp;col&nbsp;*&nbsp;2);//·&cent;&Euml;&Iacute;&Eacute;è&para;¨DDRAM&micro;&Oslash;&Ouml;·row&nbsp;*&nbsp;16&nbsp;+&nbsp;col&nbsp;*&nbsp;2&Atilde;ü&Aacute;&icirc;&nbsp;<br />&nbsp;&nbsp;&nbsp;return&nbsp;1;&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;<br />}&nbsp;<br /><br />void&nbsp;LcdDisplayChinse(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col,&nbsp;unsigned&nbsp;char&nbsp;*&nbsp;string)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;if&nbsp;(SetLcdDisplayChinsePos(row,&nbsp;col))&nbsp;<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendDat(*string);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SendDat(*(string&nbsp;+&nbsp;1));&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />}&nbsp;<br /><br />void&nbsp;LcdDisplayString(unsigned&nbsp;char&nbsp;*&nbsp;string)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;while(*string)&nbsp;SendDat(*string&nbsp;++);&nbsp;<br />}&nbsp;<br /><br /><br />//////////////////////////////////////////<br /><br />FILE&nbsp;*f;<br />int&nbsp;n,fd;<br />main(void)<br />{<br />char&nbsp;num,status=0;<br />int&nbsp;i,j,count;<br />int&nbsp;ch;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />printf(&quot;start
&quot;);<br />if((fd&nbsp;=&nbsp;open(&quot;/dev/mem&quot;,&nbsp;O_RDWR&nbsp;|&nbsp;O_SYNC))&nbsp;==&nbsp;-1){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEBUGMSG(DEBUG_ERR,&nbsp;&quot;gpio:&nbsp;Error&nbsp;opening&nbsp;/dev/mem
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//map&nbsp;0xffff<br />map_base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;mmap(0,&nbsp;MAP_SIZE,&nbsp;PROT_READ&nbsp;|&nbsp;PROT_WRITE,&nbsp;MAP_SHARED,&nbsp;fd,&nbsp;AT91_SYS);//AT91_SYS&nbsp;=&nbsp;0xffff&nbsp;f000<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_PER&nbsp;))))&nbsp;=&nbsp;(0x1&lt&lt15)|(0x1&lt&lt14);&nbsp;//PC15&nbsp;PC14&nbsp;as&nbsp;gpio&nbsp;;1&nbsp;bit&nbsp;set&nbsp;to&nbsp;GPIO&nbsp;and&nbsp;zero&nbsp;bit&nbsp;no&nbsp;effect<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_OER&nbsp;))))&nbsp;=&nbsp;(0x1&lt&lt15)|(0x1&lt&lt14);;//as&nbsp;output<br />*((volatile&nbsp;unsigned&nbsp;int*)(map_base&nbsp;+&nbsp;((PIOC_OFFSET&nbsp;+&nbsp;AT91_PIO_PUER&nbsp;))))&nbsp;=&nbsp;(0x1&lt&lt15)|(0x1&lt&lt14);;//use&nbsp;up&nbsp;resistor<br />/*<br />for(;;){<br />printf(&quot;0xff
&quot;);<br />SendByte(0xff);<br />printf(&quot;before&nbsp;delay
&quot;);<br />delay(10000000);<br />printf(&quot;0x00
&quot;);<br />SendByte(0x00);<br />delay(10000000);<br /><br />printf(&quot;E_CLK_0
&quot;);<br />E_CLK_0;<br />delay(10000000);<br />printf(&quot;E_CLK_1
&quot;);<br />E_CLK_1;<br />delay(10000000);<br />}&nbsp;<br />*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initlcm();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x81);//1000,0001&nbsp;&Eacute;è&para;¨DDRAM&nbsp;7&Icirc;&raquo;&micro;&Oslash;&Ouml;·000&pound;&not;0001&micro;&frac12;&micro;&Oslash;&Ouml;·&frac14;&AElig;&Ecirc;&yacute;&AElig;÷AC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(0x33);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(0x42);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(0x43);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendDat(0x44);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br /><br />&nbsp;&nbsp;SetLcdDisplayChinsePos(0,&nbsp;0);//&ordm;&ordm;×&Ouml;&para;¨&Icirc;&raquo;&micro;&frac12;&Eacute;&Iuml;&ETH;&ETH;×ó&para;&Euml;&nbsp;<br />&nbsp;&nbsp;LcdDisplayString(&quot;&ordm;&ordm;×&Ouml;&Iuml;&Ocirc;&Ecirc;&frac34;&Ntilde;&Yacute;&Ecirc;&frac34;&sup3;&Igrave;&ETH;ò&quot;);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(65535);<br />&nbsp;&nbsp;&nbsp;&nbsp;SetLcdDisplayCharPos(1,0);//×&Ouml;·&ucirc;&para;¨&Icirc;&raquo;&micro;&frac12;&Iuml;&Acirc;&ETH;&ETH;×ó&para;&Euml;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdDisplayString(&quot;0123456789ABCDEF&quot;);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay(65535);<br />&nbsp;&nbsp;&nbsp;<br />printf(&quot;2,
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />printf(&quot;3,
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x80,0xb0,0xb2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x81,0xbb,0xD5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x82,0xb5,0xe7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x83,0xc1,0xA6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x84,0xc5,0xe0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x85,0xD1,0xb5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x86,0xd6,0xD0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x87,0xd0,0xc4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x90,0xb0,0xb2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x91,0xbb,0xD5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x92,0xb5,0xe7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x93,0xc1,0xA6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x94,0xc5,0xe0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x95,0xD1,0xb5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x96,0xd6,0xD0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x97,0xd0,0xc4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x88,0xb0,0xb2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x89,0xbb,0xD5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8A,0xb5,0xe7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8B,0xc1,0xA6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8C,0xc5,0xe0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8D,0xD1,0xb5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8E,0xd6,0xD0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x8F,0xd0,0xc4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x98,0xb0,0xb2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x99,0xbb,0xD5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9A,0xb5,0xe7);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9B,0xc1,0xA6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9C,0xc5,0xe0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9D,0xD1,0xb5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9E,0xd6,0xD0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display(0x9F,0xd0,0xc4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(65000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCMD(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;close(fd);<br />}<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

580

主题

9972

帖子

24

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