1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

Báo cáo VĐK giữa kỳ

Thảo luận trong 'Báo cáo giửa kỳ' bắt đầu bởi athek06, 16 Tháng một 2010.

  1. athek06 New Member

    Số bài viết: 2
    Đã được thích: 0
    Điểm thành tích: 0
    Họ tên sinh viên : Nguyễn Như Thế
    MSSV : 06112062
    Email : athek06@gmail.com
    Điện thoại : 0976788399

    Đề tài :

    Mạch đèn giao thông ngã tư có hiển thị led 7 đoạn

    Yêu cầu :
    Sử dụng vi điều khiển ATMEGA32 để điều khiển
    Mạch điều khiển đèn theo 2 hướng

    [IMG]

    Ở chế độ Auto thì các đèn hoạt động như hình sau :

    [IMG]

    Ở chế độ Manual thực hiện theo panel sau :

    [IMG]

    Khi chuyển qua chế độ Manual thì tất cả hoạt động dừng lại
    khi cần chỉnh thời gian cho đèn nào thì nhấn nút Next để chọn đèn cần chỉnh (xanh 1, vàng 1, xanh 2, vàng 2) sau đó nhấn nút Up nếu muốn chỉnh lên, Down muốn chỉnh xuống. Sau đó nhấn nút Set để lưu trạng thái đã chỉnh. Nếu chỉnh qua chế độ Auto thì tiếp tục chạy.
    Sơ đồ mạch nguyên lý
    [IMG]


    Sơ đồ mạch layout

    [IMG]


    Code chương trình :

    Mã:
    This program was produced by the
    Mã:
     
    [LEFT]CodeWizardAVR V2.03.4 Standard[/LEFT]
     
    [LEFT]Automatic Program Generator
    
    © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
    [LEFT][URL="http://spkt.net/redirect/?url=http%3A%2F%2Fwww.hpinfotech.com"]http://www.hpinfotech.com[/URL]
    Project : Traffic light
    Version : 
    Date    : 1/13/2010
    Author  : mr.athe
    Company : mr.athe@pro
    Comments: 
    Mach den giao thong tai nga tu[/LEFT]
    [/LEFT]
    
     
     
     
     
    [LEFT]Chip type           : ATmega32
    
    Program type        : Application
    [LEFT]Clock frequency     : 12.000000 MHz
    Memory model        : Small
    External RAM size   : 0
    Data Stack size     : 512
    *****************************************************/[/LEFT]
    [/LEFT]
    
     
     
     
     
    [LEFT]#include <mega32.h>[/LEFT]
     
     
     
    [LEFT]#define mode PINB.0     //khai bao cac phim nhan cai dat
    
    #define down PINB.1
    [LEFT]#define up PINB.2
    #define mode1 PINB.3
    #define sw PINB.4[/LEFT]
    [/LEFT]
    
     
     
     
     
    [LEFT]#define LC1  PORTC.2    //4 CHAN DK LED 7 DOAN
    
    #define LDV1  PORTC.3
    [LEFT]#define LC2  PORTC.0
    #define LDV2  PORTC.1
    #define do1  PORTD.2   //6 CHAN LED
    #define vang1  PORTD.1
    #define xanh1  PORTD.0
    #define do2  PORTD.5
    #define vang2  PORTD.4
    #define xanh2  PORTD.3
    // Declare your global variables here                     
    unsigned int td1 = 30,td2=30,tv1=5,tv2=5,tx1=25,tx2=25;
    unsigned int trangthai = 1; int tg,bdn =0;
    unsigned char so[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; // ma 7 doan
    // Trinh phuc vu ngat cho Timer1 khi Timer1 tran
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    //TCNT1=10000;//nap lai gia tri cho Timer1   
    TCNT1H=0xFF;
    TCNT1L=0xFE;  
    tg++; if(tg>100) {tg = 0;bdn ++;  } 
    if(bdn>1000)bdn=0;
    }
    void hienthi7doan(int tg1,int tg2)
    {     
     int i;
     unsigned char chuc,donvi;
     chuc = tg1/10; donvi = tg1%10;
     PORTC=255;
     LC1 = 0;
     PORTA = so[donvi];
     for (i = 0;i<200;i++){}
     PORTC = 0b11111111;
     LDV1=0;
     PORTA = so[chuc];
     for (i = 0;i<200;i++){}
     chuc = tg2/10; donvi = tg2%10;
     PORTC = 0b11111111;
     LC2 = 0;
     PORTA = so[donvi];
     for (i = 0;i<200;i++){}
     PORTC = 255;
     LDV2= 0 ;
     PORTA = so[chuc];
     for (i = 0;i<200;i++){}
    }  
    void chinhthoigian()
    {    int i; 
         int k=1;[/LEFT]
    [/LEFT]
    
     
     
     
     
    [LEFT]while(sw==0)
    
    {
    [LEFT] if(k==1)
     {    
             PORTD=0b11111111;
             xanh1 = 0;
         if(up==0)
         {
                 while(up==0){} tx1=tx1+1;if(tx1==100)tx1=0; td2=tx1+tv1;
                 for(i=0;i<300;i++)hienthi7doan(tx1,0);
         }
         if(down==0)
         {
                 while(down==0){} tx1=tx1-1;if(tx1==0)tx1=99; td2=tx1+tv1;
                 for(i=0;i<300;i++)hienthi7doan(tx1,0);
         }
         if(mode==0){while(mode==0){} k=2;}
         if(mode1==0){while(mode1==0){} k=5;}
     }
     if(k==2)
     {    
             PORTD=0b11111111;
             vang1 = 0;
         if(up==0)
         {
                 while(up==0){} tv1=tv1+1;if(tv1==100)tv1=0; td2=tx1+tv1;
                 for(i=0;i<300;i++)hienthi7doan(tv1,0);
         }
         if(down==0)
         {
                 while(down==0){} tx1=tv1-1;if(tv1==0)tv1=99; td2=tx1+tv1;
                 for(i=0;i<300;i++)hienthi7doan(tv1,0);
         }
         if(mode==0){while(mode==0){} k=3;}
         if(mode1==0){while(mode1==0){} k=5;}
     }
     if(k==3)
     {    
             PORTD=0b11111111;
             xanh2 = 0;
         if(up==0)
         {
                 while(up==0){} tx2=tx2+1;if(tx2==100)tx2=0; td1=tx2+tv2;
                 for(i=0;i<300;i++)hienthi7doan(0,tx2);
         }
         if(down==0)
         {
                 while(down==0){} tx2=tx2-1;if(tx2==0)tx2=99; td1=tx2+tv2;
                 for(i=0;i<300;i++)hienthi7doan(0,tx2);
         }
         if(mode==0){while(mode==0){} k=4;}
         if(mode1==0){while(mode1==0){} k=5;}
     }
     if(k==4)
     {    
             PORTD=0b11111111;
             vang2 = 0;
         if(up==0)
         {
                 while(up==0){} tv2=tv2+1;if(tv2==100)tv2=0; td1=tx2+tv2;
                 for(i=0;i<300;i++)hienthi7doan(0,tv2);
         }
         if(down==0)
         {
                 while(down==0){} tv2=tv2-1;if(tv2==0)tv2=99; td1=tx2+tv2;
                 for(i=0;i<300;i++)hienthi7doan(0,tv2);
         }
         if(mode==0){while(mode==0){} k=2;}
         if(mode1==0){while(mode1==0){} k=5;}
     }
     if(k==5)
     {
             PORTD=0b11111111; 
             do1=do2=0;
             hienthi7doan(td1,td2);
     }
     }        
    } 
    void xanh1do2()
    {
    xanh1=0; xanh2=1; do1=1; do2=0; vang1=1; vang2=1;
    hienthi7doan(tx1,td2);
    }
    void vang1do2()
    {
     xanh1=1; xanh2=1; do1=1; do2=0; vang1=0; vang2=1;
     hienthi7doan(tv1,td2);
    }
    void do1xanh2()
    {
     xanh1=1; xanh2=0; do1=0; do2=1; vang1=1; vang2=1;
     hienthi7doan(td1,tx2);
    }
    void do1vang2()
    {
     xanh1=1; xanh2=1; do1=0; do2=1; vang1=1; vang2=0;
     hienthi7doan(td1,tv2);
    }
    void main(void)
    {
    // Declare your local variables here
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTA=0x00;
    DDRA=0xFF;
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTB=0x00;
    DDRB=0x00;
    // Port C initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTC=0x00;
    DDRC=0xFF;
    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTD=0x00;
    DDRD=0xFF;[/LEFT]
    [/LEFT]
    
     
     
     
     
    [LEFT]// thiet lap thuoc tinh cho Timer0, Timer2:
    
    #asm("cli") // khong cho phep ngat toan cuc   
    [LEFT]TCCR1B=0x03;
    //TCCR1B=0x01;//nguon xung Clock cho Timer1 lay tu System Clock  
    TCNT1H=0xFF;
    TCNT1L=0xFE;  
    //TCNT1=10000;//nap gia tri ban dau cho Timer1 la 100
    // cho phep ngat Timer0 khi Timer0 tran va ngat Timer2 khi Timer2 tran
    TIMSK=0b01000101; 
    #asm("sei") // cho phep ngat toan cuc 
    while (1)
       {
       // Place your code here
                 if (sw==1)
         {    
             if(bdn==1000) // sau 1 giay
             {
                 switch (trangthai)
                     {
                         case 1:
                         tx1=tx1-1;td2=td2-1;
                         if(tx1==0){tx1=15;trangthai=2;}
                         break;
                         case 2:
                         tv1=tv1-1;td2=td2-1;
                         if(tv1==0){tv1=5;td2=20;trangthai=3;}
                         break;
                         case 3:
                         td1=td1-1;tx2=tx2-1;
                         if(tx2==0){tx2=15;trangthai=4;}
                         break;
                         case 4:
                         td1=td1-1;tv2=tv2-1;
                         if(tv2==0){tv2=5;td1=20;trangthai=1;}
                         break;
                     }
                 bdn =0;        
             }[/LEFT]
    [/LEFT]
    
     
     
     
     
    [LEFT]         // goi cac ham de hien thi
    
             switch (trangthai)
    [LEFT]         {
                 case 1:
                 xanh1do2();
                 break;
                 case 2:
                 vang1do2();
                 break;
                 case 3:
                 do1xanh2();
                 break;
                 case 4:
                 do1vang2();
                 break;
             }
         }
         else
         {[/LEFT]
    [/LEFT]
    
     
     
     
     
    [LEFT]        PORTC=0b11111111; PORTD=0b11111111;//tat het
    
            chinhthoigian();
    [LEFT]        bdn=0;
         }
       };
    }[/LEFT]
    [/LEFT]
    
     
     
     
    

    Mô hình đã thi công :


    [IMG]



    Kết quả :
    Mô hình thực tế đã chạy (đèn sáng rõ, led 7 đoạn hiển thị rõ)
    Nhược điểm : mô hình thiết kế giới hạn về thẩm mỹ, khả năng ứng dụng thực tế còn hạn chế.


    Các bạn có thể tham khảo tài liệu AVR bằng tiếng việt tại website :
    http://hocavr.com/index.php/lectures
    Trang web này viết rất kỹ từ căn bản đến nâng cao về vi điều khiển AVR hi vọng nó sẽ giúp các bạn học tốt AVR hơn.
  2. lythedan_vn1990 New Member

    Số bài viết: 5
    Đã được thích: 0
    Điểm thành tích: 0
  3. cau chu nho New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
  4. 88888 Member

    Số bài viết: 56
    Đã được thích: 2
    Điểm thành tích: 8
    ai cần ATMEGA32-PU thì pm mình nha.
    mình để lại 60k/em
    trên 10 em 50k/em
    mới 100%

    yahoo : spkt_net

Chia sẻ trang này