AVR单片机M8控制256级七彩流水灯程序
#include "inc.h" for(i=0;i<16;i++) { CLR_SCK; if(da&0x8000) SET_BLU; else CLR_BLU; SET_SCK; da<=1; } { //for(k=0;k<20;k++) for(i=0;i<18;i++) { n=qct+m; for(j=0;j { if(j>=OETAB[i]) SET_OE; else CLR_OE; CLR_SCK; if(pgm_read_byte(48*(j/3)+n++) & Mask[i]) SET_BLU; else CLR_BLU; SET_SCK; } SET_LAT; CLR_LAT; } } for(j=0;j<1000;j++); TCCR0 = 0x00; //stop TCNT0 = 0xfe; //set count TCCR0 = 0x02; //无分频 TIMSK = 0x01; { MsCnt=0; Sec++; if(Sec>300)Sec=0; } temp=newFall-oldFall; //计算脉冲加间隔的时间 temp=65535-oldFall+newFall; { temp=0; } { temp=1; } else if(temp>800 && temp<1090) //重复”信号11.25ms { CaptureOK=1; CLR_LED1; return; } else if(temp>1100 && temp<1300) //header信号 13.5ms { bitcnt=0; data0=0; data1=0; CLR_LED1; return; //返回,等待下次开始接收 } else ///干扰信号 { return; } { data0=data0|(uint)temp; data0=data0<<1; } { data0=data0|(uint)temp; } else if(bitcnt<32) //开始接收后16位 { data1=data1|(uint)temp; data1=data1<<1; } else if(bitcnt==32) //接收完最后一位 { data1=data1|(uint)temp; CaptureOK=1; } { if(Sec>60) { Shift(0xffff); Shift(0xffff); Shift(0xffff); } else { Shift(0); Shift(0); Shift(0); } SET_LAT; CLR_LAT; //Scan(); } return 0;
#include
#include
#include
extern const uchar qct[];
uint16_t data0,data1;
uint8_t bitcnt;
uint8_t CaptureOK;
uint16_t ms,Sec;
uint32_t MsCnt; //ms count
void Shift(uint da)
{
uchar i;
}
void Scan(void)
{
uchar i,j;
uint m;
const char * n;
const uchar Mask[]={1,2,4,8,16,128,32,64,128,128,64,128,32,64,128,128,64,128,128};
const uchar OETAB[]={PIX,PIX/16,PIX/8,PIX/4,PIX/2,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX,PIX};
for(m=0;m<4596;m+=3)
}
void Delay(void)
{
uint i,j;
for(i=0;i<400;i++)
}
void timer0_init(void)
{
}
void int0_ini(void)
{
MCUCR=(1<
GICR=0x40; //允许int0中断
}
SIGNAL(SIG_OVERFLOW0)
{
TCNT0 = 0xfe;//0xe1;; //重装初值
ms++;
MsCnt++;
if(MsCnt>100000)
}
SIGNAL (SIG_INTERRUPT0)
{
static uint oldFall;
uint temp,newFall;
newFall=ms;
if(newFall>oldFall)
else
oldFall=newFall;
if(temp>80&& temp<130) // "0"信号1.125ms
else if(temp>170 && temp<220) //“1”信号2.25ms
bitcnt++;
if(bitcnt<16) //开始接收前16位
else if(bitcnt==16)
}
void IO_ini(void)
{
PORTB=0xff;
PORTC=0Xff;
PORTD=0Xff;
DDRD=(1<
DDRC=(1<
}
int main(void)
{
IO_ini();
int0_ini();
timer0_init();
sei();
CLR_LED2;
CLR_OE;
while(1)
}
关键词: AVR单片机M8控制七彩流水

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码