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

📄 zlg7289.htm

📁 初学者关于ZLG7289的问题 ZLG7289.c文件 数码管的显示和键盘管理的功能函数
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0051)http://www.c51bbs.com/c51bbs/topic/c51bbs726678.htm -->
<HTML><HEAD><TITLE>C51BBS论坛>>初学者:关于ZLG7289的问题</TITLE>
<META http-equiv=Content-Type content="text/html; charset=Gb2312">
<SCRIPT language=javascript>function MM_findObj(n, d) { var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;}function MM_changeProp(objName,x,theProp,theValue) {var obj = MM_findObj(objName);if (obj && (theProp.indexOf("style.")==-1 || obj.style)) eval("obj."+theProp+"='"+theValue+"'");}</SCRIPT>
<LINK href="ZLG7289.files/nobgcolor.css" type=text/css rel=stylesheet>
<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY bgColor=#efefef leftMargin=35 background=ZLG7289.files/c51bbs.jpg 
topMargin=80><TD class=pw>用【<SPAN style="CURSOR: hand" 
onclick="MM_changeProp('spancontent','','style.fontSize','9pt','SPAN')"> 小 
</SPAN>|<SPAN style="CURSOR: hand" 
onclick="MM_changeProp('spancontent','','style.fontSize','10.5pt','SPAN')"> 中 
</SPAN>|<SPAN style="CURSOR: hand" 
onclick="MM_changeProp('spancontent','','style.fontSize','12pt','SPAN')"> 大 
</SPAN>】字体浏览</TD> 
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD><SPAN id=spancontent>
      <H3>初学者:关于ZLG7289的问题 [xiaoyu820202] <FONT 
      color=#d5d5d5>2005-12-20&nbsp;9:12:39</FONT></H3>
      <P>谁有7289的&nbsp;读键盘的C子程序?<BR></P>
      <UL>
        <LI><B>周立功就有啊。我当时就是向他要的。 [大灵通] <FONT 
        color=#d5d5d5>2005-12-20&nbsp;9:31:31</FONT></B>
        <P><BR></P>
        <LI><B>我有 [yuanyuanyuan] <FONT 
        color=#d5d5d5>2005-12-20&nbsp;12:50:40</FONT></B>
        <P>你的E_Mail?给你发一个<BR></P>
        <LI><B>zlg7189.c [whitelie] <FONT 
        color=#d5d5d5>2005-12-20&nbsp;20:57:39</FONT></B>
        <P>/*----------------------------------------------------------<BR>&nbsp;&nbsp;ZLG7289.c文件<BR>&nbsp;<BR>&nbsp;&nbsp;数码管的显示和键盘管理的功能函数<BR><BR>----------------------------------------------------------*/<BR>#include&nbsp;&lt;ZLG7289.h&gt;<BR><BR><BR>unsigned&nbsp;char&nbsp;ZLG7289_delay_t;//定义一个全局变量,用于延时<BR>char&nbsp;&nbsp;&nbsp;&nbsp;cs;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义一个全局变量,用于片选控制<BR><BR>/*<BR>宏定义:ZLG7289_ShortDelay()<BR>功能:&nbsp;&nbsp;短延时<BR>说明:&nbsp;&nbsp;延时(ZLG7289_delay_t*2+2)个机器周期<BR>*/<BR>void&nbsp;ZLG7289_ShortDelay()&nbsp;<BR>{&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;t=ZLG7289_delay_t;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(--t!=0);<BR>}<BR>/*<BR>宏定义:ZLG7289_LongDelay()<BR>功能:&nbsp;&nbsp;长延时<BR>说明:&nbsp;&nbsp;延时(ZLG7289_delay_t*12+2)个机器周期<BR>*/<BR>void&nbsp;ZLG7289_LongDelay()&nbsp;<BR>{&nbsp;&nbsp;unsigned&nbsp;char&nbsp;t=ZLG7289_delay_t*6;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;while(--t!=0);<BR>}<BR>/*<BR>函数:&nbsp;delay()<BR>功能:&nbsp;显示初始化时的延时程序<BR>*/<BR>&nbsp;void&nbsp;delay()&nbsp;&nbsp;&nbsp;&nbsp;//延时500ms<BR>{<BR>&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,j;<BR>&nbsp;&nbsp;for(i=0;i&lt;100;i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;for(j=0;j&lt;100;j++)<BR>&nbsp;&nbsp;ZLG7289_LongDelay();<BR>}<BR>}<BR>/*<BR>函数:&nbsp;ZLG7289_SPI_Write()<BR>功能:&nbsp;向SPI总线写入一个字节的数据<BR>参数:&nbsp;dat&nbsp;要写入的数据<BR>*/<BR>void&nbsp;ZLG7289_SPI_Write(char&nbsp;dat)reentrant<BR>{&nbsp;&nbsp;unsigned&nbsp;char&nbsp;t=8;<BR>&nbsp;&nbsp;&nbsp;do{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_PINDIO=(bit)(dat&amp;0x80);<BR>&nbsp;&nbsp;&nbsp;&nbsp;dat&lt;&lt;=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_PINCLK&nbsp;=&nbsp;1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_ShortDelay();<BR>&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_PINCLK&nbsp;=&nbsp;0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_ShortDelay();<BR>}while(--t!=0);<BR>}<BR>/*<BR>函数:&nbsp;ZLG7289_SPI_Read<BR>功能:&nbsp;从SPI总线读取一个字节的数据<BR>返回:&nbsp;读取的数据<BR>*/<BR>unsigned&nbsp;char&nbsp;ZLG7289_SPI_Read()reentrant<BR>{&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;dat;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;t=8;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_PINDIO=1;&nbsp;//读取数据前DIO置1切换到输入状态<BR>&nbsp;&nbsp;&nbsp;ZLG7289_ShortDelay();&nbsp;&nbsp;&nbsp;&nbsp;//从输出转为输入的建立时间5us&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;do{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_PINCLK=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_ShortDelay();<BR>&nbsp;&nbsp;&nbsp;&nbsp;dat&lt;&lt;=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(ZLG7289_PINDIO)&nbsp;dat++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_PINCLK=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_ShortDelay();<BR>&nbsp;&nbsp;}while(--t!=0);<BR>return&nbsp;dat;<BR>}<BR>/*<BR>函数:&nbsp;ZLG7289_cmd()<BR>功能:&nbsp;纯指令函数<BR>参数:&nbsp;cmd&nbsp;:&nbsp;命令字节<BR>*/<BR>void&nbsp;ZLG7289_cmd(char&nbsp;cmd)<BR>{&nbsp;&nbsp;char&nbsp;sav=IEN0;<BR>&nbsp;&nbsp;&nbsp;IEN0&amp;=0xFA;&nbsp;&nbsp;//关闭外部中断<BR>&nbsp;&nbsp;&nbsp;ZLG7289_pincs(0);<BR>&nbsp;&nbsp;&nbsp;ZLG7289_LongDelay();<BR>&nbsp;&nbsp;&nbsp;ZLG7289_SPI_Write(cmd);<BR>&nbsp;&nbsp;&nbsp;ZLG7289_pincs(1);<BR>&nbsp;&nbsp;&nbsp;ZLG7289_LongDelay();<BR>&nbsp;&nbsp;&nbsp;IEN0=sav;<BR>}<BR>/*<BR>函数:ZLG7289_cmd_dat()<BR>功能:带数据的指令函数<BR>参数:cmd:&nbsp;命令字节<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dat:&nbsp;数据字节<BR>*/<BR>void&nbsp;ZLG7289_cmd_dat(char&nbsp;cmd,char&nbsp;dat)<BR>{&nbsp;&nbsp;char&nbsp;sav=IEN0;<BR>&nbsp;&nbsp;&nbsp;IEN0&amp;=0xFA;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_pincs(0);<BR>&nbsp;&nbsp;&nbsp;ZLG7289_LongDelay();<BR>&nbsp;&nbsp;&nbsp;ZLG7289_SPI_Write(cmd);<BR>&nbsp;&nbsp;&nbsp;ZLG7289_LongDelay();<BR>&nbsp;&nbsp;&nbsp;ZLG7289_SPI_Write(dat);<BR>&nbsp;&nbsp;&nbsp;ZLG7289_pincs(1);<BR>&nbsp;&nbsp;&nbsp;ZLG7289_LongDelay();<BR>&nbsp;&nbsp;&nbsp;IEN0=sav;<BR>}<BR>/*<BR>函数:&nbsp;ZLG7289_down()<BR>功能:&nbsp;下载数据<BR>参数:&nbsp;mod:0\1\2&nbsp;分别代表下载数据按照0译码方式\1译码方式\无译码方式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x:&nbsp;&nbsp;数码管的位码0~7<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp:&nbsp;0\1&nbsp;&nbsp;小数点不亮\亮<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dat:要显示的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a:&nbsp;&nbsp;多片ZLG7289的选择参数<BR>说明:&nbsp;要显示的数据译码表获得<BR>*/<BR>void&nbsp;ZLG7289_down(unsigned&nbsp;char&nbsp;mod,char&nbsp;x,bit&nbsp;dp,char&nbsp;dat,char&nbsp;a)<BR>{&nbsp;&nbsp;code&nbsp;char&nbsp;MODDAT[3]={0x80,0xC8,0x90};<BR>&nbsp;&nbsp;&nbsp;char&nbsp;d1,d2;<BR>&nbsp;&nbsp;&nbsp;cs=a;<BR>&nbsp;&nbsp;&nbsp;if(mod&gt;2)&nbsp;mod=2;<BR>&nbsp;&nbsp;&nbsp;d1=MODDAT[mod];<BR>&nbsp;&nbsp;&nbsp;x&amp;=0x07;<BR>&nbsp;&nbsp;&nbsp;d1|=x;<BR>&nbsp;&nbsp;&nbsp;d2=dat&amp;0x7F;<BR>&nbsp;&nbsp;&nbsp;if(dp)&nbsp;&nbsp;d2|=0x80;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_cmd_dat(d1,d2);<BR>}<BR>/*<BR>函数:&nbsp;ZLG7289_Key()<BR>功能:&nbsp;键盘指令<BR>返回:&nbsp;返回值为0~63个键盘中键盘标志值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果返回0FF则表示没有键按下<BR>*/<BR>&nbsp;unsigned&nbsp;char&nbsp;ZLG7289_key()<BR>{&nbsp;&nbsp;unsigned&nbsp;char&nbsp;key;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_CS1=0;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_LongDelay();<BR>&nbsp;&nbsp;&nbsp;ZLG7289_SPI_Write(0x15);<BR>&nbsp;&nbsp;&nbsp;ZLG7289_LongDelay();<BR>&nbsp;&nbsp;&nbsp;key=ZLG7289_SPI_Read();<BR>&nbsp;&nbsp;&nbsp;ZLG7289_CS1=1;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_LongDelay();<BR>&nbsp;&nbsp;&nbsp;return&nbsp;key;<BR>}<BR>/*<BR>函数:&nbsp;ZLG7289_pincs()<BR>功能:&nbsp;多片ZLG7289芯片的选择控制<BR>*/<BR>void&nbsp;ZLG7289_pincs(bit&nbsp;pincs)<BR>{&nbsp;if(!pincs)<BR>&nbsp;{if&nbsp;(cs==1)<BR>ZLG7289_CS1=0;<BR>&nbsp;&nbsp;else&nbsp;if&nbsp;(cs==2)<BR>ZLG7289_CS2=0;<BR>&nbsp;&nbsp;else&nbsp;if&nbsp;(cs==3)<BR>ZLG7289_CS3=0;}<BR>else&nbsp;if&nbsp;(cs==1)<BR>ZLG7289_CS1=1;<BR>&nbsp;&nbsp;else&nbsp;if&nbsp;(cs==2)<BR>ZLG7289_CS2=1;<BR>&nbsp;&nbsp;else&nbsp;if&nbsp;(cs==3)<BR>ZLG7289_CS3=1;<BR>}<BR>/*<BR>函数:&nbsp;ZLG7289_init()<BR>功能:&nbsp;ZLG7289的初始化<BR>参数:&nbsp;t:SPI的延时初始值<BR>*/<BR>void&nbsp;ZLG7289_init(unsigned&nbsp;char&nbsp;t)<BR>{&nbsp;&nbsp;unsigned&nbsp;char&nbsp;x,y,z;<BR>//I/O口的初始化<BR>&nbsp;&nbsp;&nbsp;ZLG7289_CS1&nbsp;&nbsp;&nbsp;=1;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_CS2&nbsp;&nbsp;&nbsp;=1;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_CS3&nbsp;&nbsp;&nbsp;=1;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_PINCLK=0;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_PINDIO=1;<BR>&nbsp;&nbsp;&nbsp;ZLG7289_PININT=1;<BR>//延时时间初始化<BR>&nbsp;&nbsp;&nbsp;ZLG7289_delay_t=t;<BR>//自检程序,点亮所有的数码管<BR>&nbsp;&nbsp;for(z=0;z&lt;16;z++)<BR>{<BR>&nbsp;&nbsp;for(y=1;y&lt;4;y++)<BR>{<BR>&nbsp;&nbsp;for(x=0;x&lt;8;x++)<BR>{<BR>&nbsp;&nbsp;ZLG7289_down(0,x,0,z,y);<BR>}<BR>}<BR>&nbsp;&nbsp;delay();<BR>}<BR><BR></P>
        <LI><B>zlg7289.h [whitelie] <FONT 
        color=#d5d5d5>2005-12-20&nbsp;20:58:27</FONT></B>
        <P>/*--------------------------------------------------<BR>&nbsp;ZLG7289.H<BR><BR>&nbsp;数码管显示与键盘管理芯片ZLG7289&nbsp;的驱动程序头文件<BR>---------------------------------------------------*/<BR>#ifndef&nbsp;&nbsp;ZLG7289_H<BR>#define&nbsp;&nbsp;ZLG7289_H<BR><BR>#include&nbsp;&lt;reg922.h&gt;<BR><BR>//定义I/O接口<BR>sbit&nbsp;ZLG7289_CS1&nbsp;&nbsp;&nbsp;&nbsp;=P1^7;&nbsp;&nbsp;&nbsp;&nbsp;//片选信号,低电平有效<BR>sbit&nbsp;ZLG7289_CS2&nbsp;&nbsp;&nbsp;&nbsp;=P1^6;<BR>sbit&nbsp;ZLG7289_CS3&nbsp;&nbsp;&nbsp;&nbsp;=P0^3;<BR>sbit&nbsp;ZLG7289_PINCLK&nbsp;=P0^1;&nbsp;&nbsp;&nbsp;&nbsp;//时钟信号,上升沿有效<BR>sbit&nbsp;ZLG7289_PINDIO&nbsp;=P0^2;&nbsp;&nbsp;&nbsp;&nbsp;//数据信号,双向<BR>sbit&nbsp;ZLG7289_PININT&nbsp;=P1^4;&nbsp;&nbsp;&nbsp;&nbsp;//键盘中断请求信号,低电平(负边沿)有效<BR><BR>//ZLG7289纯指令函数<BR>extern&nbsp;void&nbsp;ZLG7289_cmd(char&nbsp;cmd);<BR>&nbsp;&nbsp;<BR><BR>//ZLG7289带数据指令函数<BR>extern&nbsp;void&nbsp;ZLG7289_cmd_dat(char&nbsp;cmd,char&nbsp;dat);<BR><BR>//ZLG7289的指令集<BR><BR><BR>//复位指令<BR>#define&nbsp;&nbsp;ZLG7289_reset()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_cmd(0xA4)<BR><BR>//测试指令<BR>#define&nbsp;&nbsp;ZLG7289_test()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_cmd(0xBF)<BR><BR>//左移指令<BR>#define&nbsp;&nbsp;ZLG7289_SHL()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_cmd(0xA0)<BR><BR>//右移指令<BR>#define&nbsp;&nbsp;ZLG7289_SHR()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_cmd(0xA1)<BR><BR>//循环左移指令<BR>#define&nbsp;&nbsp;ZLG7289_ROL()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_cmd(0xA2)<BR><BR>//循环右移指令<BR>#define&nbsp;&nbsp;ZLG7289_ROR()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_cmd(0xA3)<BR><BR><BR>//下载数据<BR>extern&nbsp;void&nbsp;ZLG7289_down(unsigned&nbsp;char&nbsp;mod,char&nbsp;x,bit&nbsp;dp,char&nbsp;dat,char&nbsp;a);<BR><BR><BR>//闪烁控制<BR>//x的8位对应数码管的8个位,&nbsp;0-闪烁,1-不闪烁<BR>#define&nbsp;ZLG7289_flash(x)&nbsp;&nbsp;ZLG7289_cmd_dat(0x88,x)<BR><BR><BR>//消隐控制<BR>//x的8位对应数码管的8位&nbsp;&nbsp;,&nbsp;0-消隐,1-显示<BR>#define&nbsp;ZLG7289_hide(x)&nbsp;&nbsp;&nbsp;ZLG7289_cmd_dat(0x98,x)<BR><BR>//段点亮控制<BR>//seg0~63对应8只数码管的64只LED管<BR>//每只数码管的点亮顺序按照"g,f,e,d,c,b,a,dp"的顺序进行<BR>#define&nbsp;ZLG7289_seg(x)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZLG7289_cmd_dat(0xE0,x)<BR><BR>//段关闭指令<BR>//seg0~63对应8只数码管的64只LED管<BR>//每只数码管的关闭顺序按照"g,f,e,d,c,b,a,dp"的顺序进行<BR>#define&nbsp;ZLG7289_segoff(x)&nbsp;&nbsp;ZLG7289_cmd_dat(0xC0,x)<BR><BR>//ZLG7289的键盘指令<BR>extern&nbsp;unsigned&nbsp;char&nbsp;ZLG7289_key();<BR><BR>//ZLG7289多片选择指令<BR>extern&nbsp;void&nbsp;ZLG7289_pincs(bit&nbsp;pincs);&nbsp;<BR>//ZLG7289的初始化指令<BR>extern&nbsp;void&nbsp;ZLG7289_init(unsigned&nbsp;char&nbsp;t);<BR><BR><BR>#endif<BR></P><!--Add Reply--></LI></UL></SPAN></TD></TR></TBODY></TABLE><A 
href="http://www.c51bbs.com/c51bbs/moredata.asp?syid=726678">点击回主题参与讨论 
&gt;&gt;&gt;</A><BR>_____________________________________________________________________________<BR>Copyright&copy;,C51BBS论坛 
2000-2003 <BR><BR><IFRAME name=ad src="ZLG7289.files/ad.htm" frameBorder=0 
width="100%" scrolling=no height=80 allowTransparency 
color="#efefef"> </IFRAME></BODY></HTML>

⌨️ 快捷键说明

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