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

BÀI 42 : DS1307 PIC16F877A CCS

8:47:00 PM Add Comment
Trong file download bên dưới có nhiều project về DS1307 và I2C với PIC16F877A VÀ 8051 các bạn download về tham khảo nha !
(Nguồn lý thuyết : ytuongnhanh.vn)
1. Giới thiệu:
IC thời gian thực (RTC) DS1307 có thể đếm giờ, phút, giây, thứ, ngày tháng, năm. Giao tiếp với vi điều khiển thông qua chuẩn I2C, và đóng vai trò là slave khi kết nối đến Bus I2C này. Có thể đếm thời gian theo định dạng 24 giờ hoặc 12 giờ với chỉ thị AM/PM. Ngoài ra bên trong chíp có bộ dò phát hiện mất nguồn và tự động chuyển sang sử dụng nguồn Pin dự phòng.

2. Sơ đồ chân:
Trong đó:
ChânTênChức năng
1X1Kết nối đến thạch anh  32.768Khz làm nguồn dao động cho chip
2X2
3VBatKết nối đến cực dương của Pin dự phòng, có điện áp tiêu chuẩn khoảng 3V
4GNDKết nối đến mass
5SDAChân dữ liệu khi kết nối đến bus I2C
6SCLChân nhận xung clock đồng bộ khi kết nối bus I2C
7SQW/OUTNgõ xuất xung vuông, tần số có thể lập trình để thay đổi từ 1Hz, 4Khz, 8 Khz, 32 Khz
8VCCNguồn cấp chính, khoảng 5VDC
 3. Lấy thông tin về thời gian và lịch
Bảng 1 là địa chỉ của các thanh ghi RAM và thanh ghi RTC của DS 1307. Thanh ghi RTC có địa chỉ từ 00-07h. các thanh ghi RAM chiếm địa chỉ từ 08h - 3Fh
Các thông tin về thời gian và lịch thu được bằng cách đọc các byte trong thanh ghi tương ứng. Thời gian và lịch được thiết lập hoặc khởi tạo bằng cách viết các byte thanh ghi thích hợp. Lưu ý dữ liệu lưu thời gian chứa trong thanh ghi đều theo định dạng BCD. Thứ trong tuần thay đổi tại lúc nữa đêm, lưu dưới dạng con số (Ví dụ 1 là Chủ Nhật, 2 là Thứ hai, 3 là thứ 3 ...). Khi lần đầu tiên IC được cấp nguồn các thanh ghi thời gian và lịch reset về 01/01/00 01 00:00:00. (MM/DD/YY DOW HH:MM:SS)
- Ảnh mô phỏng protues.
ds1307 8051
- Link download project Click here

BÀI 41 : LED MATRIX 8X16 PIC16F877A CCS

4:27:00 AM Add Comment
LED matrix 8x16 được tạo thành từ 2 LED matrix 8x8. Khác với khi giao tiếp với LED matrix 8x8 ở đây chúng ta có tới 16 hàng và cột nên khổng thể dùng 1 PORT để xuất dữ liệu ra được nên phải dùng 2 PORT như thế thì cũng được nhưng tốn quá nhiều chân của Vi Xử Lý nên ở đây chúng ta sử dụng IC 74HC595 để tiết kiệm chân cho con Vi Xử Lý của chúng ta. Việc sử dụng IC này cũng không quá khó mà nó lại rất thông dụng nên các bạn phải nắm chất kiến thức về nó ! Ai chưa hiểu về cấu tạo cũng như hoạt động của nó thì có thể xem lại TẠI ĐÂY .
- Ảnh mô phỏng protues.
led matrix 8x16 pic16f877a
- Đây là code chương trình.
#include <16f877a.h>
#fuses NOLVP,NOWDT,PUT,HS
#use delay(clock=20000000)
#BIT PORTCbits_RC0 = 0X07.0
#BIT PORTCbits_RC1 = 0X07.1
#BIT PORTCbits_RC3 = 0X07.3
const unsigned char font[] = {
127, 127,  14,  28,  14, 127, 127,   0, //'M'
124, 126,  19,  19, 126, 124,   0,   0, //'A'
3,  65, 127, 127,  65,   3,   0,   0, //'T'
65, 127, 127,   9,  25, 127, 102,   0, //'R'
0,  65, 127, 127,  65,   0,   0,   0, //'I'
67, 103,  60,  24,  60, 103,  67,   0, //'X'
0,   0,   0,   0,   0,   0,   0,   0, //' '
54, 127,  73,  73, 127,  54,   0,   0, //'8'
68, 108,  56,  16,  56, 108,  68,   0, //'x'
64,  66, 127, 127,  64,  64,   0,   0, //'1'
60, 126,  75,  73, 121,  48,   0,   0, //'6' 
0,   0,   0,   0,   0,   0,   0,   0, //' '
0,   0,   0,   0,   0,   0,   0,   0, //' '
};

void main() 
{
unsigned rol, delay, col;
SET_TRIS_B(0x00);  
SET_TRIS_C(0x00);  
OUTPUT_B(0x00);  
OUTPUT_C(0x00);  
   while(1)
   {
    for(rol=0;rol<112;rol++)
    { //font. 13 x 8[8x8 matrix] = 112.
     for(delay=0;delay<20;delay++)
     {  
      PORTCbits_RC0 = 1; PORTCbits_RC0 = 0; PORTCbits_RC1 = 1; PORTCbits_RC3 = 1; PORTCbits_RC3 = 0; 
      for(col=0;col<16;col++) // 16 hang va cot
      { 
      OUTPUT_B (~ font[col + rol]);
      delay_us(300);  
      PORTCbits_RC0 = 1; PORTCbits_RC0 = 0; PORTCbits_RC1 = 0; PORTCbits_RC3 = 1; PORTCbits_RC3 = 0;
      }
     }
    }
   }
}
- Link download project Click here

BÀI 40 : LED MATRIX 8X8 PIC16F877A CCS

7:46:00 PM 2 Comments
1. Sơ đồ chân Led ma trận 8x8
led matrix 8x8
Hình 1: Led ma trận 8x8

2. Câu tạo bên trong của LED matrix 8x8.
Hình 2: Sơ đồ chân và sơ đồ kết nối bên trong led ma trận.
3. Code hiển thị chữ A lên led ma trận
#include <16f877a.h>
#device *=16 ADC=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=12000000)
 Void main() 
{
while (true) 

Output_c (0b11111111);
Output_B (60); 
Output_c (0b11111110); 
delay_us(100); 
 
Output_c (0b11111111); 
Output_B (102); 
Output_c (0b11111101); 
delay_us(100); 
Output_c (0b11111111); 
Output_B (102); 
Output_c (0b11111011); 
delay_us(100); 
Output_c (0b11111111); 
Output_B (102); 
Output_c (0b11110111); 
delay_us(100); 
Output_c (0b11111111); 
Output_B (126); 
Output_c (0b11101111); 
delay_us(100); 
Output_c (0b11111111); 
Output_B (102); 
Output_c (0b11011111); 
delay_us(100); 
 Output_c (0b11111111); 
Output_B  (102); 
Output_c (0b10111111); 
delay_us(100); 
Output_c (0b11111111);
Output_B (102); 
Output_c (0b01111111); 
delay_us(100); 
 

}
- Giải thuật để quét LED matrix là chúng ta sẽ quét lần lượt theo từng hàng và cột nha ! Như các bạn thấy đoạn code trên chúng ta sử dụng phương pháp này để quét sao đó xuất kết quả ra PORT !
Nếu thời gian quét đủ nhanh, ta thấy các led dường như sáng liên tục tạo nên chữ như hình bên dưới.

Hình một số font chữ trên led ma trận:


Font 5x7 cho led ma trận;

 
- Đây là ảnh mô phỏng trên phần mềm protues.
led matrix 8x8 pic16f877a

BÀI 39 : GIAO TIẾP VỚI KEYPAD 4X4 PIC16F877A CCS

7:53:00 AM Add Comment
I. Keypad 4x4.
Keypad là một "thiết bị nhập" chứa các nút nhấn cho phép người dùng nhập các chữ số, chữ cái hoặc ký hiệu vào bộ điều khiển. Keypad không chứa tất cả bảng mã ASCII như keyboard và vì thế keypad thường được tìm thấy trong các thiết bị chuyên dụng. Các nút nhấn trên các máy tính điện tử cầm tay là một ví dụ về keypad. Số lượng nút nhấn của một keypad thay đổi phụ thuộc vào yêu cầu ứng dụng. Trong bài này tôi giới thiệu cách điều khiển của một loại keypad đơn giản, keypad 4x4.
Gọi là keypad 4x4 vì keypad này có 16 nút nhấn được bố trí dạng ma trận 4 hàng và 4 cột. Cách bố trí ma trận hàng và cột là cách chung mà các keypad sử dụng. Cũng giống như các ma trận LED, các nút nhấn cùng hàng và cùng cột được nối với nhau, vì thế với keypad 4x4 sẽ có tổng cộng 8 ngõ ra (4 hàng và 4 cột). Mô hình Keypad 4x4 được thể hiện trong hình 1.
keypad 4x4
Hình ở trên là hình mô phỏng trên phần mềm protues mình chụp lại để các bạn hình dung nó như thế nào thôi ! Còn thực chất thì nó được cấu tạo như sau :
keypad 4x4
Có rất nhiều cách khác nhau để làm bài này các bạn thích làm theo cánh bào thì làm. Như trong hình trên thì chúng ta sẽ thấy các chân C1 - C4 sẽ nối với mức 0 từ chân Vi Điều Khiển, và các chân từ R1- R4 sẽ được nối với trở và nối vào mức 1 của Vi Điều khiển ! Và chúng ta sẽ quét theo hàng và cột giống như 1 mảng vậy !
- Đây là ảnh mô phỏng protues.
keypad 4x4 lcd pic16f877a
- Đây là code chương trình.
#include <main.h>
#include <uart.c>
#include <key_4x4.c>
#include <var.h>
#include <lcd_4bit.c>
void main()
{  
   unsigned int8 key;
   key_4x4_init();
   UART_config();
   printf("KEY 4X4 DEMO \n");
   LCD_Init();
   while(TRUE)
   {
      key=get_key_4x4();
      if(key)
      {
         printf("http://xcvn.blogspot.com \n");
         printf("Phim Vua An: %c \n",key);
         LCD_PutCmd(0x82);
         LCD_PutChar("Cover By Lam");         
         LCD_PutCmd(0xC0);
         printf(LCD_PutChar,"Phim Vua An: %c",key);
         while(key)key=get_key_4x4();
      }
      delay_ms(10);
   }
}                
- Link download project Click here

BÀI 38 : GIAO TIẾP VỚI KEYPAD 3x4 PIC16F877A CCS

4:22:00 AM Add Comment
I. Keypad 3x4 (Keypad - Phone).
Keypad là một "thiết bị nhập" chứa các nút nhấn cho phép người dùng nhập các chữ số, chữ cái hoặc ký hiệu vào bộ điều khiển. Keypad không chứa tất cả bảng mã ASCII như keyboard và vì thế keypad thường được tìm thấy trong các thiết bị chuyên dụng. Các nút nhấn trên các máy tính điện tử cầm tay là một ví dụ về keypad. Số lượng nút nhấn của một keypad thay đổi phụ thuộc vào yêu cầu ứng dụng. Trong bài này tôi giới thiệu cách điều khiển của một loại keypad đơn giản, keypad 3x4.
Gọi là keypad 3x4 vì keypad này có 12 nút nhấn được bố trí dạng ma trận 4 hàng và 3 cột. Cách bố trí ma trận hàng và cột là cách chung mà các keypad sử dụng. Cũng giống như các ma trận LED, các nút nhấn cùng hàng và cùng cột được nối với nhau, vì thế với keypad 3x4 sẽ có tổng cộng 8 ngõ ra (4 hàng và 3 cột). Mô hình Keypad 3x4 được thể hiện trong hình 1.
keypad - phone
- Đây là ảnh mô phỏng protues.
keypad - phone pic16f877a
- Đây là code chương trình.
#include <main.h>
#include "lcd.c"
#include <kbd.c> 
#include <var.h>
void main() 
   char k=0;                     // Character k to store keypad input
   delay_ms(1); 
   /* Peripherals Configurations */ 
   LCD_Init();                   // Turn LCD ON, along with other initialization commands
   kbd_init();                   // Initialize Keypad     
   LCD_Gotoxy(1,1);              // point LCD cursor to col1 row1
   LCD_PutChar(" Hello World !!");  // print on LCD 
   LCD_Gotoxy(1,2);              // point LCD cursor to col1 row2

   while(1) // infinite loop 
   { 
      k = kbd_getc();            // read keypad input (if exists) 
      if(k!=0)                   // if key captured 
      { 
         LCD_PutChar(k);            // print captured key to lcd
         k=0;                    // reset k for another loop round
         delay_ms(250);          // delay between key presses
      } 
      delay_ms(1);               // delay_between read trials
   } 
- Link download project Click here