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
}
}