Trợ giúp về atg16 điều khiển thang máy

Hào Anh

Học sinh phổ thông
#1
Hiện tại e được thầy đưa cho mạch mô phỏng và code avr điều khiển thang máy 4 tầng, nhưng hiện tại chưa có code đóng cửa chỉ có đi lên đi xuống. code đóng cửa chỉ có 1 lệnh là nhấn tầng rồi nhấn đóng cửa là đi luôn chứ không delay để đóng cửa rồi đi. Bác nào xem giúp e với ạ


/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 2/23/2019
Author :
Company :
Comments:


Chip type : ATmega16L
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*******************************************************/
#include <mega16.h>
#include <delay.h>

#define ST1 PORTB.0
#define ST3 PORTB.1
#define ST2 PORTB.2
#define ST4 PORTB.3
#define CTHT PINA.0

#define START PINA.7
#define WARNING PINA.6
#define IN1 PINA.5
#define IN2 PINA.4
#define IN3 PINA.3
#define IN4 PINA.2

#define UP1 PINC.0
#define DOWN2 PINC.1
#define UP2 PINC.2
#define DOWN3 PINC.3
#define UP3 PINC.4
#define DOWN4 PINC.5

unsigned char Led7Seg[5] = {0xff,0xF9,0xA4,0xB0,0x99};
int tang_htai=4, tang_chon=4, trong=0;

void di_len(int xung) //moi tang 500 xung
{
int j=0;
for (j=0;j<xung;j++)
{
ST1=1; ST2=1; ST3=0; ST4=0; delay_us(100);
ST1=0; ST2=1; ST3=1; ST4=0; delay_us(100);
ST1=0; ST2=0; ST3=1; ST4=1; delay_us(100);
ST1=1; ST2=0; ST3=0; ST4=1; delay_us(100);
if (CTHT==0) break;
if (WARNING==0) break;
}
ST1=0; ST2=0; ST3=0; ST4=0;
}
void di_xuong(int xung)
{
int j=0;
for (j=0;j<xung;j++)
{
ST1=1; ST2=0; ST3=0; ST4=1; delay_us(100);
ST1=0; ST2=0; ST3=1; ST4=1; delay_us(100);
ST1=0; ST2=1; ST3=1; ST4=0; delay_us(100);
ST1=1; ST2=1; ST3=0; ST4=0; delay_us(100);
if (WARNING==0) break;
}
ST1=0; ST2=0; ST3=0; ST4=0;
}

void main(void)
{

DDRA=0x00; PORTA=0x00;
DDRB=0xFF; PORTB=0x00;
DDRC=0x00; PORTC=0x00;
DDRD=0xFF; PORTD=0xFF;

while (CTHT)
{
ST1=1; ST2=1; ST3=0; ST4=0; delay_us(100);
ST1=0; ST2=1; ST3=1; ST4=0; delay_us(100);
ST1=0; ST2=0; ST3=1; ST4=1; delay_us(100);
ST1=1; ST2=0; ST3=0; ST4=1; delay_us(100);
}
ST1=0; ST2=0; ST3=0; ST4=0;

while (1)
{

PORTD = Led7Seg[tang_htai];
if (UP1==0) { tang_chon=1; trong=0; }
if (DOWN2==0||UP2==0) { tang_chon=2; trong=0; }
if (DOWN3==0||UP3==0) { tang_chon=3; trong=0; }
if (DOWN4==0) { tang_chon=4; trong=0; }

if (WARNING==0)
while(1)
{
ST1=0; ST2=0; ST3=0; ST4=0;
PORTD=0xBF; delay_ms(10);
PORTD=0xff; delay_ms(10);
}
if (IN1==0) trong=1;
if (IN2==0) trong=2;
if (IN3==0) trong=3;
if (IN4==0) trong=4;
if (START==0&&trong>0) { tang_chon=trong; trong=0; }



if (tang_htai>tang_chon) {di_xuong(700); tang_htai--;}
if (tang_htai<tang_chon) {di_len(700); tang_htai++;}
}
}
 

Quảng cáo Google