流水灯威廉希尔官方网站 (含源程序代码)

消费类电子威廉希尔官方网站 图

202人已加入

描述

流水灯威廉希尔官方网站 (含源程序代码)

其实现程序:

#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;

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分