PDA

View Full Version : 555 làm ADC điều khiển tốc độ nhấp nháy đèn led


electronic
22-12-2009, 12:39 AM
Chào anh em. Mình đang viết cái code chạy led nhiều chế độ dùng 555 điều chỉnh tốc độ. Không hiểu sao khi 555 kích 4 xung thì nó lại có tình trạng như reset ban đầu. Ngồi đọc lại code mà dò k ra, chắc kiến thức còn non quá. Nhờ anh em chỉ giúp. Rất cám ơn anh em.
Code: (code này mình chưa viết lại cho gọn, mong anh em thông cảm nhé)
************************************************** *****
#include <16F877A.h>
#fuses NOWDT, XT, NOLVP
#device *=16 ADC=8
#use delay(clock=4000000) // 4 MHz

int adc;

void flash_pattern_0() {
byte i;
byte led;

led = 0b10000000;
for (i = 0; i < 8; i++)
{ output_b(led);
delay_ms(adc+50);
led >>= 1;
}
}

void flash_pattern_1() {
byte i;
byte led;

led = 1;
for (i = 0; i < 8; i++) {
output_b(led);
delay_ms(adc+50);
led <<= 1;
}
}

void flash_pattern_2() {
output_b(0b10000001);
delay_ms(adc+50);
output_b(0b01000010);
delay_ms(adc+50);
output_b(0b00100100);
delay_ms(adc+50);
output_b(0b00011000);
delay_ms(adc+50);
output_b(0b00100100);
delay_ms(adc+50);
output_b(0b01000010);
delay_ms(adc+50);
output_b(0b10000001);
delay_ms(adc+50);
}

void flash_pattern_3() {
output_b(0b10000000);
delay_ms(adc+50);
output_b(0b01000000);
delay_ms(adc+50);
output_b(0b10100000);
delay_ms(adc+50);
output_b(0b01010000);
delay_ms(adc+50);
output_b(0b10101000);
delay_ms(adc+50);
output_b(0b01010100);
delay_ms(adc+50);
output_b(0b10101010);
delay_ms(adc+50);
output_b(0b01010101);
delay_ms(adc+50);
output_b(0b00101010);
delay_ms(adc+50);
output_b(0b00010101);
delay_ms(adc+50);
output_b(0b00001010);
delay_ms(adc+50);
output_b(0b00000101);
delay_ms(adc+50);
output_b(0b00000010);
delay_ms(adc+50);
output_b(0b00000001);
delay_ms(adc+50);
}
void sangdon()
{output_b(0x01);
delay_ms(adc+50);
output_b(0x03);
delay_ms(adc+50);
output_b(0x07);
delay_ms(adc+50);
output_b(0x0F);
delay_ms(adc+50);

output_b(0x1F);
delay_ms(adc+50);
output_b(0x3F);
delay_ms(adc+50);
output_b(0x7F);
delay_ms(adc+50);
output_b(0xFF);
delay_ms(adc+50);
}

void dung10s()
{output_b(0xFF);
delay_ms(10000);
}

void chop3lan()
{int i;
for(i=0;i<3;i++)
{output_b(0x00);
delay_ms(adc+500);
output_b(0xFF);
delay_ms(adc+500);
}
}

void main() {
//set_tris_b(0); // set as output
int adc,read;
output_b(0x00);
setup_ADC(ADC_clock_internal);
setup_ADC_ports(AN0);
set_ADC_channel(0);
while (true)
{ read=read_adc();
adc=(10000*read)/256;
delay_ms(5);
flash_pattern_0();

flash_pattern_1();

flash_pattern_2();

flash_pattern_3();

sangdon();

dung10s();

chop3lan();
}
}
*********************************************
Sơ đồ mạch: