Showing posts with label PIC18F4550 CCS. Show all posts
Showing posts with label PIC18F4550 CCS. Show all posts

BÀI 5 : ĐẾM TỪ 0 - 9999 PIC18F4550 CCS

9:00:00 AM 2 Comments
Chào các bạnh trong bài đăng này mình sẽ hướng dẫn các bạn đếm từ 0 - 9999, trong các bài trước mình đã hướng dẫn các bạn các bài cơ bản về PIC18F4550 rồi chúng ta sẽ áp dụng những gì học được từ các bài trước để áp dụng vào bài này. Ok chúng ta sẽ đi vào vấn đề chính.
- Trước tiên mình sẽ tách các số hàng nghìn,trăm,chục,đơn vị ra trước.
    nghin=dem/1000;
    tram = (dem - nghin*1000)/100;
    chuc=(dem - nghin*1000 - tram*100)/10;
    donvi=dem - nghin*1000 - tram*100 - chuc*10;
Code của chúng ta như trên mục đính của việc này là xác định xem ld nào là led nghìn led trăm led chục led đơn vị để chúng ta hiển thị nó lên led 7 đoạn.
- Tiếp theo là phần hiển thị.
    output_d(0x0F);           // Turn off all displays
    output_b(maled[nghin]);         // Send ones digit
    output_d(0x07);           // Turn on display for ones
    delay_ms(2);
    output_d(0x0F);           // Turn off all displays
    output_b(maled[tram]);        // Send tens digit
    output_d(0x0B);           // Turn on display for tens
    delay_ms(2);
    output_d(0x0F);           // Turn off all displays
    output_b(maled[chuc]);       // Send hundreds digit
    output_d(0x0D);           // Turn on display for hundreds
    delay_ms(2);
    output_d(0x0F);           // Turn off all displays
    output_b(maled[donvi]);      // Send thousands digit
    output_d(0x0E);           // Turn on display for thousands
    delay_ms(2);
Code chúng ta như sao thay vì trong bài trước chúng cho xuất ra port_b là giá trị mà chúng ta muốn hiển thị thì bài này chúng ta cũng làm như vậy như khác ở chô là có thêm biến đếm biến đếm này sẽ thay đổi liên tục.
- Cuối cùng là điền kiện của chúng ta như chúng ta biết trong bài này chỉ sử dụng 4 led nên chỉ đếm tối đa được từ  0 - 9999 nên điều kiện chung ta phải nằm trong khoảng này.
    if(dem==1500)
    {
    dem=0;
    }
    }
Với điều kiện trên các bạn có thể thay đổi giá trị tùy thích nha !
Code chương trình chúng ta đơn giản vậy thôi không có gì phức tạm cả.
- Đây là ảnh mô phonger chương trình.
0 - 9999 pic18f4550 ccs
- Link download project : Click here

BÀI 4 : HIỂN THỊ SỐ 2016 LÊN 4 LED 7 ĐOẠN PIC18F4550 CCS

6:22:00 AM 4 Comments
- Chào các bạn hôm nay chúng ta sẽ tiếp tục học tiếp PIC18F4550 và trong bài này mình sẽ hướng dẫn các bạn giao tiếp với LED 7 đoạn.
- Ảnh mô phỏng protues.
hiển thị số 2016 lên 4 led 7 đoạn
- Đây là code chương trình.
#include <18F4550.h>
#fuses NOMCLR INTRC_IO
#use delay(clock=8000000)
void main()
{
  setup_oscillator(OSC_8MHZ);
  while(TRUE)
  {
    output_d(0x0F);           // Turn off all displays
    output_b(0x82);         // Send ones digit
    output_d(0x07);           // Turn on display for ones
    delay_ms(2);
    output_d(0x0F);           // Turn off all displays
    output_b(0xF9);        // Send tens digit
    output_d(0x0B);           // Turn on display for tens
    delay_ms(2);
    output_d(0x0F);           // Turn off all displays
    output_b(0xC0);       // Send hundreds digit
    output_d(0x0D);           // Turn on display for hundreds
    delay_ms(2);
    output_d(0x0F);           // Turn off all displays
    output_b(0xA4);      // Send thousands digit
    output_d(0x0E);           // Turn on display for thousands
    delay_ms(2);
    }
}
- Link download project Click here
Ai có gì thắc mắc thì comments bên dưới nha !

BÀI 3 : GIAO TIẾP VỚI NÚT NHẤN PIC18F4550 CCS

5:50:00 AM Add Comment
Chào các bạn trong hai bài đăng trước mình đã hướng dẫn các bạn về LED đơn rồi trong bài này chúng ta sẽ tiếp tục học tiếp về Button (nút nhấn). Trước tiên thì mình xin giới thiệu với các bạn hai cách mút nhấn dùng trong bài này đó là nút nhấn tích cực mức cao và nút nhấn tích cực mức thấp như hình bên dưới :
- Đây là ảnh mô phỏng protues.
- Đây là code chương trình bài trên.
#include <18F4550.h>
#fuses NOMCLR INTRC_IO
#use delay(clock=8000000)
void main()
{
  setup_oscillator(OSC_8MHZ);
  while(TRUE)
  {
    if(input(PIN_A0) == 0)
    {
         output_high(PIN_C0);  
    }
    if(input(PIN_A1) == 1)
    {
         output_high(PIN_C1);  
    }
  }
}
- Link download project Click here
Code rất ngắn gọn và đơn giản. Ai không hiểu thì commets bên dưới !

BÀI 2 : HIỆU ỨNG LED PIC18F4550 CCS

6:30:00 PM 3 Comments
Chào các bạn trong bài đăng trước mình đã hướng dẫn các bạn về I/O của PIC18F4550 rồi cụ thể là chớp tắt LED, trong bài này mình sẽ hướng dẫn các bạn tiếp tục với I/O đó là tạo 1 số hiệu ứng LED đơn giản !
- Đây là ảnh mô phỏng protues.
led sáng dồn pic18f4550
- Trong hình hình trên mình sử dụng PORTD dùng làm PORT điều khiển ! Sử dụng 8 LED màu vàng và 8 điện trở từ 270 - 330 là ok !
- Code chương trình.
#include <18F4550.h>
#fuses NOMCLR INTRC_IO
#use delay(clock=8000000)
void main()
{
  int i=0,a;
  setup_oscillator(OSC_8MHZ);
  while(TRUE)
  {
  a = 0x01;
  for(i=0;i<=7;i++)
  {
  output_d(a);
  delay_ms(200);
  a = a<<1;
  }
   // right
  a = 0x80;
  for(i=0;i<=7;i++)
  {
  output_d(a);
  delay_ms(200);
  a = a>>1;
  }
   // chase left 
   a = 0X00;
   for(i=0;i<=8;i++)
   {
   output_d(a);
   delay_ms(200);
   a = a<<1;
   a = a | 0X01;
   }
   // chase right
   delay_ms(200);
   a = 0X00;
   for(i=0;i<=8;i++)
   {
   output_d(a);
   delay_ms(200);
   a = a>>1;
   a = a | 0X80;
   }
   // sang dan and tat dan
   delay_ms(200);
   a = 0X00;
   for(i=0;i<=7;i++)
   {
   output_d(a);
   delay_ms(200);
   a = a<<1 | 0x01;
   }
   delay_ms(200);
   for(i=0;i<=7;i++)
   {
   output_d(a);   
   delay_ms(100);      
   a = a<<1;     
   }
   }
   }
- Giải thích chương trình trên như sau :
a. Dịch phải.
  a = 0x01;
  for(i=0;i<=7;i++)
  {
  output_d(a);
  delay_ms(200);
  a = a<<1;
  }
Ban đầu a = 0x01; LED ở chân RD0 sáng sau đó ta sử dụng lệnh dịch trái là a = a<< 1; vì PORTD có 8 chân nên vòng for được lặp lại từ 0 - 7. Tương tự như lệnh dịch phải lệnh dịch trái chỉ thây đổi chỗ a = a >> 1; hai lệnh này chỉ khác nhau chỗ đó thôi.
b. Sáng dồn
   a = 0X00;
   for(i=0;i<=8;i++)
   {
   output_d(a);
   delay_ms(200);
   a = a<<1;
   a = a | 0X01;
   }
Giống như lệnh dịch trái, dịch phải thôi nhưng có khác 1 chỗ là khi dịch xong 1 bít nó sẽ OR với 0x01 bằng lệnh này  a = a | 0X01; như các bạn biết một số bất kỳ OR với 1 điều bằng 1 lệnh trên nó là như vậy tương tự lệnh sáng dồn bên phải cũng vậy chỉ khác nhau là nó OR với 0x80. Xem bản dưới các bạn sẽ rõ :
- Link download project Click here

BÀI 1 : CHỚP TẮT LED PIC18F4550 CCS

3:37:00 AM Add Comment
Chào các bạn trong bài đăng này mình sẽ hướng dẫn các bạn lập trình PIC18F4550 trên phần mềm PIC C và mô phỏng trên phần mềm PROTUES 8.1 cho nên ai chưa cài hai phần mềm này thì xem hướng dẫn download và cài đặt theo link bên dưới nha :
+ HƯỚNG DẪN CÀI ĐẶT PHẦN MỀM PIC C Click here
+ HƯỚNG DẪN DOWNLOAD CÀI ĐẶT PHẦN MỀM PROTUES 8.1 FULL CRACK Click here
- Trong bài này chúng ta sẽ mô phỏng chớp tắt LED trên protues thôi còn nếu ai có mạch thật thì chúng ta test trên mạch thật nha ! Còn về cấu tạo và nguyên lý hoạt động các bạn lên mạng xem ở đây mình không nhắc lại.
- Trước tiên chúng ta sẽ xem hình dạng của con PIC18F4550 như hình bên dưới :
pic18f4550
Như trên hình chúng ta thấy PIC18F4550 gồm có 5 PORT đó là PORTA (RA0 - RA6), PORTB (RB0- RB7), PORTC (RC0 - RC7 nhưng không có chân RC3), PORTD (RD0 -RD7), PORTE (RE0 - RE3). Như vậy ở đây mình sẽ sử dụng 1 chân của PORTC và PORTD để làm 1 ví dụ nhỏ đó là chớp tắt LED ở 1 chân và 1 PORT như thế nào.
- Đây là ảnh mô phỏng protues.
blink led pic18f4550
- Đây là code chương trình.
#include <18F4550.h>
#fuses NOMCLR INTRC_IO
#use delay(clock=8000000)
void main()
{
  setup_oscillator(OSC_8MHZ);
  while(TRUE)
  {
    delay_ms(500);
    output_high(PIN_C0);
    output_d(0xff);    
    delay_ms(500);
    output_low(PIN_C0);
    output_d(0);
  }
}
- Link download project Click here