久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2699|回復: 9
收起左側

單片機程序改造,給辛苦費

[復制鏈接]
ID:303533 發表于 2018-4-20 09:36 | 顯示全部樓層 |閱讀模式
本帖最后由 sdwfmt 于 2018-4-26 13:29 編輯

目前已經有了利用單片機控制步進電機的延時(按秒)、轉動角度、等,需要在這個基礎上加上 一天三次啟動的定時系統。有沒有碼農知道怎么搞定的? QQ截圖20180426132737.png

源程序如下:
#include<reg52.h>
#include<stdio.h>
#include "lcd1602.h"
#include "eeprom.h"


#define   N_ADDRESS                 3
#define   DIR_ADDRESS               7
#define   SPEED_ADDRESS            12
#define   SET_ANGLE_ADDRESS         5
#define   SET_TIME_ADDRESS         12   

#define   MAX_PAGE                                    10   // 最大節點數
#define   T0_INIT_DATA_10          100
#define   T0_INIT_DATA_50ms        50000


#define   Two_XiFen_Clk              400



unsigned char T0_NUM;
unsigned char T0_NUM_2;
unsigned char END_FLAG = 0;
unsigned char END_FLAG_2 = 0;
unsigned char S_FLAG = 0;


sbit SW1=P3^0;                        //四個獨立按鍵定義
sbit SW2=P3^1;
sbit SW5=P3^2;
sbit SW4=P3^3;           // 暫調試
sbit SW3=P3^4;       


/*
sbit SW1=P1^3;                        //四個獨立按鍵定義
sbit SW2=P1^4;
sbit SW4=P1^2;
sbit SW5=P1^5;          
sbit SW3=P1^6;
*/       


sbit MotorEn = P2^1;     // 使能
sbit FX = P2^0;          // 方向
sbit CLK = P2^2;         // 脈沖


unsigned char g_MotorSt = 0;     // 啟停
unsigned char g_MotorDir = 0;    // 正反
unsigned int CLK_OUT_NUM = 0;         // 脈沖計數
signed int MotorSpedNum = 0;      // 速度檔
//float CUR_MotorAngle = 0.0;   // 當前角度

unsigned int CUR_MotorSpedQuan = 0;   // 當前圈數
//unsigned int SET_MotorQuan = 0;       //
//unsigned int SET_MotorPulse = 0;
unsigned int CUR_Miao = 0;

unsigned int T0_INIT_DATA = 10;


unsigned char cMode = 0;
unsigned char s1_num;
unsigned int iSetData;
//signed char RL = 0;         // 方向
//signed char iSet[3];
unsigned int SYS_NUM = 0;

unsigned char MotorTab[10] = {63, 42, 27, 18, 12, 8, 5, 3, 2};
//unsigned char MotorTab[10] = {25, 20, 16, 13, 9, 6, 4, 2, 1};

//unsigned int MotorSpedTab[6] = {400, 800, 1600, 3200, 6400, 12800};

//unsigned char MotorTab[10] = {63, 42, 27, 18, 12, 8, 5, 3, 2};

//unsigned int MotorSeparateTab[5] = {1, 2, 8, 16, 64};  // 細分

signed char EEPROM_Tab[8] = {0, 0, 0, 0, 0, 0, 0, 0};


unsigned char cur_page;            
signed char page_num;                   
signed char set_page_num[2];          

signed char set_jd_bai, set_jd_shi, set_jd_ge;
signed char set_sj_bai, set_sj_shi,        set_sj_ge;

/********數據定義***********************************************************/
struct DataNum       
{
        signed char        set_fx;             // 方向
        signed char        set_sd;             // 速度
        signed int        set_jd;             // 角度
        signed int set_time;     // 間隔
};

struct DataNum StepData[7];         // 注意: 因為STC89C52芯片容量有限,這里采用最大7組連貫動作

//--------------
void delayms(xms);
void mDelay(unsigned int DelayTime);                //延時函數
void EEPROM_Init();
void SYS_Init();
void T0_Init();
void LCD_Init();

void PageProcess(unsigned char ac_page);
void EEPROM_DATA(unsigned char ac_page);
void EEPROM_READ(unsigned char ac_page);

void KeyScan(void);
void Stop_Key();
void KeyProcess();
void SecondPro();
void SecondPro_2();


// 主程序  main()
void main(void)
{
        SYS_Init();   // 參數初始化
        EEPROM_Init();    // 讀取數據
        T0_Init();             // 定時器0 初始化
        LCD_Init();      // 顯示初始化   
        while(1)
        {         

                if (!cMode)                // 空閑模式下                                                                                                                                                                                                                                                                                                                                                                       
                {
                        KeyScan();              // 按鍵
                }               

                KeyProcess();        // 處理進程
        }

}


// 參數初始化
void SYS_Init()
{
        MotorEn = 0;     // 使能
        page_num = 0;         // 節點數
        cur_page = 0;   //當前頁面數
        set_page_num[0] = set_page_num[1] = 0; // 節點2位小數
}

/********定時器初始化***********************************************************/
void T0_Init()
{
        TMOD = 0x01;
        TH0 = (65535-100)/256;  // 0.1ms
        TL0 = (65535-100)%256;
        EA = 1;
        ET0 = 1;
}

// 液晶顯示初始化
void LCD_Init()
{
        init_1602();                                           //lcd1602初始化
    write_string(1, 1, "Enter Step Num");
        write_string(2,3,"Step:");
        write_sf(2,9,page_num);
}

/************存儲初始化*****************/
void EEPROM_Init()
{
       
        EEPROM_READ(cur_page);

}

/********定時器中斷*****************/
void T0_time() interrupt 1
{
TR0 = 0;
       
//        TH0 = (65535-T0_INIT_DATA)/256;           // 0.1ms
//        TL0 = (65535-T0_INIT_DATA)%256;

/*        TH0 = (65535-100)/256;           // 0.1ms
        TL0 = (65535-100)%256;
        T0_NUM++;
        */          
//        SYS_NUM++;
       
        if (cMode == 6)           // 間隔模式
        {
                TH0 = (65535-50000)/256;           // 50ms
                TL0 = (65535-50000)%256;
                if (StepData[cur_page-1].set_time > 0)
                {
                        T0_NUM_2++;       
                        if (T0_NUM_2 >= 20)
                        {
                                T0_NUM_2 = 0;
                                CUR_Miao++;
                                if (CUR_Miao >= StepData[cur_page-1].set_time)         // 達到目標
                                {
                                        CUR_Miao = 0;
                                        TR0 = 0;         // 關閉定時器
                                        END_FLAG_2 = 1;  // 時間目標達到標志
                                }       
                        }               
                }
                else
                {
                                        CUR_Miao = 0;
                                        TR0 = 0;         // 關閉定時器
                                        END_FLAG_2 = 1;  // 時間目標達到標志               
                }

        }
        else if (cMode == 4)  // 電機運行模式
        {
                TH0 = (65535-100)/256;           // 0.1ms
                TL0 = (65535-100)%256;
                T0_NUM++;
                if (StepData[cur_page-1].set_jd > 0)
                {
                //        if(T0_NUM >= MotorTab[StepData[cur_page-1].set_sd])                   MotorSpedTab
                        if(T0_NUM >= MotorTab[StepData[cur_page-1].set_sd])               
                //        if(T0_NUM >= MotorTab[9])       
                        {
                                T0_NUM = 0;
                                CLK=CLK^0x01;               //   輸出脈沖
                                CLK_OUT_NUM++;         

                                if (S_FLAG)
                                {
                                        if(CLK_OUT_NUM > 30)          // 高速時給個加速過程
                                        {
                                                StepData[cur_page-1].set_sd = StepData[cur_page-1].set_sd + 1;
                                                S_FLAG = 0;
                                        }                       
                                }       
                               
                                if(CLK_OUT_NUM >= Two_XiFen_Clk)        // 一圈          2細分
                                {
                                         CLK_OUT_NUM = 0;
                                        CUR_MotorSpedQuan++;

                                        if(CUR_MotorSpedQuan >= StepData[cur_page-1].set_jd)   // 達到圈數
                                        {
                                                CLK_OUT_NUM = 0;       // 脈沖清空
                                                TR0 = 0;               // 關閉定時器
                                                END_FLAG = 1;          // 目標達到標志
                                                SYS_NUM = 0;               // 清空
                                        }
                                }
                                else
                                {
                                        ;
                                }
               
                        //        if(CLK_OUT_NUM >= SET_MotorPulse)        // 達到角度目標
                        }               
                }
                else
                {
                                        CLK_OUT_NUM = 0;       // 脈沖清空
                                        TR0 = 0;               // 關閉定時器
                                        END_FLAG = 1;          // 目標達到標志
                                        SYS_NUM = 0;               // 清空               
                }
       
        }
        else
        {
                ;
        }

        TR0 = 1;

}

/********保持當前頁數據*****************/
void EEPROM_DATA(unsigned char ac_page)
{
        if (ac_page == 0)
        {
                set_page_num[0] =  page_num / 10;
                set_page_num[1] =  page_num % 10;
                write_eeprom(SECTION_ADDRESS1,set_page_num,2);                // 保存總節點數
        }
        else if (ac_page > 0)
        {
                EEPROM_Tab[0] =  StepData[ac_page-1].set_fx;
                EEPROM_Tab[1] =  StepData[ac_page-1].set_sd;
                EEPROM_Tab[2] =  StepData[ac_page-1].set_jd / 100;
                EEPROM_Tab[3] =  StepData[ac_page-1].set_jd % 100 / 10;
                EEPROM_Tab[4] =  StepData[ac_page-1].set_jd % 10;
                EEPROM_Tab[5] =  StepData[ac_page-1].set_time / 100;
                EEPROM_Tab[6] =  StepData[ac_page-1].set_time % 100 / 10;       
                EEPROM_Tab[7] =  StepData[ac_page-1].set_time % 10;       

                switch (ac_page-1)
                {
                        case 0:
                                write_eeprom(SECTION_ADDRESS2,EEPROM_Tab,8);
                                break;
                        case 1:
                                write_eeprom(SECTION_ADDRESS3,EEPROM_Tab,8);
                                break;
                        case 2:
                                write_eeprom(SECTION_ADDRESS4,EEPROM_Tab,8);
                                break;
                        case 3:
                                write_eeprom(SECTION_ADDRESS5,EEPROM_Tab,8);
                                break;
                        case 4:
                                write_eeprom(SECTION_ADDRESS6,EEPROM_Tab,8);
                                break;
                        case 5:
                                write_eeprom(SECTION_ADDRESS7,EEPROM_Tab,8);
                                break;
                        case 6:
                                write_eeprom(SECTION_ADDRESS8,EEPROM_Tab,8);
                                break;
                        default:
                                break;
                }
        }
        else
        {
                ;
        }
}

/********讀取數據*****************/
void EEPROM_READ(unsigned char ac_page)
{
        if (ac_page == 0)
        {
                read_eeprom(SECTION_ADDRESS1,set_page_num,2);                // 保存總節點數
                if ((set_page_num[0] > 0) || (set_page_num[0] < 0))
                        set_page_num[0] = 0;
                if ((set_page_num[1] > 9) || (set_page_num[1] < 0))
                        set_page_num[1] = 0;
                page_num = set_page_num[0]*10 + set_page_num[1];
       
        //        read_eeprom(SECTION_ADDRESS1,page_num,2);                // 保存總節點數
        }
        else if (ac_page > 0)
        {
                switch (ac_page-1)
                {
                        case 0:
                                read_eeprom(SECTION_ADDRESS2,EEPROM_Tab,8);
                                break;
                        case 1:
                                read_eeprom(SECTION_ADDRESS3,EEPROM_Tab,8);
                                break;
                        case 2:
                                read_eeprom(SECTION_ADDRESS4,EEPROM_Tab,8);
                                break;
                        case 3:
                                read_eeprom(SECTION_ADDRESS5,EEPROM_Tab,8);
                                break;
                        case 4:
                                read_eeprom(SECTION_ADDRESS6,EEPROM_Tab,8);
                                break;
                        case 5:
                                read_eeprom(SECTION_ADDRESS7,EEPROM_Tab,8);
                                break;
                        case 6:
                                read_eeprom(SECTION_ADDRESS8,EEPROM_Tab,8);
                                break;
                        default:
                                break;
                }
                if ((EEPROM_Tab[0] > 1) || (EEPROM_Tab[0] < 0))
                        EEPROM_Tab[0] = 0;
                if ((EEPROM_Tab[1] > 9) || (EEPROM_Tab[1] < 0))
                        EEPROM_Tab[1] = 0;
                if ((EEPROM_Tab[2] > 9) || (EEPROM_Tab[2] < 0))
                        EEPROM_Tab[2] = 0;
                if ((EEPROM_Tab[3] > 9) || (EEPROM_Tab[3] < 0))
                        EEPROM_Tab[3] = 0;
                if ((EEPROM_Tab[4] > 9) || (EEPROM_Tab[4] < 0))
                        EEPROM_Tab[4] = 0;
                if ((EEPROM_Tab[5] > 9) || (EEPROM_Tab[5] < 0))
                        EEPROM_Tab[5] = 0;
                if ((EEPROM_Tab[6] > 9) || (EEPROM_Tab[6] < 0))
                        EEPROM_Tab[6] = 0;
                if ((EEPROM_Tab[7] > 9) || (EEPROM_Tab[7] < 0))
                        EEPROM_Tab[7] = 0;

                StepData[ac_page-1].set_fx = EEPROM_Tab[0];
                StepData[ac_page-1].set_sd = EEPROM_Tab[1];
                StepData[ac_page-1].set_jd =  EEPROM_Tab[2]*100 + EEPROM_Tab[3]*10 + EEPROM_Tab[4];
                StepData[ac_page-1].set_time =         EEPROM_Tab[5]*100 + EEPROM_Tab[6]*10 + EEPROM_Tab[7];
        }
        else
        {
                ;
        }
}





/********翻頁界面***********************************************************/
void PageProcess(unsigned char ac_page)
{
        write_string(1,0,"                ");
        write_string(2,0,"                ");
        write_string(1,1,"N:");                             // 顯示節點
        write_sf(1,3, (unsigned int)ac_page);       

        if(StepData[ac_page-1].set_fx == 0)            //顯示方向
                write_string(1,DIR_ADDRESS,"R");
        else
                write_string(1,DIR_ADDRESS,"L");

        write_string(1,10,"S:");                        // 顯示速度
        write_one_data(1,SPEED_ADDRESS, StepData[ac_page-1].set_sd);

        write_string(2,1,"set:");                       // 顯示圈數
        write_sfm(2, SET_ANGLE_ADDRESS, StepData[ac_page-1].set_jd);         

        write_string(2,10,"t:");                   // 顯示間隔
        write_sfm(2, SET_TIME_ADDRESS, StepData[ac_page-1].set_time);

}         


/********按鍵掃描函數***********************************************************/
void KeyScan()
{
        if(SW1 == 0)
        {
                delayms(10);
                if(SW1 == 0)   // 功能鍵
                {
                        while(!SW1);   // 等待松開
                        cMode = 1;     // 功能模式       
               
                }
       
        }
        if(SW2 == 0)
        {
                delayms(10);
                if(SW2 == 0)   // 增加
                {
                        while(!SW2);   // 等待松開
                    cMode = 2;
                }
       
        }
/*        if(SW3 == 0)
        {
                delayms(10);
                if(SW3 == 0)   // 減小
                {
                        while(!SW3);   // 等待松開
                        cMode = 3;
                }
       
        } */
        if(SW4 == 0)               
        {
                delayms(10);
                if(SW4 == 0)   // 啟停
                {
                        while(!SW4);   // 等待松開
                        cMode = 4;

                        if (StepData[cur_page-1].set_sd >= 9)
                        {
                                StepData[cur_page-1].set_sd = StepData[cur_page-1].set_sd - 1;
                                S_FLAG = 1;
                        }


                        g_MotorSt = 1;
                        MotorEn = 1;
                        cur_page = 1;  // 電機從第1個節點運行
                       
                        EEPROM_READ(cur_page);        // 讀取數據  
                               
                        PageProcess(cur_page);        // 頁面更新
                //        CUR_MotorAngle = 0;
                        CUR_MotorSpedQuan = 0;
                        if(StepData[cur_page-1].set_fx == 0)
                        {
                                FX = 0;
                        }
                        else
                        {
                                FX = 1;
                        }

                        TR0 = 1;          // 定時器開啟
                          
                }
       
        }
        if(SW5 == 0)
        {
                delayms(10);
                if(SW5 == 0)   // 翻頁
                {
                        while(!SW5);   // 等待松開
                        cMode = 5;
                }
       
        }

}



void Stop_Key()
{
        if(SW4 == 0)
        {
                delayms(10);
                if(SW4 == 0)   // 啟停
                {
                        while(!SW4);   // 等待松開
                        cMode = 0;
                       
                        g_MotorSt = 0;
                        MotorEn = 1;   // 繼續保持扭矩
                //        CUR_MotorAngle = 0;
                        CUR_MotorSpedQuan = 0;
                        TR0 = 0;
                          
                }
       
        }
}


/********按鍵處理函數***********************************************************/
void KeyProcess()
{
        switch(cMode)
        {
                case 0: // 空閑模式
                        break;
                case 1:         // 功能模式
                        {
                                s1_num++;       
                                cMode = 0;        // 功能模式
                                if(cur_page > 0)  // 各自界面中
                                {
                                        if(s1_num ==1)          // 第1次被按下
                                        {
                                                write_com(0x80+DIR_ADDRESS);                 // 方向
                                                write_com(0x0f);      // 光標閃爍
                                        }
                                        if(s1_num ==2)
                                        {
                                                write_com(0x80+SPEED_ADDRESS);          
                                        }
                                        if(s1_num ==3)
                                        {
                                                write_com(0x80+0x40+SET_ANGLE_ADDRESS);          
                                        }
                                        if(s1_num ==4)
                                        {
                                                write_com(0x80+0x40+SET_ANGLE_ADDRESS+1);          
                                        }
                                        if(s1_num ==5)
                                        {
                                                write_com(0x80+0x40+SET_ANGLE_ADDRESS+2);          
                                        }
                                        if(s1_num ==6)         // 間隔
                                        {
                                                write_com(0x80+0x40+SET_TIME_ADDRESS);          
                                        }
                                        if(s1_num ==7)         
                                        {
                                                write_com(0x80+0x40+SET_TIME_ADDRESS+1);          
                                        }
                                        if(s1_num ==8)         
                                        {
                                                write_com(0x80+0x40+SET_TIME_ADDRESS+2);          
                                        }
                                        if(s1_num == 9)         //第9次退出
                                        {
                                                s1_num = 0;            // 記錄按鍵清零
                                                cMode = 0;             // 退出模式
                                                write_com(0x0c);           // 取消光標閃爍

                                        //        SET_MotorPulse = (unsigned int)((StepData[cur_page-1].set_jd/0.9)*8.0);    // 脈沖
                                               
                                               
                                                EEPROM_DATA(cur_page);         //  保存數據
                                        }                               
                                }
                                else // 設定總節點界面
                                {
                                        if(s1_num ==1)          // 第1次被按下
                                        {
                                                write_com(0x80+0x40+9);          // 節點數目
                                                write_com(0x0f);      // 光標閃爍
                                        }
                                        if(s1_num ==2)
                                        {
                                                write_com(0x80+0x40+10);          
                                        }
                                        if(s1_num == 3)         //第3次退出
                                        {
                                                s1_num = 0;            // 記錄按鍵清零
                                                cMode = 0;             // 退出模式
                                                write_com(0x0c);           // 取消光標閃爍
                                                EEPROM_DATA(cur_page);         //  保存數據
                                        }                               
                                }

                       
                        }
                        break;
                case 2:         // 增加
                        {
                                cMode = 0;        // 功能模式
                                if(cur_page > 0)  // 各自界面中
                                {
                                        set_jd_bai = StepData[cur_page-1].set_jd / 100;       
                                        set_jd_shi = StepData[cur_page-1].set_jd % 100 / 10;       
                                        set_jd_ge = StepData[cur_page-1].set_jd % 10;
                                       
                                        set_sj_bai = StepData[cur_page-1].set_time / 100;       
                                        set_sj_shi = StepData[cur_page-1].set_time % 100 / 10;       
                                        set_sj_ge = StepData[cur_page-1].set_time % 10;       
                                        if(s1_num == 1)                 // 方向
                                        {
                                                StepData[cur_page-1].set_fx++;
                                                if(StepData[cur_page-1].set_fx > 1)
                                                        StepData[cur_page-1].set_fx = 0;
                                                if(StepData[cur_page-1].set_fx == 0)
                                                {
                                                //        FX = 0;
                                                        write_string(1, DIR_ADDRESS, "R");
                                                }
                                                else
                                                {
                                                //        FX = 1;
                                                        write_string(1, DIR_ADDRESS, "L");
                                                }
                                                write_com(0x80+DIR_ADDRESS);                                       
                                        }
                                        if(s1_num == 2)               // 速度
                                        {
                                                StepData[cur_page-1].set_sd++;
                                                if(StepData[cur_page-1].set_sd >= 10)
                                                {
                                                        StepData[cur_page-1].set_sd = 0;
                                                }
                                                write_one_data(1, SPEED_ADDRESS, StepData[cur_page-1].set_sd);
                                                write_com(0x80+SPEED_ADDRESS);                                       
                                        }
                                        if(s1_num == 3)                          // 角度   百
                                        {
                                                set_jd_bai++;
                                                if(set_jd_bai >= 10)
                                                        set_jd_bai = 0;
                                                StepData[cur_page-1].set_jd = set_jd_bai*100 + set_jd_shi*10 + set_jd_ge;
                                                write_sfm(2, SET_ANGLE_ADDRESS, StepData[cur_page-1].set_jd);
                                            write_com(0x80+0x40+SET_ANGLE_ADDRESS);
                                        }
                                        if(s1_num == 4)
                                        {
                                                set_jd_shi++;
                                                if(set_jd_shi >= 10)
                                                        set_jd_shi = 0;
                                                StepData[cur_page-1].set_jd = set_jd_bai*100 + set_jd_shi*10 + set_jd_ge;
                                                write_sfm(2, SET_ANGLE_ADDRESS, StepData[cur_page-1].set_jd);
                                            write_com(0x80+0x40+SET_ANGLE_ADDRESS+1);
                                        }
                                        if(s1_num == 5)
                                        {
                                                set_jd_ge++;
                                                if(set_jd_ge >= 10)
                                                        set_jd_ge = 0;
                                                StepData[cur_page-1].set_jd = set_jd_bai*100 + set_jd_shi*10 + set_jd_ge;
                                                write_sfm(2, SET_ANGLE_ADDRESS, StepData[cur_page-1].set_jd);
                                            write_com(0x80+0x40+SET_ANGLE_ADDRESS+2);
                                        }
                                        if(s1_num == 6)           // 時間間隔         百
                                        {
                                                set_sj_bai++;
                                                if(set_sj_bai >= 10)
                                                        set_sj_bai = 0;
                                                StepData[cur_page-1].set_time = set_sj_bai*100 + set_sj_shi*10 + set_sj_ge;
                                                write_sfm(2, SET_TIME_ADDRESS, StepData[cur_page-1].set_time);
                                            write_com(0x80+0x40+SET_TIME_ADDRESS);

                                        }
                                        if(s1_num == 7)
                                        {
                                                set_sj_shi++;
                                                if(set_sj_shi >= 10)
                                                        set_sj_shi = 0;
                                                StepData[cur_page-1].set_time = set_sj_bai*100 + set_sj_shi*10 + set_sj_ge;
                                                write_sfm(2, SET_TIME_ADDRESS, StepData[cur_page-1].set_time);
                                            write_com(0x80+0x40+SET_TIME_ADDRESS+1);                                       
                                        }
                                        if(s1_num == 8)
                                        {
                                                set_sj_ge++;
                                                if(set_sj_ge >= 10)
                                                        set_sj_ge = 0;
                                                StepData[cur_page-1].set_time = set_sj_bai*100 + set_sj_shi*10 + set_sj_ge;
                                                write_sfm(2, SET_TIME_ADDRESS, StepData[cur_page-1].set_time);
                                            write_com(0x80+0x40+SET_TIME_ADDRESS+2);                                       
                                        }                               
                               
                                }
                                else // 設定總節點界面
                                {
                                        if(s1_num == 1)                          // 十
                                        {
                                                set_page_num[0]++;
                                                if(set_page_num[0] >= 1)
                                                        set_page_num[0] = 0;
                                                page_num = set_page_num[0]*10 + set_page_num[1];
                                                write_sf(2, 9, page_num);
                                            write_com(0x80+0x40+9);
                                        }
                                        if(s1_num == 2)                 // 個
                                        {
                                                set_page_num[1]++;
                                                if(set_page_num[1] >= 6)
                                                        set_page_num[1] = 0;
                                                page_num = set_page_num[0]*10 + set_page_num[1];
                                                write_sf(2, 9, page_num);
                                            write_com(0x80+0x40+10);
                                        }                               
                                }

                        }
                        break;
                case 3:         // 減小
                        {
                                cMode = 0;        // 功能模式
                                if(cur_page > 0)
                                {
                                        set_jd_bai = StepData[cur_page-1].set_jd / 100;       
                                        set_jd_shi = StepData[cur_page-1].set_jd % 100 / 10;       
                                        set_jd_ge = StepData[cur_page-1].set_jd % 10;
                                       
                                        set_sj_bai = StepData[cur_page-1].set_time / 100;       
                                        set_sj_shi = StepData[cur_page-1].set_time % 100 / 10;       
                                        set_sj_ge = StepData[cur_page-1].set_time % 10;       

                                        if(s1_num == 1)                 // 方向
                                        {
                                                StepData[cur_page-1].set_fx--;
                                                if(StepData[cur_page-1].set_fx < 0)
                                                        StepData[cur_page-1].set_fx = 0;
                                                if(StepData[cur_page-1].set_fx == 0)
                                                {
                                                //        FX = 0;
                                                        write_string(1, DIR_ADDRESS, "R");
                                                }
                                                else
                                                {
                                                //        FX = 1;
                                                        write_string(1, DIR_ADDRESS, "L");
                                                }
                                                write_com(0x80+DIR_ADDRESS);                                       
                                        }
                                        if(s1_num == 2)               // 速度
                                        {
                                                StepData[cur_page-1].set_sd--;
                                                if(StepData[cur_page-1].set_sd < 0)
                                                {
                                                        StepData[cur_page-1].set_sd = 0;
                                                }
                                                write_one_data(1, SPEED_ADDRESS, StepData[cur_page-1].set_sd);
                                                write_com(0x80+SPEED_ADDRESS);                                       
                                        }
                                        if(s1_num == 3)                          // 百
                                        {
                                                set_jd_bai--;
                                                if(set_jd_bai < 0)
                                                        set_jd_bai = 9;
                                                StepData[cur_page-1].set_jd = set_jd_bai*100 + set_jd_shi*10 + set_jd_ge;
                                                write_sfm(2, SET_ANGLE_ADDRESS, StepData[cur_page-1].set_jd);
                                            write_com(0x80+0x40+SET_ANGLE_ADDRESS);
                                        }
                                        if(s1_num == 4)
                                        {
                                                set_jd_shi--;
                                                if(set_jd_shi < 0)
                                                        set_jd_shi = 9;
                                                StepData[cur_page-1].set_jd = set_jd_bai*100 + set_jd_shi*10 + set_jd_ge;
                                                write_sfm(2, SET_ANGLE_ADDRESS, StepData[cur_page-1].set_jd);
                                            write_com(0x80+0x40+SET_ANGLE_ADDRESS+1);
                                        }
                                        if(s1_num == 5)
                                        {
                                                set_jd_ge--;
                                                if(set_jd_ge < 0)
                                                        set_jd_ge = 9;
                                                StepData[cur_page-1].set_jd = set_jd_bai*100 + set_jd_shi*10 + set_jd_ge;
                                                write_sfm(2, SPEED_ADDRESS, StepData[cur_page-1].set_jd);
                                            write_com(0x80+0x40+SPEED_ADDRESS+2);
                                        }
                                        if(s1_num == 6)           // 時間間隔
                                        {
                                                set_sj_bai--;
                                                if(set_sj_bai < 0)
                                                        set_sj_bai = 9;
                                                StepData[cur_page-1].set_time = set_sj_bai*100 + set_sj_shi*10 + set_sj_ge;
                                                write_sfm(2, SET_TIME_ADDRESS, StepData[cur_page-1].set_time);
                                            write_com(0x80+0x40+SET_TIME_ADDRESS);

                                        }
                                        if(s1_num == 7)
                                        {
                                                set_sj_shi--;
                                                if(set_sj_shi < 0)
                                                        set_sj_shi = 9;
                                                StepData[cur_page-1].set_time = set_sj_bai*100 + set_sj_shi*10 + set_sj_ge;
                                                write_sfm(2, SET_TIME_ADDRESS, StepData[cur_page-1].set_time);
                                            write_com(0x80+0x40+SET_TIME_ADDRESS+1);                                       
                                        }
                                        if(s1_num == 8)
                                        {
                                                set_sj_ge--;
                                                if(set_sj_ge < 0)
                                                        set_sj_ge = 9;
                                                StepData[cur_page-1].set_time = set_sj_bai*100 + set_sj_shi*10 + set_sj_ge;
                                                write_sfm(2, SET_TIME_ADDRESS, StepData[cur_page-1].set_time);
                                            write_com(0x80+0x40+SET_TIME_ADDRESS+2);                                       
                                        }                       
                                }
                                else
                                {
                                        if(s1_num == 1)                          // -
                                        {
                                                set_page_num[0]--;
                                                if(set_page_num[0] < 0)
                                                        set_page_num[0] = 0;
                                                page_num = set_page_num[0]*10 + set_page_num[1];
                                                write_sf(2, 9, page_num);
                                            write_com(0x80+0x40+9);
                                        }
                                        if(s1_num == 2)                 // 個
                                        {
                                                set_page_num[1]--;
                                                if(set_page_num[1] < 0)
                                                        set_page_num[1] = 0;
                                                page_num = set_page_num[0]*10 + set_page_num[1];
                                                write_sf(2, 9, page_num);
                                            write_com(0x80+0x40+10);
                                        }       
                                }
                        }
                        break;

                        case 4:           // 運行
                                {
                                       
                                        if (SYS_NUM >= 100)          // 10ms
                                        {
                                                SYS_NUM = 0;
                                        //        CUR_MotorAngle =  CLK_OUT_NUM *0.9/8.0;   // 計算當前角度

                                        }
                                        SecondPro();        //  
                                //        Stop_Key();                               
                               
                                }
                                break;
                        case 5:           // 翻頁
                                {
                                        cMode = 0;        // 功能模式
                                        cur_page++; //翻頁增加
                                        if((cur_page > page_num) || (cur_page > MAX_PAGE))
                                                cur_page = 1;
                                        init_1602();
                                        EEPROM_READ(cur_page);        // 讀取數據  
                                        PageProcess(cur_page);        // 顯示節點數
                                }
                                break;
                        case 6:          //時間
                                {
                                //        cMode = 0;        // 功能模式
                                        SecondPro_2();
                                }
                                break;
                default:
                        break;
       
        }

}


void SecondPro()
{
        if (END_FLAG)          // 角度目標達到
        {
                END_FLAG = 0;        // 清
                g_MotorSt = 0;        // 電機關閉關閉標志
                MotorEn = 1;
        //        CUR_MotorAngle = 0;
                CUR_MotorSpedQuan = 0;

                cMode = 6;   // 進入時間模式
        //        T0_INIT_DATA = 50000;  // 定時器初始值          
                T0_INIT_DATA = T0_INIT_DATA_50ms;  // 定時器初始值       
                TR0 = 1;        //啟動定時器
                               
        }
        else
        {
                g_MotorSt = 1;
        }
}

void SecondPro_2()
{
        if (END_FLAG_2)          // 時間目標達到
        {
                END_FLAG_2 = 0;         // 清
                if (cur_page >= page_num)  // 達到總節點數
                {
                        cur_page = 0;
                        TR0 = 0;     //關閉定時器          
                        write_string(1,0,"                ");
                        write_string(2,0,"                ");
                    LCD_Init();          // 頁面更新

                        cMode = 0;  // 待機模式
                       
       
                        g_MotorSt = 0;        // 電機
                        MotorEn = 1;
                //        CUR_MotorAngle = 0;
                        CUR_MotorSpedQuan = 0;
                //        T0_INIT_DATA = 10;  // 定時器賦值
                        T0_INIT_DATA = T0_INIT_DATA_10;  // 定時器賦值
                       
                }
                else
                {         
                        cur_page = cur_page + 1;  // 進入下一個節點

                        EEPROM_READ(cur_page);        // 讀取數據

                        PageProcess(cur_page);          // 頁面更新
                        cMode = 4;  // 電機運行模式

                        if(StepData[cur_page-1].set_fx == 0)
                        {
                                FX = 0;
                        }
                        else
                        {
                                FX = 1;
                        }
                               
                        g_MotorSt = 1;        // 電機
                        MotorEn = 1;
                //        CUR_MotorAngle = 0;
                        CUR_MotorSpedQuan = 0;

                        // 下一個動作的角度冒充計算
                //        SET_MotorPulse = (unsigned int)((StepData[cur_page-1].set_jd/0.9)*8.0);    // 脈沖  

                //        T0_INIT_DATA = 10;  // 定時器賦值
                        T0_INIT_DATA = T0_INIT_DATA_10;  // 定時器賦值
                        TR0 = 1;     // 啟動定時器                       
                }
               

        }
}

/********延時函數***********************************************************/
void delayms(xms)
{
         unsigned int x,y;
         for(x=xms;x>0;x--)
                 for(y=110;y>0;y--)
                        ;
}





原理圖1.pdf

42.37 KB, 下載次數: 4

原理圖

回復

使用道具 舉報

ID:303383 發表于 2018-4-20 09:52 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

ID:123289 發表于 2018-4-20 12:14 | 顯示全部樓層
這么一個簡單的問題提出來,說明現在的程序也不是你寫的。還是先鞏固基礎知識吧。
回復

使用道具 舉報

ID:312513 發表于 2018-4-20 16:36 | 顯示全部樓層
這么一個簡單的問題提出來,說明現在的程序也不是你寫的。還是先鞏固基礎知識吧。
回復

使用道具 舉報

ID:312590 發表于 2018-4-20 18:33 | 顯示全部樓層
一天三次,間隔均勻的嗎?
回復

使用道具 舉報

ID:312279 發表于 2018-4-21 07:26 | 顯示全部樓層
什么單片機 有鐘芯片么
回復

使用道具 舉報

ID:303533 發表于 2018-4-26 13:11 | 顯示全部樓層
Gavin.K 發表于 2018-4-21 07:26
什么單片機 有鐘芯片么

STC89C52
回復

使用道具 舉報

ID:303533 發表于 2018-4-26 13:17 | 顯示全部樓層
zhangzhanhu 發表于 2018-4-20 18:33
一天三次,間隔均勻的嗎?

間隔時間可以設定
回復

使用道具 舉報

ID:303533 發表于 2018-4-26 13:18 | 顯示全部樓層
qeqweqwewqwq 發表于 2018-4-20 16:36
這么一個簡單的問題提出來,說明現在的程序也不是你寫的。還是先鞏固基礎知識吧。

。。。。。確實是不會啊,在自己學習中,但是畢竟是剛剛開始學 所以確實搞不定
回復

使用道具 舉報

ID:317277 發表于 2018-4-26 19:40 | 顯示全部樓層
心好累 完全看不懂
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91影院在线观看 | 中文字幕精品一区二区三区精品 | 成人在线视频免费播放 | 99视频免费在线观看 | 中文字幕一区二区三区四区不卡 | a级免费黄色片 | 91玖玖| 久久精品中文字幕 | 日韩毛片免费视频 | 国产一区二区免费 | 求个av网址 | 成人av一区 | 亚洲国产一区二区在线 | 欧美成人一区二区 | 日本精品一区二区三区在线观看视频 | 自拍偷拍亚洲一区 | 99视频精品 | 久久久久久亚洲欧洲 | 中文字幕在线观看一区二区 | 日韩国产欧美一区 | 久久99国产精品久久99果冻传媒 | 免费久久精品 | 国产精品久久久久久久久久妇女 | 中文字幕在线播放不卡 | 成人精品久久 | 午夜av成人| 精品久久久999 | 欧美一级一 | 黄频视频 | 久久久久久久亚洲精品 | 中文在线视频 | 蜜桃日韩 | 日韩av一区二区在线观看 | 日韩精品在线一区二区 | 日韩中文字幕视频 | 欧美精品在线免费 | 亚洲国产欧美日韩 | 91视频在线看 | 国产成人福利视频在线观看 | 亚洲一区二区精品视频 | 欧美精品一区二区免费 |