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

📄 as5030_ok1.c

📁 as3050 interfacing with atmega8
💻 C
字号:
/*****************************************************
Project : AS%)#)
Version : 
Date    : 11/12/2008
Author  : SIVA JOGI NAIDU                    
Company : RUPANAGUDI                      
Comments: 
Chip type           : ATmega8
Program type        : Application
Clock frequency     : 8.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/
#include <mega8.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h> 
#include <delay.h>   
//______________________________________________________________________
//______________________________________________________________________
#define  E               PORTB.6
#define  RW              PORTB.7                          
#define  RS              PORTB.0 
#define  BlinkLed        PORTC.4
#define  Led             PORTC.3   
#define  CS              PORTD.1
#define  DIO             PORTD.0
#define  CLK             PORTC.5
#define  DIO_PIN         PIND.0
//------------------------------------------------------
//--------------------------------------
void LINE1();  
void LINE2();  
void LINE3();     
void LINE4();   
void lcd_puts(char *s);
void lcd_putsf(char flash *s);  
void LCDWrite(char , char );
void LCD_CLEAR(); 
void dispfun(unsigned char Display);  
unsigned char buffer[20];
unsigned char ANGLE = 0,C2,LOCK=0,AGC=0;
//______________________________________________________________________
void SEND_COMMAND()
{char command,count=0; 
  
 DDRD.0 = 1;
 DDRD.1 = 1;
 DDRC.5 = 1; 
 //----------------------  
 DIO = 0;
 CLK = 1;  
 delay_us(5); 
 CS = 1;      
 delay_us(5); 
 CLK = 0;      //-------------------------1 
 delay_us(10);
 CLK = 1;   
 delay_us(10);
 CLK = 0;      //-------------------------2
 delay_us(10);
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------3 
 delay_us(10);
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------4 
 delay_us(10); 
 DDRD.0 = 0;
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------5       
 delay_us(10);
 CLK = 1;   
 delay_us(5);
 C2 = 0;
 if(DIO_PIN)               
 C2 = 1;                //6
 delay_us(5);
 CLK = 0;       //------------------------6  
 delay_us(10);                               
 CLK = 1;                                    
 delay_us(5);
 LOCK = 0;
 if(DIO_PIN)
 LOCK = 1;             //7
 delay_us(5);
 CLK = 0;       //------------------------7 
 delay_us(10);  
 if(DIO_PIN)
 AGC = AGC|0x20;       //5
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------8 
 delay_us(10); 
 if(DIO_PIN)
 AGC = AGC|0x10;       //4
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------9 
 delay_us(10);
 if(DIO_PIN)
 AGC = AGC|0x08;       //3
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------10 
 delay_us(10);
 if(DIO_PIN)
 AGC = AGC|0x04;       //2
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------11 
 delay_us(10);
 if(DIO_PIN)
 AGC = AGC|0x02;       //1
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------12 
 delay_us(10);
 if(DIO_PIN)
 AGC = AGC|0x01;       //0
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------13 
 delay_us(10);
 if(DIO_PIN)
 ANGLE = ANGLE|0x80;  //7
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------14
 delay_us(10);
 if(DIO_PIN)
 ANGLE = ANGLE|0x40;  //6
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------15  
 delay_us(10);                                
 if(DIO_PIN)
 ANGLE = ANGLE|0x20;  //5
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------16
 delay_us(10);
 if(DIO_PIN)
 ANGLE = ANGLE|0x10;  //4
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------17
 delay_us(10); 
 if(DIO_PIN)
 ANGLE = ANGLE|0x08;  //3
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------18 
 delay_us(10); 
 if(DIO_PIN)
 ANGLE = ANGLE|0x04;  //2
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------19 
 delay_us(10);
 if(DIO_PIN)
 ANGLE = ANGLE|0x02; //1
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------20 
 delay_us(10);
 if(DIO_PIN)
 ANGLE = ANGLE|0x01; //0
 CLK = 1;   
 delay_us(10);
 CLK = 0;       //------------------------21 
 delay_us(10);
 
 
//  CLK = 0;
//  command = 0;  
//  for(count = 0;count<5;count++)
//     {DIO = 0;
//      CLK = 0;  
//      delay_us(10);
//      CLK = 1;   
//      delay_us(10); 
//      }   
//    DDRD.0 = 0;  
//    DIO = 1;
//    CLK = 0;  
//    delay_us(10);  
//    C2 = DIO;
//    CLK = 1;  
//    delay_us(10);  
//    CLK = 0;  
//    delay_us(10);
//    LOCK = DIO; 
//    CLK = 1;  
//    delay_us(10);
//    AGC = 0;
//    for(count = 0;count<5;count++)
//     {CLK = 0;  
//      delay_us(10);  
//      if(DIO)
//        {AGC = AGC || 0X01;
//         }
//      CLK = 1;  
//      delay_us(10);    
//         AGC = AGC<<1;       
//      }
//    ANGLE = 0;
//    for(count = 0;count<8;count++)
//     {CLK = 0;  
//      delay_us(10);  
//      if(DIO)
//        {ANGLE = ANGLE || 0X01;
//         }
//      CLK = 1;  
//      delay_us(10);    
//      ANGLE = ANGLE<<1;       
//      }  
//     CLK = 1;    
     delay_us(10);  
     CS = 0;
 }
//______________________________________________________________________
void LCDWrite(char LCDData, char RSValue)
{PORTD = LCDData  & 0xF0;  
 RS = RSValue;
 RW = 0;
 E = 1;  E = 0;  
 PORTD = (LCDData<<4) & 0xF0; 
 RS = RSValue;
 E = 1;  E = 0;    
 CS = 1;      
 delay_ms(5); 
 }  
//----------------------------------
void lcd_putsf(char flash *s)
{  while(*s)
   LCDWrite(*s++,1);
}
//---------------------------------- 
void lcd_puts(unsigned char *s)
{  while(*s)
   LCDWrite(*s++,1);
}
//----------------------------------
void LINE1()
{LCDWrite(0X80, 0);        //0x80
}  
//----------------------------------
void LINE2()
{LCDWrite(0XC0, 0);       //0xC0
}  
//----------------------------------
void LINE3()
{LCDWrite(0X94, 0);      //0x14
}  
//----------------------------------
void LINE4()
{LCDWrite(0XD4, 0);      //0X54
}  
//----------------------------------
void LCD_CLEAR()
{LCDWrite(0X01, 0);
}  
//----------------------------------
void LCD_HOME(void)
{LCDWrite(0X10, 0);
}
//----------------------------------
void LCD_CUR_BLINK(void)
{LCDWrite(0X0D, 0);
}
//----------------------------------
void LCD_CUR_OFF(void)
{LCDWrite(0X0C, 0);
}
//----------------------------------
void LCD_CUR_ON(void)
{LCDWrite(0X0E, 0);
}
//----------------------------------
void lcd_init()
{  RW = 0;
   PORTD = 0;            
   delay_ms(40);
   PORTD = 0X30;          
   E = 1;  E = 0;        
   delay_ms(5);
   E = 1;  E = 0;        
   delay_ms(1);
   E = 1;  E = 0;        
   delay_ms(1);
   PORTD = 0X20;         
   E = 1;  E = 0;
   delay_ms(1);
   LCDWrite(0X28, 0);    
   LCDWrite(0X08, 0);    
   LCDWrite(0X0C, 0);    
   LCDWrite(0X06, 0);    
   LCDWrite(0X0F, 0);    
   LCDWrite(0X80, 0);    
} 
//______________________________________________________________________

//______________________________________________________________________

//-------------------------------------------  
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
 {TCNT1H=0x0B;
  TCNT1L=0x00;
  if(sec)
    {sec = 0;
     RPM = RPS * 60; 
     }else{sec=1;
           }

  }  
//_______________________________________________________________________

//_____________________________________________________________________________________
void dispfun(unsigned char DispCount)
{
  switch(DispCount)
       {case 0:{LCD_CLEAR();
                LINE1();
                lcd_putsf("GPS REAL TIME CLOCK");
                LINE2();
                lcd_putsf("********************");  
                LINE3();
                lcd_putsf("RUPANAGUDI POWER SYS");
                LINE4();
                lcd_putsf("     HYDERABAD      ");     
                }
                break;
        case 1:{LCD_CLEAR();
                LINE1();
                }
                break; 
        case 2:{LCD_CLEAR();
                LINE1();
                }
                break;          
       case 3:{ LCD_CLEAR();
                LINE1();
                }
                
    }                  
 
 }             
//-------------------------------------------------------------   
//_____________________________________________________________
void main(void)
{unsigned char x = 0;
PORTB=0x00;
DDRB=0xC1;
PORTC=0x00;
DDRC=0x30;
PORTD=0x00;
DDRD=0xF0;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x04;
ADMUX=0x00;
ADCSRA=0x86; 
lcd_init();  
dispfun(0);
delay_ms(1000); 
LCD_CUR_OFF();  
DDRD.0 = 1;
DDRD.1 = 0;
DDRC.5 = 1;      
CLK = 0;
DIO = 0;
CS  = 0;
while (1)
{SEND_COMMAND(); 
 if(ANGLE<20)
   {RPS++;
    }   
 if(sec)
 {LCD_CLEAR();
  LINE2();           
  sprintf(buffer,"%d   %d    ",ANGLE,AGC); 
  lcd_puts(buffer); 
  for(x=0;x<20;x++)
  buffer[x]=0;
  LINE1();
  if(C2)
   {LCDWrite('1', 1);   
    }else{LCDWrite('0', 1);
          }
  LCDWrite(' ', 1);   
  LCDWrite(' ', 1);        
  if(LOCK)
   {LCDWrite('1', 1);   
     }else{LCDWrite('0', 1);
           }    
  AGC = 0;          
  ANGLE = 0;
  }
 };
}
 /////////////////////////////////////////////////////////////////





                  









⌨️ 快捷键说明

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