Mint ígértem ma, egy digitális dobókocka teljes leírásával fogok nektek kedveskedni.
Elkészítése egyszerű, gyors, kényelmes.
Kevés alkatrészt igényel és a már jól megismert PIC16F628-as mikrovezérlő hajtja.
A program lényege a MikroC -ben is ismert rand() függvény amely 0 és kb 33 ezer között generál egy random számot. Ezt aztán én elosztom 50-el majd 1000-el és így kicsit többet kapok mint 6. A megkapott eredményt részekre osztom, ha 1-nél kisebb, ha 2, 3, 4, 5 vagy ha 6-nál több.
Ezek után ezt egyszerűen megjeleníti 7 LED-en, természetesen a valódi Dobókockának megfelelő mintázatban.
A következőkben pedig a kód:
int result;
unsigned char ii, nn, mm, kk, ff, kiki;
/*
A rand() függvény 0 és 32767 között generál egy számot
*/
void beep(void) {
for(nn=0; nn<=40; nn++) {
PORTA.F0=0;
Delay_us(200);
PORTA.F0=1;
Delay_us(200);
}
}
void kijelzes(void) {
if(result<=1){
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=1;
PORTB.F4=0;
PORTB.F5=1;
PORTB.F6=1;
PORTB.F7=1;
}
else if(result==2){
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=0;
PORTB.F4=1;
PORTB.F5=0;
PORTB.F6=1;
PORTB.F7=1;
}
else if(result==3){
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=0;
PORTB.F4=0;
PORTB.F5=0;
PORTB.F6=1;
PORTB.F7=1;
}
else if(result==4){
PORTB.F1=0;
PORTB.F2=1;
PORTB.F3=0;
PORTB.F4=1;
PORTB.F5=0;
PORTB.F6=1;
PORTB.F7=0;
}
else if(result==5){
PORTB.F1=0;
PORTB.F2=1;
PORTB.F3=0;
PORTB.F4=0;
PORTB.F5=0;
PORTB.F6=1;
PORTB.F7=0;
}
else if(result>=6){
PORTB.F1=0;
PORTB.F2=0;
PORTB.F3=0;
PORTB.F4=1;
PORTB.F5=0;
PORTB.F6=0;
PORTB.F7=0;
}
}
void villogas(void) {
for(ii=0; ii<=5; ii++) {
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=1;
PORTB.F4=1;
PORTB.F5=1;
PORTB.F6=1;
PORTB.F7=1;
Delay_ms(75);
kijelzes();
Delay_ms(150);
}
}
void main() {
TRISB0_bit=1;
TRISB1_bit=0; //bal-felso
TRISB2_bit=0; //bal-kozepso
TRISB3_bit=0; //bal-also
TRISB4_bit=0; //kozepso
TRISB5_bit=0; //jobb-felso
TRISB6_bit=0; //jobb-kozepso
TRISB7_bit=0; //jobb-also
TRISA0_bit=0; //hangszoro
Delay_ms(100);
dolgozok:
PORTB.F1=0;
PORTB.F2=0;
PORTB.F3=0;
PORTB.F4=0;
PORTB.F5=0;
PORTB.F6=0;
PORTB.F7=0;
beep();
beep();
beep();
Delay_ms(75);
beep();
beep();
beep();
Delay_ms(75);
beep();
beep();
beep();
beep();
beep();
beep();
beep();
beep();
beep();
beep();
beep();
beep();
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=1;
PORTB.F4=1;
PORTB.F5=1;
PORTB.F6=1;
PORTB.F7=1;
kk=0;
while(PORTB.F0==0) {
PORTB.F1=0;
PORTB.F2=1;
PORTB.F3=1;
PORTB.F5=1;
PORTB.F6=1;
PORTB.F7=1;
beep();
Delay_ms(20);
PORTB.F1=1;
PORTB.F2=0;
PORTB.F3=1;
PORTB.F5=1;
PORTB.F6=1;
PORTB.F7=1;
beep();
Delay_ms(20);
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=0;
PORTB.F5=1;
PORTB.F6=1;
PORTB.F7=1;
beep();
Delay_ms(20);
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=1;
PORTB.F5=1;
PORTB.F6=1;
PORTB.F7=0;
beep();
Delay_ms(20);
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=1;
PORTB.F5=1;
PORTB.F6=0;
PORTB.F7=1;
beep();
Delay_ms(20);
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=1;
PORTB.F5=0;
PORTB.F6=1;
PORTB.F7=1;
beep();
Delay_ms(20);
}
while(1) {
if(PORTB.F0==1) {
while(PORTB.F0==1) {
kk=kk+1;
Delay_ms(10);
if(kk==100) {
goto szunya;
}
}
kk=0;
for(ii=0; ii<=40; ii++) {
result = rand();
result = result/100;
result=result/50;
kijelzes();
beep();
Delay_ms(20);
if(ii>=15) {
Delay_ms(2);
}
if(ii>=20) {
Delay_ms(5);
}
if(ii>=24) {
Delay_ms(5);
}
if(ii>=28) {
Delay_ms(5);
}
if(ii>=32) {
Delay_ms(5);
}
if(ii>=34) {
Delay_ms(5);
}
if(ii>=36) {
Delay_ms(5);
}
if(ii>=38) {
Delay_ms(5);
}
}
villogas();
}
}
szunya:
beep();
beep();
beep();
beep();
while(PORTB.F0==1) {}
PORTB.F1=1;
PORTB.F2=1;
PORTB.F3=1;
PORTB.F4=1;
PORTB.F5=1;
PORTB.F6=1;
PORTB.F7=1;
beep();
beep();
beep();
beep();
beep();
beep();
beep();
beep();
beep();
beep();
beep();
Delay_ms(75);
beep();
beep();
beep();
Delay_ms(75);
beep();
beep();
beep();
PORTB.F1=0;
PORTB.F2=0;
PORTB.F3=0;
PORTB.F4=0;
PORTB.F5=0;
PORTB.F6=0;
PORTB.F7=0;
ff = EEPROM_Read(0x00);
ff+=1;
EEPROM_Write(0x00,ff);
while(1) {
if(PORTB.F0==1) {
while(PORTB.F0==1) {
kiki=kiki+1;
Delay_ms(10);
}
if(kiki>=50) {
goto dolgozok;
}
else {
kiki=0;
}
}
}
}
Hosszú, nemde?
A hex fájl innen tölthető le.
A program teljesen saját fejlesztés.
A működéséről készített videó.
A kapcsolás:
Ha segítségre van szükséged a NYÁK megtervezésében, a program égetésében fordulj bátran hozzám a hovanhenrik1@gmail.com címen.
A következő cikkemben egy digitális voltmérő áramkört fogok nektek leírni majd megkezdem újabb nagy témámat, ami a makettezők ezen belül is a járműmakettezők számára lesz segítség.

Nincsenek megjegyzések:
Megjegyzés küldése