| 下载的时候这样勾选,时钟选最低的,能多低选多低,对精度没有要求
 
  
 代码。。。注释够详细了吧
 
 
		复制代码 
		
			
				#include <STC15F2K60S2.H>
				stc15w201s
				 
				#include "intrins.h"
				sbit power_ctrl=P5^4;
				sbit hold_ctrl=P5^5;
				sbit key1=P3^3;//震动开关
				sbit key2=P3^2;//按键(点动背光键)短按hold,长按开启背光
				sbit led_ctrl=P3^1;//背光
				//一个时间基数约为125ms//
				#define power_on_time 2400 //5min
				#define system_on_time 14400 //30min
				#define light_on_time 40 //5s
				unsigned long int power_on=power_on_time;//开机时间
				unsigned long int system_on=system_on_time;//系统待机时间
				unsigned int light_key_hold_time=0;//灯按键的保持时间
				unsigned long int light_time=0;//亮灯时间
				 
				void Delay_ms(unsigned int time)        //@6.000MHz
				{
				    unsigned char i, j;
				    while(time--)
				    {
				        i = 6;
				        j = 211;
				        do
				        {
				            while (--j);
				        } while (--i);
				    }
				}
				 
				 
				void main()
				{
				    CLK_DIV=CLK_DIV|0x07;//128分频
				    led_ctrl=0;
				    P3M1|=0x02;
				    P3M0&=0xfd;//高阻
				    hold_ctrl=0;        
				 
				    Delay_ms(10);
				 
				    //WKTCL = 49;                       //488us*(49+1) = 24.4ms    
				    //WKTCH = 0x80; //开掉电定时器  
				    
				    
				    INT_CLKO |= 0x40;//开中断4
				    EA = 1;    
				    EX1 = 1;//开中断1,震动开关
				    IT1 = 1;//仅下降沿
				    
				    EX0 = 1;//开中断0,点动开关
				    IT0 = 1;//仅下降沿
				    
				    while(1)
				    {
				        if(light_key_hold_time)
				        {    
				            WKTCL = 0x09;     //488us*(9+1) = 4.8ms    
				            WKTCH = 0x80; //开掉电定时器  每隔4.8ms检测一次按键。检测之间掉电休眠
				            light_key_hold_time++;
				            if(light_key_hold_time==65535)light_key_hold_time=101;  (责任编辑:admin) |