Ðề tài: CCS C for PIC16F877A
View Single Post
Old 28-06-2007, 10:16 PM   #229
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Trích:
Nguyên văn bởi nhh View Post
Mạch quét 16 phím, hiện kết quả lên led 7 đoạn.
Code:
//*****************************************************************************
// Author  : nhh
// Date    : 03/04/06
// Hardware: PIC16F877A
//*****************************************************************************
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(c)
#byte portb = 0x06
#byte portc = 0x07
#bit RB0 = 0x06.0
#bit RB1 = 0x06.1
#bit RB2 = 0x06.2
#bit RB3 = 0x06.3
#bit RB4 = 0x06.4
#bit RB5 = 0x06.5
#bit RB6 = 0x06.6
#bit RB7 = 0x06.7
#bit RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
int a;
const unsigned char dig[]={0b00111111,0b00000110, 0b01011011,0b01001111,\
0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111,0b01110111,\
0b01111100,0b00111001,0b01011110,0b11111001,0b11110001};
                  // ma hoa digital duoi dang mang
// Chuong trinh ngat
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
   {
         {
         if(RB4&&RB0)
         a=dig[0];
         }
         {
         if(RB4&&RB1)
         a=dig[4];
         }
         {
         if(RB4&&RB2)
         a=dig[8];
         }
         {
         if(RB4&&RB3)
         a=dig[12];
         }
//.......
         {
         if(RB5&&RB0)
         a=dig[1];
         }
         {
         if(RB5&&RB1)
         a=dig[5];
         }
         {
         if(RB5&&RB2)
         a=dig[9];
         }
         {
         if(RB5&&RB3)
         a=dig[13];
         }
//........
          {
         if(RB6&&RB0)
         a=dig[2];
         }
         {
         if(RB6&&RB1)
         a=dig[6];
         }
         {
         if(RB6&&RB2)
         a=dig[10];
         }
         {
         if(RB6&&RB3)
         a=dig[14];
         }
//........
          {
         if(RB7&&RB0)
         a=dig[3];
         }
         {
         if(RB7&&RB1)
         a=dig[7];
         }
         {
         if(RB7&&RB2)
         a=dig[11];
         }
         {
         if(RB7&&RB3)
         a=dig[15];
         }
   RBIF=0; //Xoa co ngat RB
   }
}
// Chuong trinh chinh
main()
{
set_tris_b(0b11110000);
set_tris_c(0);
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
portb=0;
portc=0;
while(true)
   {
   portb=1;
   portb=2;
   portb=4;
   portb=8;
   portc=a;
   }
}
portb=1;
portb=2;
portb=4;
portb=8;
portc=a;
lệnh gán này không biết có ý nghĩa gì nhỉ?
thank!
anh_gioi vẫn chưa có mặt trong diễn đàn