ช่วยดูโค้ดโปรแกรมหน่อยค่ะ microcontroller

กระทู้คำถาม
ต้องตั้งเวลาให้มอเตอร์ โดย เวลา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();
{
}    
}
}
      
ตอนนี้ตั้งเวลาปัจจุบันได้ แต่มอเตอร์ตั้งไม่ได้ค่ะ รบกวนด้วยนะคะ ขอบคุณค่ะ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่