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

📄 zq9712驱动测试程序.c

📁 ZQ9712与SC16722的驱动程序
💻 C
字号:

/*晶振22.1184M,AT89S52*/
/*包含的库文件*/
#pragma small
#pragma CODE DEBUG SYMBOLS OBJECTEXTEND
//#include "..\includes\TypeDef.h"
#include <reg52.h>
#include <stdio.h>
#include <math.h>
#define  uchar  unsigned  char
#define  ulint  unsigned  long int
#define  uint   unsigned  int
/***********************************************/
 //uchar code color_data[8]={7,6,5,3,4,2,1,0};//黑,红,绿,蓝,黄,紫,青,白//阳码
 uchar code color_data[8]={0,4,2,1,6,5,3,7};//黑,红,绿,蓝,黄,紫,青,白//阳码
/***************************************************/
			  /*定义颜色控制端口*/
sbit   DIN_ZQ9712=P1^3;/*蓝线 ZQ9712的数据输入*/
sbit   CKIN_ZQ9712=P1^2;/*绿线  ZQ9712的时钟*/
sbit   LIN_ZQ9712=P1^1;/*红线  ZQ9712的数据锁存*/
sbit   OEIN_ZQ9712=P1^0;/*黄线  ZQ9712的数据使能*/
uchar te=1;
 /*********************延时函数*************
函数原型:void dely(ulint timepara);
功    能:延时等待,参数timepara为延时时间*/
void delay(ulint timepara)
{ulint mpara;
 	mpara=0;
 	do
    {
	mpara=mpara+1;
 	}
 	while (mpara!=timepara);
}
/*********************延时函数*************
函数原型:void dely(ulint timepara);
功    能:延时等待,参数timepara为延时时间*/
void delays(ulint timepara)
{ulint i;
 	for(i=0;i<timepara;i++)
	{delay(207);//22.1184M ---207---0.005S=5ms 
	}
}

sbit   DQX=P2^3;
sbit   CLKX=P2^2;
sbit   STBX=P2^1;
sbit   ENX=P2^0;

sbit   dig1=P0^3;
sbit   dig2=P0^2;
sbit   dig3=P0^1;
sbit   dig4=P0^0;
uchar code xian_data[13]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C};
/***************************************************/
/*函数原型:void stb_data(void);
功    能:锁存有效*/
void stbx_data(void)
{   STBX=0;
	STBX=1;
    delay(5);
	STBX=0;
	delay(5);
}
/*********************向由低位到高位发送一个像素的数据函数*************
函数原型:send_byte_lsbtomsb(uint8 bt);
功    能:向发送一个像素,参数bt为要发送的数据*/
void sendx( uchar bt1)
{    uint i;
    for(i=0;i<8;i++)
	 {CLKX = 0;//将时钟线置低
	  DQX =(bt1 & 0x01)?1:0;//判断当前位为1还是为0;当为1时将数据线置高;当为0时将数据线置低;
	  CLKX = 1;//将时钟线置高
	  bt1>>=1;//将当前数据右移一位,准备与0x01进行比较
     }
}
void ledK(int n)    //数码管显示及数据处理程序 
{   sendx(xian_data[n]);
    stbx_data();
    ENX=0;
   dig1=0;dig2=0;dig3=0;dig4=1;
 }


/*********************ZQ9712数据锁存函数*************
函数原型:void stb_data_ZQ9712(void);
功    能:ZQ9712数据锁存*/
void stb_data_ZQ9712(void)
{   uchar i;
	LIN_ZQ9712=1;
    for(i=0;i<2;i++);
	LIN_ZQ9712=0;
}
/*********************向由低位到高位ZQ9712发送一个像素的数据函数*************
函数原型:send_byte_lsbtomsb(uint8 bt);
功    能:向ZQ9712发送一个像素,参数bt为要发送的数据*/
void send_3bit_lsbtomsb( uchar bt1,det)
{     uint i;
	 CKIN_ZQ9712 = 0;//将时钟线置低
	 //bt1=7-bt1;
    for(i=0;i<3;i++)
	 { 
		 DIN_ZQ9712 =(bt1 & 0x01)?1:0;//判断当前位为1还是为0;当为1时将数据线置高;当为0时将数据线置低;
	     CKIN_ZQ9712 = 1;//将时钟线置高
         CKIN_ZQ9712 = 0;//将时钟线置低
	     bt1>>=1;//将当前数据右移一位,准备与0x01进行比较
     }
	if(det==1) 
	{OEIN_ZQ9712=1;
	OEIN_ZQ9712=0;}
}
/*********************向ZQ9712发送N个某像素的函数*************
函数原型:void send_n_byte(n,bt);
功    能:向ZQ9712发送n个bt字节*/
void send_n_3bit(register uint k,uchar bt1,det)
{ 
 while(k!=0) 
  {
   send_3bit_lsbtomsb(bt1,det);
   k--;
  }
}

//ZQ9712颜色跳变函数
//i是当前颜色的地址
//num有多少个像素点
tiaobian(uchar i,num,det)
{
 send_n_3bit(num,color_data[i],1);
 stb_data_ZQ9712();
if(det) delays(500);

}
liushui(uchar i,j,num)
{uchar k;
for(k=1;k<num+1;k++)
  {
   send_n_3bit(k,color_data[i],1);
   send_n_3bit(num-k,color_data[j],1);
   stb_data_ZQ9712();
   delays(100);
  }
}

/*******************************************渐变程序开始*************************************/
uchar Gradation_Counter =0;//定义当前灰度计数器
#define Gradation_level 16//定义灰度级
uchar Gradation_level_Counter =0;//定义灰度级计数器
#define  Gradation_level_time_Constant  1000//每一级灰度的显示时间常数
ulint Gradation_level_time =0;//每一级灰度的显示时间计数器
bit Process_mark =0;//	(最亮-最暗)与(最暗-最亮)两过程判断标志
bit Cycle_mark =1;//为0时表示经历了(最亮-最暗)到(最暗-最亮)的过程了
jianbian_camp()
{ 	Gradation_level_Counter++;
	if(Gradation_level_Counter==0xff)Gradation_level_Counter=0;
	Gradation_level_time++;
	if (Gradation_level_time==Gradation_level_time_Constant)
		{
			if(Process_mark==0)//最暗-最亮
				{
					Gradation_Counter++;
					if(Gradation_Counter==Gradation_level)Process_mark=1;
				}
			else	//最亮-最暗
				{
					Gradation_Counter--;
					if(Gradation_Counter==1)
						{
						 	Process_mark=0;
						 	Cycle_mark=0;
						}
	  			}
     		Gradation_level_time=0; 
   		}
	if(Gradation_level_Counter<Gradation_Counter) OEIN_ZQ9712=0; else  OEIN_ZQ9712=1;
}
jianbian()
{uchar i=0;
Cycle_mark=0;
while(1)
  {
	if(Cycle_mark==0)
		{
			ET0=0;
			i++;
			if((i==8)) break;
		//	if((i==8)||(te==0)) break;
			send_n_3bit(3,color_data[i],0);
			 stb_data_ZQ9712();
			Cycle_mark=1;
		}
 	  //if(te==0) break;
	  jianbian_camp();   
  }
}
uchar  code composecolor_data2[4][3]={
						      		 {4,4,4},	      //红		 
									 {6,6,6},       
									 {3,3,3},
									 {2,2,2},
									 }; 
uchar  code composecolor_data3[5][2]={
						      		 {4,4},	      //红		 
									 {1,1},       
									 {5,5},
									 {2,2},
				  		             {6,6},
									 }; 
uchar  length=2;   //       颜色数组 的列数
uchar  width=5;	   //		颜色数组 的行数
uint list=80;           //一行有多少个像素;
/******************************方案一***************************/
   //  N组多色彩追逐流水,颜色组合通过改变数组来实现
/****************************************************************/
void liushui_composecolor(uchar *p)
{  
    uint i,j,k; 
	uchar *m;
	m=p;
for(k=0;k<list;k++)
 {if(te==1)
	{
  for(i=0;i<width;i++)
   {if(te==1)
	     {
 	 for(j=0;j<5;j++)
	  { if(te==1)
	     {
	      p=m+i*length+j%length;
	   	  send_n_3bit(1,*p,1);
          stb_data_ZQ9712();
          delays(10);
		  //liangdu(levoe,500,2);
		 }else break;
      }}else break;
    }}else break;
 }
}

/****主程序*******************/
void  main(void)
{uchar *p,i;
	//OEIN_ZQ9712=0;//使能ZQ9712
   OEIN_ZQ9712=1;
   //OEIN_ZQ9712=0;
	tiaobian(0,3,0);
	while(1)
		{   i=0;
		    i++;
		    ledK(i);
		    length=2;
	        width=5;
	        p=&composecolor_data3[0][0];  
            //liushui_composecolor(p); 
			i++;
		    ledK(i);
	    	tiaobian(1,3,1);
			i++;
		    ledK(i);
			tiaobian(2,3,1);
			i++;
		    ledK(i);
			tiaobian(3,3,1);
			i++;
		    ledK(i);
			tiaobian(4,3,1);
			i++;
		    ledK(i);
			tiaobian(5,3,1);
			i++;
		    ledK(i);
			tiaobian(6,3,1);
			i++;
		    ledK(i);
			tiaobian(7,3,1);
			/*i++;
		    ledK(i);
			tiaobian(0,3,1);
			i++;
		    ledK(i);
			liushui(0,1,3);
			i++;
		    ledK(i);
			liushui(0,2,3);
			i++;
		    ledK(i);
			liushui(0,3,3);
			i++;
		    ledK(i);
			liushui(0,4,3);
			i++;
		    ledK(i);
			liushui(0,5,3);
			i++;
		    ledK(i);
			liushui(0,6,3);
			i++;
		    ledK(i);
			liushui(0,7,3);
			i++;
		    ledK(i);
			liushui(1,0,3);
			i++;
		    ledK(i);
			liushui(2,0,3);
			i++;
		    ledK(i);
			liushui(3,0,3);
			i++;
		    ledK(i);
			liushui(4,0,3);
			i++;
		    ledK(i);
			liushui(5,0,3);
			i++;
		    ledK(i);
			liushui(6,0,3);
			i++;
		    ledK(i);
			liushui(7,0,3);
			i++;
		    ledK(i);
			jianbian();
			i++;
		    ledK(i);*/
  		}
}

⌨️ 快捷键说明

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