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

📄 zsp.c

📁 LED点阵164驱动595驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
//#include <regx52.h>
#include <AT89x52.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define SPEED 1                      //定义速度
#define light 1                      //定义亮度
uint  hang;
uchar dat1;
//*****************************************************
//管脚定义:
//P3.0---列【R】。
//P3.1--列【CLK】。
sbit V_RCK = P3^2;//列【L-STR】行【H-CLK]。
sbit V_OER = P3^3;//列【OE】。【暂时不用】。
sbit H_SDA = P3^4;//行【H_R】。
sbit H_MR = P3^5;//行【H_MR】。

//P3.0---列【R】。
//P3.1--列【CLK】。
//*****************************************************
/*****************************************************
//屏接口和单片机端口连接
0 0------单片机+5V【加一根连接到电源5V】
0 0------空                            
0 0------地
0 0------P3.0---列【L-R】。                  
0 0------P3.1---列【L-CLK】。                         
0 0------P3^2---列【L-STR】。              
0 0------P3^3---行【H_R】。
0 0------P3^5---行【H_MR】。                  

****************************************************/


/*****************************************************
定义两个可位寻址的变量,用于对字模数据的顺序调整,
因为这块屏的连接没有按正常顺序,需对每位数据从新
编排,才能使用一般的字模工具产生的字模
*****************************************************/
uchar bdata temp0;
uchar bdata temp1;
sbit  temp00=temp0^0;
sbit  temp01=temp0^1;
sbit  temp02=temp0^2;
sbit  temp03=temp0^3;
sbit  temp04=temp0^4;
sbit  temp05=temp0^5;
sbit  temp06=temp0^6;
sbit  temp07=temp0^7;
sbit  temp10=temp1^0;
sbit  temp11=temp1^1;
sbit  temp12=temp1^2;
sbit  temp13=temp1^3;
sbit  temp14=temp1^4;
sbit  temp15=temp1^5;
sbit  temp16=temp1^6;
sbit  temp17=temp1^7;

uchar col,disrow;                    //col为位移变量,disrow为行变量
uint word;
uchar code HZ[];
uchar BUFF[10];
void loadoneline(void);
void delay(uchar t);
void sendoneline(void);
void send(uint k);
/********************************************/
uchar two_onebyte(uchar h1,uchar h2)
{uchar temp,tempcol;
 if(col<8) tempcol=col;
 else tempcol=col-8;
 temp=(h1<<tempcol)|(h2>>(8-tempcol));
 return temp;
}
/*******************************************************/
void main(void)
{uchar i;
 col=0;word=0;
 SCON  = 0x00;       //串口工作方式0
 V_RCK = 1;          //先拉低V_RCK///V_RCK = 0;
 
    
hang=0x0002;        //行选信号初始化
 while(1)
   {while(col<16)
      {for(i=0;i<SPEED;i++)
         {for(disrow=0;disrow<16;disrow++)
		    		{    loadoneline();	
                 		 sendoneline();
            
			
              		                         V_RCK = 0;         //锁存已发送的整一行的数据V_RCK = 1;
			  			 V_RCK = 1;
			  						  			
			 			 send(hang);         //发送行选择数据
			  		if(col<7)
                                         
						delay(light);            //延时			
						hang=_irol_(hang,1);//行选信号调整,选中下一行
                                               
					 		
				   }
               
	   	  } 
   	    col++; 
		
      }
    col=0;word=word+32;
    if(word>=1024)word=0;//字数*32
   }
}
/****************把字模移入数组的子函数********************/
void loadoneline(void)
{uchar s;
 for(s=0;s<5;s++)    
   {BUFF[2*s]=HZ[word+32*s+2*disrow];
    BUFF[2*s+1]=HZ[word+1+32*s+2*disrow];
   }
}
/*******************发送一行的子函数************************/
void sendoneline(void)
{char s;uchar inc;
 if(col<8)inc=0;else inc=1;
 for(s=0+inc;s<=7+inc;s++)  
 {temp0=two_onebyte(BUFF[s],BUFF[s+1]); //取出字模数据(数据地址为行基址i+偏移地址j)

    temp10=temp07;   //对字模数据进行顺序调整
    temp11=temp06;
    temp12=temp05;
    temp13=temp04;
    temp14=temp03;
    temp15=temp02;
    temp16=temp01;
    temp17=temp00;
    
	
   	SBUF=temp1;      //发送字模数据
    while(TI==0);    //等待发送完毕
	  TI=0;
	 }
}
/*******************************************************/
void send(uint k)
{uchar i;
  H_SDA=1; 
 H_MR=1;//行【H_MR】。 
 
 for(i=0;i<16;i++)   //一次发送16位数据
 {
  H_SDA = k&0x8000;  //发送最高位
  
  H_MR=1;//时钟信号产生一个脉冲来锁存数据  
  
  k=k<<1;            //左移一位
  }
}
 
/*******************************************************/
void delay(uchar t)
{ uchar i,j;
  for(j=0;j<t;j++)
   {for(i=0;i<10;i++);}
}

/*******************************************************/

⌨️ 快捷键说明

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