Avatar billede themustangman Nybegynder
18. februar 2003 - 21:05 Der er 5 kommentarer og
1 løsning

Hvem vil lave et moduldiagram for dette program

Gider nogen lave et moduldiagram over følgende program:


#include "reg515.h"
#include "absacc.h"
#include "stdio.h"

COMMAND = 0x8000;
DISPDAT = 0x8001;
DISPSTAT = 0x8002;
unsigned char text1[16] = ""; //Linie 1 i displayet
unsigned char text2[16] = ""; //Linie 2 i desplayet
unsigned char send[9] = ""; //Send data
unsigned char recv[9] = ""; //Modtag data

//Difinision af dioderne P1.0 - 1.7
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;

//Difinison af switchen P5.0 - P5.3
sbit P5_0 = 0xF8;
sbit P5_1 = 0xF9;
sbit P5_2 = 0xFA;
sbit P5_3 = 0xFB;

int p,s,b,q;

void trans(void) //Bruges til at sende data med
{
    if(s<sizeof(send))
    {
        SBUF=send[s];
        s++;
    }
    else
    {
        s=0;
    }
}

void recieve(void) //Bruges til at modtage data med
{
    if (q<sizeof(recv))
    {
        recv[q]=SBUF;
        q++;
    }
    else
    {
        q=0;
    }
}

void ser_int(void) interrupt 4
{
    if(TI)
    {
        TI = 0;
        trans(); //Transmiterer send
    }

    if(RI)
    {
        RI = 0;
        recieve(); //Modtager
    }
}

void int_ser(void) //Seriel kommunikation
{
    BD=q;
    PCON=PCON | 0x80;
    SCON=0x50;
}

void delay(unsigned int delay) //Delay kommando
{
    int p;
    for(p=0;p<delay;p++);
}

int ad1(void)
{
    MX0 = s; //Difinition af venstre potensiometer
    DAPR=0x00;
    while(BSY);
    return ADDAT/5; //Vind hastighed = ADDAT divideret med 5
}

int ad2(void)
{
    MX0 = q; //Difinition af højre potensiometer
    DAPR=0x00;
    while(BSY);
    return ADDAT*4; //Lufttryk = ADDAT ganget med 4
}

void vind_hastighed(void) // AD1
{
    if(ad1() == 0) /*Alle dioder er slukket*/
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 1) /*Alle dioder er slukket*/
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 2)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 3)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 4)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 5)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 6)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 7)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 8)
        P1_0 = 0;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 9)
        P1_0 = 0;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 10)
        P1_0 = 0;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 11)
        P1_0 = 0;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 12)
        P1_0 = 0;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 13)
        P1_0 = 0;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
       
    if(ad1() == 14)
        P1_0 = 1;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
   
    if(ad1() == 15)
        P1_0 = 1;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 16)
        P1_0 = 1;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 17)
        P1_0 = 1;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 18)
        P1_0 = 1;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 19)
        P1_0 = 1;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 20)
        P1_0 = 1;
        P1_1 = 1;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 21)
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 22)
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 23)
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 24)
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 25)
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 26)
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 27)
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 28)
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 29)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 30)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() == 31)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;

    if(ad1() >= 32)
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 1;
        P1_3 = 0;
        P1_4 = 0;
}

void vind_retning(void) //Ad2
{
    {
        P1=0x80;
        if(P5_0 == 1) //Instil vindretning
            P1_7 = 1;
            else
            P1_7 = 0;

        if(P5_1 == 1) //Instil vindretning
            P1_6 = 1;
            else
            P1_6 = 0;

        if(P5_2 == 1) //Instil vindretning
            P1_5 = 1;
            else
            P1_5 = 0;

    }
}

void int_disp(void) //Initialiserer displayet
{
    int p;
    delay(1300);

    for(p=0;p<3;p++)
    {
    XBYTE [COMMAND] = 0x30; //Starter øverste linie
    delay(400);
    }
    XBYTE [COMMAND] = 0x38; //Starter nederste linie
    delay(100);

    XBYTE [COMMAND] = 0x0c;
    delay(100);

    XBYTE [COMMAND] = 0x06;
    delay(100);

    XBYTE[COMMAND]=0x01; //Sletter displayet
    delay(100);   
}

void Line1(void) //Skriver på øverste linie
{
    int temp;
    temp = ad1();
   
    sprintf(text1,"Vind hast. %4d", temp);
    XBYTE [COMMAND] = 0x80;
    delay(1000);
   
    for(p=0;p<sizeof(text1);p++)
    {
        if(text1[p] != 0x00)
        {
            XBYTE [DISPDAT] = text1[p];
            delay(400);
        }
    }
}

void Line2(void) //Skriver på nederste linie
{
    int vejr, q;
    vejr = ad2();
    XBYTE [COMMAND] = 0xBF;
    delay(1000);

    sprintf(text2,"Lufttryk %5d", vejr);
    for(q=0;q<sizeof(text2);q++)
    {
        XBYTE [DISPDAT] = text2[q];
        delay(100);
    }
}

void main(void) //Kører hele programmet
{
    int p;
    P1 = 0x00; //Alle dioder slukkes
    int_disp(); //Displayet startes
    int_ser(); //Serialkommunikation startes

    while(1)
    {
        for(p=0;p<=16;p++) //en løkke der køres 16 gange
        {
            text1[p]=' '; //Clear screen i linie 1
            text2[p]=' '; //Clear screen i linie 2
        }
        Line1(); //Line 1 køres
        Line2(); //Line 2 køres
        vind_hastighed(); //Vinhastighed køres
        vind_retning(); //Vinretning køres
    }   
}
Avatar billede jpk Nybegynder
19. februar 2003 - 09:34 #1
Hmm, dine if'er er ikke gode, du skal gøre således:

if(ad1() == 0) /*Alle dioder er slukket*/
{
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
}

ellers er det kun den første linie efter if'en der "måske" sættes, de efterfølgende vil altid blive sat!

Desuden kan du lige så godt kombinere de if'er der har samme resultat

if(ad1() == 0 || ad1() == 1) /*Alle dioder er slukket*/
{
        P1_0 = 0;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
}
else if(ad1() >= 2 && ad1() <= 7)
{
        P1_0 = 1;
        P1_1 = 0;
        P1_2 = 0;
        P1_3 = 0;
        P1_4 = 0;
}
else if(...)
{
  osv...
}

Jeg har også tilføjet "else", da det gør afviklingen hurtigere!
Hvis den først er faldet i én "kategori", kan den jo ikke falde i en anden...
Avatar billede themustangman Nybegynder
19. februar 2003 - 09:48 #2
Ok, takker

Men er der ikke nogen som gider at lave et moduldiagram?
Avatar billede jpk Nybegynder
19. februar 2003 - 09:51 #3
Altså, du har jo hverken skrevet hvilken standard diagrammet skal følge eller hvilket værktøj det skal laves i!
Avatar billede themustangman Nybegynder
19. februar 2003 - 09:53 #4
Det skal bare være sådan nogle "kasser" som idikerer hver funktion.
Og det må gerne laves i visio (Men det er ikke nødvendigt, for min skyld må det da gerne laves i paint)
Avatar billede tuxic Nybegynder
19. februar 2003 - 18:10 #5
Nej vi gider ikke lave dine lektier :p
Avatar billede themustangman Nybegynder
21. februar 2003 - 00:19 #6
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester