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

单片机跑马灯强化版

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

 程序如下:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char//宏定义
void delay(uint a);//声明延时函数
uchar c,d;
sbit P00=P0^0;
sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;//位操作
bit key_flag=0;//位定义
void main()
{
  uint e,h;
P00=0;
delay(100);
P00=1;
delay(500);
P00=0;
TMOD=1;//设定定时器工作方式为1
TH1=(65536-20000)/256; //定时器高八位装入初值 
TL1=(65536-20000)%256;//定时器低八位装入初值 
ET0=1;//启动定时器中断
 EA=1;//开启总中断
 TR0=1;//开启定时器
while(1)
{
 if(key_flag==1)
 {
   c=0xfe;d=0xfe;
   for(e=8;e>0;e--)
   {if(key_flag==1)
   {for(h=8;h>0;h--)
    {P1=c; 
     delay(100);
     c=_crol_(c,1);//左移一位
}  
P2=d;
d=_crol_(d,1);//LED跑马灯主程序
    P30=0;P31=0;//位操作
delay(100);
P30=1;P31=1;//位操作
}
else P2=0xdb;//P1口电平
}
   }
 else
 P1=0x7e;//P2口电平
 }
}
void delay(uint a)//延时函数
{
uint f,g;
for(;a>0;a--)
for(f=200;f>0;f--);
for(g=200;g>0;g--);
}
void timer_int0() interrupt 1//声明中断函数
{
 if(P32==0)
  {delay(60);//键盘防抖延迟
if(P32==0)
key_flag=1^key_flag;//按位异或
}
TH1=(65536-20000)/256;//定时器高八位重新装入初值  
TL1=(65536-20000)%256;//定时器低八位重新装入初值 
}//此为按键检测,每隔20ms检测一次

关闭窗口

相关文章