|

楼主 |
发表于 2006-1-1 10:54:56
|
显示全部楼层
< >再发另外一个转载的程序:</P>
< >#include "led_ascii.h"<BR><BR>#define no_op 0x00<BR>#define digit0 0x01<BR>#define digit1 0x02<BR>#define digit2 0x03<BR>#define digit3 0x04<BR>#define digit4 0x05<BR>#define digit5 0x06<BR>#define digit6 0x07<BR>#define digit7 0x08<BR>#define decodemode 0x09<BR>#define intensity 0x0a<BR>#define scanlimit 0x0b<BR>#define shutdown 0x0c<BR>#define displaytest 0x0f <BR>sfr p3=0xb0;<BR>sbit din=p3^7;<BR>sbit load=p3^6;<BR>sbit clk=p3^5;<BR>//uc code led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};<BR>//ASCII字符显示数据;<BR><BR>extern void delay100ms(void);<BR><BR>//uc p[8]={0x00};<BR>/*void delay(void)<BR>{<BR> uc i;<BR> ui j;<BR> j=1500;<BR> while(j--)<BR> {<BR> for(i=0;i<125;i++)<BR> {;}<BR> }<BR>}<BR>*/<BR>/*---------------------------------------<BR>向MAX7219发送一个字节;<BR>---------------------------------------*/<BR>void shift8(uc d)<BR>{<BR> uc i,j;<BR> j=0x80;<BR> load=0;<BR> for(i=0;i<8;i++)<BR> {<BR> clk=0;<BR> if((d&j)!=0)<BR> din=1;<BR> else<BR> din=0; <BR> clk=1;<BR> j>>=1;<BR> }<BR>}<BR>/*---------------------------------------<BR>向MAX7219发送一个显示数据d,显示在addr行/列;<BR>---------------------------------------*/<BR>void load16(uc addr,uc d)<BR>{<BR> <BR> shift8(addr);<BR> shift8(d);<BR> clk=0;<BR> load=1;<BR>}<BR>/*---------------------------------------<BR>向MAX7219发送8个字节;即一屏数据;<BR>---------------------------------------*/<BR>void disp_MAX7219(uc idata *p)<BR>{<BR> uc idata i;<BR> for(i=digit0;i<0x09;i++)<BR> {<BR> load16(i,*p++);<BR> }<BR>}<BR>/*---------------------------------------<BR>向MAX7219发送8个字节,以显示一个ASCII码;<BR>---------------------------------------*/<BR>void disp_MAX7219_ascii(uc code *p)<BR>{<BR> uc idata i;<BR> for(i=digit0;i<0x09;i++)<BR> {<BR> load16(i,*p++);<BR> }<BR>}<BR>/*---------------------------------------<BR>显示ASCII字符<BR>---------------------------------------*/<BR><BR>Disp_ascii(uc ch)<BR>{<BR> ui i;<BR> i=ch;<BR> i-=0x20;<BR> i*=8;<BR> disp_MAX7219_ascii(&led);<BR>}<BR>/*---------------------------------------<BR>清屏<BR>---------------------------------------*/<BR><BR>void clear(void)<BR>{<BR> uc i,j;<BR> j=0x01;<BR> for(i=0;i<8;i++,j++)<BR> load16(j,0x00);<BR>} <BR>/*---------------------------------------<BR>初始化MAX7219,并清屏<BR>---------------------------------------*/<BR><BR>void Init_MAX7219(void)<BR>{<BR> load16(decodemode,0x00); //设置无解码方式<BR> load16(intensity,0x09); //设置亮度为10/16<BR> load16(scanlimit,0x07); //8段全扫描<BR> load16(shutdown,0x01); //设置开寄存器<BR> load16(displaytest,0x01);<BR> delay100ms();<BR> delay100ms();<BR> load16(displaytest,0x00);<BR> clear();<BR>}<BR><BR>/*---------------------------------------<BR>演示程序;全屏显示后,一点一点的依次显示;一直循环下去<BR>---------------------------------------*/<BR><BR>/*<BR>void main(void)<BR>{<BR> uc i,j,k;<BR> ini();<BR> while(1)<BR> {<BR> for(j=digit0,k=0;j<decodemode;j++,k++)<BR> { <BR> for(i=0;i<8;i++)<BR> {<BR> p[k]=led|p[k];<BR> load16(j,p[k]);<BR> delay();<BR> }<BR> }<BR> clear();<BR> for(i=0;i<8;i++)<BR> p=0;<BR> }<BR>}<BR>*/ <BR></P> |
|