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

📄 110500618_2.c

📁 16*16 LED dianzhen hanzi xianshi ,yong KEIL he PROTUES dakai.
💻 C
字号:
#include <reg52.h>

#define uchar unsigned char
#define uint  unsigned int

void dispup();
void dispdown();
void scanrow();
void scanlist();
void fullsrc();
void dispsingle();					   //定义各子程序

uchar code datcode[]={0x01,0x00,0x01,0x00,0x01,0x04,0x7F,0xFE,
					0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04,
					0x7F,0xFC,0x41,0x04,0x01,0x00,0x01,0x00,
					0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,    //中
						 0x00,0x04,0x7F,0xFE,0x40,0x24,0x5F,0xF4,
					0x41,0x04,0x41,0x04,0x41,0x44,0x4F,0xE4,
					0x41,0x04,0x41,0x44,0x41,0x24,0x41,0x04,
					0x5F,0xF4,0x40,0x04,0x7F,0xFC,0x40,0x04,	//国
						 0x02,0x00,0x02,0x00,0x04,0x00,0x08,0x20,
					0x10,0x10,0x20,0x08,0x7F,0xFC,0x00,0x04,
					0x00,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,
					0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,   //台
					 	0x40,0x44,0x3F,0xFE,0x10,0xA0,0x02,0xA8,
					0x86,0xA6,0x68,0xA2,0x27,0xF8,0x08,0x08,
					0x17,0xF8,0x24,0x00,0xE7,0xFC,0x20,0x04,
					0x20,0x04,0x20,0x44,0x20,0x28,0x20,0x10,    //湾
					};

uchar keyval;					//定义按键值
								//delay参数
uchar t;



sbit KEY = P0^0;				//按键接口

void delay(t)
{	uint i;
	for(i=0;i<t;i++);
}


void clrsrc()					//清屏
{
	P2 = 0xff;
	P3 = 0xff;
	delay(20);
}

void keydeal()					//按键处理
{	
	while(KEY==0)				//消除抖动
	;
	delay(50);
	keyval++;					//按价值加1
	if(keyval>5)
	  keyval = 0;
	switch(keyval)
	{
		case 0:dispup();	break;			//向上移
		case 1:scanrow();	break;			//行扫
		case 2:scanlist();	break;			//列扫
		case 3:fullsrc();	break;			//全屏
		case 4:dispdown();  break;			//向下移
		case 5:dispsingle();break;			//单字
	}
}

void dispup()								//向上移
{
	uchar i,k,j;
	while(keyval==0)
	{
    	for(k=0;k<=63;k++)				  //偏移量
			{
			   for(j=0;j<10;j++)		 //重复显示10次
			   {
				for(i=0;i<16;i++)		 //行扫描16次
				{  				
					P1 = i;			  
					P2 = ~datcode[(i*2+2*k)%128];	 //按偏移量取字模数据
					P3 = ~datcode[(i*2+1+2*k)%128];
					if(KEY == 0)
			  			keydeal();					//判断是否有按键动作
					if(keyval != 0)
		    			break;
					delay(50);
					clrsrc();
				 }
				 if(keyval != 0)
		    			break;
			    }
			if(keyval != 0)
		    	break;
			}
	if(keyval != 0)
		break;	
	}
} 

void dispdown()					   //向下移
{
	uchar i,k,j;
	while(keyval==4)				 
	{
	   	for(k=0;k<=63;k++)			 //偏移量
			{
			   for(j=0;j<10;j++)	  //重复显示
			   {
				for(i=0;i<16;i++)		//行扫描信号
				{  				
					P1 = i;			  
					P2 = ~datcode[(i*2+96-2*k)%128];		  //按偏移取字模数据
					P3 = ~datcode[(i*2+1+96-2*k)%128];
					if(KEY == 0)							//判断是否有按键
			  			keydeal();
					if(keyval != 4)
		    			break;
					delay(50);
					clrsrc();						 //清屏
				 }
				 if(keyval != 4)
		    			break;
			    }
			if(keyval != 4)
		    	break;
			}
	if(keyval != 4)
		break;
	}
} 

void scanrow()				 //行扫描
{
	uchar i;
	while(keyval == 1)
	{
	
		for(i=0;i<=15;i++)	   //行扫描信号
		{
			P1 = i;
			P2 = 0x00;
			P3 = 0x00;
			delay(10000);
			clrsrc();			 //清屏
			if(KEY==0)			 //判断按键
			  keydeal();
			if(keyval != 1)
		      break;
		}
	}
}

void scanlist()					//列扫描
{
	uchar i,j,k,r,x;
	while(keyval == 2)
	{
	  for(r=0;r<=1;r++)			 //判断P2或P3输出数据的参数
	  {	
		for(k=0;k<8;k++)		 //数据移位量
		{
		  x = ~(0x80>>k);		 //移位
		  for(i=0;i<25;i++)		 //重复显示
		  {	
			for(j=0;j<16;j++)	 //行扫描信号
			{
				P1 = j;
				switch(r)			//判断P2、P3输出状态
				{case 0:
						P2 = x;
						P3 = 0xff;
						delay(11);
						clrsrc();
						break;
				 case 1:
						P2 = 0xff;
						P3 = x;
						delay(11);
						clrsrc();
				}
				if(KEY==0)			  //判断按键
					keydeal();
				if(keyval != 2)
					break;
			}
			  if(keyval != 2)
			  		break;
		  }
			if(keyval != 2)
				break;
		}
		  if(keyval != 2)
			 break;
	  }
	}
}

void fullsrc()				 //全屏
{
	uchar i; 
	while(1)
	{
		for(i=0;i<16;i++)	   //行扫描信号
		{
			P1 = i;
			P2 = 0x00;
			P3 = 0x00;
			if(KEY == 0)		//判断按键
			  keydeal();
			if(keyval !=3)
		    break;

			delay(50);
			clrsrc();			 //清屏
		}
			if(keyval != 3)
			break;
	}
}

void dispsingle()				//单字显示
{
	uchar i,k,j;
	while(keyval==5)
	{
	   	for(k=0;k<=3;k++)		  //字数为4
		{
			for(j=0;j<45;j++)		//重复显示
			{
				for(i=0;i<16;i++)	  //行扫描信号
				{  				
					P1 = i;			  
					P2 = ~datcode[i*2+32*k];		 //取字模数据
					P3 = ~datcode[i*2+1+32*k];
					if(KEY == 0)					  //判断按键
			  			keydeal();
					if(keyval != 5)
		    			break;
					delay(50);
					clrsrc();						//清屏
				 }
				 if(keyval != 5)
		    			break;
			  }
			if(keyval != 5)
		    	break;
		}
	if(keyval != 5)
		break;	
	}
}

void main()
{ 
	keyval = 0;
	while(1)
	{
    dispup();
 	KEY = 1;
	if(KEY==0)
	keydeal();
	}
}

⌨️ 快捷键说明

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