View Single Post
Old 11-10-2010, 10:58 PM   #38
hcmut.khoamaisi
Đệ tử 4 túi
 
hcmut.khoamaisi's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TPHCM
Bài gửi: 79
:
Send a message via Yahoo to hcmut.khoamaisi
Talking

Ai thích thì down về tham khảo vậy.cái này mình tự làm cách đây cũng lâu rồichưa có giao tiếp với máy tính(vì trình độ lúc đó còn hạn chế ).Bạn nào down về rồi sửa lại cho giao tiếp với máy tình rồi up lai cho anh em thi quá hay
Code:
/* Chuong Trinh den giao thong.Hien thi ra LCD.dung PIC16F877*/
#include "16f877.h"
#include "def_877a.h"
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use   delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)

#define  RS  RD0              
#define  RW  RD1
#define  E   RD2
#define  LCD PORTB            //LCD duoc dieu khien qua PORTB
int   i=0;
const unsigned char key[]="15141312111009080706050403020100";  //Khai bao chuoi dem 15s cho den giao thong
void comwrt(void)             //ghi lenh ra LCD   
   {                              
    RS=0;
    RW=0;
    E=1;
    E=0;
    delay_ms(1);
   }

void datawrt(void)            //ghi data ra LCD
   {
    RS=1;
    RW=0;
    E=1;
    E=0;
    delay_ms(1);
   }

void initLCD(void)            //Khoi tao gia tri dau cho LCD
   {
   LCD=0x38;
   comwrt();
   LCD=0x0C;
   comwrt();
   LCD=0x06;
   comwrt();
   delay_ms(1);
   }
void state1_light()           //cac trang thang cua den giao thong   
   {
    output_high(PIN_D3);
    output_low(PIN_D4);
    output_low(PIN_D5);
    
   }

void state2_light()          
   {
    
    output_low(PIN_D3);
    output_high(PIN_D4);
    output_low(PIN_D5);
    
   }
void state3_light()
   {
    output_low(PIN_D3);
    output_low(PIN_D4);
    output_high(PIN_D5);
   }   
   
   
void LCD_count()                    //dem thoi gian 15s cho cac den xanh-Do
   {
   While(i<=30)
   {
          
    LCD=key[i];                     
    datawrt();
    i=i+1;
    LCD=key[i];
    datawrt();
    i=i+1;
    delay_ms(1000);                    //xuat lan luot 2 ki tu ra LCD
    LCD=0x01;                          //xoa man hinh LCD
    comwrt();
    delay_ms(1000);                    //phai delay thi lenh xoa man hinh moi xoa het duoc man hinh(rat Quan Trong(
   }
   }
 void wait_yellow_light()              //Dem thoi gian 3s cho den vang
   {
   LCD='0';
   datawrt();
   LCD='3';
   datawrt();
   delay_ms(1000);
   LCD=0x01;
   comwrt();
   delay_ms(1000);
   
   LCD='0';
   datawrt();
   LCD='2';
   datawrt();
   delay_ms(1000);
   LCD=0x01;
   comwrt();
   delay_ms(1000);
   
   LCD='0';
   datawrt();
   LCD='1';
   datawrt();
   delay_ms(1000);
   LCD=0x01;
   comwrt();
   delay_ms(1000);
   
   LCD='0';
   datawrt();
   LCD='0';
   datawrt();
   delay_ms(1000);
   LCD=0x01;
   comwrt();
   delay_ms(1000);
   }
   

  
  
void main(void)
{
   While(1)
   {
   set_tris_B(0);
   PORTB=0;
   set_tris_D(0);
   PORTD=0;
   initLCD();              //khoi tao LCD
 
   state1_light();         //xanh-do   
   LCD_count();
   delay_ms(1000);
   i=0;   
   state2_light();         //vang-vang
   wait_yellow_light();
   delay_ms(1000);
   i=0;     
   state3_light();         //do-xanh
   LCD_count();
   delay_ms(1000);
   i=0;
   }
}
link phần cứng
http://www.mediafire.com/?stiskv0rp3t5s

thay đổi nội dung bởi: hcmut.khoamaisi, 12-10-2010 lúc 10:46 AM.
hcmut.khoamaisi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn