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

📄 led.c

📁 使用keil开发的用于单片机AT89S52的4汉字16*16点阵显示电路
💻 C
字号:

#include<reg52.h>
#include<math.h>

#define uchar unsigned char
	uchar code tmp[]=
	 {
/*--  文字:  电  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xC0,0x07,0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,
0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,0xFE,0xFD,0xFE,0xFD,0xFF,0x01,0xFF,0xFF,

/*--  文字:  子  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFF,0xFF,0xC0,0x0F,0xFF,0xDF,0xFF,0xBF,0xFF,0x7F,0xFE,0xFF,0xFE,0xFF,0xFE,0xFB,
0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFA,0xFF,0xFD,0xFF,

/*--  文字:  科  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF9,0xF7,0x87,0x77,0xF7,0xB7,0xF7,0xB7,0x01,0xF7,0xE7,0x77,0xE3,0xB7,0xD5,0xB7,
0xD7,0xF1,0xB7,0x87,0x74,0x77,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,

/*--  文字:  大  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFD,0x7F,
0xFD,0x7F,0xFD,0xBF,0xFB,0xBF,0xFB,0xDF,0xF7,0xEF,0xEF,0xE7,0xDF,0xF1,0xBF,0xFB,
/*--  文字:  欢  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFF,0x7F,0xFF,0x7F,0x03,0x7F,0xFA,0x01,0x7A,0xFB,0xB5,0xB7,0xD7,0xBF,0xEF,0xBF,
0xE7,0xBF,0xE7,0x9F,0xDB,0x5F,0xDB,0x6F,0xBE,0xE7,0x79,0xF1,0xC7,0xFB,0xFF,0xFF,

/*--  文字:  迎  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xBF,0xFF,0xDE,0x7F,0xC9,0x83,0xDB,0xBB,0xFB,0xBB,0xFB,0xBB,0x1B,0xBB,0xDB,0xBB,
0xDA,0xBB,0xD9,0xAB,0xDB,0xB7,0xDF,0xBF,0xDF,0xBF,0xAF,0xFF,0x70,0x01,0xFF,0xFF,

/*--  文字:  你  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xF6,0xFF,0xF6,0x7F,0xEE,0xFB,0xEC,0x01,0xDD,0xFB,0xCB,0xB7,0x97,0xBF,0x5D,0xAF,
0xDC,0xB7,0xDD,0xB7,0xDB,0xBB,0xDB,0xB9,0xD7,0xBB,0xDE,0xBF,0xDF,0x7F,0xFF,0xFF	 ,

/*--  文字:  噢  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0xFF,0x7F,0xFE,0xFF,0x08,0x03,0x69,0xB3,0x6A,0xAB,0x68,0x03,0x6B,0x1B,0x6A,0xAB,
0x69,0xAB,0x0B,0xBB,0x60,0x01,0xFF,0x5F,0xFE,0xEF,0xFD,0xF7,0xFB,0xF9,0xF7,0xFB

	};


	uchar bdata buff[8];	
	sbit  SHCLK =  P3^7;
	sbit  STCLK= P3^6;
	sbit SERIN  = P3^5;	
	sbit EN154 = P2^7;

	void display(uchar line);
	void trans(void);
	void delay(void);
	
void main(void)
{	
	trans();
}

void trans(void)
{	
	uchar data line2,line;
	unsigned int data m1,m2,j;
	unsigned int data size =  sizeof(tmp) - 31;
	unsigned int data i = 1;
	unsigned int k = 0;
	signed char num ;
//数据宽度的大小很重要,这里i的宽度就可能影响程序的执行

	while ( k++ < sizeof(tmp))
	{
		for(line = 0; line < 16; ++line )
		{	num = i/8;
			line2 = 2 * line;
			if(num < 8)
		 		buff[num] = ((tmp[line2]>> ((num + 1) * 8 - i)) | buff[num]) ;
			for(--num,j=0; num >= 0 ; --num,++j)
			{
				if (num >= 8) {	j = (num - 7); num =7;	} 
				m1 = (j/2)*30 + j; 
				m2 = ((j+1) / 2) * 30 +(j+1);	
				if(m2 > size )  	m2 -= sizeof(tmp) ;	
				if(m1 > size )  	m1 -= sizeof(tmp) ;
		 		buff[num] = (tmp[line2+m1] << (i-(num+j)*8-8) | tmp[line2+m2]>>((num+j)*8-i+16)); 
			}
		display(16-line);
		for(num = 8; num != 0; --num)   buff[num-1] = 0xff;
		}
		if(i > (sizeof(tmp) + 63))  i = 0x40;
		++i;	
	}

}

 				
void display(uchar line)
{
	uchar i = 8;
	uchar j = 0; 	
	EN154 = 1;
	STCLK = 0;

   for(i = 8; i!=0; --i)
   {
	ACC = buff[i-1];
	#pragma asm
		MOV R1,#8
		PUSHONE:
			CLR P3.7
			RLC A
			MOV P3.5, C
			SETB P3.7
			DJNZ 	R1,PUSHONE
	#pragma endasm
	}

	STCLK = 1;

	P2 = (16-line) * 8 ;			   
}





	
/*
void display(uchar line)
{
	uchar i = 8;	
	EN154 = 1;
	STCLK = 0;
	B = line;
	ACC = buff;
	do{	 
		 ACC = buff[i-1];

	 	 #pragma asm
	   	 	MOV R1,#8
		 PUSHONE:
		 	CLR P3.7
		 	RLC A
			 MOV P3.5, C
		 	SETB P3.7
		 DJNZ 	R1,PUSHONE
	  #pragma endasm
		 --i;
	 }while(i != 0)	 ;

	#pragma asm
	 SETB P3.6
	 MOV  A,#16
	 CLR C
	 SUBB A,B
	 RLC A
	 RLC A
	 RLC A
	 MOV P2,A
	#pragma endasm			   
}			 */

⌨️ 快捷键说明

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