电工吧
◎ 电工吧 >> 设为首页 >> 加入收藏>> 联系方式 >> 投稿 >>留言 
网站首页 · 电工新闻 · 电工基础 · 电力技术 · 电子技术 · 电工图片 · 电工法规 · 电工图书 · 电工搜索 · 论坛交流
 
      最新电子论文
 · 数码管显示0-9及A-F实验 
 · 稍复杂一点的流水灯电路 
 · 一个简单的流水灯电路及程 
 · 红外感应灯 
 · 微波式感应控制电路 
 · 电容式接近控制电路 
 · 电力线载波通信(LMl893)集 
 · 自制小型程控交换机 
      推荐电子论文

 · 电容式接近控制电路
 · 自己攒,——液晶背投不是梦!
 · 自制超耐用高品质耳机
 · 谈谈电路中的“地”
 · 自制交流自动稳压器
 · 一款典型的立体声功率放大器的

  ■ 所在位置:首页>>电子技术>>电子制作>>正文
 

稍复杂一点的流水灯电路


其实现程序:


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

本新闻共3页,当前在第1页  [1]  [2]  [3]  

 
         相关文章

·
·

 
 
  关于本站 | 友情站点 | 联系方式 | 版权声明 | 电工技术服务与支持中心
Copyright© 2005-2006 Dg8.Com.CN ,All Rights Reserved
电工网 电工吧 电子吧