专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

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

作者:佚名   来源:本站原创   点击数:  更新时间:2009年07月02日   【字体:

   51单片机单按键控制LED发光的程序,就是用一个与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;n<1000;n++); //延时一段时间,等待按键完全按下
mark=~mark;         //翻转标记
while(!P3_0)        //等待按键弹起
for(n=0;n<1000;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,则处理灯亮与显示速度
} }
 

关闭窗口