View Single Post
Old 23-01-2007, 12:01 PM   #6
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Code:
/**********************************************************************************************
* Mo ta     : Nhan phim ma tran phim, 8 led portD hien so tuong ung 0-15, so nay cung duoc goi
*             len may tinh bang giao tiep RS232
*----------------------------------------------------------------------------------------------
* Phan cung : PIC16F877A, thach anh 10MHz
*             ma tran phim noi voi portB, 8 led don noi voi portD qua tro han dong 220R
*             Pic giao tiep RS232 voi may tinh
*----------------------------------------------------------------------------------------------
* Nguoi viet: nhh
* Ngay viet : 12/11/06
* Trinh dich: CCS C v3.013
***********************************************************************************************/
#include  <DEFS_16F877A.h>
#fuses    NOWDT,PUT,HS,NOPROTECT,NOLVP
#use      delay(clock = 10000000)
#use      rs232(baud = 9600,xmit = pin_C6,rcv = pin_C7)
#define   key_port PORTB
#define   key_tris TRISB
#define   led_port PORTD
#define   led_tris TRISD
/*---------------------------------------------------------------------------------------------
 Khai bao bien toan cuc
---------------------------------------------------------------------------------------------*/
const unsigned char number[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

/*---------------------------------------------------------------------------------------------
 Khai bao nguyen mau cac ham su dung
---------------------------------------------------------------------------------------------*/
void column_check(unsigned char);
void key_scan(void);

/*---------------------------------------------------------------------------------------------
 Ham kiem tra hang nao trong cot column xuong 0
---------------------------------------------------------------------------------------------*/
void column_check(unsigned char column)
{
   switch(column)
   {
      case 0:
      {
         if(!bit_test(key_port,0))
         {
            while(!bit_test(key_port,0));
            delay_ms(10);
            led_port = number[0];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,1))
         {
            while(!bit_test(key_port,1));
            delay_ms(10);
            led_port = number[1];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,2))
         {
            while(!bit_test(key_port,2));
            delay_ms(10);
            led_port = number[2];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,3))
         {
            while(!bit_test(key_port,3));
            delay_ms(10);
            led_port = number[3];
            printf("%u\n\r",led_port);
         }
      }
         break;
      case 1:
      {
         if(!bit_test(key_port,0))
         {
            while(!bit_test(key_port,0));
            delay_ms(10);
            led_port = number[4];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,1))
         {
            while(!bit_test(key_port,1));
            delay_ms(10);
            led_port = number[5];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,2))
         {
            while(!bit_test(key_port,2));
            delay_ms(10);
            led_port = number[6];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,3))
         {
            while(!bit_test(key_port,3));
            delay_ms(10);
            led_port = number[7];
            printf("%u\n\r",led_port);
         }
      }
         break;
      case 2:
      {
         if(!bit_test(key_port,0))
         {
            while(!bit_test(key_port,0));
            delay_ms(10);
            led_port = number[8];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,1))
         {
            while(!bit_test(key_port,1));
            delay_ms(10);
            led_port = number[9];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,2))
         {
            while(!bit_test(key_port,2));
            delay_ms(10);
            led_port = number[10];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,3))
         {
            while(!bit_test(key_port,3));
            delay_ms(10);
            led_port = number[11];
            printf("%u\n\r",led_port);
         }
      }
         break;
      case 3:
      {
         if(!bit_test(key_port,0))
         {
            while(!bit_test(key_port,0));
            delay_ms(10);
            led_port = number[12];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,1))
         {
            while(!bit_test(key_port,1));
            delay_ms(10);
            led_port = number[13];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,2))
         {
            while(!bit_test(key_port,2));
            delay_ms(10);
            led_port = number[14];
            printf("%u\n\r",led_port);
         }
         if(!bit_test(key_port,3))
         {
            while(!bit_test(key_port,3));
            delay_ms(10);
            led_port = number[15];
            printf("%u\n\r",led_port);
         }
      }
         break;
   }
}

/*---------------------------------------------------------------------------------------------
 Ham quet phim
---------------------------------------------------------------------------------------------*/
void key_scan(void)
{
   int count;
   for(count = 4;count <= 7; count++)
   {
      key_tris = 0xF0;                  // cot ngo vao, hang ngo ra
      key_port = 0xF0;                  // cot muc 1, hang muc 0
      if(!bit_test(key_port,count))     // cot count xuong 0 chua?
      {
         delay_ms(10);
         if(!bit_test(key_port,count))  // kiem tra lai cot count co xuong 0 ko?
         {
            key_tris = 0x0F;            // cot ngo ra, hang ngo vao
            key_port = 0xEF;            // cot 0 xuong 0
            column_check(0);
            key_port = 0xDF;            // cot 1 xuong 0
            column_check(1);
            key_port = 0xBF;            // cot 2 xuong 0
            column_check(2);
            key_port = 0x7F;            // cot 3 xuong 0
            column_check(3);
         }
      }
   }
}

/*---------------------------------------------------------------------------------------------
 Chuong trinh chinh
---------------------------------------------------------------------------------------------*/
void main(void)
{
   led_tris = 0x00;
   led_port = 0xFF;
   while(true)
   {
      key_scan();
   }
}
File Kèm Theo
File Type: rar Key_scan.rar (9.4 KB, 401 lần tải)
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn