Postat: 25 oktober 2005, 11:34:55
Satans vad bra det där funkade, speakman!
Tack igen, alla.
Tack igen, alla.
Svenskt forum för elektroniksnack.
https://elektronikforumet.com/forum/
Kod: Markera allt
char get_keys(unsigned char *ix, unsigned char *iy)
{
unsigned char x,y;
for(y = 0; y < 3; y++) {
PORTB = 1 << (y + 4);
for(x = 0; x < 4; x++) {
if(PORTB & (1 << x)) {
*ix = x;
*iy = y;
return -1;
}
}
}
return 0;
}
void main(void)
{
unsigned char x,y;
for(;;) {
if(get_keys(&x, &y)) {
/* Tangenten (x,y) trycktes ned */
}
}
}
Kod: Markera allt
if(get_keys(&y, &x)) {
if(x==0 && y==0) out = " ";
if(x==1 && y==0) out = "0";
if(x==2 && y==0) out = "\n\r";
if(x==0 && y==1) out = "7";
if(x==1 && y==1) out = "8";
if(x==2 && y==1) out = "9";
if(x==0 && y==2) out = "4";
if(x==1 && y==2) out = "5";
if(x==2 && y==2) out = "6";
if(x==0 && y==3) out = "1";
if(x==1 && y==3) out = "2";
if(x==2 && y==3) out = "3";
USART_Write_str(out);
delay_ms(200);
}
Kod: Markera allt
unsigned char out[2] = {0,0};
unsigned char tbl[4][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{' ','0','\n'},
};
void main(void)
{
/* kod ... */
if(get_keys(&y, &x)) {
out[0] = tbl[y][x];
USART_Write_str(&out);
delay_ms(200);
}
/* kod ... */
}
Kod: Markera allt
char get_keys(unsigned char *ix, unsigned char *iy) {
unsigned char x,y;
for(y = 0; y < 3; y++) {
PORTB = 1 << (y + 4);
for(x = 0; x < 4; x++) {
if(PORTB & (1 << x)) {
*ix = x;
*iy = y;
return -1;
}
}
}
return 0;
}
void main(void) {
int duty, percent;
char text[5];
unsigned char x,y;
INTCON = 0;
TRISB = 15;
ADCON1 = 0xFF;
TRISD = 0;
PORTD = 0;
TRISC = 0;
PWM_Init(5000);
PWM_start();
Lcd_Init(&PORTD); // Initialize LCD connected to PORTB
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 1, "Background PWM");
Lcd_Out(2, 1, "16x2 LCD Blue");
duty=150;
while(1) {
if(get_keys(&y, &x)) {
if(x==0 && y==0) {}
if(x==1 && y==0) {}
if(x==2 && y==0) {}
if(x==0 && y==1) {}
if(x==1 && y==1) {}
if(x==2 && y==1) {}
if(x==0 && y==2) {duty=10;}
if(x==1 && y==2) {duty=240;}
if(x==2 && y==2) {}
if(x==0 && y==3) duty--;
if(x==1 && y==3) duty++;
if(x==2 && y==3) {}
if(duty>240) duty=240;
if(duty<10) duty=10;
percent = duty*100;
percent = percent/255;
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, "Background PWM");
WordToStr(percent, text);
Lcd_Out(2, 5, text);
Lcd_Out(2, 1, "Duty:");
Pwm_change_duty(duty);
delay_ms(100);
}
}
}