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

📄 newc.c

📁 该程序实现的是可控流水灯 /* 接P3.2 的键为开始键
💻 C
字号:
/*************************************************/
/*名称:可控流水灯
/*描述:该程序实现的是可控流水灯
/*		接P3.2 的键为开始键,按此键则灯开始流动(由下而上)
/*		接P3.3 的键为停止键,按此键则停止流动,所有灯暗
/*		接P3.4 的键为向上键,按此键则灯由上向下流动
/*		接P3.5 的键为向下键,按此键则灯由下向上流动
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/

#include <reg51.h>
//#include <intrins.h>

bit upDown = 1;							//定义upDown为流向,1为由下至上,0为由上至下
bit onOff = 0;							//定义onOff为开关,0为关闭,1为开启
unsigned char i = 0;					//定义i为计数器,用来累加计数

void keyProcess (void);
void action (void);

/*************************************************/
/*名称:main
/*描述:C语言的主函数,该程序的入口
/*参数:void
/*返回值:void
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/

void main (void)
{
	TMOD = 0x01;						//设定定时器T0工作在方式1
	TH0 = 0xd8;							//初始化定时器初值,使其产生10ms的中断(认为晶振为12MHZ所产生)
	TL0 = 0xf0;
	IE = 0x82;							//允许CPU中断,并打开定时器T0中断
	TR0 = 1;							//定时器开始定时
	while( 1 );							//等待中断产生
}


/*************************************************/
/*名称:T0_ISR	
/*描述:定时器T0中断响应函数
/*参数:void
/*返回值:void
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/

void delay ( unsigned char i )
{
	while (i--);
	return ;
}

void T0_ISR (void) interrupt 1 using 1
{
	TH0 = 0xd8;							//重装初值
	TL0 = 0xf0;
	keyProcess();						//运行键盘扫描函数
	action();							//运行走马灯函数
}


/*************************************************/
/*名称:keyProcess
/*描述:键盘处理函数
/*参数:void
/*返回值:void
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/

void keyProcess (void)
{
	unsigned char key;					//定义key为按下键值
	key = P3;							//读取P3口
	if ( key == 0xff ) return ;			//如果没有键按下,退出函数
//	_nop_();							//延时消抖
//	_nop_();
//	_nop_();
	delay(100);
	if ( key != P3 ) return ;
	switch ( key )						//根据键值处理
	{
	case 0xfb :	if ( onOff == 0 )	P1 = 0x7f;
				onOff = 1;
				break;
   	case 0xf7 :	onOff = 0;
				break;
	case 0xef : upDown = 1;
				break;
	case 0xdf :	upDown = 0;
				break;
    default	  :	break;
	}
}


/*************************************************/
/*名称:action
/*描述:LED显示函数,根据onOff与upDown来亮灭LED
/*参数:void
/*返回值:void
/*作成日期:2009/2/3
/*作者:臧成威
/*************************************************/

void action (void)
{
	if ( onOff == 0 ) 					//如果开关onOff为关,则将P1口重置退出函数
	{
		P1 = 0xff;
		return;
	}
	if ( i == 250 )						//计数器记满250次,灯流动,否则计数器i自加
	{
		i = 0;
		if ( upDown == 1 ) 
			{
				P1 = P1>>1|0x80;
				if ( P1 == 0xff ) P1 = 0x7f;
			}
		else
			{
				P1 = P1<<1|0x01;
				if ( P1 == 0xff ) P1 = 0xfe;
			}
   	}
	else
		i++;
	return;
}

⌨️ 快捷键说明

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