久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
工業生產節能時控器單片機程序
[打印本頁]
作者:
51黑dd
時間:
2016-4-6 18:25
標題:
工業生產節能時控器單片機程序
節能時控器,根據每日供電波峰,波谷,定時用電。節能,降低用電成本。C51-AT89C2051 程序
源碼:
569417381jsnk.rar
(2.29 KB, 下載次數: 15)
2016-4-6 18:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
#include <AT89x051.H> //器件配置文件
#define uchar unsigned char //變量類型的宏定義
#define uint unsigned int
uchar DATA_7SEG[10]={0xfc,0x60,0xda,0xf2,0x66,
0xb6,0xbe,0xe0,0xfe,0xf6}; /*0~9的數碼管段碼*/
uchar x[4]; /* 存放走時的數組*/
uchar y[4]={0,0,0,0}; /* 存放定時1的數組*/
uchar z[4]={0,0,0,0}; /* 存放定時2的數組*/
uchar act[4]={0xfe,0xfd,0xfb,0xf7}; /*四位數碼管的位選碼*/
void delay(uint k); //延時子函數聲明
void conv(); //走時轉換子函數聲明
void p_out(); //判別定時到否子函數聲明
void p_out1(); //判別定時到否子函數1聲明
void t_adj(); //走時調整子函數聲明
uchar deda=0; /*100mS計數單元清零*/
bit d_05s=0; /*0.5秒標志*/
bit o_f1=0; /*定時1啟/停標志*/
bit o_f2=0; /*定時2啟/停標志*/
uchar set=0; /*功能鍵標志*/
uchar h=0;
uchar n=0;
uchar m=0;
uchar flag;
uchar left=0;
uchar sec=0;
uchar min=0;
uchar hour=0;
uchar min1=0;
uchar hour1=0;
uchar min2=0;
uchar hour2=0;
uchar up=0;
bit flag1=0;
bit flag2=0;
/*顯示走時*/
void time()
{
for(h=0;h<4;h++)
{P1=DATA_7SEG[x[h]]; //輸出數碼管的字形碼
P3=act[h];p_out(); //輸出數碼管的位碼。判斷輸出
if(P3_2==0){if(d_05s==1)P1_0=1;else P1_0=0;} /* 百位數碼管點亮時,控制小數點
(秒點)閃爍*/
delay(2);} //每位數碼管點亮2ms
if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;}/* 若定時1啟動,
點亮十位數碼管小數點*/
else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則十位數碼管
小數點不亮*/
delay(2);
if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /* 若定時2啟動,
點亮個位數碼管小數點*/
else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則個位數碼管
小數點不亮*/
delay(2);
}
/*定時器T0初始化*/
void init_timer0()
{
TMOD=0x11;
TH0=-(50235/256);
TL0=-(50235%256);
IE=0x8a;
TR0=1;
}
/*定時器T1初始化*/
void init_timer1()
{
TH1=-(5000/256);
TL1=-(5000%256);
}
/*延時k*1ms子函數*/
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++){
for(j=0;j<60;j++)
{;}}
}
/*100mS定時中斷服務子函數*/
void zd0(void) interrupt 1
{
TH0=-(50235/256); //重裝100ms定時初值
TL0=-(50235%256);
deda++; //100ms計時單元遞增
}
/*10mS定時中斷服務子函數*/
void zd1(void) interrupt 3
{uchar i,j;i=P1;j=P3;
TH1=-(5000/256);
TL1=-(5000%256);
if(m==1)n++;
if(n>=30){n=0;m=0;}
P3_7=0;
P1=0xff;
if(P1!=0xff)
{
if(n==0)m=1;
{if(n==1)
{
if(P1_0==0){set++;left=0;}
if(set>=4)set=0;
if(set==1)flag=0x55;
if(P1_1==0)left++;
if(left>=4)left=0;
if(P1_2==0){up++;
switch(left)
{
case 0:{if(up>=10)up=0;}break;
case 1:{if(up>=6)up=0;}break;
case 2:{if(up>=10)up=0;}break;
case 3:{if(up>=3)up=0;}break;
default:break;
}
}
if(P1_2==0){
switch(set)
{case 0:break;
case 1:x[left]=up;break;
case 2:{y[left]=up;if(P1_3==0)o_f1=!o_f1;}break;
case 3:{z[left]=up;if(P1_3==0)o_f2=!o_f2;}break;
default:break;}
}
else {
switch(set)
{case 0:break;
case 1:up=x[left];break;
case 2:{up=y[left];if(P1_3==0)o_f1=!o_f1;}break;
case 3:{up=z[left];if(P1_3==0)o_f2=!o_f2;}break;
default:break;}
}}
}}
P1=i;P3=j;
}
/*顯示調整走時*/
void t_adj()
{p_out1();
for(h=0;h<4;h++) //四位數碼管每位點亮3ms
{if(h==left)P1=0x00;
else {P1=DATA_7SEG[x[h]];
P3=act[h];p_out();
delay(3);}}
P1=DATA_7SEG[up];P3=act[left];
hour=x[3]*10+x[2];min=x[1]*10+x[0];
p_out();
delay(12); //需調整的數碼管點亮12ms
if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;} /*若定時1啟動,
點亮十位數碼管小數點*/
else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則十位數碼管
小數點不亮*/
delay(12); //需調整的數碼管點亮12ms
if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /*若定時2啟動,
點亮個位數碼管小數點*/
else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否則個位數碼管
小數點不亮*/
delay(12); //需調整的數碼管點亮12ms
}
/*顯示調整定時1*/
void t1_adj()
{p_out1();
for(h=0;h<4;h++) //四位數碼管每位點亮3ms
{if(h==left)P1=0x00;
else {P1=DATA_7SEG[y[h]];
P3=act[h];p_out();
delay(3);}}
P1=DATA_7SEG[up];P3=act[left]; //需調整的數碼管點亮18ms
hour1=y[3]*10+y[2];min1=y[1]*10+y[0];
p_out();
delay(18);
if(o_f1==1){P1=0x01;P3_3=0;P3_2=1;P3_1=0;P3_0=1;} /*若定時1啟動,
點亮十位數碼管小數點*/
else{P1=0x01;P3_3=0;P3_2=1;P3_1=1;P3_0=1;} /*否則十位數碼管
小數點不亮*/
p_out();
delay(18); //需調整的數碼管點亮18ms
}
/*顯示調整定時2*/
void t2_adj()
{p_out1();
for(h=0;h<4;h++) //四位數碼管每位點亮3ms
{if(h==left)P1=0x00;
else {P1=DATA_7SEG[z[h]]; //需調整的數碼管點亮18ms
P3=act[h];p_out();
delay(3);}}
P1=DATA_7SEG[up];P3=act[left];
hour2=z[3]*10+z[2];min2=z[1]*10+z[0];
p_out();
delay(18);
if(o_f2==1){P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=0;} /*若定時2啟動,
點亮個位數碼管小數點*/
else{P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=1;} /*否則個位數碼管
小數點不亮*/
p_out();
delay(18); //需調整的數碼管點亮18ms
}
/*時、分、秒計時單元轉換*/
void conv()
{
if(deda<=5)d_05s=0; //每500ms,秒點取反
else d_05s=1;
if(deda>=10){sec++;deda=0;} //每1000ms,秒單元遞增
if(sec>=60){min++;sec=0;} //每60s,分單元遞增
if(min>=60){hour++;min=0;} //每60m,時單元遞增
if(hour>=24){hour=0;} //每24h,時單元清零
}
/*判別定時到否子函數*/
void p_out()
{
if(o_f1==1) //若定時1啟動
{if(hour==hour1) //定時1時間到
{if(min==min1)
{flag1=1;if(d_05s==1)P3_4=0;else P3_4=1;}}} //繼電器輸出標志置1,蜂鳴器間斷鳴響
if(flag1==1) P3_5=0; //若輸出標志為1,繼電器吸合
if(o_f2==1) //若定時2啟動
{if(hour==hour2) //定時2時間到
{if(min==min2)
{flag1=0;if(d_05s==1)P3_4=0;else P3_4=1;}}} //繼電器輸出標志置0,蜂鳴器間斷鳴響
if(flag1==0) P3_5=1; //若輸出標志為0,繼電器釋放
}
/*判別定時到否子函數1*/
void p_out1()
{
if(o_f1==1) //若定時1啟動
{if(hour==hour1) //定時1時間到
{if(min==min1)
{flag1=1;}}} //繼電器輸出標志置1
if(flag1==1) P3_5=0; //若輸出標志為1,繼電器吸合
if(o_f2==1) //若定時2啟動
{if(hour==hour2) //定時2時間到
{if(min==min2)
{flag1=0;}}} //繼電器輸出標志置0
if(flag1==0) P3_5=1; //若輸出標志為0,繼電器釋放
}
/*主函數*/
void main()
{
init_timer0(); /*定時器T0初始化*/
init_timer1(); /*定時器T1初始化*/
while(1)
{
/*將顯示緩沖數組內容移到時、分計時單元*/
hour=x[3]*10+x[2];min=x[1]*10+x[0];
hour1=y[3]*10+y[2];min1=y[1]*10+y[0];
hour2=z[3]*10+z[2];min2=z[1]*10+z[0];
conv(); /*時、分、秒及100mS單元轉換*/
/*將轉換后的時、分計時單元內容移到顯示緩沖數組*/
x[3]=hour/10;x[2]=hour%10;x[1]=min/10;x[0]=min%10;
y[3]=hour1/10;y[2]=hour1%10;y[1]=min1/10;y[0]=min1%10;
z[3]=hour2/10;z[2]=hour2%10;z[1]=min2/10;z[0]=min2%10;
switch(set)
{
case 0:time();break;/*顯示走時*/
case 1:t_adj();break;/*顯示調整走時*/
case 2:t1_adj();break;/*顯示調整定時1*/
case 3:t2_adj();break;/*顯示調整定時2*/
default:break;
}
if(flag!=0x55) /*判斷RAM受干擾標志,若受干擾,
則顯示器閃爍告警*/
{uchar i;P3_4=1;P3_5=1;
for(i=0;i<100;i++) /*點亮顯示器200mS*/
{
P1=DATA_7SEG[x[3]];P3=0xf7;delay(1);
P1=DATA_7SEG[x[2]];P3=0xfb;delay(1);
P1=DATA_7SEG[x[1]];P3=0xfd;delay(1);
P1=DATA_7SEG[x[0]];P3=0xfe;delay(1);
}
P1=0xff;P3=0xff;delay(400); /*熄滅顯示器200mS*/
P3_7=0;
/*如有鍵按下達0.5S則退出閃爍狀態同時掉電標志置55H。*/
if(P1!=0xff){
delay(10);if(P1_0==0)flag=0x55;F0:if(P1!=0xff)goto F0;
}P3_7=1;
}
else TR1=1;/*啟動定時器1*/
}}
復制代碼
作者:
weimada
時間:
2016-4-7 00:23
有沒有電路圖參考一下..
作者:
YBZYBZ
時間:
2016-5-3 21:48
樓主應該把電路圖發一個讓大家看看
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩欧美国产一区二区
|
日本精品一区二区三区视频
|
国产精品区二区三区日本
|
亚洲视频一区在线观看
|
欧美激情久久久
|
欧美日韩一区在线观看
|
在线免费av观看
|
97日日碰人人模人人澡分享吧
|
一区二区三区韩国
|
久久久www成人免费无遮挡大片
|
日韩成人在线播放
|
日韩在线欧美
|
欧美激情久久久
|
国产高清美女一级a毛片久久w
|
可以免费观看的av片
|
精产嫩模国品一二三区
|
亚洲精品第一国产综合野
|
久久久网
|
久久精品91久久久久久再现
|
欧美一级片免费看
|
精品一区二区久久
|
日韩精品在线看
|
亚洲成人自拍
|
精品久久久久久
|
h在线免费观看
|
国产乱码久久久久久一区二区
|
天天综合久久
|
日本精品一区二区三区在线观看视频
|
亚洲精品久久久一区二区三区
|
欧美中文字幕在线
|
日韩av成人
|
九九综合
|
亚洲一区二区精品视频
|
91精品国产91久久久久久丝袜
|
欧美一级一
|
精品自拍视频
|
中文字幕一区二区三区在线观看
|
久久国产一区
|
午夜三区
|
国产精久久久久久
|
国产一级特黄真人毛片
|