流水灯电路(含源程序代码)

来源:电子发烧友 作者:华强电子网 时间:2019-01-23 12:48

流水灯电路(含源程序代码)

其实现程序:

#i nclude 
 unsigned char RunMode;
//**********************************System FucTIon*************************************************
void Delay1ms(unsigned int count)
{
 unsigned int i,j;
 for(i=0;i for(j=0;j<120;j++);
}
 

unsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //0~7
                              0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};

void Display(unsigned char Value)
{
 P3 = LEDDisplayCode[Value];
}
 

void LEDFlash(unsigned char Count)
{
 unsigned char i;
 bit Flag;
 for(i = 0; i {
  Flag = !Flag;
  if(Flag)
   Display(RunMode);
  else
   Display(0x10);
  Delay1ms(100);
 }
 Display(RunMode);
}

unsigned char GetKey(void)
{
 unsigned char KeyTemp,CheckValue,Key = 0x00;
 CheckValue = P2&0x32;
 if(CheckValue==0x32)
  return 0x00;
 
 Delay1ms(10);
 KeyTemp = P2&0x32;
 if(KeyTemp==CheckValue)
  return 0x00

 if(!(CheckValue&0x02))
  Key|=0x01;
 if(!(CheckValue&0x10))
  Key|=0x02;
 if(!(CheckValue&0x20))
  Key|=0x04;
 return Key;
}

unsigned int TImerCount,SystemSpeed,SystemSpeedIndex;
void IniTIalTImer2(void)
{
 T2CON  = 0x00;   //16 Bit Auto-Reload Mode
  TH2 = RCAP2H = 0xFC;   //重装值,初始值 TL2 = RCAP2L = 0x18;
 ET2=1;     //定时器 2 中断允许
 TR2 = 1;    //定时器 2 启动
 EA=1;
}

unsigned int code SpeedCode[]={   1,   2,   3,   5,   8,  10,  14,  17,  20,  30,
            40,  50,  60,  70,  80,  90, 100, 120, 140, 160,
        180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30
void SetSpeed(unsigned char Speed)
{
 SystemSpeed =SpeedCode[Speed];
}

void LEDShow(unsigned int LEDStatus)
{
 P1 = ~(LEDStatus&0x00FF);
 P0 = ~((LEDStatus>>8)&0x00FF);
}

void InitialCPU(void)
{
 RunMode = 0x00;
 TimerCount = 0;
 SystemSpeedIndex = 10;

 P1 = 0x00;
 P0 = 0x00;
 P2 = 0xFF;
 P3 = 0x00;
 Delay1ms(500);
 P1 = 0xFF;
 P0 = 0xFF;
 P2 = 0xFF;
 P3 = 0xFF;
 SetSpeed(SystemSpeedIndex);
 Display(RunMode);
}

//Mode 0
unsigned int LEDIndex = 0;
bit LEDDirection = 1,LEDFlag = 1;
void Mode_0(void)
{
 LEDShow(0x0001< LEDIndex = (LEDIndex+1)%16;
}
//Mode 1
void Mode_1(void)
{
 LEDShow(0x8000>>LEDIndex);
 LEDIndex = (LEDIndex+1)%16;
}
//Mode 2
void Mode_2(void)
{
 if(LEDDirection)
  LEDShow(0x0001< else
  LEDShow(0x8000>>LEDIndex);
 if(LEDIndex==15)
  LEDDirection = !LEDDirection;

相关文章

资讯排行榜

  • 每日排行
  • 每周排行
  • 每月排行

华强资讯微信号

关注方法:
· 使用微信扫一扫二维码
· 搜索微信号:华强微电子