📄 newc.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 + -