📄 zlg7289.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 9:12:39</FONT></H3>
<P>谁有7289的 读键盘的C子程序?<BR></P>
<UL>
<LI><B>周立功就有啊。我当时就是向他要的。 [大灵通] <FONT
color=#d5d5d5>2005-12-20 9:31:31</FONT></B>
<P><BR></P>
<LI><B>我有 [yuanyuanyuan] <FONT
color=#d5d5d5>2005-12-20 12:50:40</FONT></B>
<P>你的E_Mail?给你发一个<BR></P>
<LI><B>zlg7189.c [whitelie] <FONT
color=#d5d5d5>2005-12-20 20:57:39</FONT></B>
<P>/*----------------------------------------------------------<BR> ZLG7289.c文件<BR> <BR> 数码管的显示和键盘管理的功能函数<BR><BR>----------------------------------------------------------*/<BR>#include <ZLG7289.h><BR><BR><BR>unsigned char ZLG7289_delay_t;//定义一个全局变量,用于延时<BR>char cs; //定义一个全局变量,用于片选控制<BR><BR>/*<BR>宏定义:ZLG7289_ShortDelay()<BR>功能: 短延时<BR>说明: 延时(ZLG7289_delay_t*2+2)个机器周期<BR>*/<BR>void ZLG7289_ShortDelay() <BR>{ unsigned char t=ZLG7289_delay_t; <BR> while(--t!=0);<BR>}<BR>/*<BR>宏定义:ZLG7289_LongDelay()<BR>功能: 长延时<BR>说明: 延时(ZLG7289_delay_t*12+2)个机器周期<BR>*/<BR>void ZLG7289_LongDelay() <BR>{ unsigned char t=ZLG7289_delay_t*6; <BR> while(--t!=0);<BR>}<BR>/*<BR>函数: delay()<BR>功能: 显示初始化时的延时程序<BR>*/<BR> void delay() //延时500ms<BR>{<BR> unsigned char i,j;<BR> for(i=0;i<100;i++)<BR> {<BR> for(j=0;j<100;j++)<BR> ZLG7289_LongDelay();<BR>}<BR>}<BR>/*<BR>函数: ZLG7289_SPI_Write()<BR>功能: 向SPI总线写入一个字节的数据<BR>参数: dat 要写入的数据<BR>*/<BR>void ZLG7289_SPI_Write(char dat)reentrant<BR>{ unsigned char t=8;<BR> do{<BR> ZLG7289_PINDIO=(bit)(dat&0x80);<BR> dat<<=1;<BR> ZLG7289_PINCLK = 1;<BR> ZLG7289_ShortDelay();<BR> ZLG7289_PINCLK = 0;<BR> ZLG7289_ShortDelay();<BR>}while(--t!=0);<BR>}<BR>/*<BR>函数: ZLG7289_SPI_Read<BR>功能: 从SPI总线读取一个字节的数据<BR>返回: 读取的数据<BR>*/<BR>unsigned char ZLG7289_SPI_Read()reentrant<BR>{ unsigned char dat; <BR> unsigned char t=8;<BR> ZLG7289_PINDIO=1; //读取数据前DIO置1切换到输入状态<BR> ZLG7289_ShortDelay(); //从输出转为输入的建立时间5us <BR> do{<BR> ZLG7289_PINCLK=1;<BR> ZLG7289_ShortDelay();<BR> dat<<=1;<BR> if(ZLG7289_PINDIO) dat++;<BR> ZLG7289_PINCLK=0;<BR> ZLG7289_ShortDelay();<BR> }while(--t!=0);<BR>return dat;<BR>}<BR>/*<BR>函数: ZLG7289_cmd()<BR>功能: 纯指令函数<BR>参数: cmd : 命令字节<BR>*/<BR>void ZLG7289_cmd(char cmd)<BR>{ char sav=IEN0;<BR> IEN0&=0xFA; //关闭外部中断<BR> ZLG7289_pincs(0);<BR> ZLG7289_LongDelay();<BR> ZLG7289_SPI_Write(cmd);<BR> ZLG7289_pincs(1);<BR> ZLG7289_LongDelay();<BR> IEN0=sav;<BR>}<BR>/*<BR>函数:ZLG7289_cmd_dat()<BR>功能:带数据的指令函数<BR>参数:cmd: 命令字节<BR> dat: 数据字节<BR>*/<BR>void ZLG7289_cmd_dat(char cmd,char dat)<BR>{ char sav=IEN0;<BR> IEN0&=0xFA;<BR> ZLG7289_pincs(0);<BR> ZLG7289_LongDelay();<BR> ZLG7289_SPI_Write(cmd);<BR> ZLG7289_LongDelay();<BR> ZLG7289_SPI_Write(dat);<BR> ZLG7289_pincs(1);<BR> ZLG7289_LongDelay();<BR> IEN0=sav;<BR>}<BR>/*<BR>函数: ZLG7289_down()<BR>功能: 下载数据<BR>参数: mod:0\1\2 分别代表下载数据按照0译码方式\1译码方式\无译码方式<BR> x: 数码管的位码0~7<BR> dp: 0\1 小数点不亮\亮<BR> dat:要显示的数据<BR> a: 多片ZLG7289的选择参数<BR>说明: 要显示的数据译码表获得<BR>*/<BR>void ZLG7289_down(unsigned char mod,char x,bit dp,char dat,char a)<BR>{ code char MODDAT[3]={0x80,0xC8,0x90};<BR> char d1,d2;<BR> cs=a;<BR> if(mod>2) mod=2;<BR> d1=MODDAT[mod];<BR> x&=0x07;<BR> d1|=x;<BR> d2=dat&0x7F;<BR> if(dp) d2|=0x80;<BR> ZLG7289_cmd_dat(d1,d2);<BR>}<BR>/*<BR>函数: ZLG7289_Key()<BR>功能: 键盘指令<BR>返回: 返回值为0~63个键盘中键盘标志值<BR> 如果返回0FF则表示没有键按下<BR>*/<BR> unsigned char ZLG7289_key()<BR>{ unsigned char key;<BR> ZLG7289_CS1=0;<BR> ZLG7289_LongDelay();<BR> ZLG7289_SPI_Write(0x15);<BR> ZLG7289_LongDelay();<BR> key=ZLG7289_SPI_Read();<BR> ZLG7289_CS1=1;<BR> ZLG7289_LongDelay();<BR> return key;<BR>}<BR>/*<BR>函数: ZLG7289_pincs()<BR>功能: 多片ZLG7289芯片的选择控制<BR>*/<BR>void ZLG7289_pincs(bit pincs)<BR>{ if(!pincs)<BR> {if (cs==1)<BR>ZLG7289_CS1=0;<BR> else if (cs==2)<BR>ZLG7289_CS2=0;<BR> else if (cs==3)<BR>ZLG7289_CS3=0;}<BR>else if (cs==1)<BR>ZLG7289_CS1=1;<BR> else if (cs==2)<BR>ZLG7289_CS2=1;<BR> else if (cs==3)<BR>ZLG7289_CS3=1;<BR>}<BR>/*<BR>函数: ZLG7289_init()<BR>功能: ZLG7289的初始化<BR>参数: t:SPI的延时初始值<BR>*/<BR>void ZLG7289_init(unsigned char t)<BR>{ unsigned char x,y,z;<BR>//I/O口的初始化<BR> ZLG7289_CS1 =1;<BR> ZLG7289_CS2 =1;<BR> ZLG7289_CS3 =1;<BR> ZLG7289_PINCLK=0;<BR> ZLG7289_PINDIO=1;<BR> ZLG7289_PININT=1;<BR>//延时时间初始化<BR> ZLG7289_delay_t=t;<BR>//自检程序,点亮所有的数码管<BR> for(z=0;z<16;z++)<BR>{<BR> for(y=1;y<4;y++)<BR>{<BR> for(x=0;x<8;x++)<BR>{<BR> ZLG7289_down(0,x,0,z,y);<BR>}<BR>}<BR> delay();<BR>}<BR><BR></P>
<LI><B>zlg7289.h [whitelie] <FONT
color=#d5d5d5>2005-12-20 20:58:27</FONT></B>
<P>/*--------------------------------------------------<BR> ZLG7289.H<BR><BR> 数码管显示与键盘管理芯片ZLG7289 的驱动程序头文件<BR>---------------------------------------------------*/<BR>#ifndef ZLG7289_H<BR>#define ZLG7289_H<BR><BR>#include <reg922.h><BR><BR>//定义I/O接口<BR>sbit ZLG7289_CS1 =P1^7; //片选信号,低电平有效<BR>sbit ZLG7289_CS2 =P1^6;<BR>sbit ZLG7289_CS3 =P0^3;<BR>sbit ZLG7289_PINCLK =P0^1; //时钟信号,上升沿有效<BR>sbit ZLG7289_PINDIO =P0^2; //数据信号,双向<BR>sbit ZLG7289_PININT =P1^4; //键盘中断请求信号,低电平(负边沿)有效<BR><BR>//ZLG7289纯指令函数<BR>extern void ZLG7289_cmd(char cmd);<BR> <BR><BR>//ZLG7289带数据指令函数<BR>extern void ZLG7289_cmd_dat(char cmd,char dat);<BR><BR>//ZLG7289的指令集<BR><BR><BR>//复位指令<BR>#define ZLG7289_reset() ZLG7289_cmd(0xA4)<BR><BR>//测试指令<BR>#define ZLG7289_test() ZLG7289_cmd(0xBF)<BR><BR>//左移指令<BR>#define ZLG7289_SHL() ZLG7289_cmd(0xA0)<BR><BR>//右移指令<BR>#define ZLG7289_SHR() ZLG7289_cmd(0xA1)<BR><BR>//循环左移指令<BR>#define ZLG7289_ROL() ZLG7289_cmd(0xA2)<BR><BR>//循环右移指令<BR>#define ZLG7289_ROR() ZLG7289_cmd(0xA3)<BR><BR><BR>//下载数据<BR>extern void ZLG7289_down(unsigned char mod,char x,bit dp,char dat,char a);<BR><BR><BR>//闪烁控制<BR>//x的8位对应数码管的8个位, 0-闪烁,1-不闪烁<BR>#define ZLG7289_flash(x) ZLG7289_cmd_dat(0x88,x)<BR><BR><BR>//消隐控制<BR>//x的8位对应数码管的8位 , 0-消隐,1-显示<BR>#define ZLG7289_hide(x) ZLG7289_cmd_dat(0x98,x)<BR><BR>//段点亮控制<BR>//seg0~63对应8只数码管的64只LED管<BR>//每只数码管的点亮顺序按照"g,f,e,d,c,b,a,dp"的顺序进行<BR>#define ZLG7289_seg(x) ZLG7289_cmd_dat(0xE0,x)<BR><BR>//段关闭指令<BR>//seg0~63对应8只数码管的64只LED管<BR>//每只数码管的关闭顺序按照"g,f,e,d,c,b,a,dp"的顺序进行<BR>#define ZLG7289_segoff(x) ZLG7289_cmd_dat(0xC0,x)<BR><BR>//ZLG7289的键盘指令<BR>extern unsigned char ZLG7289_key();<BR><BR>//ZLG7289多片选择指令<BR>extern void ZLG7289_pincs(bit pincs); <BR>//ZLG7289的初始化指令<BR>extern void ZLG7289_init(unsigned char 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">点击回主题参与讨论
>>></A><BR>_____________________________________________________________________________<BR>Copyright©,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 + -