📄 l5-8.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 + -