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

📄 main.c

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 C
字号:
#include "main.h"



unsigned char Mark[] PROGMEM= { " First Sun SRE-300TL-34 Ver:1.0 (20080303) Edit:Houdeping " };
unsigned char Mark2[] PROGMEM= { " ATMEG32/Int 8Mhz./BrownOut 4.0V/WatchDog " };

void System_init(void);

int main()
{  	
	System_init();          //系统初始化	
	wdt_enable(WDTO_2S); // 2s
	sei(); 
    test();

	while(1)
	{ 
	  
	  if(bit_is_set( TIFR, OCF0))        // 1ms  
       {    
         SetBit( TIFR, OCF0);          		  		  	  
		 ExtTelCheck();					//分机摘机检测
	     OutsideTelRingCheck();			//外线振铃检测
		 TelOperateLoop();
		 fnOSCRingFK();                 //振铃声,5秒断续,即1秒送、4秒断				
         fnMusic();                     //产生音乐
		  if(++timeover_200ms>=200)     //0.2秒 计时
		  {
			 timeover_200ms=0;
             PORTC^=Create10HZ;         //产生10HZ频繁				 		         
		   }
         wdt_reset();
        }  
	 }
 return (0);
}


void System_init(void) //系统初始化
{
 _delay_ms(1000);

 DDRA=0b00000000;   //PA7:D7  PA6:D6  PA5:D5  PA4:D4  PA3:D3  PA2:D2  PA1:D1  PA0:D0  
 PORTA=0b11111111;

 DDRB=0b00010010;     //PB4:HoldDoor  PB3:TestFlag  PB2:CheckDoorRing     PB1:CallCenter  PB0:CheckCenterHold  
 PORTB=0b11111111;

 DDRC=0b01100111;   //PC7:          PC6:Line2_LedCtr  PC5:Line1_LedCtr      PC4:DTMF2_DV  
 PORTC=0b00011000;  //PC3:DTMF1_DV  PC2: EnDTMFCreate PC1:P17               PC0:Create10HZ
 
 DDRD=0b11111111;    //PD7:Osc450HZ       PD6:Storbe8816    PD5:Music      PD4: Reset8816
 PORTD=0b10111000;   //PD3:CheckHold_Ring PD2:OSCRingFK     PD1:Playvoice      PD0:Recordvoice
 
 // Time 0 Setting
 TCCR0 = _BV(CS01)|_BV(CS00)|_BV(WGM01); //clkT2S/64 ( 来自预分频器)
 OCR0 = 125;		                       // 64 * N =     1ms
 TCNT0 =0;

 // Time 1 PWM产生音乐
 TCCR1A = _BV(COM1A0);           //比较匹配时OC1A电平取反,10 bit PWM, using COM0A,PWM相位修正
 TCCR1B = _BV(CS10)|_BV(WGM12); //clkT2S/1 ( 来自预分频器)
 //OCR1A = 4000000/450;		// 64 * N = 80000000     1ms
 TCNT1 =0;

  // Time 2 ,PWM产生450HZ频率
 TCCR2 = _BV(COM20)|_BV(CS22)|_BV(CS20)|_BV(WGM21); //clkT2S/8 ( 来自预分频器)
 OCR2 =75;		                       // 8 * N =     100us
 TCNT2 =0;

 //8816 初始状态 
 SetBit(PORTD,Reset8816); //所有数据都复原为逻辑“0”,使所有交叉点开关断开
 _delay_ms(1000);
 ClrBit(PORTD,Reset8816);

  Writesoundway(Connect_Busy,Busy_Voicd,ON); 
 
  Writesoundway(SigCallID,0,ON);      //
  Writesoundway(SigCallID,1,ON);      //
  Writesoundway(SigCallID,2,ON);      //
  Writesoundway(SigCallID,3,ON);      //
  Writesoundway(SigCallID,4,ON);      //
  Writesoundway(SigCallID,5,ON);      //
}

⌨️ 快捷键说明

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