Digital Taxi mätare (4 / 5 steg)
Steg 4: Programmera i C languagemy lo
#include
#include
#include "24LC256.h"
#include
/*----------------------------------------------------
port och lite uppdrag för LCD ***
----------------------------------------------------*/
#define TH0RELOAD_VALUE 0X3c
#define TL0RELOAD_VALUE 0Xb0
#define wheel_diameter 5
#define sant 1
#define LED_DSP P2 / / LED-Display (7-segment LED)
TypeDef unsigned char bit_8;
bit_8 g_byCountOf50ms;
kod unsigned char num_led [16] =
{0x3F, 0x06, 0x5B, 0x4F, 0x66, //0,1,2,3,4
0x6D, 0x7D, 0x07, 0x7F, 0x6F, //5,6,7,8,9
0x77, 0x7C, 0x39, 0x5E, 0x79, //A,b,C,d,E
0x71}.
unsigned char sensor_variable, hastighet, switch_inc_variable;
unsigned char waiting_time_chargevariable, charge_pulse;
unsigned char EData;
float distance_temp;
unsigned int avstånd = 0, distance_temp2 = 0, distance_temp1;
unsigned int waiting_time_temp, waiting_time, chargevariable, charge_variable = 8;
lite distance_inc_flag, switch_mode_flag, change_status_flag, device1_flag, device2_flag, device3_flag, device4_flag, device5_flag, device6_flag, device7_flag, device8_flag;
lite run_bit;
kod bit_8 * val [] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}; siffriga array
kod unsigned char * route1 [] = {"MP nagar", "MP nagar", "MP nagar", "MP nagar", "MP nagar"};
kod unsigned char * route2 [] = {"5-No Stop", "Arera Colony", "T T Nagar", "Ayodhya", "Piplani"};
kod unsigned char * ladda [] = {"Max Charge = 50Rs","Max Charge = 60Rs","Max Charge = 200Rs","Max Charge = 200Rs","Max Charge = 60Rs"};
kod unsigned char * distance1 [] = {"MaxDistance = 15 km","MaxDistance = 25 km","MaxDistance = 30 km","MaxDistance = 35 km","MaxDistance = 13 km"};
sbit rs = P0 ^ 0; Registrera dig väljer du port 3,5
sbit rw = P0 ^ 1; läsa/skriva är port 3.4
sbit sv = P0 ^ 2; Aktivera är port 3.3
sbit d7 = P1 ^ 7; upptagen flaggan är port 1,7
sbit DSP1 = P0 ^ 3; DSP1 aktiverar (aktiv låg nivå)
sbit DSP2 = P0 ^ 4; DSP2 aktiverar (aktiv låg nivå)
sbit DSP3 = P0 ^ 5. DSP3 aktiverar (aktiv låg nivå)
sbit Dot_Point = P2 ^ 7;
sbit route_selection = P0 ^ 7;
sbit kör = P0 ^ 6.
sbit förutbetalda = P0 ^ 5.
void command(bit_8);
void data_in(bit_8*);
void initlcd(void);
void display_numeric (bit_8);
void display_int(unsigned int);
void fördröjning (unsigned int);
void display_led (int num, int dly);
void external0 () avbrott 0
{
sensor_variable ++;
charge_pulse ++;
waiting_time_temp = 0;
EX0 = 0;
}
void timer1 () avbrott 3
{
}
void timer0 () avbrott 1
{
TH0 = TH0RELOAD_VALUE;
TL0 = TL0RELOAD_VALUE;
g_byCountOf50ms ++;
IF(charge_pulse==10)
{
charge_variable = charge_variable + 2.
charge_pulse = 0;
}
om (g_byCountOf50ms > = 20)
{
Det innebär 1 sekund (50 ms X 20) är över
g_byCountOf50ms = 0;
beräkna temp avståndet för 1 secound
distance_temp = distance_temp1 = sensor_variable * wheel_diameter;
beräkning av hastigheten i 1 secound
hastighet = distance_temp/0.0166;
distance_temp2 = distance_temp2 + distance_temp1;
beräkning av den totala distace från distance_temp1
avståndet = distance_temp1 + avstånd;
waiting_time_temp ++;
sensor_variable = 0;
IF(distance_fare)
IF(waiting_time_temp>20)
{
waiting_time ++;
waiting_time_chargevariable ++;
}
IF(waiting_time_chargevariable>10)
{
chargevariable ++;
waiting_time_chargevariable = 0;
}
}
}
void main)
{
unsigned char route_selection_variable;
route_selection = 1;
köra = 1;
Prepaid = 1;
initlcd();
Command(0x80);
data_in ("AutomatedDigital");
Command(0xC0);
data_in ("*** Taxi Meter ***");
Command(0x90);
data_in ("Pres * att lista");
Command(0xd0);
data_in ("Pres # att köra");
TMOD = 0X01;
TCON = 0X11;
IE = 0X83;
While(1)
{
IF(route_selection==0)
{
kommando (0x80);
data_in (route1[route_selection_variable]);
kommando (0xc0);
data_in (route2[route_selection_variable]);
kommando (0x90);
data_in (charge[route_selection_variable]);
kommando (0xd0);
data_in (distance1[route_selection_variable]);
route_selection_variable ++;
fördröjning (100);
IF(route_selection_variable==4)
{
route_selection_variable = 0;
}
}
IF(Run==0)
{
run_bit = 1;
initlcd();
IE = 0X83;
}
IF(Prepaid==0)
{
initlcd();
kommando (0x80);
data_in ("förbetalda läge");
kommando (0xc0);
data_in ("Kundnr =");
DelayMs(50);
EData = ReadBYTE(0x00); Läs tillbaka
kommando (0xcb);
display_int(EData);
kommando (0x90);
data_in ("hemliga ID =");
EData = ReadBYTE(0x01); Läs tillbaka
kommando (0x9b);
display_int(EData);
}
IF(run_bit==1)
{
EX0 = 1;
kommando (0x80);
data_in ("Trav Dist =");
kommando (0x8a);
display_int (distans);
kommando (0xc0);
data_in ("Speed =");
kommando (0xc6);
display_int (hastighet);
kommando (0xcb);
data_in ("km/h");
kommando (0x90);
data_in ("vänta tid =");
kommando (0x9a);
display_int (waiting_time);
kommando (0xd0);
data_in ("vänta crgs =");
kommando (0xda);
display_int(chargevariable);
display_led(charge_variable,150);
display_led(waiting_time,150);
}
fördröjning (1000);
}
}
/*--------------------------
initiera LCD ***
--------------------------*/
void initlcd()
{
Command(56);
Command(0x01);
Command(0x02);
Command(12);
}
/*----------------------------
kontroll av flaggan upptagen ***
----------------------------*/
void busy()
{
D7 = 1;
RS = 0;
RW = 1;
While(D7!=0)
{
sv = 0;
sv = 1;
}
}
/*-------------------------
Skicka kommando till LCD ***
-------------------------*/
void command(bit_8 val)
{
Busy();
P1 = val;
RS = 0;
RW = 0;
sv = 1;
sv = 0;
}
/*--------------------------
ange data till LCD ***
--------------------------*/
void data_in(bit_8 *string)
{
bit_8 i.
Busy();
for(i=0;string[i]!='\0';i++)
{
P1 = sträng [i];
RS = 1;
RW = 0;
sv = 1;
sv = 0;
}
}
void display_int(unsigned int i)
{
unsigned char ten_thousands, tusentals, hundratals, tens, kära;
ten_thousands = jag / 10000;
data_in(val[ten_thousands]);
jag = jag % 10000;
tusentals = jag / 1000;
data_in(val[thousands]);
jag = jag % 1000;
hundra = jag / 100;
data_in(val[hundreds]);
jag = jag % 100.
tens = jag / 10;
data_in(val[TENS]);
de = jag % 10.
data_in(val[Ones]);
}
void fördröjning (unsigned int k)
{
unsigned int i, j.
för (jag = 0; jag < = k, i ++)
för (j = 0; j < = 100; j ++);
}
void display_led (int num, int dly) {
int i, n1, n2, n3;
N1 = (int)(num/100); Divisionsoperatorn (53/10 = 5)
NUM = (int) (num % 100).
N2 =(int) num/10.
N2 = (int)(num%10); Modules operatör (53% 10 = 3)
för (jag = 0; jag DSP1 = 0; / / DSP1 aktivera active
DSP2 = 1;
DSP3 = 0;
LED_DSP = num_led [n3];
Delay(1);
DSP2 = 0; DSP2 aktivera active
DSP1 = 1;
DSP3 = 0;
LED_DSP = num_led [n2];
Delay(1);
DSP2 = 0; DSP2 aktivera active
DSP1 = 0;
DSP3 = 1;
LED_DSP = num_led [1].
Delay(1);
}
}
/*
void display_led (int num, int dly) {
int i, n1, n2, n3;
N1 = (int)(num/100); Divisionsoperatorn (321/100 = 3)
NUM = (int)(num%100); Modules operatör (321% 100 = 21)
N2 = (int)(num/10); Divisionsoperatorn (21/10 = 2)
N3 = (int)(num%10);
för (jag = 0; jag DSP1 = 1; / / DSP1 aktivera active
DSP2 = 0;
DSP3 = 0;
LED_DSP = num_led [n3];
Delay(1);
DSP2 = 1; DSP2 aktivera active
DSP1 = 0;
DSP3 = 0;
LED_DSP = num_led [n2];
Delay(1);
DSP3 = 1; DSP2 aktivera active
DSP1 = 0;
DSP2 = 0;
LED_DSP = num_led [n1];
Delay(1);
}
} */
#include
#include
#include "24LC256.h"
#include
/*----------------------------------------------------
port och lite uppdrag för LCD ***
----------------------------------------------------*/
#define TH0RELOAD_VALUE 0X3c
#define TL0RELOAD_VALUE 0Xb0
#define wheel_diameter 5
#define sant 1
#define LED_DSP P2 / / LED-Display (7-segment LED)
TypeDef unsigned char bit_8;
bit_8 g_byCountOf50ms;
kod unsigned char num_led [16] =
{0x3F, 0x06, 0x5B, 0x4F, 0x66, //0,1,2,3,4
0x6D, 0x7D, 0x07, 0x7F, 0x6F, //5,6,7,8,9
0x77, 0x7C, 0x39, 0x5E, 0x79, //A,b,C,d,E
0x71}.
unsigned char sensor_variable, hastighet, switch_inc_variable;
unsigned char waiting_time_chargevariable, charge_pulse;
unsigned char EData;
float distance_temp;
unsigned int avstånd = 0, distance_temp2 = 0, distance_temp1;
unsigned int waiting_time_temp, waiting_time, chargevariable, charge_variable = 8;
lite distance_inc_flag, switch_mode_flag, change_status_flag, device1_flag, device2_flag, device3_flag, device4_flag, device5_flag, device6_flag, device7_flag, device8_flag;
lite run_bit;
kod bit_8 * val [] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"}; siffriga array
kod unsigned char * route1 [] = {"MP nagar", "MP nagar", "MP nagar", "MP nagar", "MP nagar"};
kod unsigned char * route2 [] = {"5-No Stop", "Arera Colony", "T T Nagar", "Ayodhya", "Piplani"};
kod unsigned char * ladda [] = {"Max Charge = 50Rs","Max Charge = 60Rs","Max Charge = 200Rs","Max Charge = 200Rs","Max Charge = 60Rs"};
kod unsigned char * distance1 [] = {"MaxDistance = 15 km","MaxDistance = 25 km","MaxDistance = 30 km","MaxDistance = 35 km","MaxDistance = 13 km"};
sbit rs = P0 ^ 0; Registrera dig väljer du port 3,5
sbit rw = P0 ^ 1; läsa/skriva är port 3.4
sbit sv = P0 ^ 2; Aktivera är port 3.3
sbit d7 = P1 ^ 7; upptagen flaggan är port 1,7
sbit DSP1 = P0 ^ 3; DSP1 aktiverar (aktiv låg nivå)
sbit DSP2 = P0 ^ 4; DSP2 aktiverar (aktiv låg nivå)
sbit DSP3 = P0 ^ 5. DSP3 aktiverar (aktiv låg nivå)
sbit Dot_Point = P2 ^ 7;
sbit route_selection = P0 ^ 7;
sbit kör = P0 ^ 6.
sbit förutbetalda = P0 ^ 5.
void command(bit_8);
void data_in(bit_8*);
void initlcd(void);
void display_numeric (bit_8);
void display_int(unsigned int);
void fördröjning (unsigned int);
void display_led (int num, int dly);
void external0 () avbrott 0
{
sensor_variable ++;
charge_pulse ++;
waiting_time_temp = 0;
EX0 = 0;
}
void timer1 () avbrott 3
{
}
void timer0 () avbrott 1
{
TH0 = TH0RELOAD_VALUE;
TL0 = TL0RELOAD_VALUE;
g_byCountOf50ms ++;
IF(charge_pulse==10)
{
charge_variable = charge_variable + 2.
charge_pulse = 0;
}
om (g_byCountOf50ms > = 20)
{
Det innebär 1 sekund (50 ms X 20) är över
g_byCountOf50ms = 0;
beräkna temp avståndet för 1 secound
distance_temp = distance_temp1 = sensor_variable * wheel_diameter;
beräkning av hastigheten i 1 secound
hastighet = distance_temp/0.0166;
distance_temp2 = distance_temp2 + distance_temp1;
beräkning av den totala distace från distance_temp1
avståndet = distance_temp1 + avstånd;
waiting_time_temp ++;
sensor_variable = 0;
IF(distance_fare)
IF(waiting_time_temp>20)
{
waiting_time ++;
waiting_time_chargevariable ++;
}
IF(waiting_time_chargevariable>10)
{
chargevariable ++;
waiting_time_chargevariable = 0;
}
}
}
void main)
{
unsigned char route_selection_variable;
route_selection = 1;
köra = 1;
Prepaid = 1;
initlcd();
Command(0x80);
data_in ("AutomatedDigital");
Command(0xC0);
data_in ("*** Taxi Meter ***");
Command(0x90);
data_in ("Pres * att lista");
Command(0xd0);
data_in ("Pres # att köra");
TMOD = 0X01;
TCON = 0X11;
IE = 0X83;
While(1)
{
IF(route_selection==0)
{
kommando (0x80);
data_in (route1[route_selection_variable]);
kommando (0xc0);
data_in (route2[route_selection_variable]);
kommando (0x90);
data_in (charge[route_selection_variable]);
kommando (0xd0);
data_in (distance1[route_selection_variable]);
route_selection_variable ++;
fördröjning (100);
IF(route_selection_variable==4)
{
route_selection_variable = 0;
}
}
IF(Run==0)
{
run_bit = 1;
initlcd();
IE = 0X83;
}
IF(Prepaid==0)
{
initlcd();
kommando (0x80);
data_in ("förbetalda läge");
kommando (0xc0);
data_in ("Kundnr =");
DelayMs(50);
EData = ReadBYTE(0x00); Läs tillbaka
kommando (0xcb);
display_int(EData);
kommando (0x90);
data_in ("hemliga ID =");
EData = ReadBYTE(0x01); Läs tillbaka
kommando (0x9b);
display_int(EData);
}
IF(run_bit==1)
{
EX0 = 1;
kommando (0x80);
data_in ("Trav Dist =");
kommando (0x8a);
display_int (distans);
kommando (0xc0);
data_in ("Speed =");
kommando (0xc6);
display_int (hastighet);
kommando (0xcb);
data_in ("km/h");
kommando (0x90);
data_in ("vänta tid =");
kommando (0x9a);
display_int (waiting_time);
kommando (0xd0);
data_in ("vänta crgs =");
kommando (0xda);
display_int(chargevariable);
display_led(charge_variable,150);
display_led(waiting_time,150);
}
fördröjning (1000);
}
}
/*--------------------------
initiera LCD ***
--------------------------*/
void initlcd()
{
Command(56);
Command(0x01);
Command(0x02);
Command(12);
}
/*----------------------------
kontroll av flaggan upptagen ***
----------------------------*/
void busy()
{
D7 = 1;
RS = 0;
RW = 1;
While(D7!=0)
{
sv = 0;
sv = 1;
}
}
/*-------------------------
Skicka kommando till LCD ***
-------------------------*/
void command(bit_8 val)
{
Busy();
P1 = val;
RS = 0;
RW = 0;
sv = 1;
sv = 0;
}
/*--------------------------
ange data till LCD ***
--------------------------*/
void data_in(bit_8 *string)
{
bit_8 i.
Busy();
for(i=0;string[i]!='\0';i++)
{
P1 = sträng [i];
RS = 1;
RW = 0;
sv = 1;
sv = 0;
}
}
void display_int(unsigned int i)
{
unsigned char ten_thousands, tusentals, hundratals, tens, kära;
ten_thousands = jag / 10000;
data_in(val[ten_thousands]);
jag = jag % 10000;
tusentals = jag / 1000;
data_in(val[thousands]);
jag = jag % 1000;
hundra = jag / 100;
data_in(val[hundreds]);
jag = jag % 100.
tens = jag / 10;
data_in(val[TENS]);
de = jag % 10.
data_in(val[Ones]);
}
void fördröjning (unsigned int k)
{
unsigned int i, j.
för (jag = 0; jag < = k, i ++)
för (j = 0; j < = 100; j ++);
}
void display_led (int num, int dly) {
int i, n1, n2, n3;
N1 = (int)(num/100); Divisionsoperatorn (53/10 = 5)
NUM = (int) (num % 100).
N2 =(int) num/10.
N2 = (int)(num%10); Modules operatör (53% 10 = 3)
för (jag = 0; jag DSP1 = 0; / / DSP1 aktivera active
DSP2 = 1;
DSP3 = 0;
LED_DSP = num_led [n3];
Delay(1);
DSP2 = 0; DSP2 aktivera active
DSP1 = 1;
DSP3 = 0;
LED_DSP = num_led [n2];
Delay(1);
DSP2 = 0; DSP2 aktivera active
DSP1 = 0;
DSP3 = 1;
LED_DSP = num_led [1].
Delay(1);
}
}
/*
void display_led (int num, int dly) {
int i, n1, n2, n3;
N1 = (int)(num/100); Divisionsoperatorn (321/100 = 3)
NUM = (int)(num%100); Modules operatör (321% 100 = 21)
N2 = (int)(num/10); Divisionsoperatorn (21/10 = 2)
N3 = (int)(num%10);
för (jag = 0; jag DSP1 = 1; / / DSP1 aktivera active
DSP2 = 0;
DSP3 = 0;
LED_DSP = num_led [n3];
Delay(1);
DSP2 = 1; DSP2 aktivera active
DSP1 = 0;
DSP3 = 0;
LED_DSP = num_led [n2];
Delay(1);
DSP3 = 1; DSP2 aktivera active
DSP1 = 0;
DSP2 = 0;
LED_DSP = num_led [n1];
Delay(1);
}
} */