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

📄 l5-5.c

📁 单片机C语言程序设计教程与实训源代码及图片 单片机C语言程序设计教程与实训源代码及图片
💻 C
字号:
/**********************************************************************
程序名称:L5-5.c
程序功能:用1块8×8共阳极LED点阵显示器显示西文字符及图形
程序作者:张三
创建时间:2008-3-28
**********************************************************************/
#include<reg51.h>
#define blkn 2			// 一列数据由两块8×8的LED点阵显示器显示 
sbit EN74154 = P1^7;		// 74154片选线					 
sbit ST_CP74595 = P1^6;		// 74595内部输出(从移位寄存器到输出锁存器)控制				 
sbit CLEAR74595 = P1^5;		// 74595移位寄存器清零					 
unsigned char data DDRAM[32]; 	// 显示数据缓冲数组
unsigned char code SJM[][32]={
	{	0x00, 0x20, 0x30, 0x20, 0x20, 0x20, 0xAA, 0x50,	// 零, 0
		0xAA, 0x50, 0xAA, 0x90, 0xA1, 0x54, 0xFE, 0x33,
	 	0xA1, 0x14, 0xAA, 0x98, 0xAA, 0x90, 0xAA, 0x40,
		0xA0, 0x60, 0x30, 0x40, 0x20, 0x40, 0x00, 0x00		},

	{	0x00, 0x04, 0x40, 0x04, 0x41, 0x04, 0x41, 0x04,	// 五, 1
		0x41, 0x04, 0x41, 0xFC, 0x7F, 0x04, 0x41, 0x04,
	 	0x41, 0x04, 0x41, 0x04, 0x43, 0xFC, 0x41, 0x04,
		0x40, 0x04, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x00		},

	{	0x08, 0x00, 0x28, 0x80, 0xC8, 0x80, 0x49, 0x00,	// 智, 2
		0x7E, 0xFF, 0x4C, 0x92, 0x4A, 0x92, 0x49, 0x92,
	 	0x00, 0x92, 0x3E, 0x92, 0x22, 0x92, 0x22, 0xFF,
		0x22, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00		},

	{	0x08, 0x00, 0x1D, 0xFF, 0xE9, 0x50, 0x49, 0x50,	// 能, 3
		0x09, 0x52, 0x29, 0x51, 0x1D, 0xFE, 0x08, 0x00,
	 	0x00, 0x00, 0xFE, 0xFC, 0x12, 0x22, 0x12, 0x22,
		0x22, 0x42, 0x2E, 0x4E, 0x04, 0x04, 0x00, 0x00		},

	{	0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x12, 0x20,	// 电, 4
		0x12, 0x20, 0x12, 0x20, 0x12, 0x20, 0xFF, 0xFC,
	 	0x12, 0x22, 0x12, 0x22, 0x12, 0x22, 0x12, 0x22,
		0x1F, 0xF2, 0x00, 0x02, 0x00, 0x0E, 0x00, 0x00		},

	{	0x00, 0x80, 0x00, 0x80, 0x40, 0x80, 0x40, 0x80,	// 子, 5
		0x40, 0x80, 0x40, 0x82, 0x40, 0x81, 0x47, 0xFE,
	 	0x48, 0x80, 0x50, 0x80, 0x60, 0x80, 0x40, 0x80,
		0x00, 0x80, 0x01, 0x80, 0x00, 0x80, 0x00, 0x00		},

	{	0x42, 0x08, 0x42, 0x08, 0x7F, 0xF0, 0x42, 0x11,	// 班, 6
		0x42, 0x92, 0x07, 0x04, 0x00, 0x18, 0xFF, 0xE0,
	 	0x00, 0x04, 0x42, 0x04, 0x42, 0x04, 0x7F, 0xFC,
		0x42, 0x04, 0x42, 0x04, 0x42, 0x04, 0x00, 0x00		},

	{	0x01, 0x00, 0x01, 0x02, 0x01, 0x04, 0x01, 0x08,	// 是, 7
		0x7D, 0x70, 0x55, 0x08, 0x55, 0x04, 0x55, 0xFC,
	 	0x55, 0x22, 0x55, 0x22, 0x55, 0x22, 0x7D, 0x22,
		0x01, 0x22, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00		},

	{	0x02, 0x04, 0x02, 0x04, 0x03, 0xFC, 0xFA, 0xA8,	// 最, 8
		0xAA, 0xA8, 0xAA, 0xA8, 0xAB, 0xFF, 0xAA, 0x12,
	 	0xAA, 0xC4, 0xAA, 0xA8, 0xAA, 0x90, 0xFA, 0xA8,
		0x02, 0xC4, 0x02, 0x86, 0x02, 0x04, 0x00, 0x00		},

	{	0x08, 0xC0, 0x0B, 0x00, 0xFF, 0xFF, 0x0A, 0x00,	// 棒, 9
		0x09, 0x40, 0x22, 0x50, 0x2A, 0x90, 0x2B, 0x50,
	 	0x2E, 0x50, 0xFA, 0xFF, 0x2B, 0x50, 0x2A, 0xD0,
		0x2A, 0x90, 0x22, 0x50, 0x02, 0x40, 0x00, 0x00		},

	{	0x00, 0x00, 0x1F, 0xFE, 0x31, 0x08, 0xD1, 0x08,	// 的, 10
		0x11, 0x08, 0x1F, 0xFC, 0x02, 0x00, 0x0C, 0x00,
	 	0xF1, 0x00, 0x10, 0xC0, 0x10, 0x64, 0x10, 0x02,
		0x10, 0x04, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00		},

	{	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFA,	// !, 11
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00		},

	{	0x07, 0xE0, 0x1F, 0xF8, 0x28, 0x0C, 0x6C, 0x04,	// 笑脸, 12
		0xEC, 0x22, 0xEC, 0x12, 0xC8, 0x0B, 0xC1, 0x89,
	 	0xC1, 0x89, 0xC8, 0x0B, 0xEC, 0x12, 0xEC, 0x22,
		0x6C, 0x04, 0x28, 0x0C, 0x1F, 0xF8, 0x07, 0xE0		}
};

void delay( unsigned int );	// 延时函数声明 

/**********************************************************************
函数名称:main( void )
函数功能:主函数,显示“笑脸”图形及汉字“零五智能电子班是最棒的!”
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void main( void )
{
	register unsigned char i, j, k, l;

	SCON=0x00;	// 串行口以方式0工作,用作同步移位寄存器,波特率为fosc/12,禁止接收
	TMOD=0x01;	// 定时器T0以方式1工作,由TR0控制启停
   	TH0 = 0xF8;	// 计数初值,定时2ms
   	TL0 = 0x30;		
	IE=0x82;	// 允许T0申请中断 			
	TR0=1;		// 启动定时器T0

	P1=0x3F;	// EN74154=0,ST_CP74595=0,CLEAR74595=1
	while(1){

 		delay( 1000 );
		for( i=0; i<32; i++ ){				
			for( j=0; j<13; j++ ){
  				DDRAM[i] = SJM[j][i];
				if( i%2 )  delay( 10 );
  			}
		}

  		delay( 1000 );
  		for( i=0; i<13; i++) {			 
     		for( j=0; j<16; j++ ){
        		for( k=0; k<15; k++ ){
				DDRAM[k*blkn] = DDRAM[(k+1)*blkn];
				DDRAM[k*blkn+1] = DDRAM[(k+1)*blkn+1];
       			}
			DDRAM[30] = SJM[i][j*blkn];
			DDRAM[31] = SJM[i][j*blkn+1];
			delay( 100 );
		}
		}

		delay( 3000 );
		for( i=0; i<13; i++ ){			 
			for( j=0; j<2; j++ ){
   				for( k=1; k<9; k++ ){
       				for( l=0; l<16; l++ ){
					DDRAM[l * blkn] = DDRAM[l * blkn] << 1 | 
								DDRAM[l * blkn+1] >> 7;
					DDRAM[l*blkn+1] = DDRAM[l * blkn+1] << 1 | 
								SJM[i][l*blkn+j] >> (8-k);
					}
				delay( 100 );
				}
			}
		}

		delay( 3000 );
		for( i=0; i<32; i++ ){			 	
  			DDRAM[i] = 0x00;
  			if( i%2 ) 	delay( 100 );
		}
	}
}
/**********************************************************************
函数名称:delay( unsigned int dt )
函数功能:延时函数,dt×250 
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void delay( unsigned int dt )
{
 	register unsigned char bt;
 	for( ; dt; dt-- )
   		for ( bt=0; bt<250; bt++ )  ;
}
/**********************************************************************
函数名称:TIME0( void ) interrupt 1 using 1
函数功能:T0中断服务函数
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void TIME0( void ) interrupt 1 using 1
{
   	register unsigned char i, j=blkn;
   	TH0 = 0xF8;				// 重装计数初值
   	TL0 = 0x30;
   	i = P1;					// 读P1口
   	i = ++i & 0x0f;		 
   	do{
   		j--;
   		SBUF = DDRAM[ i*blkn+j ];	// 开始发送数据
   		while( !TI )  ; 		// 等待发送结束	
		TI = 0;				// 清发送中断标志位 
   	}while( j );
   	EN74154 = 1;				// 禁止行数据输出
   	P1 &= 0xf0;						
   	ST_CP74595 = 1;				// 允许列数据输出
   	P1 |= i;							 
   	ST_CP74595 = 0;				// 禁止列数据输出
   	EN74154 = 0;				// 允许行数据输出
}

⌨️ 快捷键说明

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