PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Mạch đèn điều khiển tín hiệu giao thông! (http://www.picvietnam.com/forum/showthread.php?t=6272)

demon52 04-05-2010 12:08 PM

Mạch đèn điều khiển tín hiệu giao thông!
 
1 Attachment(s)
Em làm đề tài điều khiển tín hiệu giao thông hiển thị số trên led 7 đoạn và đồng hồ thời gian thực trên LCD nhưng đến giai đoạn điều chỉnh số giây đèn xanh đèn đỏ thì ko làm đc :(( Ai xem dùm em hàm quét bàn phím của em sai j mà sao lúc ấn nút nó ko tác dụng j cả :((
Mọi người xem dùm hàm void change(); của em với nhé!
//================================================== ==
Code:

#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
//#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include "ds1307.c"
#include <lcd_lib_4bit.c>
#define SET PIN_E0
#define TANG PIN_E1
#define GIAM PIN_E2
#define START PIN_D0
void realtime();
void led7seg_do();
void led7seg_xanh();
Void Change();
int8 second;
int16 temp1,temp2,temp3,temp4;
//============================================================================
void main()
  {
  TRISA=0x00;
  TRISB=0x00;
  TRISC=0x00;
  TANG==GIAM==SET==START==1;
  //================Hien Thi Ban Dau=====
  init_ds1307();
  lcd_init();
  Printf(LCD_putchar,"Bai Tap Lon VXL");
  LCD_putcmd(0xC4);
  Printf(LCD_putchar,"Nhom ITALY");
  delay_ms(300);
  //======================================
  change();
  led7seg_do();
  realtime();
     
  }
//============================================================================
void led7seg_do()

  int i;              // Khai Bao Bien Kieu int
  while(1)
  {
      if (temp2==0x00&&temp1==0x00) //Neu Dem Nguoc Ve 00 Thoat khoi ham while
      break;
      for(i=0;i<50;i++)             
      {
        PORTB=0x05;      // Hien Thi Chu So Hang Chuc
        PORTA=temp1;
        delay_us(190);
        PORTB=0x00;
        PORTA=0xFF;
        delay_us(10);
        //=======================================
        PORTB=0x0A;    // Hien Thi Chu So Hang DonVi
        PORTA=temp2;
        delay_us(190);
        PORTB=0x00;
        PORTA=0xFF;
        delay_us(10);
      }
      //====================================
      PORTB=0x00;                // Tao Khoang Trong Giua 2 Lan Dem
      PORTA=0xFF;
      delay_ms(20);
      if (temp2==0x00)
        {
        temp1--;
        temp2=0x09;
        }
      else temp2--;
  }
  break;
}
//=============================================================================
void led7seg_xanh()

  int i;              // Khai Bao Bien Kieu int
  while(1)
  {
      if (temp3==0x00&&temp4==0x00) //Neu Dem Nguoc Ve 00 Thoat khoi ham while
      break;
      for(i=0;i<50;i++)             
      {
        PORTB=0x05;      // Hien Thi Chu So Hang Chuc
        PORTA=temp3;
        delay_us(190);
        PORTB=0x00;
        PORTA=0xFF;
        delay_us(10);
        //=======================================
        PORTB=0x0A;    // Hien Thi Chu So Hang DonVi
        PORTA=temp4;
        delay_us(190);
        PORTB=0x00;
        PORTA=0xFF;
        delay_us(10);
      }
      //====================================
      PORTB=0x00;                // Tao Khoang Trong Giua 2 Lan Dem
      PORTA=0xFF;
      delay_ms(20);
      if (temp4==0x00)
        {
        temp3--;
        temp3=0x09;
        }
      else temp4--;
  }
  break;
}
//=============================================================================
Void Change()
  {
  LCD_putcmd(0x01);
  Printf(LCD_putchar,"Nhap Thoi Gian!");
  delay_ms(100);
  LCD_putcmd(0xC3);
  Printf(LCD_putchar,"__Den Do__");
  delay_ms(10);
  temp1=0x01;
  temp2=0x09;
  while(1)
      {
      if (START==0) {delay_us(10);break;}
     
      if (TANG==0)
        {
        delay_us(10);
        if (temp1==temp2==0x99) {temp1=temp2=0x00;break;}
        if (temp2==0x09)        {temp1++;temp2=0x00;}
        //=========
        temp2++;
        PORTA=temp1;
        PORTB=0x01;
        delay_ms(10);
        PORTA=0xFF;
        PORTB=0x00;
        delay_us(10);
        //===============   
        PORTA=temp2;
        PORTB=0x02;
        delay_ms(10);
        PORTA=0xFF;
        PORTB=0x00;
        delay_us(10);
        }
      if (GIAM==0)
        {
        delay_us(10);
        if(temp1==temp2==0x00)  {temp1=temp2=0x99;break;}
        if(temp2==0x00)        {temp1--;temp2=0x09;}
        //==========
        temp2--;
        PORTA=temp1;
        PORTB=0x01;
        delay_ms(10);
        PORTA=0xFF;
        PORTB=0x00;
        delay_us(10);
        //===================   
        PORTA=temp2;
        PORTB=0x02;
        delay_ms(10);
        PORTA=0xFF;
        PORTB=0x00;
        delay_us(10);
        }
        //=============================
        PORTA=temp1;
        PORTB=0x01;
        delay_ms(10);
        PORTA=0xFF;
        PORTB=0x00;
        delay_us(10);
        PORTA=temp2;
        PORTB=0x02;
        delay_ms(10);
        PORTA=0xFF;
        PORTB=0x00;
        delay_us(10);
      }
  }
//============================================================================== 
void realtime()
  {
  second=read_ds1307(0);
  write_ds1307(0,second&0x7F);
  write_ds1307(7,0x10);
  while(1)
  {
      if (SET==0){delay_ms(10);change();}
     
      else
      delay_ms(500);
      LCD_putcmd(0x01);//========Dua con tro ve dau dong 1======
      Printf(LCD_putchar,"Time:");
      second=read_ds1307(2);
      LCD_putchar(second/16 + 0x30);
      LCD_putchar(second%16 + 0x30);
      Printf(LCD_putchar,"-");
      second=read_ds1307(1);
      LCD_putchar(second/16 + 0x30);
      LCD_putchar(second%16 + 0x30);
      Printf(LCD_putchar,"-");
      second=read_ds1307(0);
      LCD_putchar(second/16 + 0x30);
      LCD_putchar(second%16 + 0x30);
     
     
      LCD_putcmd(0xC0); //===Dua Con Tro xuong dau dong 2========
      Printf(LCD_putchar,"Date:");
      second=read_ds1307(4);
      LCD_putchar(second/16 + 0x30);
      LCD_putchar(second%16 + 0x30);
      Printf(LCD_putchar,"-");
      second=read_ds1307(5);
      LCD_putchar(second/16 + 0x30);
      LCD_putchar(second%16 + 0x30);
      Printf(LCD_putchar,"-");
      second=read_ds1307(6);
      LCD_putchar(second/16 + 0x30);
      LCD_putchar(second%16 + 0x30);
      }
  }


demon52 04-05-2010 04:13 PM

1 Attachment(s)
Em đã sửa lại mạch và code dùng ngắt RB mà nó vẫn ko điều chỉnh đc :(( ai rảnh xem dùm em với

vytboy 04-05-2010 05:07 PM

nhờ giúp về mạch in-rất cần !
 
1 Attachment(s)
em có bài tập lớn vi xử lí sắp phải bảo về mà giờ vẫn chưa vẽ được cái mạch in ,bac nào rảnh rỗi giúp em với , ko hoàn thành được nó em bọ cấm thi mất !hic .dưới đây là mạch mô phòng của em , rất mong mọi người giúp đỡ !


Múi giờ GMT. Hiện tại là 09:06 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam