<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò ) 收藏
#include
#define uint unsigned int
#define uchar unsigned char
#define ZKB 6 //占空比初始值設定
#define max_time 100 //設置超出時(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)電機使能端,高電平工作,低電平不工作
sbit zx=P1^3; //高電平步進(jìn)電機正轉,低電平步進(jì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; //標志位
uint avr_time; //定義平均時(shí)間
uchar num; //定義液晶顯示循環(huán)變量
uint zheng=0,fan=0; //正反轉次數置零
uint shijian[51]; //定義時(shí)間數組
uchar code table2[]="forward: "; //LCD1602顯示數組
uchar code table3[]="backward: "; //LCD1602顯示數組
uchar code table4[]=" error! "; //LCD1602顯示數組
void timer_init()
{
TMOD=0x11; //定時(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; //上電后,電機馬上啟動(dòng)
zx=1; //正轉
zheng++; //正轉次數加1
write_zheng(12,zheng); //顯示修改后,正轉次數
while(1)
{
if(gd2==1) //碰到光電開(kāi)關(guān)2
{
zx=0; //反轉
fan++; //反轉次數加1
write_fan(12,fan); //顯示修改后,反轉次數
}
if(gd1==1) //碰到光電開(kāi)關(guān)1
{
TR1=0; //關(guān)定時(shí)器1
en=0; //停止電機轉動(dòng)
shijian[j++]=k; //記錄一次時(shí)間
if(j==51) //記錄完50次,求平均值
{
avr_time=data_pro();
}
if(flag==0) //標志位
{
k=0; //中斷數據清0
TH1=(65536-50000)/256; //重裝定時(shí)器初值
TL1=(65536-50000)%6;
TR1=1; //再次啟動(dòng)定時(shí)器1
zx=1; //正轉
en=1; //電機啟動(dòng)
zheng++; //正轉次數加1
write_zheng(12,zheng); //顯示修改后,正轉次數
}
}
if(j>51) //記錄完50次后,每次都要比較是否超出規定的時(shí)間
{
if((k-avr_time)>max_time) //如果大于額定時(shí)間
{
en=0; //電機停止轉動(dòng)
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ù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>