Interaktiva LED öl Pong tabell (47 / 87 steg)
Steg 47: Programvara: LED Grid funktioner
void LED_Pixel (UINT8 px, UINT8 py, UINT8 stat)
Denna funktion tar ett (x, y) samordna och ändrar lite som pixel representerar. Om "staten" är lika med 1, lite som den pixel representerar sätts till 1, om staten är lika med 0, rensas lite till 0. Tillbaka i steg #45 i exempel #2 hade vi att ändra LED data att slå på Pixel(11,7). Om vi skulle använda denna funktion för att slå på lampan i (11,7) skulle vi skriva:
LED_Pixel(11,7,on);
HT1632_UPDATE = 1;
Anledningen till att jag inte uppdaterar pixeln i funktionen LED_Pixel(x,ystate) sig är att vi kanske vill ändra flera pixlar och har dem alla uppdateringen på samma gång. Som denna:
LED_Pixel(16,5,on);
LED_Pixel(16,6,on);
LED_Pixel(16,7,on);
LED_Pixel(16,8,on);
LED_Pixel(17,8,on);
LED_Pixel(18,8,on);
HT1632_UPDATE = 1;
Även om vi har kallat LED_Pixel(x,y,state) sex olika tider, kommer modifierade LED data alla uppdateras samtidigt när nästa timer3 avbrottet inträffar. I fall du undrar, utgör dessa pixlar en "L" form på nätet.
void Draw_Circle (UINT8 px, UINT8 py, UINT8 radie)
Denna funktion kommer att ändra LED data och skapa en cirkel runt mittpunkt (px, py). Den 3: e parametern ställer radien av cirkeln. Foto #2 visar ett exempel för följande kod:
Draw_Circle(16,6,3);
HT1632_UPDATE = 1;
void Draw_Rect (UINT8 px, UINT8 py, UINT8 sx, UINT8 sy)
Denna funktion används för att rita en rektangel som börjar vid punkt (px, py). Storleken på rektangeln är angiven i pixlar av sx och sy. Foto #3 visas ett exempel på hur rektangeln ritas (en fyrkant kan också skapas med denna funktion).
Draw_Rect(5,2,8,6);
HT1632_UPDATE = 1;
void Fill_Grid(void)
Denna funktionen kommer in varje bit i matrisen LED data till 1. Om rutnätet uppdateras efter kalla detta sedan tänds alla bildpunkter LED.
Fill_Grid();
HT1632_UPDATE = 1;
void Clear_Grid(void)
Denna funktion kommer att klara varje bit i matrisen LED data till 0. Om rutnätet uppdateras efter kalla detta då stängs alla LED bildpunkter av. Denna funktion är användbar när vi vill rita en ny bildruta på nätet för LED, vi kan återställa alla gamla LED_data [x] bitar och börja ändra data att veta att varje bit har återställts till 0 (av).
Clear_Grid(); Rensa ut gamla data
Skriva i nya data här
HT1632_UPDATE = 1;
void Draw_Border(UINT8 width)
Denna funktion kommer att dra en kantlinje runt omkretsen av rutnätet LED. Bredd på kantlinjen anges av värdet som skickas till "bredd". Det högsta värdet för en kantlinje är 6 pixlar (6 pixlar * 2 sidor = 12 kolumner) och det lägsta värdet är 1 (uppenbarligen). Exemplet nedan visar foto #4.
Draw_Border(2);
HT1632_UPDATE = 1;
void Invert_Grid(void)
Denna funktion kommer helt enkelt Invertera varje LED databitarna. Om du kör denna funktion rätt innan du anger HT1632_UPDATE till 1, kommer den att visa den exakta motsatsen av vad det kommer att Visa innan du kör denna funktion. (dvs lysdioder som fanns på kommer att vara avstängd och lysdioder som var off kommer att vara på).
Annan kod inställningen LED bitar här
Invert_Grid();
HT1632_UPDATE = 1;
void HT1632_Set_PWM(UINT8 value)
Denna funktion är i den HT1632C förare arkivera och den kan ange LED för 16 olika nivåer av ljusstyrka. Foto #5 visar tullen cykler för varje ljusstyrka och foto #6 visar driftcykler av varje ljusstyrka i graf form. Denna funktion behöver inte ett rutnät uppdatering efter det kallas som det skriver direkt i HT1632C drivrutiner och justerar ljusstyrkan genom PWM. Om vi ville ange LED att tona ner till intermittensfaktor 10/16 (se diagram för värde) vi skulle skriva:
HT1632_Set_PWM(9);
Det är majoriteten av de grundläggande funktionerna. Nu när du vet hur man styr LED rutnätet kan vi kombinera dessa funktioner tillsammans och använda tidsfördröjningar för att göra några riktigt häftiga effekter.