คือผมอยากได้โปรแกรมสวิตช์รับค่าตั้งเวลาและหน่วงเวลาแสดงผลบนจอLCD 16*2 ได้อะครับ โดยโปรแกรมก็ เช่น กดสวิตช์ 1 เข้าเมนู กดสวิตช์ 1 อีกครั้งเลือนเข้าเมนูตั้งเวลาทำงาน สวิตช์2และ3 เป็นปรับค่า ขึ้นและลง กดสวิตช์ 1 อีกครั้งเลื่อนหน้าเมนูหน่วงเวลาดีเลย์ ปรับค่าได้เหมื่อนตั้งเวลาทำงาน กดสวิตช์เข้าเมนูทำงาน กดสวิตช์ 2 ยืน กดสวิตช์3ยกเลิก ถ้ายกเลิกวนกลับไปตั้งค่าใหม่ตั้งแต่กดสวิตช์เข้าเมนู ขอความกรุณาช่วยดูให้ผมที่นะครับแบบว่าหมดความสามารถละครับงงจริงๆๆ ใช้โปแกรม keil uVion 3 อะครับ ขอบคุณครับ
#include "at89c51xd2.h"
#include <stdio.h>
#include "LCD_4BIT.h"
#include "i2c.h"
#include "ds_1307.h"
sbit sw0=P1^0;
sbit sw1=P1^1;
sbit sw2=P1^2;
sbit led0=P0^0;
sbit led1=P0^1;
sbit led2=P0^2;
sbit led3=P0^3;
void ascii_to_lcd (unsigned char value);
void display_date(void);
void display_time(void);
void delay_time(void);
void delay_time(unsigned char time);
unsigned char sec,min,hour,date,month,year;
/*********************** The main function ********************************/
main(void)
{
init_lcd(); // Initial LCD
write_ins (0x01); // clear LCD display
gotolcd(0); // Set Cursor Line-1
sprintf(lcdbuf,"Date:"); // Display Line-1
printlcd();
gotolcd(0x40); // Set Cursor Line-2
sprintf(lcdbuf,"Time:"); // Display Line-2
printlcd();
// DS1307_wrdate(0x19,0x04,0x11); // WTITE DATE TO RTC
// DS1307_wrtime(0x12,0x50,0x00); // WTITE TIME TO RTC
while(1)
{
{
display_date(); // DISPLAY DATE TO LCD
display_time(); // DISPLAY TIME TO LCD
}
if((sw0==0))
{
if(sec==0x00){led0=1;led1=0;led2=0;led3=0;}
if(sec==0x10){led0=0;led1=1;led2=0;led3=0;}
if(sec==0x20){led0=0;led1=0;led2=1;led3=0;}
if(sec==0x30){led0=0;led1=0;led2=0;led3=1;}
if(sec==0x40){led0=1;led1=1;led2=1;led3=1;}
if(sec==0x50){led0=0;led1=0;led2=0;led3=0;}
} while ((sw1==0));
if((sw1==0))
{
if(min==0x01){led0=1;led1=0;led2=0;led3=1;}
if(min==0x02){led0=1;led1=1;led2=0;led3=0;}
if(min==0x04){led0=0;led1=0;led2=1;led3=1;}
if(min==0x06){led0=1;led1=0;led2=0;led3=1;}
if(min==0x08){led0=1;led1=1;led2=1;led3=1;}
if(min==0x10){led0=0;led1=1;led2=1;led3=0;}
if(min==0x13){led0=1;led1=0;led2=0;led3=1;}
if(min==0x16){led0=0;led1=1;led2=0;led3=1;}
if(min==0x19){led0=1;led1=0;led2=1;led3=0;}
if(min==0x23){led0=0;led1=0;led2=0;led3=1;}
if(min==0x24){led0=1;led1=0;led2=0;led3=0;}
if(min==0x25){led0=0;led1=0;led2=0;led3=0;}
if(min==0x27){led0=1;led1=1;led2=1;led3=1;}
if(min==0x31){led0=0;led1=0;led2=0;led3=0;}
if(min==0x36){led0=1;led1=0;led2=0;led3=0;}
if(min==0x37){led0=1;led1=1;led2=0;led3=0;}
if(min==0x38){led0=1;led1=1;led2=1;led3=0;}
if(min==0x39){led0=1;led1=1;led2=1;led3=1;}
if(min==0x40){led0=1;led1=1;led2=1;led3=0;}
if(min==0x41){led0=1;led1=1;led2=0;led3=0;}
if(min==0x42){led0=1;led1=0;led2=0;led3=0;}
if(min==0x43){led0=0;led1=0;led2=0;led3=0;}
if(min==0x46){led0=1;led1=1;led2=1;led3=1;}
if(min==0x52){led0=1;led1=0;led2=0;led3=1;}
if(min==0x58){led0=1;led1=1;led2=1;led3=1;}
if(min==0x60){led0=0;led1=0;led2=0;led3=0;}
} while((sw2==0));
if((sw2==0))
{
if(sec==0x05){led0=0;led1=0;led2=0;led3=0;}
if(sec==0x10){led0=1;led1=1;led2=1;led3=1;}
if(sec==0x20){led0=0;led1=1;led2=1;led3=0;}
if(sec==0x25){led0=1;led1=0;led2=0;led3=1;}
if(sec==0x30){led0=1;led1=1;led2=1;led3=1;}
if(sec==0x35){led0=1;led1=1;led2=0;led3=0;}
if(sec==0x40){led0=0;led1=0;led2=1;led3=1;}
if(sec==0x45){led0=1;led1=0;led2=1;led3=1;}
if(sec==0x50){led0=1;led1=1;led2=0;led3=1;}
if(sec==0x55){led0=1;led1=1;led2=1;led3=1;}
if(sec==0x60){led0=0;led1=0;led2=0;led3=0;}
}while((sw0==0));
}
}
/******************** Function convert to ASCII and send to LCD ***********/
void ascii_to_lcd (unsigned char value)
{
unsigned char buf=0;
buf= value & 0xF0;
buf = (buf>>4)|(0x30);
write_data (buf);
buf= value & 0x0F;
buf = buf|0x30;
write_data (buf);
}
/************************ Display Date ************************************/
void display_date(void)
{
date = DS1307_rd(0x04);
month = DS1307_rd(0x05);
year = DS1307_rd(0x06);
write_ins(0x86);
ascii_to_lcd(date);
write_data('/');
ascii_to_lcd(month);
write_data('/');
ascii_to_lcd(year);
}
/*********************** Display Time *************************************/
void display_time(void)
{
sec = DS1307_rd(0x00);
min = DS1307_rd(0x01);
hour = DS1307_rd(0x02);
write_ins (0xC6);
ascii_to_lcd(hour);
write_data(':');
ascii_to_lcd(min);
write_data(':');
ascii_to_lcd(sec);
}
ลิงค์หัวข้อ:
http://wintesla2003.com/topic/151092