因水平有限求大神师傅们帮帮忙怎样修改才能在15F104W中正常运行,小女子先谢谢各位师傅了。
程序要求
一键控制个LED灯 分三段
一段:按第一次按键开机 LED1.LED4灯点亮,1小时后,关闭LED1,延时5秒后,并点亮LED2,1分20秒后关闭LED2,停5秒后,再点亮LED3,5秒并关闭,同时关闭LED1灯,进入待机;大概1小时后,再循环一段,如没有断电一直循环,直到按第二次按键。
二段:按第二次按键 LED1,LED5灯点亮,,一直点亮,直到按第三次按键。
三段:按第三次按键 LED5灯还亮着 并点亮LED2,1分20秒后关闭LED2,停5秒后,再点亮LED3,5秒并关闭,同时关闭LED5灯,进入关机状态,等待下次开机。 如果连续按按键也要安这3段进行
下面是80C52调试程序
- #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; //设置定时器模式
- TMOD |= 0x01; //设置定时器模式
- TL0 = 0xB0; //设置定时初值
- TH0 = 0x3C; //设置定时初值
- EA=1; // 开总中断
- ET0=1; //允许T0中断
- TF0 = 0; //清除TF0标志
- TR0 = 0; //开启定时T0
- PT0=1;
- }
- //====================================================================
- void Timer0_int(void)interrupt 1
- {
- TL0 = 0xB0; //设置定时初值
- TH0 = 0x3C; //设置定时初值
- 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;//下降沿触发 IT0=0;时为低电有效
- EX0=1;//打开中断0允许
- EA=1; //打开总中断
- K1=1;//初始化端口
- }
- //===============================================================================
- void Timer1_init(void)//12M 0.1ms定时程序
- {
- TMOD &= 0x0F; //设置定时器模式
- TMOD |= 0x10; //设置定时器模式
- TL1 = 0x58; //设置定时初值
- TH1 = 0x9E; //设置定时初值
- EA=1; // 开总中断
- ET1=1; //允许T0中断
- TF1 = 0; //清除TF0标志
- TR1 = 0; //开启定时T0
- PT1=1;
- }
- //=================================================================
- void Timer1_int(void)interrupt 3
- {
- TL1 = 0x58; //设置定时初值
- TH1 = 0x9E; //设置定时初值
- 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小时后关LED1开LED2.
- if(hour==6){led1=1;led2=0;} //1分50秒后 关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;} //进入关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秒关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; }
-
- }
-
- }
-
- }
-
-
- }
复制代码
|