por cristian » 16 Set 2009 08:15
o programador é ruim mesmo eu admito q nao tenho muita experiencia
mas a IDE deveria ajudar + .... pelo menos é q acho
ta ai fabim o programa completo
unsigned short read_ds1307(unsigned short address );
void ler_Num_ticket();
void salva_Total_credito();
void ler_total_credito();
#define liga_led2 portc.f1=0;
#define desliga_led2 portc.f1=1;
#define liga_ponto portc.f1=0;
#define desliga_ponto portc.f1=1;
unsigned short sec;
unsigned short minute;
unsigned short hour;
unsigned short day;
unsigned short date;
unsigned short month;
unsigned short year;
char txt[12];
char ddate[11];
char time[10];
sbit botao_B at Rc1_bit;
sbit botao_g at RC0_BIT;
unsigned int pulsos,dados,receive,ind_rx,x;
unsigned short int var,var1byte, var2,credito;
char buf_rs232[15];
unsigned long int Total_credito;
#define unilo(param,param2) ((short *)¶m)[0] = ((short *)¶m2)[0]
#define unihi(param,param2) ((short *)¶m)[1] = ((short *)¶m2)[0]
#define unihigh(param, param2) ((short *)¶m)[2] = ((short *)¶m2)[0]
#define unihiguest(param, param2) ((short *)¶m)[3] = ((short *)¶m2)[0]
//******************* memoria **************
unsigned int Tik_num,ind_memo,end_aux,total_tik;
unsigned short int dip,valor_tik,num_relat,valor_display,relat_num;
struct flag1{
print;
timer_pulso;
piscaled1;
piscaled2;
trat_pulso;
att_display ;
DISPLAY_pronto;
incr_contador;
timer_1seg;
imrime;
}a;
unsigned char BCD2UpperCh(unsigned char bcd)
{
return ((bcd >> 4) + 0x30);
}
unsigned char BCD2LowerCh(unsigned char bcd)
{
return ((bcd & 0x0F) + 0x30);
}
#include "24c256.c"
#include "ds1307.c"
#include "built_in.h"
// #include "memoria.c"
//****************************** salva ticket **************
salva_ticket()
{
ind_memo=SI2C_read(0)<<8;
ind_memo=ind_memo+SI2C_read(1);
SI2C_write(ind_memo,hi(Tik_num));ind_memo++;
SI2C_write(ind_memo,lo(Tik_num));ind_memo++;
SI2C_write(ind_memo,dip);ind_memo++;
SI2C_write(ind_memo,hour);ind_memo++;
SI2C_write(ind_memo,minute);ind_memo++;
SI2C_write(ind_memo,month);ind_memo++;
SI2C_write(ind_memo,date);ind_memo++;
SI2C_write(ind_memo,credito);ind_memo++;
SI2C_write(0,hi(ind_memo));
SI2C_write(1,lo(ind_memo));
}//salva ticket
ler_dados_memo()
{
Tik_num=SI2C_read(end_aux)<<8;end_aux++;
Tik_num=tik_num+SI2C_read(end_aux);end_aux++;
dip=SI2C_read(end_aux);end_aux++;
hour=SI2C_read(end_aux);end_aux++;
minute=SI2C_read(end_aux);end_aux++;
month=SI2C_read(end_aux);end_aux++;
date=SI2C_read(end_aux);end_aux++;
credito=SI2C_read(end_aux);end_aux++;
}
converte_dados()
{
wordtostr(Tik_num,txt);
uart1_write_text("Ticket ");
uart1_write_text(txt);
txt[0]=BCD2UpperCh(dip);
txt[1]=BCD2LowerCh(dip);
txt[2]='\0';
uart1_write_text("/");
uart1_write_text(txt);
uart1_write_text(" ");
txt[0]=BCD2UpperCh(date);
txt[1]=BCD2LowerCh(date);
txt[2]='/';
txt[3]=BCD2UpperCh(month);
txt[4]=BCD2LowerCh(month);
txt[5]=' ';
txt[6]=BCD2UpperCh(hour);
txt[7]=BCD2LowerCh(hour);
txt[8]=':';
txt[9]=BCD2UpperCh(minute);
txt[10]=BCD2LowerCh(minute);
uart1_write_text(txt);
uart1_write_text(' ');
wordtostr(credito,txt);
uart1_write_text(txt);
uart1_write_text(",00");
uart1_write(13);
}
unsigned char ler_rtc()
{
sec=read_ds1307(0); // read second
minute=read_ds1307(1); // read minute
hour=read_ds1307(2); // read hour
day=read_ds1307(3); // read day
date=read_ds1307(4); // read date
month=read_ds1307(5); // read month
year=read_ds1307(6); // read year
time[0] = BCD2UpperCh(hour);
time[1] = BCD2LowerCh(hour);
time[2] = ':';
time[3] = BCD2UpperCh(minute);
time[4] = BCD2LowerCh(minute);
time[5] = ':';
time[6] = BCD2UpperCh(sec);
time[7] = BCD2LowerCh(sec);
time[8] = ' ';
time[9] = '\0';
ddate[0] = BCD2UpperCh(date);
ddate[1] = BCD2LowerCh(date);
ddate[2] ='/';
ddate[3] = BCD2UpperCh(month);
ddate[4] = BCD2LowerCh(month);
ddate[5] ='/';
ddate[6] = '2';
ddate[7] = '0';
ddate[8] = BCD2UpperCh(year);
ddate[9] = BCD2LowerCh(year);
ddate[10] = '\0';
}
Apaga_buf()
{
for(x=0;x<=14;x++)
{
buf_rs232[x]=0;
ind_rx=0;
}
}
//********************************** apaga memoria
Apaga_memoria()
{
for(x=25;x<=ind_memo;x++)
{
SI2C_write(x,0);
}
SI2C_write(0,0);SI2C_write(1,25);//restaura indice
}
ler_Num_ticket()
{
delay_ms(20);
}
//*************************************************************************
void main() {
I2C1_Init(100000);
UART1_Init(9600);
TRISA=0B00000000;
trisc=0b10011000;
portc=0;
TRISB=0;
TRISD=0B11111111;
TRISE=0B00000000;
TRISB = 0;
PORTB = 0;
Delay_ms(100);
pulsos=0;
dip=0x10;
credito=100;
while(1)
{
//*********************************** relatorio *******************
if (UART1_Data_Ready() == 1) {
//****************************************** relatorio *******************
if(UART1_Read()=='1')
{
end_aux=25;//inicia end
ind_memo=SI2C_read(0)<<8;ind_memo=ind_memo+SI2C_read(1);
do
{
ler_dados_memo();
converte_dados();
}while(end_aux<ind_memo);//imrpime ticket ate ind memoria
//...-------------------------- continua relatorio
//total de tickets
//**************************** ler Num ticket impressos **********
var1byte=SI2C_read(3);unilo(Tik_num,var1byte);
var1byte=SI2C_read(2);unihi(Tik_num,var1byte);
//ler_Num_ticket();
wordtostr(Tik_num,txt);
uart1_write_text("Quant. Total de Ticket=");
uart1_write_text(txt);
uart1_write(13);
//valor tickets
//**************************** ler valor do total de creditos
var1byte=SI2C_read(7);unilo(Total_credito,var1byte);
var1byte=SI2C_read(6);unihi(Total_credito,var1byte);
var1byte=SI2C_read(5);unihigh(Total_credito,var1byte);
var1byte=SI2C_read(4);unihiguest(Total_credito,var1byte);
wordtostr(Total_credito,txt);
uart1_write_text("Valor Total de Ticket=");
uart1_write_text(txt);
uart1_write_text(",00");
uart1_write(13);
//quant relator
//icrementa quantidade relatorio
Relat_num=SI2C_read(0x08);
Relat_num++;
SI2C_write(0x08,Relat_num);
shorttostr(Relat_num,txt);
uart1_write_text("Quant. de Relatorios=");
uart1_write_text(txt);
uart1_write(13);
//ultimo relat
//salva o ultimo relatorio
SI2C_write(0x12,hour);
SI2C_write(0x13,minute);
SI2C_write(0x11,month);
SI2C_write(0x10,date);
}
//****************************************** imprime ticket *******************
if(UART1_Read()=='2')
{
//**************************** ler Num ticket impressos **********
var1byte=SI2C_read(3);unilo(Tik_num,var1byte);
var1byte=SI2C_read(2);unihi(Tik_num,var1byte);
//**************************** end *******************************
Tik_num++;
wordtostr(Tik_num,txt);
uart1_write_text("Ticket ");
uart1_write_text(txt);
uart1_write(13);
wordtostr(credito,txt);
uart1_write_text("credito=");
txt[0]='R';txt[1]='$';
uart1_write_text(txt);
uart1_write_text(",00");
uart1_write(13);
ler_rtc();//pega data e hora
uart1_write_text(time);
uart1_write_text(ddate);
salva_ticket();
//****************************salvar ticket
SI2C_write(2,hi(Tik_num));
SI2C_write(3,lo(Tik_num));
//**************************** ler valor do total de creditos
var1byte=SI2C_read(7);unilo(Total_credito,var1byte);
var1byte=SI2C_read(6);unihi(Total_credito,var1byte);
var1byte=SI2C_read(5);unihigh(Total_credito,var1byte);
var1byte=SI2C_read(4);unihiguest(Total_credito,var1byte);
Total_credito=Total_credito+credito;//soma valor do ticket ao total
SI2C_write(7,lo(Total_credito));
SI2C_write(6,hi(Total_credito));
SI2C_write(5,higher(Total_credito));
SI2C_write(4,highest(Total_credito));
}
//****************************************** apaga memoria *******************
if(UART1_Read()=='3')
{
ind_memo=SI2C_read(0)<<8;ind_memo=ind_memo+SI2C_read(1); //ler end atual
apaga_memoria();
uart1_write_text("memoria apagada");
}
//****************************************** inicializa sistema ****************
if(UART1_Read()=='4')
{
//**************** init indice
SI2C_write(0,0);SI2C_write(1,25);
//**************** init memoria
for(x=2;x<=0x18;x++){SI2C_write(x,0);}
}//******************************************** fim receptor