En LED Tärning med en PIC 16F84 (eller 16F88) (7 / 12 steg)
Steg 7: Generera slumptal
Nu när vi kan ta fram data på en enskild LED Tärning visningen, behöver vi några sätt att generera ett slumptal.
Matematiskt, är generera ett verkligt slumptal en mycket komplicerad övning. I vår enkla PIC krets, kan vi generera ett slumptal av ett par av hjälpmedel;
- Ett till synes slumpmässigt nummer kan erhållas av timing hur länge knappen hålls nedtryckt, med en timer som ökas mycket snabbt. (Det skulle vara en mycket sällsynt person som kunde hålla knappen för exakt 2243 mS varje gång).
- Alternativt kunde vi genomföra en matematisk pseudo-slumpmässiga nummergenerator. Detta kräver användning av multiplikation och division. En pseudo-slumpmässiga generator genererar en mycket lång sekvens av nummer som upprepas så småningom, efter många cykler.
I vårt projekt är den enklaste metoden som vi använder för att generera ett slumptal urval interna timern (TMR0), som ständigt uppräkning på ¼ av klockhastighet (ca 256KHz), och lagra den i en variabel kontinuerligt, så länge knappen hålls nedtryckt.
Vår PIC 16F84 eller 16F88 mikroprocessor har 68 minnesplatser som kan användas som variabler. Om du vill definiera en variabel, vi helt enkelt förklara en konstant som refererar till en viss minnesplats och lagra tal i den minnesplatsen som krävs.
En kort kod rutin för att utföra denna funktion skulle vara följande;
; en minnesplats att lagra våra slumptal RandomA EQU 30; definiera minnesadress till ; lagra ett slumptal Button_Loop MOVFW TMR0; få det nuvarande timer-värdet MOVWF RandomA; förvara den i RandomA BTFSS PortB, 0; Är knappen fortfarande ner? Gå till Roll_Down; Nej, hoppa ut och sakta ; ner på displayen KALLA Display_Result; Ja, Visa den nuvarande roll KALLA Short_Delay; vänta ett tag CLRF DieA; Avmarkera båda tärningarna igen CLRF DieB Gå till Button_Loop; och loop igen. Roll_Down:; resten av programmet går här. ; RandomA innehåller ett nummer som har valts ut slumpmässigt ; beroende på hur länge knappen hålls. |