标题: 单片机做流水灯C程序 [打印本页]

作者: liuyang    时间: 2012-3-19 03:22
标题: 单片机做流水灯C程序
程序原是控制P1口现在经我改成P2口,学单片机的你 知道怎么改的......废话不多说  下面是原代码:
 
 
#include<reg52.h>       //包含头文件
#include<intrins.h>         //包含有左右循环移位子函数的库
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void main()
{
 while(1)
 {
  uchar i,j,k;
  for(i=3;i>0;i--)       
  {
   P2=0x00;           //点亮P1口所有LED,延时1000ms
   delay(1000);
   P2=0xff;           //熄灭P1口所有LED,延时1000ms
   delay(1000);
  }
  for(i=3;i>0;i--)       //奇偶交替成流水灯状态
  {
   P2=0x55;      
   delay(1000);
   P2=0xaa;
   delay(1000);
  }
  P2=0xff;
  delay(300);
  for(i=3;i>0;i--)       //P1口单灯左移流水,循环3次
  {
   k=0xfe;
   for(j=0;j<8;j++)
   {
    P2=k;      
    delay(200);
    k=_crol_(k,1);
   }
  }
  P2=0xff;
  delay(300);
  for(i=3;i>0;i--)       //P1口单灯右移流水,循环3次
  {
   k=0xfe;
   for(j=0;j<8;j++)
   {
    P2=k;      
    delay(300);
    k=_cror_(k,1);
   }
  }
  P2=0xff;
  delay(300);
  for(j=0;j<3;j++)           //P1口由两边向中间流水,循环3次
  {
   P2=0x7e;      
   delay(300);
   P2=0xbd;
   delay(300);
   P2=0xdb;      
   delay(300);
   P2=0xe7;
   delay(300);
  }
  P2=0xff;
  delay(300);
  for(j=0;j<3;j++)          //P1口由中间向两边流水,循环3次
  {
   P2=0xe7;      
   delay(300);
   P2=0xdb;
   delay(300);
   P2=0xbd;      
   delay(300);
   P2=0x7e;
   delay(300);
  }
  P2=0xff;
  delay(300);
  k=0xfe;             //赋初值
  for(j=0;j<8;j++)
  {
   for(i=0;i<8-j;i++)        //左移
   {
    P2=k;             //点亮小灯
    delay(200);       //延时200毫秒
    k=_crol_(k,1);       //将a变量循环左移一位
   }
   k=_crol_(k,j);         //补齐,方便下面的左移一位
   P2=0xff;         //全部关闭
   k=k<<1;         //左移一位让多一个灯点亮
  }
 }
}
void delay(uint xms)        //延时函数
{
 uint i,j;
 for(i=xms;i>0;i--)        //外层for中变量为多少,就延时约多少ms
  for(j=110;j>0;j--);       //当内层for语句中变量恒定值为110时
}

作者: 51mcu    时间: 2012-3-20 17:22
最好增加一些简单的功能说明.




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1