標題: 單片機定時控制系統,繼電器到設定時間亮起來后,時鐘停了,八位數碼管不顯示 [打印本頁]
作者: 厄舍 時間: 2023-3-26 16:10
標題: 單片機定時控制系統,繼電器到設定時間亮起來后,時鐘停了,八位數碼管不顯示
定時控制系統可以顯示時間,并獨立控制兩組繼電器的開關狀態,具體功能如下:
(1)顯示時間,包括星期,小時,分鐘;
(2)分別間歇控制2個繼電器的開關,各繼電器的導通時間和斷開時間可以獨立設置,以分鐘為單位。例如間歇繼電器A導通n分鐘,關閉m分鐘,如此循壞。
求教各位幫忙看下單片機程序問題在哪里。多謝了。- #include<reg51.h>
- #define uChar unsigned char
- #define uInt unsigned int
- uChar a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段選0-9
- uChar b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位選
- uChar second=50,minute=59,hour=23,day=07,count;
- sbit Key1 = P3^0; //繼電器確認設置
- sbit Key2 = P3^1; //調位
- sbit Key3 = P3^2; //加一
- sbit Key4 = P3^3; //切換
-
- sbit L1=P1^0; //繼電器控制口
- sbit L2=P1^1;
- uChar a1=01,a2=01; //間歇繼電器1的休息時間a1與工作時間a2
- uChar b1=01,b2=01; //間歇繼電器2的休息時間b1與工作時間b2
- uChar a11=01,a21=01,b11=01,b21=01; //記錄間歇繼電器組設置后的狀態
- /*********************延遲函數********************/
- void Delay(uInt t)
- {
- while(t)
- {
- t--;
- }
- }
- /*********************時分秒顯示函數*******************/
- void Dispaly1(uChar day,uChar hour,uChar minute)
- {
- /*********************第一位數碼管*********************/
- P2=b[0];
- P0=a[day/10];
- Delay(10);
- /*********************第二位數碼管*********************/
- P2=b[1];
- P0=a[day%10];
- Delay(10);
- /*********************第三位數碼管*********************/
- P2=b[2];
- P0=0x40;
- Delay(10);
- /*********************第四位數碼管*********************/
- P2=b[3];
- P0=a[hour/10];
- Delay(10);
- /*********************第五位數碼管*********************/
- P2=b[4];
- P0=a[hour%10];
- Delay(10);
- /*********************第六位數碼管*********************/
- P2=b[5];
- P0=0x40;
- Delay(10);
- /*********************第七位數碼管*********************/
- P2=b[6];
- P0=a[minute/10];
- Delay(10);
- /*********************第八位數碼管*********************/
- P2=b[7];;
- P0=a[minute%10];
- Delay(10);
- }
- /*********************繼電器狀態顯示函數********************/
- void Dispaly2(uChar a1,uChar a2,uChar b1,uChar b2)
- {
- P2=b[0];
- P0=a[a1/10];
- Delay(10);
- P2=b[1];
- P0=a[a1%10];
- Delay(10);
- P2=b[2];
- P0=a[a2/10];
- Delay(10);
- P2=b[3];
- P0=a[a2%10];
- Delay(10);
- P2=b[4];
- P0=a[b1/10];
- Delay(10);
- P2=b[5];
- P0=a[b1%10];
- Delay(10);
- P2=b[6];
- P0=a[b2/10];
- Delay(10);
- P2=b[7];
- P0=a[b2%10];
- Delay(10);
- }
- /*********************時鐘按鍵掃描函數*********************/
- void Keyscan1()
- {
- static uChar j=0;
- /*時鐘調位和數值加一功能*/
- if(Key2==0)
- {
- Delay(10);
- if(Key2==0)
- while(!Key2);
- j++;
- }
- if(j%4==1)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- day++;
- if(day==8)
- day=1;
- }
- }
- if(j%4==2)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- hour++;
- if(hour==24)
- hour=0;
- }
- }
- if(j%4==3)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- minute++;
- if(minute==60)
- minute=0;
- }
- }
- }
- /*間歇繼電器掃描函數*/
- void Keyscan2()
- {
- static uChar n=0;
- /*調位和加一功能*/
- if(n%4==1)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- a1++;
- if(a1==10) //繼電器1休息時間不超過10分鐘
- a1=1;
- }
- }
- if(n%4==2)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- a2++;
- if(a2==10) //繼電器1工作時間不超過10分鐘
- a2=1;
- }
- }
- if(n%4==3)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- b1++;
- if(b1==10) //繼電器2休息時間不超過10分鐘
- b1=1;
- }
- }
- if(n%4==0)
- {
- if(Key3==0)
- {
- Delay(10);
- if(Key3==0)
- while(!Key3);
- b2++;
- if(b2==10) //繼電器2工作時間不超過10分鐘
- b2=1;
- }
- }
- }
- /************************************************/
- /***************主函數***************************/
- /************************************************/
- void main()
- {
- TMOD=0x01; /*定時器以方式一工作*/
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;/*10ms計時*/
- EA=1;
- ET0=1;/*允許定時器0中斷*/
- TR0=1;/*打開定時器0*/
- while(1)
- {
- static uChar h=0;
- /*時鐘和繼電器切換功能*/
- if(Key4==0)
- {
- Delay(10);
- if(Key4==0)
- while(!Key4);
- h++;
- }
- if(h%2==0)/*如果按鍵偶數次則顯示時鐘*/
- {
- Dispaly1(day,hour,minute);
- Keyscan1();
- }
- if(h%2==1)/*如果按鍵奇數次則顯示日期*/
- {
- Dispaly2(a1,a2,b1,b2);
- Keyscan2();
- Delay(10);
- if(Key1==0) //按鍵K4按下確定設置并退出
- {
- Delay(10);
- a11=a1;
- a21=a2;
- b11=b1;
- b21=b2;
- break;
-
- }
- }
- }
- }
- /**********************中斷函數**************************/
- void time0_int(void) interrupt 1
- {
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- count++;
- if(count==100)/*10ms??ê±£???100′??ò??o?1s*/
- {
- count=0;
- second++;
- if(second==60)
- {
- second=0;
- minute++;
- if(L1==1)
- {
- a11--;
- if(a11==0)
- {
- L1=0;
- a11=a1;
- }
- }
-
- if(a21==0)
- {
- L1=1;
- a21=a2;
- }
- else if(L1==0)
- {
- a21--;
- }
- if(L2==1)
- {
- b11--;
- if(b11==0)
- {
- L2=0;
- b11=b1;
- }
- }
- if(b21==0)
- {
- L2=1;
- b21=b2;
- }
- else if(L2==0)
- {
- b21--;
- }
- if(minute==60)
- {
- minute=0;
- hour++;
- if(hour==24)
- {
- day++;
- hour=0;
- minute=0;
- second=0;
- if(day==7)
- {
- day=01;
- hour=0;
- minute=0;
- second=0;
- }
- }
- }
- }
- }
復制代碼
-
2.png
(133.04 KB, 下載次數: 68)
下載附件
2023-3-26 16:07 上傳
-
1.png
(136.02 KB, 下載次數: 67)
下載附件
2023-3-26 16:07 上傳
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
精品美女
|
黄色毛片免费看
|
亚洲精品99
|
久久久久免费精品国产小说色大师
|
国产精品国产三级国产a
|
a黄毛片|
台湾佬久久
|
国产一区二区三区久久久久久久久
|
久久国产亚洲
|
97av视频在线观看
|
亚洲视频在线一区
|
欧美一区二区三区久久精品
|
欧美激情一区
|
国产精品一区二区免费看
|
国产成人精品久久二区二区91
|
一区二区三区免费
|
91精品国产综合久久婷婷香蕉
|
国产在线播
|
成人免费福利
|
久久久久无码国产精品一区
|
久久av资源网
|
日日骚av
|
精品亚洲一区二区三区
|
亚洲精品亚洲人成人网
|
在线观看av网站永久
|
我我色综合
|
欧美综合在线视频
|
中文字幕国产精品
|
羞羞视频在线观看
|
国产精品福利视频
|
欧美一区二区免费
|
在线播放精品视频
|
h视频免费观看
|
国产精品国产三级国产播12软件
|
国产视频第一页
|
精品国产一区二区三区久久久蜜月
|
天天拍天天操
|
成年男女免费视频网站
|
日日夜精品视频
|
久久久久国产一区二区三区
|
久久久入口
|