在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于51單片機家具門屜耐用性自動檢測裝置程序設(shè)計

            基于51單片機家具門屜耐用性自動檢測裝置程序設(shè)計

            作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
            #include
            #define uint unsigned int
            #define uchar unsigned char
            #define ZKB 6 //占空比初始值設(shè)定
            #define max_time 100 //設(shè)置超出時間
            sbit gd1=P1^0; //光電開關(guān)被擋住是高電平,沒有被擋住是低電平
            sbit gd2=P1^1; //光電開關(guān)被擋住是高電平,沒有被擋住是低電平
            sbit en=P1^2; //步進(jìn)電機使能端,高電平工作,低電平不工作
            sbit zx=P1^3; //高電平步進(jìn)電機正轉(zhuǎn),低電平步進(jìn)電機反轉(zhuǎn)
            sbit clock=P1^4; //步進(jìn)電機頻率端口
            sbit lcdrs=P2^3; //LCD1602端口定義
            sbit lcdrw=P2^4; //LCD1602端口定義
            sbit lcden=P2^5; //LCD1602端口定義
            uchar k=0;
            uchar j=0;
            uchar flag=0; //標(biāo)志位
            uint avr_time; //定義平均時間
            uchar num; //定義液晶顯示循環(huán)變量
            uint zheng=0,fan=0; //正反轉(zhuǎn)次數(shù)置零
            uint shijian[51]; //定義時間數(shù)組
            uchar code table2[]="forward: "; //LCD1602顯示數(shù)組
            uchar code table3[]="backward: "; //LCD1602顯示數(shù)組
            uchar code table4[]=" error! "; //LCD1602顯示數(shù)組
            void timer_init()
            {
            TMOD=0x11; //定時器模式設(shè)置
            TH0=0xFF; //寫入定時器0初始值
            TL0=0x9C;
            TH1=(65536-50000)/256; //寫入定時器1初始值
            TL1=(65536-50000)%6;
            ET0=1; //允許定時器0中斷
            TR0=1; //啟動定時器0
            ET1=1; //允許定時器1中斷
            TR1=1; //啟動定時器1
            EA=1; //允許總中斷
            }
            uint data_pro(void)
            {
            uchar i;
            uint avr=0;
            for(i=1;i<51;i++)
            {
            avr+=shijian[i];
            }
            avr=avr/50;
            return avr;
            }
            void delay_50us(uint t)
            {
            uint y;
            for(;t>0;t--)
            for(y=19;y>0;y--);
            }
            void write_com(uchar com)
            {
            lcdrs=0;
            lcdrw=0;
            lcden=0;
            P0=com;
            delay_50us(10);
            lcden=1;
            delay_50us(20);
            lcden=0;
            }
            void write_data(uchar date)
            {
            lcden=0;
            lcdrs=1;
            lcdrw=0;
            P0=date;
            delay_50us(10);
            lcden=1;
            delay_50us(20);
            lcden=0;
            }
            void init()
            {
            write_com(0x38);
            delay_50us(100);
            write_com(0x01);
            delay_50us(100);
            write_com(0x06);
            delay_50us(100);
            write_com(0x0f);
            delay_50us(100);
            }
            void write_zheng(uchar add,uchar date)
            {
            uchar qian,bai,shi,ge;
            qian=date/1000;
            bai=date00/100;
            shi=date0/10;
            ge=date;
            write_com(0x80+add);
            write_data(0x30+qian);
            write_data(0x30+bai);
            write_data(0x30+shi);
            write_data(0x30+ge);
            }
            void write_fan(uchar add,uchar date)
            {
            uchar qian,bai,shi,ge;
            qian=date/1000;
            bai=date00/100;
            shi=date0/10;
            ge=date;
            write_com(0x80+0x40+add);
            write_data(0x30+qian);
            write_data(0x30+bai);
            write_data(0x30+shi);
            write_data(0x30+ge);
            }
            void main()
            {
            timer_init(); //定時器初始化
            delay_50us(300); //液晶初始化前延時一段時間
            init(); //液晶初始化
            write_com(0x80); //寫地址
            for(num=0;num<16;num++) //顯示
            {
            write_data(table2[num]);
            delay_50us(100);
            }
            write_com(0x80+0x40);
            for(num=0;num<16;num++)
            {
            write_data(table3[num]);
            delay_50us(100);
            }
            write_zheng(12,zheng); //初始顯示零
            write_fan(12,fan); //初始顯示零
            en=1; //上電后,電機馬上啟動
            zx=1; //正轉(zhuǎn)
            zheng++; //正轉(zhuǎn)次數(shù)加1
            write_zheng(12,zheng); //顯示修改后,正轉(zhuǎn)次數(shù)
            while(1)
            {
            if(gd2==1) //碰到光電開關(guān)2
            {
            zx=0; //反轉(zhuǎn)
            fan++; //反轉(zhuǎn)次數(shù)加1
            write_fan(12,fan); //顯示修改后,反轉(zhuǎn)次數(shù)
            }
            if(gd1==1) //碰到光電開關(guān)1
            {
            TR1=0; //關(guān)定時器1
            en=0; //停止電機轉(zhuǎn)動
            shijian[j++]=k; //記錄一次時間
            if(j==51) //記錄完50次,求平均值
            {
            avr_time=data_pro();
            }
            if(flag==0) //標(biāo)志位
            {
            k=0; //中斷數(shù)據(jù)清0
            TH1=(65536-50000)/256; //重裝定時器初值
            TL1=(65536-50000)%6;
            TR1=1; //再次啟動定時器1
            zx=1; //正轉(zhuǎn)
            en=1; //電機啟動
            zheng++; //正轉(zhuǎn)次數(shù)加1
            write_zheng(12,zheng); //顯示修改后,正轉(zhuǎn)次數(shù)
            }
            }
            if(j>51) //記錄完50次后,每次都要比較是否超出規(guī)定的時間
            {
            if((k-avr_time)>max_time) //如果大于額定時間
            {
            en=0; //電機停止轉(zhuǎn)動
            write_com(0x80+0x40);//液晶顯示錯誤
            for(num=0;num<16;num++)
            {
            write_data(table4[num]);
            delay_50us(100);
            }
            }
            }
            }
            }
            void timer0() interrupt 1
            {
            static uchar i=0;
            TH0=0xFF;
            TL0=0x9C;
            ++i;
            if (i>10) i=0;
            if (i<=ZKB)
            clock=0;
            else
            clock=1;
            }
            void timer1() interrupt 3
            {
            TH1=(65536-50000)/256;
            TL1=(65536-50000)%6;
            k++;
            }



            評論


            技術(shù)專區(qū)

            關(guān)閉