中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

        基于51單片機(jī)家具門(mén)屜耐用性自動(dòng)檢測(cè)裝置程序設(shè)計(jì)

        作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
        #include
        #define uint unsigned int
        #define uchar unsigned char
        #define ZKB 6 //占空比初始值設(shè)定
        #define max_time 100 //設(shè)置超出時(shí)間
        sbit gd1=P1^0; //光電開(kāi)關(guān)被擋住是高電平,沒(méi)有被擋住是低電平
        sbit gd2=P1^1; //光電開(kāi)關(guān)被擋住是高電平,沒(méi)有被擋住是低電平
        sbit en=P1^2; //步進(jìn)電機(jī)使能端,高電平工作,低電平不工作
        sbit zx=P1^3; //高電平步進(jìn)電機(jī)正轉(zhuǎn),低電平步進(jìn)電機(jī)反轉(zhuǎn)
        sbit clock=P1^4; //步進(jìn)電機(jī)頻率端口
        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; //定義平均時(shí)間
        uchar num; //定義液晶顯示循環(huán)變量
        uint zheng=0,fan=0; //正反轉(zhuǎn)次數(shù)置零
        uint shijian[51]; //定義時(shí)間數(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í)器模式設(shè)置
        TH0=0xFF; //寫(xiě)入定時(shí)器0初始值
        TL0=0x9C;
        TH1=(65536-50000)/256; //寫(xiě)入定時(shí)器1初始值
        TL1=(65536-50000)%6;
        ET0=1; //允許定時(shí)器0中斷
        TR0=1; //啟動(dòng)定時(shí)器0
        ET1=1; //允許定時(shí)器1中斷
        TR1=1; //啟動(dòng)定時(shí)器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(); //定時(shí)器初始化
        delay_50us(300); //液晶初始化前延時(shí)一段時(shí)間
        init(); //液晶初始化
        write_com(0x80); //寫(xiě)地址
        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; //上電后,電機(jī)馬上啟動(dòng)
        zx=1; //正轉(zhuǎn)
        zheng++; //正轉(zhuǎn)次數(shù)加1
        write_zheng(12,zheng); //顯示修改后,正轉(zhuǎn)次數(shù)
        while(1)
        {
        if(gd2==1) //碰到光電開(kāi)關(guān)2
        {
        zx=0; //反轉(zhuǎn)
        fan++; //反轉(zhuǎn)次數(shù)加1
        write_fan(12,fan); //顯示修改后,反轉(zhuǎn)次數(shù)
        }
        if(gd1==1) //碰到光電開(kāi)關(guān)1
        {
        TR1=0; //關(guān)定時(shí)器1
        en=0; //停止電機(jī)轉(zhuǎn)動(dòng)
        shijian[j++]=k; //記錄一次時(shí)間
        if(j==51) //記錄完50次,求平均值
        {
        avr_time=data_pro();
        }
        if(flag==0) //標(biāo)志位
        {
        k=0; //中斷數(shù)據(jù)清0
        TH1=(65536-50000)/256; //重裝定時(shí)器初值
        TL1=(65536-50000)%6;
        TR1=1; //再次啟動(dòng)定時(shí)器1
        zx=1; //正轉(zhuǎn)
        en=1; //電機(jī)啟動(dòng)
        zheng++; //正轉(zhuǎn)次數(shù)加1
        write_zheng(12,zheng); //顯示修改后,正轉(zhuǎn)次數(shù)
        }
        }
        if(j>51) //記錄完50次后,每次都要比較是否超出規(guī)定的時(shí)間
        {
        if((k-avr_time)>max_time) //如果大于額定時(shí)間
        {
        en=0; //電機(jī)停止轉(zhuǎn)動(dòng)
        write_com(0x80+0x40);//液晶顯示錯(cuò)誤
        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++;
        }



        評(píng)論


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

        關(guān)閉