⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led._c

📁 AVR基本外设测试程序
💻 _C
字号:
 #include"main.h"

/*=============定时器0中断函数==============*/
 #pragma interrupt_handler timet0_ovf:10
  void timet0_ovf(void)               
  {
   	  static unsigned int 
	  		 BEEP1_CONT=110,
			 BEEP2_CONT=190,
	  		 M05_CONT=800;  
   	    SREG =0X80;	 //重新开放中断
  	    TCNT0=0XEE;   //重装1.25MS的定时初值
		DDRB|=BIT(PB0);
		PORTB|=BIT(PB0);                       
	    M05_CONT--;
	    if(M05_CONT==0)
	    {
	       M05_CONT=800;
		   if(MBZ==0)   { MBZ=1; }
		   else         { MBZ=0; }
	    }
		if(a.BEEP1==1)
		{
		 	BUZZ_NO;
		    if((BEEP1_CONT--)==1)
	          {
 	           BEEP1_CONT=110;
	           BUZZ_YE;
	           a.BEEP1=0;
	          }
		}
/*==========响铃2次函数设置============*/	
			if(a.BEEP2==1)		//响铃2次
	{
		--BEEP2_CONT;
		if(BEEP2_CONT>113)
		{
			BUZZ_NO;
		}else
		if(BEEP2_CONT>75)
		{
			BUZZ_YE;
		}else
		if(BEEP2_CONT>0)
		{
			BUZZ_NO;
		}else
		if(BEEP2_CONT==0)
		{
			BUZZ_YE;
			a.BEEP2=0;
			BEEP2_CONT=190;
		}
	}
/*==========响铃2次函数结束============*/		
		
  }
  
 /*========HT1622驱动程序========*/
/* 
 void write_clk()	//允许写脉冲
{
    _NOP();  _NOP();  _NOP();  _NOP(); _NOP();  _NOP();
    HT_WR_ONE;
    _NOP();  _NOP();  _NOP();  _NOP(); _NOP();  _NOP();
    HT_WR_ZER;
} 

void send_bit(unsigned char  op_code,unsigned char len)	
	//从高位的位开始送
{

    while(len--)
    {   
	    if(op_code&0x80==0x80)
		{
		   HT_DT_ONE;
		}
		else
		{
		   HT_DT_ZER;
		}
        write_clk();
        op_code = op_code<<1;
    }
}

void send_command(unsigned char command)		//送一个命令
{
    HT_CS_ZER;
    send_bit(0x80,3);
    send_bit(command,8);
    write_clk();
    HT_CS_ONE;
}

void send_all_char()	//开始送数据,一次全部送完
{
	unsigned char  x,y;
	unsigned char c;

        HT_CS_ZER;
    	send_bit(0xa0,3);
    	_NOP(); 
    	send_bit(0,6);		//从第0个地址开始送数据
    	for(x=0;x!=23;x++)
    	{
		c=LCD[x];
    		for(y=0;y!=8;y++)
    		{
			 	if(c&0x01==1)
				{
    			   HT_DT_ONE;
		        }  
				else
				{  
				   HT_DT_ZER;
				}
				write_clk();
        		c=c>>1;
    		}
    	}
    	HT_CS_ONE;
}

void init_1622()	//LCD初始化
{
    HT_CS_ONE;
    HT_WR_ONE;
    HT_DT_ONE;
    send_command(1);    //SYS EN
    send_command(3);    //LCD ON
    send_command(0x29);    // 1/3 偏压,4个公共端
}
  
 */ 
  
/*===============主函数部分===================*/ 
void main(void)
{  
   unsigned int i;
   unsigned char x;
   /*===============初始化函数============*/
  // init_1622();
  /*
  ======================================
  采用定时器管理
  定时器0预分频系数为1024,定时时间为1.25MS
  初值为=256-1.25*14.7456*1000000/1024/1000=238
  首先要开启定时器0,
  =========================================
  */
  for(x=0;x<23;x++)  LCD[x]=0XFF;
    
  TCCR0=0X05;   //预分频系数为1024   0000 0101
  TCNT0=0XEE;   //238              
  TIMSK|=0X01;  //使能T/C0中断,允许中断

  DDRD&=0XF3;   //PIND2 PIND3设为输入
  MCUCR=0X08;	//00001000下降沿触发中断、GICR
                //ISC11,ISC10 INT1下降沿          
  
  /*========PB2输出PWM信号WGM[3;0]=1011
    ========加一计数中比较匹配时清零OC1B
	========减一计数中比较匹配时置位
	========CS12,CS11,CS10=010,表示8预分频计时器
  */
  DDRB|=0X3e;//PB2为输出端,(pb3,pb4,pb5为液晶驱动脚设为输出)
  TCCR1A=0X63;  //0110 0011
  TCCR1B=0X12;  //0001 0010
  OCR1A=0x61A7;    //设置TOP值为1249
  OCR1B=2500;      //比较匹配值
  
  SREG =0X80;      //使能总中断 
  MBZ=0;               
  while(1)          
  {  
   // send_all_char();           
  	DDRD|=BIT(PD7); //PD7设为输出
	DDRD|=BIT(PD6);
	if(MBZ==0)                                     
	 {
       LED_LIANG;   //PD7为1,点亮LED指示灯
	 }
	if(MBZ==1)                                                 
	 {
	   LED_MIE;
	   a.BEEP1=1;
	 }
  } 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -