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

📄 l5-3.c

📁 单片机C语言程序设计教程与实训源代码及图片 单片机C语言程序设计教程与实训源代码及图片
💻 C
字号:
/**********************************************************************
程序名称:L5-3.c
程序功能:用8×8共阳极LED点阵显示器显示5×7点阵的英文字母及阿拉伯数字
程序作者:张三
创建时间:2008-3-28
**********************************************************************/
#include<reg51.h>					 
sbit EN74138 = P1^7;		// 74138片选线					 
sbit ST_CP74595 = P1^6;		// 74595内部输出(从移位寄存器到输出锁存器)控制				 
sbit CLEAR74595 = P1^5;		// 74595移位寄存器清零
unsigned char code SJM[ ][8]={	
	{	0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00, 0x00, 0x00	},	// 0
	{	0x11, 0x21, 0x7F, 0x01, 0x01, 0x00, 0x00, 0x00	},	// 1
	{ 	0x23, 0x45, 0x49, 0x51, 0x21, 0x00, 0x00, 0x00	},	// 2
	{	0x22, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00, 0x00	},	// 3
	{	0x0c, 0x14, 0x24, 0x7f, 0x04, 0x00, 0x00, 0x00	},	// 4
	{	0x7a, 0x49, 0x49, 0x49, 0x4e, 0x00, 0x00, 0x00	},	// 5
	{	0x7f, 0x49, 0x49, 0x49, 0x4f, 0x00, 0x00, 0x00	},	// 6
	{	0x20, 0x40, 0x40, 0x40, 0x7f, 0x00, 0x00, 0x00	},	// 7
	{	0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00, 0x00	},	// 8
	{	0x79, 0x49, 0x49, 0x49, 0x7f, 0x00, 0x00, 0x00	},	// 9
	{	0x1f, 0x24, 0x44, 0x24, 0x1f, 0x00, 0x00, 0x00	},	// A
	{	0x7f, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00, 0x00	},	// B
	{ 	0x3e, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00, 0x00	},	// C
	{	0x41, 0x7f, 0x41, 0x41, 0x3e, 0x00, 0x00, 0x00	},	// D
	{	0x7f, 0x49, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00	},	// E
	{	0x7f, 0x48, 0x48, 0x48, 0x48, 0x00, 0x00, 0x00	}	// F
};
unsigned char data DDRAM[8]; 	// 显示数据缓冲数组
/**********************************************************************
函数名称: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++ )  ;
}
/**********************************************************************
函数名称:main( void )
函数功能:主函数,依次显示数字0~9、英文字母A~F
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void main(void)
{
	register unsigned char i, j;
	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( j=0; j<16; j++ ){			// 共有16组数据
			for( i=0; i<8; i++ ){		// 每组有8个数
  				DDRAM[i] = SJM[j][i];
				if( i%7 )  delay( 10 );	// 读一组数据后延时
  			}
  			delay( 3000 );			// 字符显示切换时间
		}
	}
}
/**********************************************************************
函数名称:TIME0( void ) interrupt 1 using 1
函数功能:T0中断服务函数
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void TIME0( void ) interrupt 1 using 1
{
   	register unsigned char i;	
   	TH0 = 0xF8;			// 重装计数初值
   	TL0 = 0x30;
   	i = P1;				// 读P1口
   	i = ++i & 0x07;		 

  	SBUF = DDRAM[ i];		// 开始发送数据
   	while( !TI )  ; 		// 等待发送结束	
	TI = 0;				// 清发送中断标志位 

   	EN74138 = 1;			// 禁止行数据输出
   	P1 &= 0xf0;					
   	ST_CP74595 = 1;			// 允许列数据输出
   	P1 |= i;						
   	ST_CP74595 = 0;			// 禁止列数据输出
   	EN74138 = 0;			// 允许行数据输出
}

⌨️ 快捷键说明

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