標題: 單片機設計四路定時開關,匯編,c均可 ,要求有注釋, 求幫助 [打印本頁]
作者: 18439776334 時間: 2018-12-26 21:37
標題: 單片機設計四路定時開關,匯編,c均可 ,要求有注釋, 求幫助
3.四路定時開關
總體要求:基于51單片機設計一個定時開關用于定時控制四個回路的電源通斷。
基本要求:
1.主要應用于定時控制四個回路的電源通斷。
2.以當前時間為基準,以24小時為周期,可以任意設定哪個回路于某時刻開,到某時刻關。如可以設置第一個回路在8:30-11:30開,14:30-18:00開,其他時間段為關。
3.顯示出四路開關的狀態及剩余時間。
作者: qaz963 時間: 2018-12-29 14:38
#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
sbit D9=P3^2;
sbit D10=P3^3;
sbit D11=P3^4;
sbit D12=P3^5;
sbit H1=P3^6;
sbit H2=P3^7;
sbit out1=P0^4;
sfr P1M1=0x91;
sfr P1M0=0x92;
bit sflag;
uchar num,shi,fen,k;
uchar shi1k,fen1k,shi2k,fen2k,shi3k,fen3k,shi4k,fen4k;
uchar shi1g,fen1g,shi2g,fen2g,shi3g,fen3g,shi4g,fen4g;
uchar s1;
unsigned int table1[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,
0x7f,0x6f}; //數組共陰數碼管顯示從0到9
unsigned int table2[]={0xf7,0xfb,0xfd,0xfe}; //數碼管位定義
unsigned int table3[4]={0};
void display(unsigned char shi,unsigned char fen);
unsigned char key();
void Delay10ms();
void main()
{
P1M0=0xff;
P1M1=0x00;
TMOD=0x10;
TH1=0xd8;
TL1=0xf0;
EA=1; //總中斷
ET1=1; //定時器中斷
TR1=1; //開啟定時器
while(1)
{
if(s1==0)
{
display(shi,fen);
}
k=key();
if(k==1)
{
s1++;
}
if(s1!=0)
{
TR1=0;
if(s1==1)
{
if(k==2) shi++;
if(k==3) shi--;
if(k==5) fen++;
if(k==6) fen--;
P2=0xfe;
display(shi,fen);
}
if(s1==2)
{
if(k==2) shi1k++;
if(k==3) shi1k--;
if(k==5) fen1k++;
if(k==6) fen1k--;
P2=0xfd;
display(shi1k,fen1k);
}
if(s1==3)
{
if(k==2) shi1g++;
if(k==3) shi1g--;
if(k==5) fen1g++;
if(k==6) fen1g--;
P2=0xff;
display(shi1g,fen1g);
}
if(s1==4)
{
if(k==2) shi2k++;
if(k==3) shi2k--;
if(k==5) fen2k++;
if(k==6) fen2k--;
P2=0xfb;
display(shi2k,fen2k);
}
if(s1==5)
{
if(k==2) shi2g++;
if(k==3) shi2g--;
if(k==5) fen2g++;
if(k==6) fen2g--;
P2=0xff;
display(shi2g,fen2g);
}
if(s1==6)
{
if(k==2) shi3k++;
if(k==3) shi3k--;
if(k==5) fen3k++;
if(k==6) fen3k--;
P2=0xf7;
display(shi3k,fen3k);
}
if(s1==7)
{
if(k==2) shi3g++;
if(k==3) shi3g--;
if(k==5) fen3g++;
if(k==6) fen3g--;
P2=0xff;
display(shi3g,fen3g);
}
if(s1==8)
{
if(k==2) shi4k++;
if(k==3) shi4k--;
if(k==5) fen4k++;
if(k==6) fen4k--;
P2=0xef;
display(shi4k,fen4k);
}
if(s1==9)
{
if(k==2) shi4g++;
if(k==3) shi4g--;
if(k==5) fen4g++;
if(k==6) fen4g--;
P2=0xff;
display(shi4g,fen4g);
}
if(s1==10)
{
s1=0;
TR1=1;
sflag=1;
}
}
if(s1==0&&sflag==1)
{
if(shi==shi1k&&fen==fen1k) {out1=0; D9=0;}
if(shi==shi1g&&fen==fen1g) { out1=1;D9=1;}
if(shi==shi2k&&fen==fen2k) D10=0;
if(shi==shi2g&&fen==fen2g) D10=1;
if(shi==shi3k&&fen==fen3k) D11=0;
if(shi==shi3g&&fen==fen3g) D11=1;
if(shi==shi4k&&fen==fen4k) D12=0;
if(shi==shi4g&&fen==fen4g) D12=1;
}
}
}
unsigned char key()
{
uchar temp1,temp2,k=0;
P0=0xff; //將P0口(列線)全部送高電平
H1=0;
H2=1;
temp1=P0; //讀取P0口當前的狀態賦給temp,例如為11011111
temp1=temp1&0xe0;//將temp和0xe0進行與運算(11100000),結果為11000000
if(temp1!=0xe0) //如果temp不等于0xe0,則說明有按鍵按下
{
Delay10ms(); //延時去抖操作
temp1=P0; //再重復一次上述操作
temp1=temp1&0xe0;
if(temp1!=0xe0)
{
temp1=P0;
//如果有按鍵按下,則將標志位置1?
switch(temp1) //判斷按下的是該行的第幾列
{
case 0xdf:k=1;break; //11011111,第一行第一列
case 0xbf: k=2;break; //10111111,第一行,第二列
case 0x7f: k=3;break; //01111111,第一行,第三列
}
while(temp1!=0xe0) //等待按鍵釋放,只要結果不等于0xe0,則說明按鍵沒有被釋放
{
temp1=P0;
temp1=temp1&0xe0;
}
}
}
P0=0xff; //將P0口(列線)全部送高電平
H1=1;
H2=0;
temp2=P0; //讀取P0口當前的狀態賦給temp,例如為11011111
temp2=temp2&0xe0;//將temp和0xe0進行與運算(11100000),結果為11000000
if(temp2!=0xe0) //如果temp不等于0xe0,則說明有按鍵按下
{
Delay10ms(); //延時去抖操作
temp2=P0; //再重復一次上述操作
temp2=temp2&0xe0;
if(temp2!=0xe0)
{
temp2=P0;
switch(temp2) //判斷按下的是該行的第幾列
{
case 0xdf: k=4;break; //11011111,第二行第一列
case 0xbf:k=5;break;//10111111,第二行,第二列
case 0x7f: k=6;break;//01111111,第二行,第三列
}
while(temp2!=0xe0) //等待按鍵釋放,只要結果不等于0xe0,則說明按鍵沒有被釋放
{
temp2=P0;
temp2=temp2&0xe0;
}
}
}
return k;
}
void time1() interrupt 3 //定時器1的中斷服務
{
TH1=0xd8;
TL1=0xf0;
num++;
if(num==100)//到了100次,1秒時間到,代表1分鐘時間到
{
num=0;
fen++;
if(fen==60)//到60后清零
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
void Delay10ms()
{
unsigned char i,j,g;
for(i=0;i<5;i++)
for(j=0;j<4;j++)
for(g=0;g<248;g++);
}
void display(unsigned char shi,unsigned char fen)
{ unsigned char m;
table3[0]=fen%10;
table3[1]=fen/10;
table3[2]=shi%10;
table3[3]=shi/10;
for(m=0;m<4;m++)
{
P0=table2[m];P1=table1[table3[m]];
Delay10ms();
}
if(m==4)
m=0;
}
作者: lxpzxd 時間: 2019-12-29 01:25
請問,有仿真原理圖嗎,光有程序看不太懂
作者: 小明小坤 時間: 2019-12-29 18:56
請問有仿真文件嗎
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产精品国产a级
|
日韩高清一区二区
|
久久久国产一区二区三区
|
51ⅴ精品国产91久久久久久
|
一区二区中文字幕
|
亚洲欧美日韩精品久久亚洲区
|
97碰碰碰|
亚洲成人福利
|
国产免费一区二区
|
www.日韩系列
|
久久久成人动漫
|
国产精品99久久久精品免费观看
|
精久久久
|
xxx.在线观看
|
91久久久久久久久久久久久
|
在线观看国产视频
|
少妇一级淫片免费放播放
|
国产黄色大片
|
国产精品96久久久久久
|
久久www免费视频
|
国产精品久久久久久久久久免费
|
免费观看a级毛片在线播放
黄网站免费入口
|
国产午夜精品一区二区三区嫩草
|
成人1区2区|
久久综合国产
|
久久免费看
|
日韩av高清
|
黄色国产视频
|
亚洲人成免费
|
av在线播放不卡
|
国产一区二区三区视频免费观看
|
日韩1区|
久久性|
欧美日韩中文字幕在线
|
国产精产国品一二三产区视频
|
91福利在线观看
|
男人天堂网址
|
亚洲444kkkk在线观看最新
|
毛片a|
精品乱码一区二区三四区视频
|
久久久99国产精品免费
|