<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時(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è)置超出時(shí)間
          sbit gd1=P1^0; //光電開關(guān)被擋住是高電平,沒有被擋住是低電平
          sbit gd2=P1^1; //光電開關(guān)被擋住是高電平,沒有被擋住是低電平
          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; //寫入定時(shí)器0初始值
          TL0=0x9C;
          TH1=(65536-50000)/256; //寫入定時(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); //寫地址
          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) //碰到光電開關(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)定時(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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();