Code:
unsigned char ch;
unsigned short j=0;
void anzeigee(unsigned int);
unsigned int eprom_lesen(unsigned short);
unsigned short eprom_schreiben(unsigned short,unsigned int);
void anzeigee(unsigned int x)
{
unsigned short anzeige[10] ;
IntToStr(x/10,anzeige);
Lcd_Out(2,5,anzeige);
LCD_Chr_CP(46);
ch = x % 10;
LCD_Chr(2,12,48+ch);
}
unsigned int eprom_lesen(unsigned short vv)
{
int dit;
unsigned short temp;
unsigned short istwert1[8],ch1;
temp = Eeprom_Read(vv);
dit = temp;
dit = dit <<8;
temp = Eeprom_Read(vv+1);
dit = dit + temp;
if(j==1)
{
IntToStr(dit/10,istwert1);
Lcd_Out(2, 5,istwert1);
LCD_Chr_CP(46);
ch1 = dit % 10;
LCD_Chr(2,12,48+ch1);
}
}
unsigned short eprom_schreiben(unsigned short xxx,unsigned int xxxx )
{
unsigned int temp;
temp = xxxx;
Eeprom_Write ( xxx+1,temp );
temp = (xxxx>>8);
Eeprom_Write ( xxx,((short)temp) );
}
void main()
{
char *text1 = "Dossierhub";
char *text2 = "cfx";
char *text3 = "cup";
char *text4 = "cf1";
unsigned short wert1, wert2, enter;
unsigned int txt_1, txt_2,tint,adresse,i=800;
unsigned long tlong;
TRISC = 0;
PORTC = 0;
TRISB = 0;
PORTB = 0;
enter = 0;
wert2 = 0;
Lcd_Config(&PORTC, 3, 1, 2, 7, 6, 5, 4);
LCD_Cmd(LCD_CLEAR);
LCD_Cmd(LCD_CURSOR_OFF );
LCD_Out(1,4,text1);
LCD_Out(2,2,text2);
do
{
ADCON1 = 0x00; //alle analog
TRISA = 0xff;
tlong = ((long)ADC_Read(3)*1600)/1023; //cfx-wert 0-160.0mm
tint = tlong;
anzeigee(tint);
ADCON1 = 0x06; //alle digital
j=0;
if ( tint > eprom_lesen(0x00)) //Umschalp. cup Öffner
{
PORTB = PORTB | 0x80;
}
else
{
PORTB = PORTB & 0x7F;
}
if ( tint < eprom_lesen(0x02)) //Schließer, Dossierhub cf1 unter 50 ein
{
PORTB |= 0x40;
}
else
{
PORTB &= 0xBF;
}
if (Button(&PORTA, 2, 30, 1) && enter == 0 ) //Umschaltpunkt cup Öffner Soll
{
while((PORTA & 0x04)==0x04); //nach dem loslassen weiter
j=1;
LCD_Cmd(LCD_CLEAR);
delay_ms(30);
LCD_Out(1,1,"Umschaltpunkt");
LCD_Out(2,1,text3);
eprom_lesen(0x00);
enter=1;
}
while(enter == 1 || enter == 2)
{
wert1 = (PORTA & 0x03); //aktuelle stellung nach wert1
if ((wert1 ^ wert2) > 0) //wurde der Rotary bewegt oder wert1 = wert2
{
wert2 = (wert2 << 1 ); //verschieben des zweiten aufgenommenden wertes
if ((wert1 ^ wert2) == 0x01)
{i += 1;}
if ((wert1 ^ wert2) == 0x02)
{i -= 1;}
if (i > 1600)
{i = 2 ;}
if (i <= 1)
{i = 1600 ;}
delay_ms(10);
wert2 = wert1 ;
anzeigee(i);
}
if (Button(&PORTA, 2, 30, 1) && enter == 1) //Dossierhub cf1 Schließer
{
while((PORTA & 0x04)==0x04); //nach dem loslassen weiter
eprom_schreiben(adresse = 0x00,tint );
LCD_Cmd(LCD_CLEAR);
LCD_Out(1,1,text1);
LCD_Out(2,1,text4);
eprom_lesen(0x02);
enter=2;
delay_ms(250);
}
if (Button(&PORTA, 2, 20, 1) && enter == 2) //enter und speichern
{ //von Schalt2 Soll
while((PORTA & 0x04)==0x04); //nach dem loslassen weiter
eprom_schreiben(adresse = 0x02,tint );
enter=0;
LCD_Cmd(LCD_CLEAR);
delay_ms(1000);
LCD_Out(1,4,text1); //Dossierhub
LCD_Out(2,2,text2);
}
}
}
while(1);
}
jetzt auch mit Programm
Lesezeichen