⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 单片机和图形液晶显示器接口应用技术.htm

📁 单片机系统中的汉字显示[拼音输入法)包括源程序
💻 HTM
📖 第 1 页 / 共 3 页
字号:
  <tr>
    <td width="100%" height="18" bgcolor="#CECFCE">·<a href="details.asp?catalogf=10&catalogs=52&catalogt=5&article_id=152&type=26" target="_blank" class="cssGuest"><font title=系统内置的4种网络测试工具>系统内置的4种网络测试..</font></a></td>
  </tr>

  <tr>
    <td width="100%" bgcolor="#CECFCE" align="center"><img src="/_skin/gray/left_bg_line1.gif"></td>
  </tr>
  <tr>
    <td width="100%" height="18" bgcolor="#CECFCE">·<a href="details.asp?catalogf=10&catalogs=53&catalogt=6&article_id=134&type=26" target="_blank" class="cssGuest">高效维护局域网技巧</a></td>
  </tr>

  <tr>
    <td width="100%" bgcolor="#CECFCE" align="center"><img src="/_skin/gray/left_bg_line1.gif"></td>
  </tr>
  <tr>
    <td width="100%" height="18" bgcolor="#CECFCE">·<a href="details.asp?catalogf=10&catalogs=52&catalogt=3&article_id=109&type=26" target="_blank" class="cssGuest">连线的学问</a></td>
  </tr>

  <tr>
    <td width="100%" bgcolor="#CECFCE" align="center"><img src="/_skin/gray/left_bg_line1.gif"></td>
  </tr>
  <tr>
    <td width="100%" height="18" bgcolor="#CECFCE">·<a href="details.asp?catalogf=10&catalogs=52&catalogt=1&article_id=158&type=26" target="_blank" class="cssGuest">子网掩码的简便算法</a></td>
  </tr>

  <tr>
    <td width="100%" bgcolor="#CECFCE" align="center"><img src="/_skin/gray/left_bg_line1.gif"></td>
  </tr>
  <tr>
    <td width="100%" height="18" bgcolor="#CECFCE">·<a href="details.asp?catalogf=10&catalogs=56&catalogt=25&article_id=147&type=26" target="_blank" class="cssGuest"><font title=电脑无法连入局域网的故障解决>电脑无法连入局域网的故..</font></a></td>
  </tr>

  <tr>
    <td width="100%"><img src="/_skin/gray/left_middle1.gif"></td>
  </tr>
  <tr>
    <td width="100%" bgcolor="#EFEFEF">
<form method="POST" action="/_pub/vote_show.asp?id=1"  name="vote" language="javascript" onSubmit="return vote_onsubmit()" target="_blank">  
  <table border="0" cellspacing="0" width="150"> 
    <tr> 
      <td width="100%">&nbsp;&nbsp;<font color="#FF6600"><b>需求调查</b></font></td>    
    </tr>    
    <tr>    
      <td width="100%">&nbsp;&nbsp;&nbsp;&nbsp;您急需要从本站获得哪方面的内容?</td>    
    </tr>      
    <tr>    
      <td width="100%">&nbsp;&nbsp;<input type="radio" value="1" name="Options">软考新闻动态</td>   
    </tr>     
    <tr>    
      <td width="100%">&nbsp;&nbsp;<input type="radio" value="2" name="Options">相关技术文章</td>   
    </tr>     
    <tr>    
      <td width="100%">&nbsp;&nbsp;<input type="radio" value="3" name="Options">下载相关资料</td>   
    </tr>     
    <tr>    
      <td width="100%">&nbsp;&nbsp;<input type="radio" value="4" name="Options">论坛交流空间</td>   
    </tr>   
    <tr>    
      <td width="100%">&nbsp;&nbsp;<input type="radio" value="5" name="Options">综合能力测试</td>   
    </tr>   
    <tr>   
      <td width="100%" align="center">  
        <input type="submit" value="提交" name="submit">&nbsp;  
        <input onClick="return showhtml('/_pub/vote_show.asp?id=1')" type="button" value="查看结果" name="show">  
      </td>   
    </tr>   
  </table>  
</form>


<script LANGUAGE="javascript">
<!--
function vote_onsubmit() {
 if(document.vote.Options[0].checked==false &&document.vote.Options[1].checked==false&&document.vote.Options[2].checked==false&&document.vote.Options[3].checked==false&&document.vote.Options[4].checked==false)
  {
    alert("请先选择再提交!")
    return false
   }
 }
//-->
</script>
<script language="javascript">
function showhtml(fname)
{
window.open(fname,"blank", "width=420,height=200,toolbar=no,menubar=no,location=no,scrollbars=no")
}
</script></td>
  </tr>
  <tr>
    <td width="100%"><img src="/_skin/gray/left_down2.gif"></td>
  </tr>
</table></td>
          </tr>
          <tr>
            <td width="100%"></td>
          </tr>
        </table>
      </td> 
      <!-------     左中部-正文部分 // 中国软考资讯 www.SoftExam.cn   ----------> 
      <td width="10" valign="top"> </td> 
      <!-------     右部-正文部分   // 中国软考资讯 www.SoftExam.cn   ----------> 
      <td width="590" valign="top">
        <table border="0" width="100%" cellspacing="0" cellpadding="2">
          <tr>
            <td width="100%"></td>
          </tr>
          <tr>
            <td width="100%" background="/_skin/gray/bg_title_gray.gif" height="24">&nbsp;您当前的位置:软考资讯>><a href=/index.asp>首页</a>>><a href=/type/index.asp>类型</a>>><a href="../class.asp?type=26">数据库系统工程师</a>>><a href="index.asp?type=26">技术文章</a>>><a href="catafirst.asp?catalogf=4&type=26">硬件</a>>><a href="catasecond.asp?catalogf=4&catalogs=17&type=26">并行技术</a>>>文章正文</td>
          </tr>

          <tr>
            <td width="100%" align="center" height="45" class="cssTitle">单片机和图形液晶显示器接口应用技术</td>
          </tr>
          <tr>
            <td width="100%">
              <table border="0" cellpadding="2" cellspacing="0" width="100%">
                <tr>
                  <td width="190">出处:来自互联网</td>
                  <td width="10"></td>
                  <td width="190"></td>
                  <td width="10"></td>
                  <td width="190">时间:2004-11-25 16:18:40</td>
                </tr>
                <tr>
                  <td width="190">类型:基础</td>
                  <td width="10"></td>
                  <td width="190"></td>
                  <td width="10"></td>
                  <td width="190">您是本文的第 <font color="#008000"><b>236</b></font> 位阅读者</td>
                </tr>
              </table>
            </td>
          </tr>
          <tr>
            <td width="100%"><p style="line-height: 200%" align="center"><a href="/ftp/index.asp" target="_blank"><img border="0" src="/ADR/PIC/article_580.jpg" alt="软考FTP本月推出特价50元享受VIP无限下载,赶快行动吧!"></a></p>
</td>
          </tr>
          <tr>
            <td width="100%" height="12"></td>
          </tr>
          <tr>
            <td width="100%" class="cssContent">
            <P>&nbsp;  液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其它显示器无法比拟的优点,近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。LCD可分为段位式LCD、字符式LCD和点阵式LCD。其中,段位式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动,动画功能,分区开窗口,反转,闪烁等功能,用途十分广泛。本文介绍点阵式液晶显示器MGLS12864与单片机的接口及编程的方法,同时给出8×16字符和16×16点阵汉字的方法,及常用的字符显示和汉字显示程序。 <BR>这里着重介绍液晶显示器与单片机的接口技术。</P><P>  单片机可以通过数据总线与控制信号直接采用存储器访问形式、I/O设备访问形式控制该液晶显示模块。本文以华邦公司的W78E58为例,它内部有32KB的FLASH EEPROM,用户编制的程序及需要显示的英文字母、数字、汉字、曲线和图形都可以存储在里面,免去了扩展外部存储器的麻烦,使得以W78E58单片机为核心的控制系统电路更简单。因此十分适用于液晶显示。MGLS12864与W78E58单片机接口电路如图1所示。该图采用直接访问方式,单片机通过低位地址A2控制CSA;A3控制CSB,以选通液晶显示屏上各区的控制器HD61202;同时W78E58用地址A1作为R/W信号控制数据总线的数据流向;用地址A0作为D/I信号控制寄存器的选择;E信号由W78E58的读信号RD和写信号WR合成产生;另外单片机的复位引脚经反相器后连接到液晶显示器复位引脚,当单片机上电复位或手动复位时, 液晶显示器同时也复位;从而实现了W78E58对内置HD61202图形液晶显示器模块的电路连接。电路中LCD电源控制端VO是用来调节显示屏灰度的,调节该端的电压,可改变显示屏字符、图形的颜色深浅。</P><P>  单片机对液晶显示模块的操作可分为两部分,即左半屏和右半屏操作。下面是根据图1的连接确定对应左半屏(前64×64)和右半屏(后64×64)操作地址:</P><P>CWADR1 EQU 0004H 左半屏写指令代码地址</P><P>DWADR1 EQU 0005H 左半屏写显示数据地址</P><P>CRADR1 EQU 0006H 左半屏读状态字地址</P><P>DRADR1 EQU 0007H 左半屏读显示数据地址</P><P>CWADR2 EQU 0008H 右半屏写指令代码地址</P><P>DWADR2 EQU 0009H 右半屏写显示数据地址</P><P>CRADR2 EQU 000AH 右半屏读状态字地址</P><P>DRADR2 EQU 000BH 右半屏读显示数据地址</P><P>  液晶控制器HD61202一共有七条指令,从作用上可分为两类,显示状态设置指令和数据读/写操作指令。显示起始行设置中L5~L0为显示起始行的地址,取值在0-3FH(1-64行)范围内。页面地址设置中P2-P0为选择的页面地址,取值范围为0-7H,代表1-8页。列地址设置中C5-C0为Y地址计数器的内容,取值在0-3FH(1-64行)范围内。</P><P>  显示器上128点×64点,每8点为一字节数据,都对应着显示数据RAM(在HD61202芯片内),一点对应一个bit,计算机写入或读出显示存储器的数据代表显示屏上某一点列上的垂直8点行的数据。D0代表最上一行的点数据,D1为第二行的点数据,…….,D7为第八行的点数据。该bit=1时该点则显示黑点出来,该bit=0时该点则消失。另外LCD指令中有-条display ON/OFF指令,display ON时显示RAM数据对应显示的画面;display OFF则画面消失,RAM中显示数据仍存在。</P><P>  由于MGLS12864液晶显示器没有内部字符发生器,所以在屏幕上显示的任何字符、汉字等须自己建立点阵字模库,然后均按图形方式进行显示。由于HD61202显示存储器的特性,不能将计算机内的汉字库和其它字模库提出直接使用,需要将其旋转90度后再写入。点阵字模库建立包括以下几个方面:</P><P>(1)建立8×16点阵常用字符、数字、符号字模库。</P><P>可选用计算机BIOS中ASCII的8×16字模库,所有字符按照ASCII值从小到大升序排列。</P><P>asm{mov ax,1130h /*AH=11h-功能调用。装入字库至软</P><P>字库 */</P><P>mov bh,6 /*AL=30h 取点阵信息 */</P><P>int 10h /*BH=6 取ROM8X16点阵指针</P><P>(VGA) */</P><P>mov ax,es /*出口:ES:BP 指向字库指针 */</P><P>mov ascii_es,ax</P><P>mov ax,bp</P><P>mov ascii_bp,ax };</P><P>ascii_offset=ascii_bp+16*asciicode;</P><P>揻or(j=0;j&lt;16;j++) buf[j]=peekb(ascii_es,ascii_offset+j);</P><P>/*读16字节点阵数据*/</P><P>揻or(m=0;m&lt;16;m++) /*点阵数据转换成LCD格式</P><P>数据*/</P><P>?#9; { if(m&lt;8) { beginbyte= 7; shiftn=7;}</P><P>else { beginbyte=15; shiftn=15;}</P><P>?#9;for(j=0;j&lt;8;j++)</P><P>? Ascii8x16[m]=(ascii8x16[m]+ (buf[beginbyte-j]&gt;&gt;</P><P>(shiftn-m))&amp;0x01)&lt;&lt;1;</P><P>搣</P><P>  也可选用UCDOS的ASC16文件做字模库。ASC16文件的字符为8×16点阵。所有字符按照ASCII值从小到大升序排列。计算字符首地址的公式:字符首地址=字符的ASCII码值×16+字模库首地址。</P><P>(2) 建立所用到的16×16点阵字模库。汉字字符可选用UCDOS的HZK16文件做字模库。HZK16文件的字符为16×16点阵。所有字符按照区位码从小到大升序排列。计算汉字字符首地址的公式如下:汉字首地址=((区码-1)×94+位码-1)×32。笔者用C语言编写的读取UCDOS点阵字库字模程序,完成字模读取、数据重新排列,并按MCS-51汇编程序的要求写成相应格式的文本文件。</P><P>p=((quma-1)*94+weima-1)*32;</P><P>cclibfile=fopen("HZK16","rb");</P><P>fseek(cclibfile,(long)p,SEEK_SET);</P><P>fread(buf,sizeof(unsigned char),32,cclibfile); /*读32</P><P>字节点阵数据*/</P><P>for(m=0;m&lt;32;m++){ /*点阵数据转换成LCD格式</P><P>数据*/</P><P>if(m&lt;8) { beginbyte=14; shiftn=7;}</P><P>?#9;else if( m&gt;= 8 &amp;&amp; m&lt;16 ) { beginbyte=15;</P><P>shiftn=15;}</P><P>else if( m&gt;=16 &amp;&amp; m&lt;24 ) { beginbyte=30;</P><P>shiftn=23;}</P><P>else { beginbyte=31; shiftn=31;}</P><P>?#9;for(j=0;j&lt;8;j++)</P><P>hzk16x16[m]=(hzk16x16[m]+ (buf[beginbyte-2*j] &gt;&gt;(shiftn-m))&amp;0x01)&lt;&lt;1;</P><P>}</P><P>(3) 常用图形(如产品商标等)的点阵图形的建立。对已有的图形可采用扫描仪进行扫描,然后用图形处理软件进行处理,再将BMP格式文件转换成MCS-51的汇编文件的格式。</P><P>  以上所有的字模数据都存放在单片机W78E58的程序存储器中,如用到的汉字、图形较多,可选用较大容量的程序存储器。</P><P>  通用子程序分左半屏、右半屏写指令代码子程序和写显示数据子程序。液晶显示驱动器HD16202内部有个忙标志寄存器,当BF=1时,表示内部操作正在运行,不能接受外部数据或指令。下面子程序中设指令代码寄存器为COMM,数据寄存器为DATA。</P><P>(COMM EQU 20H /*指令寄存器*/ DATA EQU 21H /*数据寄存器*/)</P><P>(1) 左半屏写指令子程序</P><P>WR_CMD1:MOV DPTR,#CRADR1 ;/*读状态字口地址*/</P><P>WAIT1: MOVX A,@DPTR;/* 读状态字 */</P><P>?#9; JB ACC.7,WAIT1;/*判忙标志BF,如BF=1</P><P>忙,等待*/</P><P>?#9; MOV DPTR,#CWADR1;/*写指令字口地址*/</P><P>?#9; MOV A,COMM ;/*取指令代码*/</P><P>?#9; MOVX @DPTR,A ;/*写指令代码*/</P><P>?#9; RET</P><P>?2)左半屏写数据子程序</P><P>WR_DATA1:MOV DPTR,#CRADR1 ;/*读状态字口地址*/</P><P>WAIT11: MOVX A,@DPTR ;/* 读状态字 */</P><P>JB ACC.7,WAIT11 ;/*判忙标志BF,</P><P>如BF=1忙,等待*/</P><P>MOV DPTR,#DWADR1 ;/*写数据字口地址*/</P><P>MOV A,DATA ;/*取数据/</P><P>?#9; MOVX @DPTR,A ;/*写数据*/</P><P>RET</P><P>(3)右半屏写指令子程序WR_CMD2和右半屏写数据子程序WR_DATA2的编制同左半屏子程序相同,只是对应口地址不同。</P><P>  MGLS12864液晶显示屏由二片HD61202控制,LCD显示中应尽量避免一个字符一半在左半屏显示,另一半在右半屏显示的情况。设列地址寄存器为COLUMN,页地址寄存器为PAGE,要显示的字符代码寄存器为ASCIICODE,W78E58内RAM28H-RAM37H共16个字节存放8×16的点阵数据,生成的8×16点阵库文件存放在单片机W78E58存储器中的首地址定义为ASCII_DOT816。</P><P>DISP_ASCII816: MOV DPTR,#ASCII_DOT816 ;8×16点阵库首地址</P><P>MOV A,ASCIICODE ;显示字符代码ASCIICODE</P><P>?#9; MOV B,#16;每个字符点阵占16个字节</P><P>?#9; MUL A;计算显示字符在字库的首地址</P><P>ADD A,DPL</P><P>?#9; MOV DPL,A</P><P>?#9; MOV A,DPH</P><P>?#9; ADDC A,B</P><P>?#9; MOV DPH,A</P><P>?#9; MOV R0,#28H;将点阵数据放到</P><P>RAM28H-RAM37H</P><P>MOV R2,#00H</P><P>LP_MOVDOT16: MOV A,R2</P><P>?#9; MOVC A,@A+DPTR</P><P>?#9; MOV @R0,A ;如要将字符反显(黑底白字),则读出点 ?#9; INC R0;阵数据后求反放入单片机的RAM中</P><P>?#9; INC R2</P><P>?#9; CJNE R2,#16,LP_MOVDOT16</P><P>?#9; PUSH COLUMN</P><P>?#9; MOV A,COLUMN ;显示列数</P><P>COLUMN是否在右半屏</P><P>?#9; CJNE A,#64,ASCII_IF64</P><P>ASCII_IF64: JNC ASCII_YGE64</P><P>?#9; MOV DPTR,#CWADR1;在左半屏时,选择左半屏写指令代码地址</P><P>?#9; CLR FIRST0_SECOND1_BIT ;左半屏列数标志BIT=0</P><P>?#9; SJMP ALL_COLUMN</P><P>ASCII_YGE64: CLR C</P><P>?#9; SUBB A,#64</P><P>?#9; MOV COLUMN,A</P><P>?#9; MOV DPTR,#CWADR2 ;在右半屏时,选择右半屏写指令代码地址 ?#9; SETB FIRST0_SECOND1_BIT ;右半屏列数标志BIT=1</P><P>ALL_COLUMN:MOV A,PAGE</P><P>?#9; ADD A,#10111000B ;设置页地址命令</P><P>?#9; MOVX @DPTR,A</P><P>?#9; MOV A,COLUMN;设置列地址命令</P><P>?#9; ADD A,#01000000B</P><P>?#9; MOVX @DPTR,A</P><P>?#9; MOV DPTR,DWADR1 ;根据左右半屏列数标志,选择写显示数据地址</P><P>?#9; JNB FIRST0_SECOND1_BIT, ALLMOV1</P><P>?#9; MOV DPTR,DWADR2</P><P>ALLMOV1: MOV R0,#28H</P><P>?#9; MOV_8BYTE1:MOV A,@R0</P><P>?#9; MOVX @DPTR,A ;写显示数据</P><P>?#9; NOP</P><P>?#9; INC R0</P><P>?#9; CJNE R0,#30H,MOV_8BYTE1</P><P>?#9; MOV DPTR,#CWADR1</P><P>?#9; JNB FIRST0_SECOND_BIT,ALLMOV2</P><P>?#9; MOV DPTR,#CWADR2</P><P>ALLMOV2: MOV A,PAGE</P><P>?#9; INC A ;页地址加1</P><P>?#9; ADD A,#10111000B</P><P>?#9; MOVX @DPTR,A ;设置页地址命令</P><P>?#9; MOV A,COLUMN ;设置列地址命令</P><P>?#9; ADD A,#01000000B</P><P>?#9; MOVX @DPTR,A</P><P>?#9; MOV DPTR,DWADR1;根据左右半屏列数标志,选择写显示数据地址</P><P>?#9; JNB FIRST0_SECOND1_BIT,ALLMOV3</P><P>?#9; MOV DPTR,DWADR2</P><P>ALLMOV3: MOV R0,#30H</P><P>MOV_8BYTE2:MOV A,@R0</P><P>?#9;</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -