📄 as5030_ok1.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 + -