Showing posts with label XC8. Show all posts
Showing posts with label XC8. Show all posts

THÔNG BÁO !

6:43:00 AM Add Comment
Xin chào các bạn Blog này bị lỗi quá nhiều và bài viết cũng sơ xài nên mình đã tạo 1 Blog mới và tất cả bài đăng trong Blog này mình sẽ chuyển dần sang Blog mới nên Blog này mình sẽ không đăng bài đăng mới nữa nha ! Mong các bạn thông cảm và ủng hộ Blog mới ! Các bạn có thể xem Blog mới Tại Đây ! Thanks you !


Blog mới sẽ được đầu tư về bài viết kỹ càng hơn ! Blog mới có tên là  Programming PIC ! Các bạn đăng ký làm thành viên và Share Blog để tiếp cạn nhiều người hơn để blog này ngày càng phát triển ! Link  xem Blog mới http://xcvn.blogspot.com/

LED MATRIX 8X32 PIC16F877A XC8 !

11:56:00 PM Add Comment
Chào các bạn trong bài đăng này mình sẽ chia sẽ với các bạn về LED MATRIX 8X32.
- Đây là ảnh mô phỏng protues.


matrix 8x32 pic16f877a

- Đây là code chương trình.

#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 20000000
#include <xc.h>
// BEGIN CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)

#define ds PORTCbits.RC0

#define st PORTCbits.RC1
#define sh PORTCbits.RC2
unsigned char khung_du_lieu[32];
unsigned char socot,sohang,tocdo,maled;
unsigned char g,h,a;

//------------------------------------------------------ du lieu cot luu vao ROM------------------------------------------

const unsigned char codedu_lieu_cot[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0x60,0x30,0x18,0x0C,0xFF,0xFF,///////////////N
0x00,0x00,0x00,
0x7E,0xFF,0xC3,0xC3,0xCB,0xCB,0xEF,0x6E,///////////////G
0x00,0x00,0x00,
0x7E,0xFF,0xC3,0xC3,0xC3,0xC3,0xFF,0x7E,//////////////O
0x00,0x00,0x00,
0x7E,0xFF,0xC3,0xC3,0xC3,0xC3,0xEF,0x6E,//////////////C
0x00,0x00,0x00,
0xff,0xff,0x03,0x03,0x03,0x03,0x03,0x03,///////////////L
0x00,0x00,0x00,
0x1f,0x3f,0x6c,0xcc,0xcc,0x6c,0x3f,0x1f,///////////////A
0x00,0x00,0x00,
0xff,0xff,0x60,0x30,0x30,0x60,0xff,0xff,//////////////M
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void tonghop(void);
void delay_ms(unsigned int ms);
void load(unsigned int u);
void main(void)
{
  TRISD = 0X00;
  TRISC = 0X00;
  PORTD=0xff;
  PORTC=0x00;
  while(1)
   {
     tonghop();
   }
}


void delay_ms(unsigned int ms)

{
  unsigned int i;
  unsigned char j;
  for(i=0;i<ms;i++)
     for(j=0;j<120;j++);
}

void load(unsigned int u)

{
  unsigned char i;
  for(i=0;i<32;i++)
   {
     khung_du_lieu[i]=codedu_lieu_cot[u];
u++;
   }
}

void tonghop(void)

{
    unsigned char i;
    for(socot=0;socot<106;socot++) //73+32=105 la so phan tu du_lieu_cot
 {
   load(socot);
   for(tocdo=0;tocdo<10;tocdo++)
     {
    a=0xfe;
        h=0x80;
    for(sohang=0;sohang<8;sohang++)
  {
    st=0;
    for(i=0;i<32;i++)
  {
    sh=0;
    g=khung_du_lieu[i];
if((g&h)==h) ds=1;
else         ds=0;
sh=1;
  }
st=1;
h=h>>1;
PORTD=a;
delay_ms(1);
PORTD=0xff;
a=(a<<1)+1;
  }
}
   }
}
Download 1 trong 2 link dưới !
- Link download project Click here
- Link download project Click here

Đồng hồ số PIC16F877A with XC8

11:56:00 PM 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àm đồng hồ số hiển thị led LCD 16x02 sử dụng PIC16F877A và trình biên dịch Mplab XC8 đê viết code.

Ảnh mô phỏng protues.


digit clock pic16f877a xc8


- Đây là code file main.c .

#include "Includes.h"

// Configuration word for PIC16F877A
__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_ON & CP_OFF & BOREN_ON
         & LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);

// Main Function
void main(void)
{
InitLCD(); // Initialize LCD in 4bit mode
Init1msecTimerInterrupt(); // Start 1 msec timer

while(1)
{
if( msCounter == 0 )        // msCounter becomes zero after exact one sec
{
// Displays time in HH:MM:SS format
DisplayTimeToLCD(hrCounter, minCounter, secCounter);   
}

UpdateTimeCounters();       // Update sec, min, hours counters
  }
}

- Đây là code file timer.c . 

#include "Includes.h"

// define digital clock variables
unsigned int msCounter = 0;
unsigned int secCounter = 0;
unsigned int minCounter = 0;
unsigned int hrCounter = 0;

void InitTimer0(void)
{
// Timer0 is 8bit timer, select T0CS and PSA to be zero
OPTION_REG &= 0xC1;     // Make Prescalar 1:4

T0IE = 1; // Enable Timer0 interrupt
GIE = 1; // Enable global interrupts
}

void Init1msecTimerInterrupt(void)
{
InitTimer0(); // Intialize timer0 to genrate 1msec interrupts
}

void UpdateTimeCounters(void)
{
if (msCounter==1000)
{
secCounter++;
msCounter=0;
}

if(secCounter==60)
{
minCounter++;
secCounter=0;
}

if(minCounter==60)
{
hrCounter++;
minCounter=0;
}

if(hrCounter==24)
{
hrCounter = 0;
}
}

Link download project.
http://adf.ly/11512871/digit-clock-xc8

Đèn giao thông PIC16F877A with XC8

7:55: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àm mạch đèn giao thông đơn giản sử dụng PIC16F877A.

Ảnh mô phỏng protues.


traffic lights ppic16f877a xc8

Đây là code chương trình.

#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 4000000
#include <xc.h>
// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

void GPIO_init(void);
signed char digit =0 ;
const unsigned char seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void main(void)
{
    GPIO_init();
    ADCON1 = 0x07;
    while(1)
    {
            PORTAbits.RA0 = 1;
            PORTAbits.RA1 = 0;
            PORTAbits.RA2 = 0;
            for(digit=30;digit>=0;digit--) //thay đổi thời gian tại đây
            {
                PORTB = seg[digit/10];
                PORTD = seg[digit%10];
                __delay_ms(1000);
            }
            PORTAbits.RA0 = 0;
            PORTAbits.RA1 = 1;
            PORTAbits.RA2 = 0;
            for(digit=5;digit>=0;digit--) //thay đổi thời gian tại đây
            {
                PORTB = seg[digit/10];
                PORTD = seg[digit%10];
                __delay_ms(1000);
            }
            PORTAbits.RA0 = 0;
            PORTAbits.RA1 = 0;
            PORTAbits.RA2 = 1;
            for(digit=20;digit >= 0;digit--) //thay đổi thời gian tại đây
            {
                PORTB = seg[digit/10];
                PORTD = seg[digit%10];
                __delay_ms(1000);
            }
    }
}

void GPIO_init (void)
{
    TRISA = 0X00;
    PORTA = 0X00;
    TRISB = 0X00;
    PORTB = 0X00;
    TRISC = 0X00;
    PORTC = 0X00;
    TRISD = 0X00;
    PORTD = 0X00;
}

Link download project.

Đếm từ 0 đến 99 sử dụng 2 nút nhấn PIC16F877A with XC8

12:20:00 AM Add Comment
Chào các bạn hôm nay mình sẽ hướng dẫn các bạn lập trình cho PIC16F877A đếm từ 0 đến 99 sử dụng 2 nút nhấn, Sơ đồ như hình bên dưới.

Đếm từ 0 đến 99 sử dụng 2 nút nhấn PIC16F877A with XC8

Đây là code chương trình.

#define _XTAL_FREQ 8000000
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
// CONFIG
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = ON
#pragma config LVP = ON
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF
unsigned short mask(unsigned short num) {
  switch (num) {
    case 0 : return 0xC0;
    case 1 : return 0xF9;
    case 2 : return 0xA4;
    case 3 : return 0xB0;
    case 4 : return 0x99;
    case 5 : return 0x92;
    case 6 : return 0x82;
    case 7 : return 0xF8;
    case 8 : return 0x80;
    case 9 : return 0x90;
  } //case end
}
unsigned short digit_no, digit10, digit1, digit;
void interrupt ISR (void)
{
  if (digit_no==0) {
    RB7=0;
    RB6 = 0;          // Turn off all 7seg displays
    PORTD = digit1;     //  send mask for ones digit to PORTD
    RB7 = 1;          //  turn on 1st 7 seg., turn off 2nd
    digit_no = 1;
  } else {
    RB6=0;
    RB7 = 0;          // Turn off all 7seg displays
    PORTD = digit10;    //  send mask for tens digit to PORTD
    RB6 = 1;          //  turn on 2nd 7 seg., turn off 1st
    digit_no = 0;
    }
  TMR0 = 0;             //  clear TMRO
  INTCON = 0x20;        //  clear TMR0IF and set TMR0IE
}

void display(unsigned short i){
unsigned short digit;
digit=i%10;
digit1=mask(digit);           //hien thi hang don vi
digit=i/10;
digit10=mask(digit);          // hien thi hang chuc
__delay_ms(500);
}

void main() {
interrupt ISR();
unsigned short i;
OPTION_REG  = 0x80;   // Timer0 settings
TMR0        =   0;
INTCON      = 0xA0;   // Disable PEIE,INTE,RBIE,T0IE
TRISB=0x03;
TRISD=0x00;
TRISA=0X00;
PORTB=0;
PORTD=0;
i=0;
display(i);
for(;;){
lap:
if(!RB0){
i=i++;
display(i);
if(i==22)
i=0;
}
if(i>0){
if(!RB1){
i=i--;
display(i);
                     }
      }  goto lap;
     }
}

Link download project.