因水平有限求大神師傅們幫幫忙怎樣修改才能在15F104W中正常運行,小女子先謝謝各位師傅了。
程序要求
一鍵控制個LED燈 分三段
一段:按第一次按鍵開機 LED1.LED4燈點亮,1小時后,關(guān)閉LED1,延時5秒后,并點亮LED2,1分20秒后關(guān)閉LED2,停5秒后,再點亮LED3,5秒并關(guān)閉,同時關(guān)閉LED1燈,進入待機;大概1小時后,再循環(huán)一段,如沒有斷電一直循環(huán),直到按第二次按鍵。
二段:按第二次按鍵 LED1,LED5燈點亮,,一直點亮,直到按第三次按鍵。
三段:按第三次按鍵 LED5燈還亮著 并點亮LED2,1分20秒后關(guān)閉LED2,停5秒后,再點亮LED3,5秒并關(guān)閉,同時關(guān)閉LED5燈,進入關(guān)機狀態(tài),等待下次開機。 如果連續(xù)按按鍵也要安這3段進行
下面是80C52調(diào)試程序
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar second,minute,hour,count,timer1,cout,a;
- uchar second1,minute1,hour1,count1;
- sbit K1 =P3^2; //按鍵
- sbit led1 =P2^0;
- sbit led2 =P2^1;
- sbit led3 =P2^2;
- sbit led4 =P2^3;
- sbit led5 =P2^4;
- bit m_flag,h_flag,flash_flag,open_flag,close_flag;
- //=====================================================================
- void Delay(uint k) //12M 10ms延時程序
- {
- uint i;
- for(;k>0;k--)
- for(i=0;i<20;i++)
- {;}
- }
- //=====================================================
- void Timer0_init(void)//12M 50ms定時程序
- {
- TMOD &= 0xF0; //設(shè)置定時器模式
- TMOD |= 0x01; //設(shè)置定時器模式
- TL0 = 0xB0; //設(shè)置定時初值
- TH0 = 0x3C; //設(shè)置定時初值
- EA=1; // 開總中斷
- ET0=1; //允許T0中斷
- TF0 = 0; //清除TF0標志
- TR0 = 0; //開啟定時T0
- PT0=1;
- }
- //====================================================================
- void Timer0_int(void)interrupt 1
- {
- TL0 = 0xB0; //設(shè)置定時初值
- TH0 = 0x3C; //設(shè)置定時初值
- count++;
- if(count==20)//1s到
- {
- count=0;
- second++;
- }
- if(second==60)//1分鐘到
- {
- second=0;
- minute++;
- }
- if(minute==60)//1小時到
- {
- minute=0;
- hour++;
- }
- if(hour==24)//24小時到
- {
- hour=0;
- }
- }
- //==============================================================================
- void IrInit()
- {
- IT0=1;//下降沿觸發(fā) IT0=0;時為低電有效
- EX0=1;//打開中斷0允許
- EA=1; //打開總中斷
- K1=1;//初始化端口
- }
- //===============================================================================
- void Timer1_init(void)//12M 0.1ms定時程序
- {
- TMOD &= 0x0F; //設(shè)置定時器模式
- TMOD |= 0x10; //設(shè)置定時器模式
- TL1 = 0x58; //設(shè)置定時初值
- TH1 = 0x9E; //設(shè)置定時初值
- EA=1; // 開總中斷
- ET1=1; //允許T0中斷
- TF1 = 0; //清除TF0標志
- TR1 = 0; //開啟定時T0
- PT1=1;
- }
- //=================================================================
- void Timer1_int(void)interrupt 3
- {
- TL1 = 0x58; //設(shè)置定時初值
- TH1 = 0x9E; //設(shè)置定時初值
- count1++;
- if(count1==40)//1s到
- {
- count1=0;
- second1++;
- }
-
- }
- //=====================================================================
- void key_scan() interrupt 0
- {
- if(K1==0)
- {
- Delay(15);
- if (K1==0)
- {
- while(!K1);
- a++;
- if(a==4){a=0;}
- }
- }
- }
- //===================================================================================
- void main()
- {
- Timer0_init();
- Timer1_init();
- IrInit();
- m_flag=0;
- h_flag=0;
- flash_flag=0;
- cout=0;
- a=0;
- led1=1;
- led2=1;
- led3=1;
- led4=1;
- led5=1;
- second1=0;
- minute1=0;
- hour1=0;
- second=0;
- minute=0;
- hour=0;
- open_flag=0;
- close_flag=0;
- count=0;
- count1=0;
- K1 =1;
- while(1)
- {
- if(a==0)
- {
-
- TR0 = 0;
- TR1 = 0;
- second=0;minute=0;hour=0;
- second1=0;minute1=0;hour1=0;
- }
- if(a==1)
- {
- close_flag=0;
- second1=0;minute1=0;hour1=0;
- TR0 = 1;
- if(flash_flag==0)
- {
- if(m_flag==0)
- {
- led5=1;
- led2=1;
- led1=0; //開LED1
- led4=0; //開LED4燈
- }
- if(second==7){ m_flag=1;led1=1;led2=0;} //1小時后關(guān)LED1開LED2.
- if(hour==6){led1=1;led2=0;} //1分50秒后 關(guān)LED1開LED2
- if((minute==1)&&(second==30)&&(hour==6)){led1=1;led2=1;led3=0;} //停5秒開LED3
- if((minute==1)&&(second==37)&&(hour==6)){led1=1;led2=1;led3=1;led4=0;led5=1;h_flag=0;flash_flag=1;} //進入關(guān)LED3代機
-
- }
- if( minute==1){m_flag=0;flash_flag=0; second=0;minute=0;hour=0;} //1小時后 復來
- }
-
- if(a==2)
- {
- TR0 = 0;
- TR1 = 0;
- m_flag=0;flash_flag=0;
- second=0;minute=0;hour=0;
- second1=0;minute1=0;hour1=0;
- led2=1;
- led4=1;
- led3=1;
- m_flag=1;flash_flag=1;
- led5=0; //亮LED5
- led1=0; //點亮LED1
-
- }
- if(a==3)
- { // close_flag=0;
- open_flag=0;
- TR1 = 1;
- TR0 = 0;
- second=0;minute=0;hour=0;
- led1=1;
- led3=1;
- led4=1;
- m_flag=0;flash_flag=0;
- if(open_flag==0)
- {
- if(close_flag==0) { led2=0;led5=0; }
- if(second1==90){close_flag=1;led1=1;led4=1; led3=1;led2=1;led5=0;}
- if(second1==95) { led1=1; led4=1; led3=0;led5=0;led2=1;} // 1分50秒關(guān)LED2
- if(second1==100){ led1=1; led2=1; led4=1;led5=0;led3=1;} // 5秒后開LED3
- if(second1==105) {a=0; led1=1;led3=1;led4=1;led5=1; TR1 = 0;second1=0;minute1=0;hour1=0;TR0 = 0;second=0;minute=0;hour=0;open_flag=1; }
-
- }
-
- }
-
- }
-
-
- }
復制代碼
|