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

📄 8字左流动可调速显示.c

📁 单片机控制80*16LED屏!!现在只能左移屏!
💻 C
字号:
/*****************************************************
       16*128 LED点阵屏 C 程序
******************************************************
声明:
     本程序供大家学习之用,用勿用于商业用途。尊重版权。
	 
	 编写:邓椿薪
	 时间:2006年1月20日 晚
	 邮箱:love2151@xinhuanet.com
*******************************************************

//595连级输出数据,138行驱动。P0_1为移动速度高速/*点阵显示汉字程串口输出字符数据,
//P2口输出行扫描信号,P2_7输出595锁存信号。*/





#define uchar unsigned char
#define uint unsigned int

#include <reg51.h>
#include <codesub.h>

uchar yid,h,d=12;			   //YID为移动计数器,H为行段计数器。
uint zimuo,zimuo1;		           //字模计数器

uchar BUFF[18];			   //缓存
void in_data(void);			//调整数据
void rxd_data(void);		//发送数据

void in_data1(char h);		
void rxd_data1(void);		
void sbuf_out1(void);

void sendsw(uchar k);       //发送段代码
void sbuf_out(void);			//16段扫描
void key(void);
			    
sbit AN1=P3^4;
sbit AN2=P3^5;

sbit clk=P3^3;

unsigned  code sw[16]={0x7f,0x6f,0x5f,0x4f,0x3f,0x2f,0x1f,0x0f,0xf7,
                   0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0}; /*16行段码*/

/********************************************/
void main(void)
{ uchar i;
 zimuo1=sizeof(hanzi)-6*32;//(zishu+9)*32;
 yid=0;
 zimuo=0;							   
 while(1)
  {
	while(yid<100)				       //数据移位。
	{
		for(i=0;i<d;i++)			   //移动速度
		 {
		 sbuf_out1();key();
         }
		yid++;				//移动一步
	}
	
   yid=0;
   
 zimuo=zimuo+32*5;//zimuo+32;			    //后移一个字,

 if(zimuo>zimuo1)				//总数减7个字。
   zimuo=0;
  }

 
}


void sbuf_out1()
{
 char i;
  for(h=0;h<32;h++)
  {

   	in_data1(h);
   	clk=1;
   	rxd_data1();
  if(h>=16){i=h-16;}
  else i=h;
   sendsw(sw[i]);
    
  }
   
}

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


void in_data1(char h)
{
 char s,i;
    if(h>=16)
	{i=(h-16);

	for(s=5;s>=0;s--)			//h为向后先择字节计数器,zimuoo为向后先字计数器
		{
//		 if(zimuo%32)
		 BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*i];			 //把第一个字模的第一个字节放入BUFF1中,第二个字模和第一个字节放入BUFF3中
		 BUFF[2*s]=hanzi[zimuo+0+32*s+2*i];	    // 把第一个字模的第二个字节放入BUFF0中,第二个字模的第二个字节放入BUFF1中
		}
	}
	else
	{
	 i=h;
	for(s=5;s>=0;s--)			//h为向后先择字节计数器,zimuoo为向后先字计数器
		{
//	 	if(zimuo%32)
		 BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*i];			 //把第一个字模的第一个字节放入BUFF1中,第二个字模和第一个字节放入BUFF3中
		 BUFF[2*s]=hanzi[zimuo+0+32*s+2*i];	    // 把第一个字模的第二个字节放入BUFF0中,第二个字模的第二个字节放入BUFF1中
		}
	}
	
}

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


void rxd_data1(void)		            //串行发送数据
{
  char s;
  for(s=0;s<10;s++)			   //发送5字节数据
	{

	 SBUF=255-BUFF[s];//把BUFF中的字节从大到小移位相或后发送输出。
	 while(!TI);TI=0;					 //等待发送中断
	}
}


void sendsw(uchar k)
{	 
     TI=0;
	 SBUF=k;
		while(!TI);TI=0;
		clk=0;
			
}

void key(void)
{
 uchar a,b;
if(AN1==0)
	{
		for(a=0;a<10;a++)
			{for(b=0;b<14;b++){}}
		if(AN1==0)
		{while(AN1==0)
			{}
		 if(AN1)
			{d++;
			if(d>100)
				d=100;
			}
		}
	}
 if(AN2==0)
 	{for(a=0;a<10;a++)
			{for(b=0;b<14;b++){}}
	 if(AN2==0)
	 {while(AN2==0)
	 	{}
		if(AN2)
		{d--;
		 if(d==0)
		  d=1;
		  }
		}
		}
}



⌨️ 快捷键说明

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