ต้องตั้งเวลาให้มอเตอร์ โดย เวลา8.30 หมุนทวนเข็ม90 องศา
เวลา 17.30 มอเตอร์หมุนตามเข็ม 90 องศา
โดยต้องแสดงเวลาปัจจุบันด้วยค่ะ
#include <reg51.h>
#include <lcd.h>
unsigned char hour,min,sec,number;
unsigned char conver1,conver2,conver3;
unsigned int round =0;
unsigned int round1 =0;
void display_time(number);
sbit l1=P2^0;
sbit l2=P2^1;
sbit s1=P2^2;
sbit s2=P2^3;
sbit alarm1=P2^4;
void lcd_delay(unsigned int tick)
{
int i,j;
for (i=0;i<tick;i++)
for (j=0; j<250;j++);
}
void service_timer0(void) interrupt 1 using 2
{
round++;
TH0=0xfa;
TL0=0xf9;
if(round>=1000)
{
round=0;
if (sec !=59)
{
sec++;
}
else if (min !=59)
{
sec=0;
min++;
}
else if (hour !=23)
{
sec=0;
min=0;
hour++;
}
else
{
sec=0;
min=0;
hour=0;
}
}
}
void service_time1(void) interrupt 3
{
round1++;
TH1=250;
TL1=250;
if(round1>=60000)
{
alarm1=0;
ET1=0;
TR1=0;
}
}
void set_time()
{
l1=1; //intial row1
l2=1; //intial row1
lcd_delay(250);
l1=0; //scan row1
lcd_delay(100);
if (s1==0) //check col 1
{
if(hour==23)
{
hour=0;
lcd_command(0x88);
display_time(hour);
lcd_delay(10000);
}
else if(hour!=23)
{
hour++;
lcd_command(0x88);
display_time(hour);
lcd_delay(10000);
}
}
if (s2!=1) //check col2
{
if(hour==0)
{
hour=23;
lcd_command(0x88);
display_time(hour);
lcd_delay(10000);
}
else if (hour!=0)
{
hour--;
lcd_command(0x88);
display_time(hour);
lcd_delay(10000);
}
}
l1=1; //close scan row1
l2=0; //scan row2
lcd_delay(1000);
if(s1!=1) //check col1
{
if(min==59)
{
min=0;
lcd_command(0x8b);
display_time(min);
lcd_delay(10000);
}
else if (min!=59)
{
min++;
lcd_command(0x8b);
display_time(min);
lcd_delay(10000);
}
}
if(s2!=1) //check col2
{
if(min==0)
{
min=59;
lcd_command(0x8b);
display_time(min);
lcd_delay(10000);
}
else if(min!=0)
{
min--;
lcd_command(0x8b);
display_time(min);
lcd_delay(10000);
}
l2=1; //close scan row2
}
}
void display_time(number)
{
conver1 = number;
conver2 = conver1/10;
conver3 = conver1;
number = conver2|0x30;
lcd_text(number);
number = conver3|0x30;
lcd_text(number);
}
void alarm (void)
{
if(hour==13)
{
if(min==0)
{
alarm1=1;
TH1=250;
TL0=250;
ET1=1;
TR1=1;
}
}}
void step_delay(unsigned char tick)
{
unsigned char i,j;
for (i=0;i<tick;i++)
for (j=0;j<200;j++);
}
//**********************main loop***************************
void main(void)
{
TMOD = 0x11;
TH0 = 0xfa;
TL0 = 0xf9;
EA = 1;
ET0 = 1;
TR0 = 1;
lcd_init();
hour=12;
min=34;
sec=50;
alarm1=0;
lcd_puts(0x80,"Digital Clock");
lcd_delay(1000);
//lcd_command(1);
lcd_puts(0xc0,"Time");
lcd_delay(250);
while (1){
lcd_command(0xc8);
display_time (hour);
lcd_command(0xcb);
display_time (min);
lcd_command(0xce);
display_time (sec);
P2=0x00;
step_delay(200);
P2=0x00;
step_delay(200);
P2=0x02;
step_delay(200);
P2=0x04;
step_delay(200);
P2=0x08;
step_delay(200);
//set_time();
//alarm();
{
}
}
}
ตอนนี้ตั้งเวลาปัจจุบันได้ แต่มอเตอร์ตั้งไม่ได้ค่ะ รบกวนด้วยนะคะ ขอบคุณค่ะ
ช่วยดูโค้ดโปรแกรมหน่อยค่ะ microcontroller
เวลา 17.30 มอเตอร์หมุนตามเข็ม 90 องศา
โดยต้องแสดงเวลาปัจจุบันด้วยค่ะ
#include <reg51.h>
#include <lcd.h>
unsigned char hour,min,sec,number;
unsigned char conver1,conver2,conver3;
unsigned int round =0;
unsigned int round1 =0;
void display_time(number);
sbit l1=P2^0;
sbit l2=P2^1;
sbit s1=P2^2;
sbit s2=P2^3;
sbit alarm1=P2^4;
void lcd_delay(unsigned int tick)
{
int i,j;
for (i=0;i<tick;i++)
for (j=0; j<250;j++);
}
void service_timer0(void) interrupt 1 using 2
{
round++;
TH0=0xfa;
TL0=0xf9;
if(round>=1000)
{
round=0;
if (sec !=59)
{
sec++;
}
else if (min !=59)
{
sec=0;
min++;
}
else if (hour !=23)
{
sec=0;
min=0;
hour++;
}
else
{
sec=0;
min=0;
hour=0;
}
}
}
void service_time1(void) interrupt 3
{
round1++;
TH1=250;
TL1=250;
if(round1>=60000)
{
alarm1=0;
ET1=0;
TR1=0;
}
}
void set_time()
{
l1=1; //intial row1
l2=1; //intial row1
lcd_delay(250);
l1=0; //scan row1
lcd_delay(100);
if (s1==0) //check col 1
{
if(hour==23)
{
hour=0;
lcd_command(0x88);
display_time(hour);
lcd_delay(10000);
}
else if(hour!=23)
{
hour++;
lcd_command(0x88);
display_time(hour);
lcd_delay(10000);
}
}
if (s2!=1) //check col2
{
if(hour==0)
{
hour=23;
lcd_command(0x88);
display_time(hour);
lcd_delay(10000);
}
else if (hour!=0)
{
hour--;
lcd_command(0x88);
display_time(hour);
lcd_delay(10000);
}
}
l1=1; //close scan row1
l2=0; //scan row2
lcd_delay(1000);
if(s1!=1) //check col1
{
if(min==59)
{
min=0;
lcd_command(0x8b);
display_time(min);
lcd_delay(10000);
}
else if (min!=59)
{
min++;
lcd_command(0x8b);
display_time(min);
lcd_delay(10000);
}
}
if(s2!=1) //check col2
{
if(min==0)
{
min=59;
lcd_command(0x8b);
display_time(min);
lcd_delay(10000);
}
else if(min!=0)
{
min--;
lcd_command(0x8b);
display_time(min);
lcd_delay(10000);
}
l2=1; //close scan row2
}
}
void display_time(number)
{
conver1 = number;
conver2 = conver1/10;
conver3 = conver1;
number = conver2|0x30;
lcd_text(number);
number = conver3|0x30;
lcd_text(number);
}
void alarm (void)
{
if(hour==13)
{
if(min==0)
{
alarm1=1;
TH1=250;
TL0=250;
ET1=1;
TR1=1;
}
}}
void step_delay(unsigned char tick)
{
unsigned char i,j;
for (i=0;i<tick;i++)
for (j=0;j<200;j++);
}
//**********************main loop***************************
void main(void)
{
TMOD = 0x11;
TH0 = 0xfa;
TL0 = 0xf9;
EA = 1;
ET0 = 1;
TR0 = 1;
lcd_init();
hour=12;
min=34;
sec=50;
alarm1=0;
lcd_puts(0x80,"Digital Clock");
lcd_delay(1000);
//lcd_command(1);
lcd_puts(0xc0,"Time");
lcd_delay(250);
while (1){
lcd_command(0xc8);
display_time (hour);
lcd_command(0xcb);
display_time (min);
lcd_command(0xce);
display_time (sec);
P2=0x00;
step_delay(200);
P2=0x00;
step_delay(200);
P2=0x02;
step_delay(200);
P2=0x04;
step_delay(200);
P2=0x08;
step_delay(200);
//set_time();
//alarm();
{
}
}
}
ตอนนี้ตั้งเวลาปัจจุบันได้ แต่มอเตอร์ตั้งไม่ได้ค่ะ รบกวนด้วยนะคะ ขอบคุณค่ะ