ETE Group http://k44dvt02.net
Project ví d v l p trình PIC16F877A trong CCS
Project1: Hi n th n LCD dùng lcd_lib_4bit.c
#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd_lib_4bit.c> // Thu vien ham cho LCD
void main()
{
trisa = 0xFF;
trisb = 0x01;
trisd = 0x00;
LCD_init();
Printf(LCD_putchar," PICVIETNAM tut");
LCD_putcmd(0xC3);
Printf(LCD_putchar," LCD 4bit ");
}
Khi l p trình đ n LCD 4bit s d ng lcd_lib_4bit.c c n l u ý đ n 2 đi u ế ư ế
Chân n i đã đ c fix s n trongm lcd_lib_4bit.c, khi thay đ i chân cho ph p ượ
v i vi c thi t k m ch coi nh đã thay đ i c v ic ch ng trình mình ng ế ế ư ươ
truóc đó.
Trong ch ng trình s d ng đ n l nh LCD_putcmd( 0xC3) cnh là ch v trí conươ ế
tr cho vi c hi n th đo n text. 0xC3 vi tri thu 4 c a dòng th 2
Project2: Đ c ADC
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=8
#use delay(clock=10000000)
Int8 adc;
Void main()
{
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_ms(10);
while(1)
{
adc=read_adc();
output_B(adc);
}}
Project3: Đi u khi n Đ ng C ng Timer2 ơ
#include <16F877A.h>
ETE Group http://k44dvt02.net
#device PIC16F877A*=16 adc=8
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
// Dinh nhgia chan va port
#define DIR_DC_L PIN_C3 //Dao DC Trai
#define PWM_DC_L PIN_C2 // PWM trai(CCP2)
#define DIR_DC_R PIN_C0 // Dao DC Phai
#define PWM_DC_R PIN_C1 // PWM phai (CCP1)
// set ADC
#define adc 90 //gia tri nguong so sanh
// Khai bao bien cho toan chuong trinh
int8 adc0,adc1,adc2,adc3,adc4,adc5,adc6,adc7;
int8 cambien=0x00;
int line_st=0; // Trang thai vach
//******************chuong trinh khoi tao************************
void khoi_tao()
{
SET_TRIS_A(0xFF); // NHAN TIN HIEU TU SENDOR DO DUONG
SET_TRIS_C(0x00); // Dieu Khien DC
SET_TRIS_D(0x00); // Hien thi tin hieu sensor
SET_TRIS_E(0b111);
Setup_ADC (ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
}
//****************************** Doc cam bien *******************
void doc_cam_bien()
{
set_adc_channel(0);
delay_us (10);
adc0=read_adc();
ETE Group http://k44dvt02.net
if (adc0<=225) bit_clear(cambien,0);
else bit_set(cambien,0);
.....................................
//************************** Dieu khien motor **********************
void dc_trai_tien (int value)
{
output_bit(DIR_DC_L,0);
setup_timer_2(T2_DIV_BY_4,124,1);
setup_ccp2(CCP_PWM);
set_pwm2_duty(value);
}
void dc_trai_lui(int value)
{
output_bit(DIR_DC_L,1);
setup_timer_2(T2_DIV_BY_4,124,1);
setup_ccp2(CCP_PWM);
set_pwm2_duty(value);
}
void dc_trai_dung()
{
setup_ccp2(CCP_OFF);
}
//******* Chuong trinh xu ly toc do 2 dong co************************
void toc_do(signed int toc_do_dc_trai, signed int toc_do_dc_phai)
{
int trai=0,phai=0;
if(toc_do_dc_trai>=0)
{ trai=1.25*(100-toc_do_dc_trai);
dc_trai_tien(trai);
}
ETE Group http://k44dvt02.net
else
{toc_do_dc_trai=-toc_do_dc_trai;
trai=1.25*(100-toc_do_dc_trai);
dc_trai_lui(trai);
}
//************Do duong theo vach den************************
void do_duong()
{
doc_cam_bien();
switch (cambien)
{
case 0b00011000: {toc_do(70,70);line_st=0;} break;
case 0b00000000: {dc_dung();kiem_tra_vach();} break;
default: {toc_do(70,70);}
}
}
void main()
{
khoi_tao();
delay_ms(10);
while(1)
{
doc_cam_bien();
output_d(cambien);
delay_ms(50);
do_duong();
}
}
ETE Group http://k44dvt02.net
Project 4: I/O + Delay _ Delay 1s RB0
Ch ng trình này làm nh p nháy con led chân RB0 1s sáng, 1s t t.ươ
Code:
#include<16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=10000000)
main()
{
while(true)
{
output_high(PIN_B0);
delay_ms(1000);
output_low(PIN_B0);
delay_ms(1000);
}
}
Trên đây:
Code:
#include<16F877A.h>
Khai báo con PIC b n s d ng, file này ch ng trình vi t s n nh m khai báo các bit, thanh ghi ươ ế
quan tr ng trong con pic này.Các b n có th vào th m c cài đ t ư C:\Program
Files\PICC\Devices\16F877A.h đ xem nó khai báo đ c nh ng gì trong đó! ượ
Code:
#fuses NOWDT,PUT,HS,NOPROTECT
Thi t l p các configế
Code:
#use delay(clock=10000000)
Khai báo:
Code:
"#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
-HS :s d ng th ch anh t n s cao
-NOWDT:t t WDT
-NOPROTECT:t t PROTECT
-NOLVP:không dùng LVP
-NOBROWNOUT:ko BROWNOUT
Khai báo t n s dao đ ng c p cho PIC
Code:
output_high(PIN_B0)