新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机单按键控制LED发光的程序

单片机单按键控制LED发光的程序

作者:时间:2012-12-01来源:网络收藏
51的程序,就是用一个与P3_0引脚连接的按键控制P2_0相连LED的亮和灭两种状态。按一次按键灯亮,再按一次按键灯灭。再按一次又亮,再按一次灯又灭,本程序出自网:http://www.51hei.com,经过测试已经可以成功运行。
#include "AT89X51.H"
void main(void) // 主程序
{
bit mark; //定义位变量
unsigned int n; //定义循环变量
while(1) //无限循环
{
if (P3_0==0) //如果按键按下
{
for(n=0;n1000;n++); //延时一段时间,等待按键完全按下
mark=~mark; //翻转标记
while(!P3_0) //等待按键弹起
for(n=0;n1000;n++); //等待按键完全弹起
}
P2_0=mark; //点亮或是关灭LED灯
}}
while(1) //无限循环
{
if(ldelay==1 ) //若是时间溢出标记为1,处理如下语句
{
ldelay=0; //清除时间溢出标记
P2=ledp[ledi]; //读出一个表格值送到P2口
ledi++; //指向下一个表格值
if(ledi==4)
{
ledi=0; //到了最后一个灯就换到第一个
sp--; //速度级别减1
if (sp==3) //如果速度级别减到3
sp=23; // 恢复速度最慢的级别23
}}}}
timer0() interrupt 1 //定时器0中断服务程序
{
static unsigned int kk; //定义静态局部变量
kk++; //每次中断服务,kk加1
if(kk==(100*sp)) //最少次数为100*sp=300,时间为300次*0.25ms
//最多次数为2300次,时间为2300次*0.25ms
//如果kk=(100*sp),执行如下语句
{
kk=0;
ldelay=1; //当kk值与100*sp值相等,将ldelay标记置1,则处理灯亮与显示速度
} }


评论


相关推荐

技术专区

关闭