Indholdsfortegnelse:
- Trin 1: Beskrivelse Komponenter
- Trin 2: Firmware -kode til mikrokontroller
- Trin 3: Blinkende firmware til mikrokontroller
- Trin 4: Overvågning af enheds kredsløbssamling
Video: Temperatur- og lysniveauovervågning med visning på LCD NOKIA 5110: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Hej allesammen!
I dette afsnit laver vi en enkel elektronisk enhed til at overvåge temperatur og lysniveau. Målinger af disse parametre vises på LCD NOKIA 5110. Enheden er baseret på mikrokontrolleren AVR ATMEGA328P. Overvågningsenheden er udstyret med DS18B20 digitalt termometer og fotoresistor til måling af lysniveau.
Trin 1: Beskrivelse Komponenter
Grundlæggende komponenter i overvågningsenheden:
- Mikrokontroller AVR «ATMEGA328P»
- Monokrom grafisk LCD «NOKIA 5110»
- Programmerbar opløsning 1-tråds digitalt termometer «DS18B20»
- Lysafhængig modstand
- Ledninger
Mikrokontroller AVR «ATMEGA328P»
Overvågningsenheden bruger følgende perifere funktioner i mikrokontroller:
- 16-bit timer/tæller afbrydelse
- 8-kanals 10-bit ADC
- Master/slave SPI serielt interface
Monokrom grafisk LCD «NOKIA 5110»
Specifikationer:
- 48 x 84 Dot LCD -skærm
- Serielt businterface med maksimal høj hastighed 4 Mbits/S
- Intern controller/driver «PCD8544»
- LED baglys
- Kør ved spænding 2,7-5 volt
- Lavt strømforbrug; det er velegnet til batteri applikationer
- Temperaturområde fra -25˚C til +70˚C
- Support Signal CMOS -input
Håndtering af LCD -adresse (adressering):
Adressearrangementet for hukommelse, der vises på LCD-display (DDRAM) er Matrix, der består af 6 rækker (Y-adresse) fra Y-adresse 0 til Y-adresse 5 og 84 kolonner (X-adresse) fra X-adresse 0 til X- Adresse 83. Hvis brugeren ønsker at få adgang til positionen for at vise resultatet på LCD-display, skal henvise til forholdet mellem X-adresse og Y-adresse.
Data, der sendes til visning, er 8 bit (1 Byte), og de vil blive arrangeret som en lodret linje; i dette tilfælde vil Bit MSB være lavere og Bit LSB være øverst som vist på billedet.
Programmerbar opløsning 1-tråds digitalt termometer DALLAS «DS18B20»
Funktioner:
- Unikt 1-Wire®-interface kræver kun en portstift til kommunikation
- Reducer komponentantal med integreret temperatursensor og EEPROM
- Måler temperaturer fra -55 ° C til +125 ° C (-67 ° F til +257 ° F)
- ± 0,5 ° C Nøjagtighed fra -10 ° C til +85 ° C
- Programmerbar opløsning fra 9 bit til 12 bit
- Ingen eksterne komponenter påkrævet
- Parasitic Power Mode kræver kun 2 pins til drift (DQ og GND)
- Forenkler distribuerede temperaturfølende applikationer med multidrop-kapacitet
- Hver enhed har en unik 64-bit seriel kode gemt i indbygget ROM
- Fleksibel brugerdefinerbar ikke-flygtig (NV) alarmindstilling med alarmsøgningskommando Identificerer enheder med temperaturer uden for programmerede grænser
Ansøgninger:
- Termostatstyring
- Industrielle systemer
- Forbrugerprodukter
- Termometre
- Termisk følsomme systemer
Lysafhængig modstand
Lysafhængig modstand (LDR) er en transducer, der ændrer dens modstand, når lys falder på dens overflade ændres.
Typisk vil en LDR have fra en megaOhm til to megaOhm ved totalt mørke, fra ti til tyve kiloOhms ved ti LUX, fra to til fem kiloohms ved 100 LUX. Modstanden mellem sensorens to kontakter falder med lysintensiteten, eller konduktansen mellem to sensorkontakter øges.
Brug spændingsdelerkredsløb til at konvertere ændring i modstand til ændring i spænding.
Trin 2: Firmware -kode til mikrokontroller
#ifndef F_CPU #definere F_CPU 16000000UL // fortæller controller krystalfrekvens (16 MHz AVR ATMega328P) #endif
// SPI INTERFACE DEFINES #define MOSI 3 // MOSI it's PORT B, PIN 3 #define MISO 4 // MISO it's PORT B, PIN 4 #define SCK 5 // SCK it's PORT B, PIN 5 #define SS 2 // SS det er PORT B, PIN 2
// NULSTIL DISPLAYET #definer RST 0 // NULSTIL det er PORT B, PIN 0
// DISPLAY MODE SELECT - Indtast for at vælge enten kommando/adresse eller datainput. #define DC 1 // DC det er PORT B, PIN 1
// koder array af negative tegnstatiske const unsigned char neg [4] = {0x30, 0x30, 0x30, 0x30};
// koder array af cifre [0..9] statisk const unsigned char font6x8 [10] [16] = {{0xFC, 0xFE, 0xFE, 0x06, 0x06, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 0 {0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00}, // 1 { 0x0C, 0x8E, 0xCE, 0xE6, 0xE6, 0xBE, 0x9E, 0x0C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 2 {0x00, 0x04, 0x06, 0x0,, 0x8C, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 3 {0x3C, 0x3E, 0x7C, 0x60, 0x60, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00 0x01, 0x03, 0x01}, // 4 {0x1C, 0x3E, 0x3E, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 5 { 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 {0x04, 0x06, 0x06, 0x6, 0x6, 0x6, 0x6, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x0, 0x0 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};
// koder array af ordet "TEMP:" statisk const usigneret char TEMP_1 [165] = {0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0xFE, 0x26, 0x26, 0x24, 0x00, 0xFC, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0x66, 0x66, 0x7E, 0x7, 0x8, 0x8 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1E, 0x0C, 0x0, 0x8 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};
// koder array af ordet "LUX:" const unsigned char TEMP_2 [60] = {0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x04, 0x8E, 0xDE, 0xFC, 0xF8, 0xFC, 0xDE, 0x8E, 0x04, 0x00, 0x8C, 0x8C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x0, 0x0, 0x0, 0x3, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};
#omfatte
#include #include
// Portinitialiseringvoid Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // Indstil MOSI, SCK, SS, RST, DC som output, alle andre input PORTB | = (1 << RST); // Indstil RST pin så høj PORTB | = (1 << SS); // Indstil SS pin som høj - Display er Deaktiver DDRC = 0xFFu; // Indstil alle stifter i PORTC som output. DDRC & = ~ (1 << 0); // Gør første pin af PORTC som input PORTC = 0x00u; // Sæt alle stifter i PORTC lavt, hvilket slukker det. }
// ADC Initialization void ADC_init () {// Aktiver ADC, sampling freq = osc_freq/128 indstil prescaler til maks. Værdi, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // Vælg spændingsreferencen for ADC // Vælg kanalnul som standard ved hjælp af ADC Multiplexer Select register (ADC0). }
// Funktion til at læse resultatet af analog til digital konvertering uint16_t get_LightLevel () {_delay_ms (10); // Vent et stykke tid på, at kanalen får den valgte ADCSRA | = (1 << ADSC); // Start ADC -konverteringen ved at indstille ADSC -bit. skriv 1 til ADSC mens (ADCSRA & (1 << ADSC)); // vent på, at konverteringen er færdig // ADSC bliver 0 igen indtil da, kør loop kontinuerligt _delay_ms (10); retur (ADC); // Returner 10-bit resultatet}
// SPI Initialization void SPI_Init () {SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Aktiver SPI, Set as Master, Set Prescaler as Fosc/16 in SPI control Tilmeld }
// initialiser 16 bit Timer1, afbryd og variabelt tomrum TIMER1_init () {// opsæt timer med prescaler = 256 og CTC mode TCCR1B | = (1 << WGM12) | (1 << CS12); // initialiser tælleren TCNT1 = 0; // initialiser sammenligningsværdi - 1 sek. OCR1A = 62500; // aktiver sammenligne afbryd TIMSK1 | = (1 << OCIE1A); // muliggøre globale afbrydelser sei (); }
// Vis Aktiver tomrum SPI_SS_Enable () {PORTB & = ~ (1 << SS); // Aktiver SS -pin til logik 0}
// Display Disable void SPI_SS_Disable () {PORTB | = (1 << SS); // Deaktiver SS -pin til logik 1}
// Funktion til at sende data til displaybufferens tomrum SPI_Tranceiver (usignerede char -data) {SPDR = data; // Indlæs data i bufferen mens (! (SPSR & (1 << SPIF))); // Vent, indtil transmissionen er fuldført}
// Nulstil displayet i begyndelsen af initialiseringen void Display_Reset () {PORTB & = ~ (1 << RST); _forsinkelse_ms (100); PORTB | = (1 << RST); }
// Kommando skrivefunktion ugyldig Display_Cmnd (usignerede char -data) {PORTB & = ~ (1 << DC); // lav DC pin til logik 0 for kommandodrift SPI_Tranceiver (data); // sende data om dataregister PORTB | = (1 << DC); // gør DC pin til logik høj for datadrift}
// Initialisering af Display ugyldig Display_init () {Display_Reset (); // nulstil displayet Display_Cmnd (0x21); // kommando indstillet i tilføjelsestilstand Display_Cmnd (0xC0); // indstil spændingen ved at sende C0 betyder VOP = 5V Display_Cmnd (0x07); // indstil temp. koefficient til 3 Display_Cmnd (0x13); // sætværdi for spændingsbias system Display_Cmnd (0x20); // kommando indstillet i grundlæggende tilstand Display_Cmnd (0x0C); // vis resultat i normal tilstand}
// Ryd displayet ugyldigt Display_Clear () {PORTB | = (1 << DC); // lav DC pin til logik høj for datadrift for (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // lav DC pin til logik nul til kommandooperation}
// indstil kolonnen og rækken til positionen for visning af resultat på LCD Display ugyldig Display_SetXY (usigneret tegn x, usigneret tegning y) {Display_Cmnd (0x80 | x); // kolonne (0-83) Display_Cmnd (0x40 | y); // række (0-5)}
// Funktion til at vise negativt tegn ugyldigt Display_Neg (usigneret tegn) {Display_SetXY (41, 0); // Indstil placeringsadressen på displayet for (int index = 0; index0) {SPDR = 0x30;} // Indlæs data i bufferen på displayet (vis negativt tegn) ellers {SPDR = 0x00;} // Indlæs data i visningsbufferen (klart negativt tegn) mens (! (SPSR & (1 << SPIF))); // Vent, indtil transmissionen er fuldført _delay_ms (100); }}
// Funktion til at rydde det digitale tegn ugyldigt Off_Dig (usigneret tegn x, usigneret tegning) {Display_SetXY (x, y); // Indstil placeringsadressen på displayet (øverste række) for (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Indlæs data i bufferen på displayet (fjern øverste del af digitalt tegn) y ++; Display_SetXY (x, y); // Indstil adressen på positionen på displayet (nederste række) for (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // Indlæs data i bufferens display (tydelig nederste del af digitalt skilt)}
// Funktion til at vise digitalt tegn ugyldigt Display_Dig (int dig, unsigned char x, unsigned char y) {Display_SetXY (x, y); // Indstil adressen på positionen på displayet (øverste række) for (int index = 0; index <16; index ++) {if (index == 8) {y ++; Display_SetXY (x, y);} // Indstil adressen på positionen på displayet (nederste række) SPI_Tranceiver (font6x8 [dig] [index]); // Indlæs koder array af cifret data i bufferen på display _delay_ms (10); }}
// Initialisering af DS18B20 usigneret char DS18B20_init () {DDRD | = (1 << 2); // Indstil PD2 pin på PORTD som output PORTD & = ~ (1 << 2); // Indstil PD2 -pin som lav _forsinkelse_us (490); // Initialisering Timing DDRD & = ~ (1 << 2); // Indstil PD2 -pin på PORTD som input _delay_us (68); // Timing OK_Flag = (PIND & (1 << 2)); // få sensorpuls _delay_us (422); returner OK_Flag; // return 0-ok sensor er stik, sensor med 1 fejl er taget ud}
// Funktion til at læse byte fra DS18B20 usigneret char read_18b20 () {usigneret char i, data = 0; for (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Indstil PD2 -pin på PORTD som output _delay_us (2); // Timing DDRD & = ~ (1 1; // Næste bit hvis (PIND & (1 << 2)) data | = 0x80; // sæt bit i byte _delay_us (62);} returner data;}
// Funktion til at skrive byte til DS18B20 void write_18b20 (usignerede char -data) {unsigned char i; for (i = 0; i <8; i ++) {DDRD | = (1 << 2); // Indstil PD2 -pin på PORTD som output _delay_us (2); // Timing if (data & 0x01) DDRD & = ~ (1 << 2); // hvis vi vil skrive 1, skal du slippe linjen ellers DDRD | = (1 1; // Næste bit _delay_us (62); // Timing DDRD & = ~ (1 << 2); // Indstil PD2 -pin på PORTD som input _delay_us (2);}}
// Funktion til visning af lysniveau tomrum Read_Lux () {uint16_t buffer; usigneret int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // enkelt cifre, to cifre, tre cifre, kvart cifre buffer = get_LightLevel (); // læs resultatet af analog til digital konvertere lysniveau temp_int_0 = buffer % 10000 /1000; // kvartcifret temp_int_1 = buffer % 1000 /100; // trecifret temp_int_2 = buffer % 100 /10; // tocifret temp_int_3 = buffer % 10; // encifret hvis (temp_int_0> 0) // hvis resultatet er et kvartcifret nummer {Display_Dig (temp_int_0, 32, 2); // vis 1 ciffer i lysniveau Display_Dig (temp_int_1, 41, 2); // vis 2 cifret lysniveau Display_Dig (temp_int_2, 50, 2); // vis 3 cifret lysniveau Display_Dig (temp_int_3, 59, 2); // vis 4 cifret lysniveau} ellers {if (temp_int_1> 0) // hvis resultatet er et trecifret tal {Off_Dig (32, 2); // ryd 1 tegn på nummeret Display_Dig (temp_int_1, 41, 2); // vis 1 ciffer i lysniveau Display_Dig (temp_int_2, 50, 2); // vis 2 cifret lysniveau Display_Dig (temp_int_3, 59, 2); // vis 3 cifret lysniveau} ellers {if (temp_int_2> 0) // hvis resultatet er tocifret nummer {Off_Dig (32, 2); // ryd 1 tegn på nummeret Off_Dig (41, 2); // ryd 2 tegn på nummer Display_Dig (temp_int_2, 50, 2); // vis 1 ciffer i lysniveau Display_Dig (temp_int_3, 59, 2); // vis 2 cifret lysniveau} ellers // hvis resultatet er et cifret tal {Off_Dig (32, 2); // ryd 1 tegn på nummeret Off_Dig (41, 2); // ryd 2 tegn på nummeret Off_Dig (50, 2); // ryd 3 tegn på nummer Display_Dig (temp_int_3, 59, 2); // vis 1 ciffer i lysniveau}}}}
// Funktion til visning af ugyldig temperatur Read_Temp () {usigneret int buffer; usigneret int temp_int_1, temp_int_2, temp_int_3; // enkelt cifre, to cifre, tre cifre, kvart cifre usigneret char Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // Initialisering af DS18B20 skrive_18b20 (0xCC); // Sensor kode check write_18b20 (0x44); // Start temperaturkonvertering _delay_ms (1000); // Forsinkelse af sensorafstemning DS18B20_init (); // Initialisering af DS18B20 skrive_18b20 (0xCC); // Sensor kode check write_18b20 (0xBE); // Kommando for at læse indholdet af Sensor RAM Temp_L = read_18b20 (); // Læs de første to byte Temp_H = read_18b20 (); temp_flag = 1; // 1-positiv temperatur, 0-negativ temperatur // Få negativ temperatur hvis (Temp_H & (1 << 3)) // Sign Bit Check (hvis bit er indstillet-negativ temperatur) {underskrevet int temp; temp_flag = 0; // flag er indstillet 0 - negativ temperatur temp = (Temp_H << 8) | Temp_L; temp = -temp; // Konverter den ekstra kode i direkte Temp_L = temp; Temp_H = temp >> 8; } buffer = ((Temp_H 4); temp_int_1 = buffer % 1000 /100; // trecifret temp_int_2 = buffer % 100 /10; // tocifret temp_int_3 = buffer % 10; // enkeltcifret
// Hvis temperaturen er et negativt tegn på temperatur, er det ellers klart
if (temp_flag == 0) {Display_Neg (1);} else {Display_Neg (0);} if (temp_int_1> 0) // hvis resultatet er et trecifret tal {Display_Dig (temp_int_1, 45, 0); // vis 1 ciffer med temperatur Display_Dig (temp_int_2, 54, 0); // vis 2 -cifret temperatur Display_Dig (temp_int_3, 63, 0); // vis 3 cifret temperatur} ellers {if (temp_int_2> 0) // hvis resultatet er tocifret nummer {Off_Dig (45, 0); // ryd 1 tegn på nummeret Display_Dig (temp_int_2, 54, 0); // vis 1 ciffer med temperatur Display_Dig (temp_int_3, 63, 0); // vis 2 cifret temperatur} ellers // hvis resultatet er et cifret tal {Off_Dig (45, 0); // ryd 1 tegn på nummeret Off_Dig (54, 0); // ryd 2 tegn på nummer Display_Dig (temp_int_3, 63, 0); // vis 1 ciffer med temperatur}}}
// Denne ISR udløses, når der forekommer en match mellem timertælling og sammenligningsværdi (hvert 1. sekund) ISR (TIMER1_COMPA_vekt) {// Læsning, visning af temperatur og lysniveau Read_Temp (); Read_Lux (); }
// Funktion til at vise ordene "TEMP" og "LUX" ugyldig Display_label () {// Word "TEMP" Display_SetXY (0, 0); // Indstil placeringsadressen på displayet (opad række) for (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1);} // Indstil adresse for position på displayet (nederste række) hvis (index == 80) {Display_SetXY (72, 0);} // Indstil adressen på positionen på displayet (opad række) hvis (index == 92) {Display_SetXY (72, 1); } // Indstil placeringsadressen på displayet (nederste række) SPDR = TEMP_1 [indeks]; // Indlæs koder array -data i bufferens display mens (! (SPSR & (1 << SPIF))); // Vent, indtil transmissionen er fuldført _delay_ms (10); } // Word "LUX" Display_SetXY (0, 2); // Indstil placeringsadressen på displayet (opad række) for (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // Indstil adresse for position på display (nederste række) SPDR = TEMP_2 [indeks]; // Indlæs koder array -data i bufferens display mens (! (SPSR & (1 << SPIF))); // Vent, indtil transmissionen er fuldført _delay_ms (10); }}
int main (tomrum)
{Port_Init (); // Portinitialisering ADC_init (); // ADC Initialisering SPI_Init (); // SPI Initialisering SPI_SS_Enable (); // Display Aktiver DS18B20_init (); // Initialisering af DS18B20 Display_init (); // Displayinitialisering Display_Clear (); // Vis tydelig Display_label (); // Vis ord "TEMP" og "LUX" TIMER1_init (); // Timer1 Initialisering. Start overvågning. Henter parametre hvert andet sekund. // Infinity loop mens (1) {}}
Trin 3: Blinkende firmware til mikrokontroller
Upload af HEX -fil i mikrokontrollerens flash -hukommelse. Se videoen med en detaljeret beskrivelse af mikrokontrollerens flashhukommelsesforbrænding: Mikrokontrollerens flashhukommelse brænder …
Trin 4: Overvågning af enheds kredsløbssamling
Tilslut komponenter i henhold til skematisk diagram.
Tilslut strøm, og det virker!
Anbefalede:
8051 grænseflade med DS1307 RTC og visning af tidsstempel i LCD: 5 trin
8051 grænseflade med DS1307 RTC og visning af tidsstempel i LCD: I denne vejledning har vi forklaret dig om, hvordan vi kan grænseflade 8051 mikrokontroller med ds1307 RTC. Her viser vi RTC -tid i lcd ved hjælp af proteus -simulering
"Space Impact" -spil med gyrosensor og Nokia 5110 LCD: 3 trin
"Space Impact" -spil med gyrosensor og Nokia 5110 LCD: Efter min Tamagotchi døde (sidste projekt), begyndte jeg at søge efter en ny måde at spilde min tid på. Jeg besluttede at programmere det klassiske spil "Space Impact" på Arduino. For at gøre spillet lidt mere interessant og sjovt brugte jeg en gyroskopsensor, jeg havde
VEML6070 UV -sensor med Nokia 5110 LCD: 11 trin
VEML6070 UV -sensor med Nokia 5110 LCD: Efter at have siddet 3 måneder på dette projekt, troede jeg, at jeg ville dele det med producentfællesskabet. En budgetpris UV -sensor :) Den kan samles inden for 1 time og kan bruges i årevis
Tastaturgrænseflade med 8051 og visning af tastaturnumre i 7 segmenter: 4 trin (med billeder)
Tastaturgrænseflade med 8051 og visning af tastaturnumre i 7 segmenter: I denne vejledning vil jeg fortælle dig, hvordan vi kan grænseflade tastatur med 8051 og vise tastaturnumre i 7 segment display
Visning af tastaturnumre i 16 X 2 LCD med 8051: 4 trin
Visning af tastaturnumre i 16 X 2 LCD Med 8051: I dette projekt skal vi grænseflade tastatur og lcd med 8051. Da vi trykker på tasten i tastaturet får vi korrespondancenummeret i vores lcd