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

📄 l5-8.c

📁 单片机C语言程序设计教程与实训源代码及图片 单片机C语言程序设计教程与实训源代码及图片
💻 C
字号:
/**********************************************************************
程序名称:L5-8.c
程序功能:用线性非编码键盘控制发光二极管的状态
程序作者:张三
创建时间:2008-3-28
**********************************************************************/
#include <reg51.h>

unsigned int time = 50;			// 时间间隔50ms

void delayXms( unsigned int x );	// 延时xms函数
void keypad( );				// 键盘扫描及按键处理
void K1( unsigned int x );		// 以时间间隔x依次点亮D1~D8
void K2( unsigned int y );		// 以时间间隔y依次点亮D8~D1
void K3( unsigned int y );		// 以时间间隔y闪烁
/**********************************************************************
函数名称:void main( )
函数功能:主函数,完成题目要求的功能
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void main( )
{
	P1 = 0x00;			// 开机D1~D8全亮
	while( 1 ) keypad( );
}
/**********************************************************************
函数名称:void delayXms( unsigned char x )
函数功能:延时xms,振荡器频率fOSC为12MHz
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void delayXms( unsigned int x )
{
	unsigned int y,z;
	for( ; x>0; x-- )
		for( y=4; y>0; y-- )
			for( z=250; z>0; z--);
}
/**********************************************************************
函数名称:void keypad( )
函数功能:键盘扫描及按键处理
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void keypad( )
{
	unsigned char keyvalue;
	for( ; ; ){
		P0 = P0|0xff;
		keyvalue = P0&0x0f;		// 第1次读I/O口
		if( keyvalue==0x0f )	break;	// 无键闭合
		delayXms( 10 );			// 有键闭合,延时,消除按键抖动
		keyvalue = P0&0x0f;		// 第2次读I/O口
		
		switch( keyvalue ){
			case 0x0e: K1( time );	break;	// K1闭合
			case 0x0d: K2( time );	break;	// K2闭合
			case 0x0b: K3( time );	break;	// K3闭合
			case 0x07: P1 = 0xff;	break;	// K4闭合
			case 0x0f: P1 = 0x00;	break;	// 无键闭合
		}
	}
}
/**********************************************************************
函数名称:void K1( unsigned int x )
函数功能:按时间间隔x依次点亮D1~D8
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void K1( unsigned int x )
{
	P1 = 0xfe;	delayXms( x );		
	P1 = 0xfc;	delayXms( x );		
	P1 = 0xf8;	delayXms( x );		
	P1 = 0xf0;	delayXms( x );		
	P1 = 0xe0;	delayXms( x );		
	P1 = 0xc0;	delayXms( x );		
	P1 = 0x80;	delayXms( x );		
	P1 = 0x00;	delayXms( x );			
}				
/**********************************************************************
函数名称:void K2( unsigned int y )
函数功能:按时间间隔y依次点亮D8~D1  
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void K2( unsigned int y )
{
	P1 = 0x7f;	delayXms( y );
	P1 = 0x3f;	delayXms( y );
	P1 = 0x1f;	delayXms( y );
	P1 = 0x0f;	delayXms( y );
	P1 = 0x07;	delayXms( y );
	P1 = 0x03;	delayXms( y );
	P1 = 0x01;	delayXms( y );
	P1 = 0x00;	delayXms( y );
}
/**********************************************************************
函数名称:void K3( unsigned int y )
函数功能:D1~D8按时间间隔y闪烁  
函数作者:张三
创建时间:2008-3-28
**********************************************************************/
void K3( unsigned int y )
{
	P1 = 0xff;	delayXms( y );
	P1 = 0x00;	delayXms( y );
}

⌨️ 快捷键说明

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