Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.2 Evaluation
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 10.02.2007
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
// Declare your global variables here //////////Prototypes of functions/////////// void buzzer (char buz_ms) void segment(unsigned char num/*,char seg*/) //num = digit, ser = firs/second indicaror unsigned char timer1 (unsigned char sec) void sv_show (void) PORTC.0 ^= 1; //l.niz PORTC.1 ^= 1; //l.verh PORTB.1 ^= 1; //verhniy PORTB.2 ^= 1; //p.verh PORTB.6 ^= 1; //p.niz PORTB.7 ^= 1; //niz delay_ms(50); // Input/Output Ports initialization // Port C initialization // Port D initialization // Timer/Counter 0 initialization // Timer/Counter 1 initialization // Timer/Counter 2 initialization // External Interrupt(s) initialization // Timer(s)/Counter(s) Interrupt(s) initialization // Analog Comparator initialization sv_show(); sevoff(); if(PINC.5 !=tim_state) delay_ms(20); // every 500ms... delay_ms(1000);
Chip type : ATmega8
Program type : Application
Clock frequency : 1,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
#include
#include
#define TMI 50
unsigned char SW3_state; //status SWITCH button
unsigned char ctr;// 1/10 of sec counter
unsigned char buz_state=0; // status buzzer button switch
unsigned char buz_on=1;//buz on/off status
unsigned char wh=0; //for
unsigned char ind[2]={0,0}; //for digit
unsigned char i; //for cycle
unsigned char a; //for cycle
unsigned char t_in=60; //time interval
unsigned char b=0; //time interval
unsigned char tim_state=0; //time switcher
unsigned char c=0; //for count
{
//BUZZER sound cycle
if (buz_on==1)
{
PORTB.0 = 1;
delay_ms(buz_ms);
PORTB.0 = 0;
}
}
void sevoff(void)
{
//*****************************
// LEVIY INDIKATOR
//****************************
PORTB.1 = 0; //verhniy
PORTB.2 = 0; //p.verh
PORTB.6 = 0; //p.niz
PORTB.7 = 0; //niz
PORTC.0 = 0; //l.niz
PORTC.1 = 0; //l.verh
PORTC.2 = 0; //sered
//****************************
// PRAVIY INDIKATOR
//****************************
PORTD.7 = 0; //verhniy
PORTD.6 = 0; //p.verh
PORTD.5 = 0; //p.niz
PORTD.4 = 0; //niz
PORTD.3 = 0; //l.niz
PORTD.2 = 0; //l.verh
PORTD.1 = 0; //sered
//****************************
}
{
i=0;
for(i=0;i<=1;i++)
{
ind[i]=num%10;
num/=10;
}
switch(ind[0])
{
case 0: (PORTD = 0xFD); break;
case 1: (PORTD = 0x61); break;
case 2: (PORTD = 0xDB); break;
case 3: (PORTD = 0xF3); break;
case 4: (PORTD = 0x67); break;
case 5: (PORTD = 0xB7); break;
case 6: (PORTD = 0xBF); break;
case 7: (PORTD = 0xE1); break;
case 8: (PORTD = 0xFF); break;
case 9: (PORTD = 0xF7); break;
}
switch(ind[1])
{
case 0: (PORTB.1 = 1, //verhniy
PORTB.2 = 1, //p.verh
PORTB.6 = 1, //p.niz
PORTB.7 = 1, //niz
PORTC.0 = 1, //l.niz
PORTC.1 = 1, //l.verh
PORTC.2 = 0 //sered
); break;
case 1: (PORTB.1 = 0, //verhniy
PORTB.2 = 1, //p.verh
PORTB.6 = 1, //p.niz
PORTB.7 = 0, //niz
PORTC.0 = 0, //l.niz
PORTC.1 = 0, //l.verh
PORTC.2 = 0 //sered
); break;
case 2: (PORTB.1 = 1, //verhniy
PORTB.2 = 1, //p.verh
PORTB.6 = 0, //p.niz
PORTB.7 = 1, //niz
PORTC.0 = 1, //l.niz
PORTC.1 = 0, //l.verh
PORTC.2 = 1 //sered
); break;
case 3: (PORTB.1 = 1, //verhniy
PORTB.2 = 1, //p.verh
PORTB.6 = 1, //p.niz
PORTB.7 = 1, //niz
PORTC.0 = 0, //l.niz
PORTC.1 = 0, //l.verh
PORTC.2 = 1 //sered
); break;
case 4: (PORTB.1 = 0, //verhniy
PORTB.2 = 1, //p.verh
PORTB.6 = 1, //p.niz
PORTB.7 = 0, //niz
PORTC.0 = 0, //l.niz
PORTC.1 = 1, //l.verh
PORTC.2 = 1 //sered
); break;
case 5: (PORTB.1 = 1, //verhniy
PORTB.2 = 0, //p.verh
PORTB.6 = 1, //p.niz
PORTB.7 = 1, //niz
PORTC.0 = 0, //l.niz
PORTC.1 = 1, //l.verh
PORTC.2 = 1 //sered
); break;
case 6: (PORTB.1 = 1, //verhniy
PORTB.2 = 0, //p.verh
PORTB.6 = 1, //p.niz
PORTB.7 = 1, //niz
PORTC.0 = 1, //l.niz
PORTC.1 = 1, //l.verh
PORTC.2 = 1 //sered
); break;
case 7: (PORTB.1 = 1, //verhniy
PORTB.2 = 1, //p.verh
PORTB.6 = 1, //p.niz
PORTB.7 = 0, //niz
PORTC.0 = 0, //l.niz
PORTC.1 = 0, //l.verh
PORTC.2 = 0 //sered
); break;
case 8: (PORTB.1 = 1, //verhniy
PORTB.2 = 1, //p.verh
PORTB.6 = 1, //p.niz
PORTB.7 = 1, //niz
PORTC.0 = 1, //l.niz
PORTC.1 = 1, //l.verh
PORTC.2 = 1 //sered
); break;
case 9: (PORTB.1 = 1, //verhniy
PORTB.2 = 1, //p.verh
PORTB.6 = 1, //p.niz
PORTB.7 = 1, //niz
PORTC.0 = 0, //l.niz
PORTC.1 = 1, //l.verh
PORTC.2 = 1 //sered
); break;
}
}
{
unsigned char t=0;
for(a=sec;a>0;a--)
{
segment(a);
delay_ms(1000);
if((PINC.4 ==0)&&(b==0))
{
t++;
if(t==3)
{
b=0;
t=0;
buzzer(400);
//*****************************
// LEVIY INDIKATOR
//****************************
PORTB.1 = 1; //verhniy
PORTB.2 = 1; //p.verh
PORTB.6 = 1; //p.niz
PORTB.7 = 1; //niz
PORTC.0 = 0; //l.niz
PORTC.1 = 0; //l.verh
PORTC.2 = 0; //sered
//****************************
// PRAVIY INDIKATOR
//****************************
PORTD.7 = 1; //verhniy
PORTD.6 = 0; //p.verh
PORTD.5 = 0; //p.niz
PORTD.4 = 1; //niz
PORTD.3 = 1; //l.niz
PORTD.2 = 1; //l.verh
PORTD.1 = 0; //sered
//****************************
return t;
}
}
else t=0;
}
segment(0);//for "00" on indicator
delay_ms(500);
buzzer(500);
delay_ms(100);
sevoff();
buzzer(500);
}
{
sevoff();
while(ctr!=6)
{
ctr++;
while(wh!=2){
PORTD.5 ^= 1; //p.niz
wh++;
delay_ms(TMI);
}
wh=0;
while(wh!=2){
PORTD.6 ^= 1; //p.verh
wh++;
delay_ms(TMI);
}
wh=0;
while(wh!=2){
PORTD.7 ^= 1; //verhniy
wh++;
delay_ms(TMI);
}
wh=0;
while(wh!=2){
PORTD.2 ^= 1; //l.verh
wh++;
delay_ms(TMI);
}
wh=0;
while(wh!=2){
PORTD.3 ^= 1; //l.niz
wh++;
delay_ms(TMI);
}
wh=0;
while(wh!=2){
PORTD.4 ^= 1; //niz
wh++;
delay_ms(TMI);
}
wh=0;
}
ctr=0;
while(ctr!=10)
{
ctr++;
segment(88);
delay_ms(50);
sevoff();
}
ctr=0;
}
//*********MAIN FUNCTION************
void main(void)
{
// Declare your local variables here
// Port B initialization
// !Func7=Out !Func6=In Func5=In Func4=In Func3=Out !Func2=Out !Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTB=0x8F;
DDRB=0xFF;
// Func6=In Func5=In Func4=In Func3=In !Func2=out !Func1=out !Func0=out
// State6=P State5=1 State4=P State3=1 State2=1 State1=1 State0=1
PORTC=0x78;
DDRC=0x2F;
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTD=0xFF;
DDRD=0xFF;
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// INT0: Off
// INT1: Off
MCUCR=0x00;
TIMSK=0x00;
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
PORTB.0 = 0;//BUZZER status OFF!!!
// Program starts here
// ==============================================
mark: //metka
SW3_state = PINC.4; //recieve switch button status for star timing
ctr = 0;
buz_state = PINC.3; //recieve switch button status for buzzer
tim_state = PINC.5;
while (PINC.4 == SW3_state) {
{
c++;
switch(c)
{
case 1: (t_in=30,
segment(t_in),
delay_ms(100),
sevoff() ); break;
case 2: (t_in=60,
segment(t_in),
delay_ms(100),
sevoff() ); break;
case 3: (t_in=90,
segment(t_in),
delay_ms(100),
sevoff(),
c=0 ); break;
}
PORTB.0 = 1;
delay_ms(40);
PORTB.0 = 0;
delay_ms(300);
}
if(PINC.3 !=buz_state)
{
buz_on ^=1;
delay_ms(300);
if(buz_on == 0) //buzzer sound off/on
{
PORTB.1 = 1; //verhniy
PORTD.4 = 1; //niz
delay_ms(100);
PORTB.1 = 0; //verhniy
PORTD.4 = 0; //niz
}
if(buz_on == 1)
{
PORTC.2 = 1; //sered
PORTD.1 = 1; //sered
PORTB.0 = 1;
delay_ms(100);
PORTC.2 = 0; //sered
PORTD.1 = 0; //sered
PORTB.0 = 0;
}
}
ctr++; /* count 1 interval with 20ms */
if (ctr == 25){
/* if passed 25 times for 20 ms */
ctr = 0;
PORTD.0 ^= 1; // switch LED
};
}
buzzer(100);
PORTD.0 = 1; // LED=OFF
//!!!!!!!!!!!!!!START TIMING!!!!!!!!!!!!!!!!!!!!!!!
timer1(t_in);
goto mark;
}
Ответы