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

📄 hhh.txt

📁 51 - 音乐测试程序--------------------
💻 TXT
📖 第 1 页 / 共 3 页
字号:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.6 Standard
Automatic Program Generator
?Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
Project :
Version :
Date    : 2006-12-10
Author  : F4CG
Company : F4CG
Comments:
Chip type           : ATmega88
Program type        : Application
Clock frequency     : 8.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/
#include "mega88.h"
#include "sleep.h"
#include "DELAY.h"
#define NULL 0
#define NOP #asm("nop");
////////下面是引脚的定义
#define SEND PORTD.1
#define REND PIND.0
#define PW PORTD.6 ////触发引脚
#define M1 PORTC.0 ///电机
#define M2 PORTC.1 ///电机
#define K1 PIND.5 ////门未关好
#define K2 PINB.7 /// //反锁
#define K3 PINB.6   ///硬开门
#define  p_U2270B   PINB.5   ///读卡引脚
#define  TRUE        1
#define  FALSE       0
#define  error       1000
#define  scl  PORTB.1////////i2c口
#define  sda  PINB.0 ////////i2c口
#define LED_RED  PORTC.2///红灯
#define LED_BLUE PORTC.3 ///绿灯
#define mep      PORTC.4 ///报警
#define SD_DAT   PINB.2///时钟芯片数据
#define SD_CLK   PORTB.3///////时钟芯片时钟
#define SD_RST   PORTB.4///////////时钟芯片复位
/////下面是时间芯片命令的定义
#define READ_MAIN_MEMORY     0x30
#define MODFI_MAIN_MEMORY    0x38
#define READ_ENCRYPT_MEMORY  0x31
#define COMPARE_DATAS   0x33
#define READ_TIME_SEC   0x81
#define WRITE_TIME_SEC  0x80
#define READ_TIME_MIN   0x83
#define WRITE_TIME_MIN  0x82
#define READ_TIME_HR    0x85
#define WRITE_TIME_HR   0x84
#define READ_TIME_DAY   0x87
#define WRITE_TIME_DAY  0x86
#define READ_TIME_MON   0x89
#define WRITE_TIME_MON  0x88
#define READ_TIME_YEAR  0x8d
#define WRITE_TIME_YEAR 0x8c
#define READ_CON        0x8f
#define WRITE_CON       0x8e
#define READ_RAM        0xc0
#define WRITE_RAM       0xc1
/////////////////////////全局变量的定义
bit msg=0;
unsigned char SendStrlen=0;
unsigned char ReInterMber=0;
bit mesg=0;
unsigned int a;
unsigned char b;
unsigned char c;
unsigned char gai=1;
bit message ;
 unsigned char    buf1[25];
 unsigned char    buf2[25];
 unsigned char tm1[5];
 unsigned int    buchang;
 bit message5=0;
 bit bit_fans;             ////设置反锁功能
 bit bit_baoj;             ////设置报警功能
 bit bit_guas;             ////挂失标志位
 bit bit_krkm=1;             ////限制客人卡开门志位  
// bit bit_gai=1;
//*********************************
//*********************************
//********************************* 
//*********************************
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE0 8
char rx_buffer0[RX_BUFFER_SIZE0];

unsigned char temp232;

#if RX_BUFFER_SIZE0<256
unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;
#else
unsigned int rx_wr_index0,rx_rd_index0,rx_counter0;
#endif

// This flag is set on USART Receiver buffer overflow
//bit rx_buffer_overflow0;
unsigned char  rx_buffer_overflow0;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer0[rx_wr_index0]=data;
   if (++rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;
   if (++rx_counter0 == RX_BUFFER_SIZE0)
      {
      rx_counter0=0;
      rx_buffer_overflow0=1;
      };
   };
   //temp232=data;
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter0==0);
data=rx_buffer0[rx_rd_index0];
if (++rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
#asm("cli")
--rx_counter0;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART Transmitter buffer
#define TX_BUFFER_SIZE0 8
char tx_buffer0[TX_BUFFER_SIZE0];

#if TX_BUFFER_SIZE0<256
unsigned char tx_wr_index0,tx_rd_index0,tx_counter0;
#else
unsigned int tx_wr_index0,tx_rd_index0,tx_counter0;
#endif

// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter0)
   {
   --tx_counter0;
   UDR0=tx_buffer0[tx_rd_index0];
   if (++tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0;
   };
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer   //
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter0 == TX_BUFFER_SIZE0);
#asm("cli")
if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0))
   {
   tx_buffer0[tx_wr_index0]=c;
   if (++tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0;
   ++tx_counter0;
   }
else
   UDR0=c;
#asm("sei")
}
#pragma used-
#endif
//*******************


//*********************************
void Beetmap(unsigned char i)//报警函数
{

 unsigned char a;

 if(i==1)
 {
   mep=1;
   LED_BLUE=0;
  // LED_RED=0;
   delay_ms(300);
   mep=0;
   LED_BLUE=1;
   //LED_RED=1;
}
 else
  for(a=0;a<i;a++)
  {
   mep=1;
   LED_RED=0;
   //LED_BLUE=0;
   delay_ms(120);
   LED_RED=1;
  // LED_BLUE=1;

   mep=0;
   delay_ms(80);

  }
  /*
  while(1)
   {
   mep=1;
   LED_RED=1;
   LED_BLUE=0;
   delay_ms(120);
   LED_BLUE=1;
   mep=0;
   i--;
   if (i==0)return;
   delay_ms(80);

   }
   */
}

//***************************
//***************************

void PwmRun()//////////启动128khz的输出信号
{
  PRR=0x00;
  TCNT2=0x00;
  OCR2A=31;
  TCCR2A=0x12;
  TCCR2B=0x01;
  DDRD.3=1;
}
 //*******************************
 //*******************************

//***********************
//***********************
void PwmStop()//////////关闭128khz的输出信号
{
  PORTD.3=0;
  TCCR2B=0x00;
  TCCR2A=0x00;
  //DDRD.3=0;
}
//**********************
//**********************
//**********************
void SystemInit()///////系统初始化
{
  MCUCR = 0x00;
  DDRD.2=1;
  PORTD.2=1;/////i2c run
  DDRD.6=1;
  PORTD.6=0;////jd pow
  DDRC.0=1;
  DDRC.1=1; //
  PORTC.0=0;
  PORTC.1=0;//dj+-
  DDRB.6=0;   //k3
  PORTB.6=1;
  DDRB.5=0;   //pwm in
  PORTB.5=1;
  DDRB.7=0;   //k2
  PORTB.7=1;
  DDRD.5=0;   //K1
  PORTD.5=1;
  DDRC.2=1;
  PORTC.2=1;//LED_RED
  DDRC.3=1;
  PORTC.3=1; //LED_BLUE
  DDRC.4=1; //map
  PORTC.4=0;
  DDRD.0=0;
  PORTD.0=1;
  DDRD.1=1;
  PORTD.1=1;
  DDRC.5=0;
  PORTC.5=1;
  DDRD.4=1;
  PORTD.4=1; 
  /*
  DDRB=0B00011010;
  PORTB=0B11111111;
  DDRC=0B11011111;
  PORTC=0B11101100;
  DDRD=0B11011110;
  PORTD=0B10111111;
   */
  message5=0; 
  
 // SREG|=0x80;//enable interrupt
}
//***********************
//***********************
void Wog_Enable()////////看门狗使能
{
  SREG|=0x80;
  WDTCSR=0x1f;
  WDTCSR=0x44;
}
//**********************
//**********************
void Wog_Disable()////看门狗禁止
{
  MCUSR=0;
  WDTCSR=0x18;
  WDTCSR=0;
}
//************************************
unsigned int returnb(unsigned char f)//////读一个周期信号
{

          unsigned int a1,c1;
          DDRB.5=0;
          PORTB.5=1;
          a1=0;c1=0;
            if(f==0)
	       {
	       L: while(p_U2270B==0){a1++;if(a1>=3000)return error;}
	        NOP NOP NOP NOP  NOP NOP
	        if(p_U2270B==0)goto L;
	        while(1)
	        {
	          c1++;
	          if(p_U2270B==0)
                    {
                       NOP NOP NOP NOP
                       if(p_U2270B==0)
                       {
                        if(c1>=350)return error;
                        else if(c1>=240)return 2;
                        else if(c1>=140)return 1;
                        else  return 0;
                       }
                      else c1+=2;
                    }
                  else {if(c1>=345)return error;}
                 }
                }
             ///////////////////////////////////////////////////
           else
	       {
	       R: while(p_U2270B==1){a1++;if(a1>=3000)return error;}
	        NOP NOP NOP NOP
	        if(p_U2270B==1)goto R;
	         while(1)
	         {
	         c1++;
                 if(p_U2270B==1)
                  {
                    NOP NOP NOP NOP NOP NOP
                   if(p_U2270B==1)
                   {

                    if(c1>=120)return 1;
                    else return 0;
                   }
                   else c1+=2;
                  }
                 else {if(c1>=350)return error;}
                 }
               }

 }

//****************************
//****************************
void delay(unsigned int a)
{
   unsigned int b;
   for(b=0;b<a;b++){;;;;}
}
//****************************
//****************************

unsigned char Read_Car(unsigned char *pp)////////////读卡
{
 unsigned char aaa;
 unsigned int ff;
 unsigned char mm;
 unsigned char bb;
 unsigned long ccc=0;
 DDRD.4=1;
 PORTD.4=1;
  PORTB.5=1;
 for(bb=0;bb<25;bb++)pp[bb]=0;
 loop:
    if(ccc>800)return 0;         ///800
    ff= returnb(0);
    if(ff==error){ccc+=10;goto loop;}
    if(ff==2){if(returnb(1)==0)goto lop;else {ccc+=10;goto loop;}}
    else {ccc++;goto loop;}
 lop:
       delay(100);
	aaa=0;
        for(bb=0;bb<24;bb++)
	{
          for(mm=0;mm<8;mm++)
	   {
           ff=returnb(aaa);
           if((ff==error)||(ff==2)){ccc+=10;goto loop;}
	   else if(ff==1){if(aaa==0)aaa=1;else aaa=0;}
           else
              {
               if(aaa==0)aaa=1;else aaa=0;
               ff=returnb(aaa);
               if(ff==0){if(aaa==0)aaa=1;else aaa=0;}
               else {ccc++;goto loop;}
               }
           if(aaa==1)pp[bb]=pp[bb]+(1<<(7-mm));
	  }
        }
	return 1;
}
//*******************************

//*******************************
void write_bit(unsigned char x)//向卡写一个脉冲
{
     if(x==1)
        {
    	//p_U2270B_CFE=1;
	PwmRun();
        delay_us(270);//448*11.0592/120=42延时448us
    	//p_U2270B_CFE=0;
        PwmStop();
        delay_us(170);//280*11.0592/120=26写1
       }
    else if(x==0)
       {
    	//p_U2270B_CFE=1;
	 PwmRun();
	 delay_us(90 );//192*11.0592/120=18
    	 //p_U2270B_CFE=0;
	 PwmStop();
	 delay_us(170);//280*11.0592/120=26写0
      }
}

//********************************************
//********************************************
void Aor_Wake_up(unsigned char *password)//////////密码换醒
{
    unsigned int i,j;
    unsigned char DATA;

	PwmStop();
	delay_us(200);//stgap>330us
	write_bit(1);//写操作码1:10
   	write_bit(0);
   	for(i=0;i<4;i++)//block0数据
        {
          DATA=password[i];
      	  for(j=0;j<8;j++)
    	  {
            if(DATA>=0x80)write_bit(1);
            else write_bit(0);
	    DATA=DATA<<1;
      	  }


    }
	 PwmRun();
}

//*******************************
//*******************************

unsigned char  Read_Card(unsigned char *buf,unsigned char *bufff)//////读卡两次并比较
{

   unsigned char  a2;
   loop: for(a2=0;a2<24;a2++)buf[a2]=bufff[a2]; LED_RED=0;
         if( Read_Car(bufff)==1)
    	 {   LED_RED=1;
          for(a2=0;a2<24;a2++)
	    {
             if(bufff[a2]!=buf[a2])goto loop;
             if((bufff[a2]==buf[a2])&&(a2>=23))return TRUE;
            }
        }
    else return FALSE;
}


//***************************
//***************************
////下面是24c16芯片的驱动程序
//*******************************
void s24()//启动i2c总线
   {
     PORTB.0=1;
     scl=1;
     delay_us(50);
     PORTB.0=0;delay_us(20);
     scl=0;
     delay_us(50);
   }
//************************************
//************************************
   p24()//停止i2c总线
    {
     scl=1;
     delay_us(20);
     PORTB.0=1;
     delay_us(50);
    }
//*************************************************
//*************************************************
unsigned char rd24()///读一字接
   {
   unsigned char a;
   unsigned char b;
    unsigned char A=0;
    DDRB.0=0;
    PORTB.0=1;
    for(a=0;a<8;a++)
    {
    scl=1;
    delay_us(50);
    if(sda==1)b=1;
    else b=0;
    delay_us(50);
    scl=0;
    delay_us(50);
    if(b==1)A+=1<<(7-a);
    }
    DDRB.0=1;
    return A;
}
//******************************************************

⌨️ 快捷键说明

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