台灯控制面板-调亮度定时器

key.c

#include "key.h"	 //把led.h文件包含进来
#include "system.h"	   //把timer0.h文件包含进来

uchar ledstat = 0;	//0灭,1暗,2中,3
uint y;
uint z;
uint Keycumo ()		//触摸扫描函数
{
	static	uint timer=0;

	if( touch==0)
	{
		timer++;
		if(timer==10){return(1);} //定时10毫秒返回KEY1
		else if(timer==800){timer=400;return(1);} //否则长按不停加1
	}
	else
	{
		timer=0;	  
	}
	return 0;	
}
 void ledgo()
{
   if(ledstat ==0)
	{  
	 led =1;    lamp = 0;    
	}
    if(ledstat ==1)
     { 	 
	   PWM1( );
	 }
	if(ledstat ==2)
	 {  
	    PWM2( );
	 }
	if(ledstat ==3)
     { 
	  led =0;	  lamp = 1;    
	 }
  }
  

void datapros()	   //触摸加减函数
{
    uchar key;
	key=Keycumo ();	 //key=调用按键扫描函数

	if(key==1)	    
	 {	
	  ledstat++;  
	  }
	  if(ledstat >=4)
	 	{
	  		ledstat =0;
	  	}

	 ledgo();	
}
	

void PWM1( )
{	
	 y++;  
	 if(y>=7)  // 设置7毫秒  
	   {
	    y=0;     
	   }
	 if(y<=1)  //设置1毫秒为低电平 ,led低电平为灭 
	  {
	    led =0;     lamp = 1;    
	  }
	 else led =1;  lamp = 0;    	//否则其余6毫秒时间为高电平,led高电平为亮
}  		

void PWM2( )
{	
	z++;  
	if(z>=5)  // 设置5毫秒
	 {
	   z=0; 
	 }    
	if(z<=2)   //设置2毫秒为低电平 ,led低电平为灭 
	 {
	   led =0;      lamp = 1;    
	 }
	else led =1;   lamp = 0;    //否则其余3毫秒时间为高电平,led高电平为亮
}  		

	

			  
			  					

key.h

#include "system.h"	   //把timer0.h文件包含进来
//sbit k1=P3^7;

    sbit lamp=P3^7;          
	sbit touch = P1^5;		
	sbit led=P1^1;

void PWM1( );
void PWM2( );
void	Dig_Poll(void);
uint Keycumo ();
void datapros();

  void ledgo();


main.c

#include "system.h"
#include "key.h"

extern	uchar flag_1ms;	   //在其他模块中寻找其定义。另外,extern也可用来进行链接指定。
void main(void)			//程序的主函数
{
	Timer0_Init(); ////定时器0函数调用

	   		
	while(1)  			//大括号里面的东西,被不停的循环执行
	{
	
		//1ms进入一次
		if(flag_1ms==1)	//加了我之后,我的大括号里面的东西,被定期的1ms执行一次,反复执行	 	
		{
		
		  	flag_1ms=0;
			
	         datapros();		//触摸加减函数
		  // 	  lamp = 0;         //上电指示灯亮起
			
			 }
		 }
	 }
			 						  

```handlebars
#include "reg51.h"


#define	uchar unsigned char	//定义无符号字符
#define	uint  unsigned int	//定义无符号整形

#define	FOSC	12000000L	//定义晶振频率		   
#define	T1MS	(65536-FOSC/12/1000)  //定时10毫秒的时候,计数器要写入的值

//void	Delay_us(uint xus);	//us级延时
//void	Delay_ms(uint xms);	//ms级延时
void	Timer0_Init(void);  	//定时器初始化

```handlebars
#include "system.h"
 
uchar flag_1ms=0;

void	Timer0_Init(void)
{
	TH0 = T1MS>>8; //赋初值
	TL0 = T1MS;	   //赋初值
	TMOD = 0x01;  //设置定时器0用十六位定时器方式
    EA = 1;			 //打开总中断
  	ET0 = 1;		 //打开定时器0中断
  	TR0 = 1;		 //启动定时器0		
}

void Timer0() interrupt 1		 //中断号1
{	
	TH0 = T1MS>>8; //赋初值
	TL0 = T1MS;	   //赋初值
	flag_1ms=1;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值