PWM emulation, analog input via comparator, real-time control. Project 6: Digital Clock with 4-Digit 7-Segment Display (Multiplexed) Difficulty: Advanced Components: 4-digit common cathode 7-segment display, 4x PNP transistors (or ULN2003), 8x resistors
I/O pin control, timing loops. Project 2: 7-Segment Display Counter (0-9) Difficulty: Beginner Components: Common cathode 7-segment display, 8x 220Ω resistors Circuit: Connect segments a-g and DP of the display to P1.0 – P1.7 via 220Ω resistors. Common cathode to GND. Code snippet (lookup table): unsigned char segment[] = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90; // Common anode // For common cathode, invert the bits: ~segment[i] & 0x7F void main() unsigned char count = 0; while(1) P1 = ~segment[count]; // active low for common cathode? // Adjust based on your display type. delay_ms(1000); count++; if(count > 9) count = 0;
Timer interrupts, random number generation, button debouncing. Project 4: Frequency Counter (0-50 kHz) Difficulty: Advanced Components: External TTL signal source, LCD 16x2 (optional via 4-bit mode) at89c2051 projects
This project demonstrates a security system. The user must enter a 4-digit code; if correct, a relay is energized to open a lock. Rows to P3.0-P3.3 (outputs), Columns to P1.0-P1.3 (inputs with pull-ups). Scan the keypad using the classic row-scan method. Code logic: unsigned char code[4] = 1,2,3,4; // correct code unsigned char entered[4]; unsigned char pos = 0; void main() while(1) unsigned char key = get_key(); if(key != 0xFF) entered[pos++] = key; beep(); if(pos == 4) if(memcmp(entered, code, 4) == 0) relay_on(); delay_ms(3000); relay_off(); else // wrong code: beep error
void init_uart() = 0x20; TH1 = 0xFD; // 9600 @11.0592 MHz TR1 = 1; Common cathode to GND
pos = 0;
Servos require a 50Hz PWM signal with pulse widths from 1ms to 2ms. delay_ms(1000); count++; if(count > 9) count = 0;
Since the AT89C2051 lacks hardware PWM, we generate it using Timer0 interrupt. unsigned int duty = 1500; // 1.5ms center void timer0_isr() interrupt 1 static bit state = 0; if(state == 0) P1_0 = 1; TH0 = 0xFC; // 1ms? Actually calculate for 1.5ms TL0 = 0x18; state = 1; else P1_0 = 0; TH0 = 0xFE; // 20ms - duty TL0 = 0x??; state = 0;
Votre panier est vide.
PWM emulation, analog input via comparator, real-time control. Project 6: Digital Clock with 4-Digit 7-Segment Display (Multiplexed) Difficulty: Advanced Components: 4-digit common cathode 7-segment display, 4x PNP transistors (or ULN2003), 8x resistors
I/O pin control, timing loops. Project 2: 7-Segment Display Counter (0-9) Difficulty: Beginner Components: Common cathode 7-segment display, 8x 220Ω resistors Circuit: Connect segments a-g and DP of the display to P1.0 – P1.7 via 220Ω resistors. Common cathode to GND. Code snippet (lookup table): unsigned char segment[] = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90; // Common anode // For common cathode, invert the bits: ~segment[i] & 0x7F void main() unsigned char count = 0; while(1) P1 = ~segment[count]; // active low for common cathode? // Adjust based on your display type. delay_ms(1000); count++; if(count > 9) count = 0;
Timer interrupts, random number generation, button debouncing. Project 4: Frequency Counter (0-50 kHz) Difficulty: Advanced Components: External TTL signal source, LCD 16x2 (optional via 4-bit mode)
This project demonstrates a security system. The user must enter a 4-digit code; if correct, a relay is energized to open a lock. Rows to P3.0-P3.3 (outputs), Columns to P1.0-P1.3 (inputs with pull-ups). Scan the keypad using the classic row-scan method. Code logic: unsigned char code[4] = 1,2,3,4; // correct code unsigned char entered[4]; unsigned char pos = 0; void main() while(1) unsigned char key = get_key(); if(key != 0xFF) entered[pos++] = key; beep(); if(pos == 4) if(memcmp(entered, code, 4) == 0) relay_on(); delay_ms(3000); relay_off(); else // wrong code: beep error
void init_uart() = 0x20; TH1 = 0xFD; // 9600 @11.0592 MHz TR1 = 1;
pos = 0;
Servos require a 50Hz PWM signal with pulse widths from 1ms to 2ms.
Since the AT89C2051 lacks hardware PWM, we generate it using Timer0 interrupt. unsigned int duty = 1500; // 1.5ms center void timer0_isr() interrupt 1 static bit state = 0; if(state == 0) P1_0 = 1; TH0 = 0xFC; // 1ms? Actually calculate for 1.5ms TL0 = 0x18; state = 1; else P1_0 = 0; TH0 = 0xFE; // 20ms - duty TL0 = 0x??; state = 0;
Oeuvre originale.
« Des monstres sacrés exposés à la Galerie Glénat. » LE MONDE
« Glénat épate la galerie. » ACTUABD
La galerie Glénat vend des illustrations et des planches originales de bande dessinée, elle expose régulièrement des auteurs confirmés ou des jeunes de grands talents Ignorer