Ðề tài: CCS C for PIC16F877A
View Single Post
Old 01-01-2007, 02:07 PM   #11
LEO-XBS
Đệ tử 1 túi
 
LEO-XBS's Avatar
 
Tham gia ngày: Oct 2005
Bài gửi: 21
:
các bác xem thử một chương trình nhé. ở đây em chỉ viết các modul chương trình con thực hiện chức năng của robot còn chương trình chính thì sẽ gọi các chương trình con tùy theo mình muốn dùng chức năng nào của robot.
Code:
//**************************************************************
/////////*FILENAME: CHUONG TRINH DIEU KHIEN ROBOT*//////////////
/////////*HARDWARE: PIC16F877                    *//////////////
/////////*DATE:  19-Nov-06 09:40                 *//////////////
/////////*CCS PCM C Compiler, Version 3.227      *//////////////
/////////*NGUOI THUC HIEN: LEO-XBS               *//////////////
//**************************************************************
#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
//****************************************
//////DINH NGHIA CAC CHAN VA CAC CONG/////
//****************************************
#define dc_trai1 rc1
#define dc_trai2 rb1
#define dc_phai1 rc2
#define dc_phai2 rb3
#define dc_nang1 rb4
#define dc_nang2 rb5
#define dc_day1 rb6
#define dc_day2 rb7
#define dc_kep1 rd0
#define dc_kep2 rd1
#define sw1 rc0
//*******************************************
///////KHAI BAO CAC HAM VA BIEN//////////////
//*******************************************
void setup();
void tien();
void lui();
void dung();
void dk_tien();
void sang_phai();
void sang_trai();
void quay_phai();
void quay_trai();
void dieu_khien();
int led_thu();
void nang();
void ha();
void kep();
void nha();
void day();
void thu();
void program1();
void program2();
int dem,led;
const unsigned char lech_phai[7]={0b00001000,0b00010000,0b00011000,0b00100000,0b00101000,0b00110000,0b00111000};
const unsigned char lech_trai[7]={0b00000001,0b00000010,0b00000011,0b00000100,0b00000101,0b00000110,0b00000111};
const unsigned char nhieu[50]={0b00000000,0b00001001,0b00001010,0b00001011,0b00001100,0b00001101,0b00001110,0b00010001,\
                               0b00010010,0b00010011,0b00010100,0b00010101,0b00010110,0b00011001,0b00011010,\
                               0b00011100,0b00100001,0b00100010,0b00100011,0b00100100,0b00100101,0b00100110,\
                               0b00101001,0b00101010,0b00101100,0b00110001,0b00110010,0b00110100,0b00011110,\
                               0b00111111,0b00111011,0b00111101,0b00111110,0b00111001,0b00111010,0b00111100,\
                               0b00110111,0b00101111,0b00011111,0b00100111,0b00010111,0b00001111,0b00110011,\
                               0b00110101,0b00110110,0b00101011,0b00101101,0b00101110,0b00011011,0b00011101};
//*****************************************************************************************************************
/////////////////////////////////CHUONG TRINH CHINH////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
void main()
{
 setup();
}
//*****************************************************************************************************************
///////////////////////////////////CHUONG TRINH 1//////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
void program1()
{
  while(true)
  {
     dieu_khien();
  }
}
//****************************************************************************************************************
//////////////////////////CAC CHUONG TRINH CON////////////////////////////////////////////////////////////////////
//****************************************************************************************************************
void setup()
{
 set_tris_a(0b00111111);
 set_tris_b(0b00000101);
 set_tris_c(0b11111001);
 set_tris_d(0);
 set_tris_e(0b00000111);
 portb=0;
 portd=0;
 led=0;
 dem=0;
 dc_trai1=0;
 dc_phai1=0;
 while(true){
  if(sw1==0) program1();
  }
}
//***********************************************
void dieu_khien()
{
 led=led_thu();
 switch(led)
 {
  case 0: dk_tien(); break;
  case 01: sang_phai(); break;
  case 02: sang_trai(); break;
 }
 if (re0) ++dem;
}
//*************************************************
void tien()
{
 dc_trai1=1;
 dc_trai2=0;
 dc_phai1=1;
 dc_phai2=0;
 delay_ms(500);
}
//**************************************************
void dk_tien()
{
 while(led_thu()==0)
 {
  dc_trai1=1;
  dc_trai2=0;
  dc_phai1=1;
  dc_phai2=0;
 }
}
//**************************************************
void lui()
{
 dc_trai1=0;
 dc_trai2=1;
 dc_phai1=0;
 dc_phai2=1;
 delay_ms(1000);
}
//**************************************************
void sang_phai()
{
 setup_ccp1(CCP_PWM);
 setup_ccp2(CCP_PWM);
 setup_timer_2(T2_DIV_BY_16, 127, 1);
 while(led_thu()==1)
 {
 set_pwm2_duty(1023);
 set_pwm1_duty(400);
 }
 setup_ccp1(CCP_OFF);
 setup_ccp2(CCP_OFF);
}
//**************************************************
void sang_trai()
{
 setup_ccp1(CCP_PWM);
 setup_ccp2(CCP_PWM);
 setup_timer_2(T2_DIV_BY_16, 127, 1);
 while(led_thu()==2)
 {
 set_pwm2_duty(400);
 set_pwm1_duty(1023);
 }
 setup_ccp1(CCP_OFF);
 setup_ccp2(CCP_OFF);
}
//**************************************************
void quay_phai()
{
 while(ra1>0){
 dc_trai1=1;
 dc_trai2=0;
 dc_phai1=0;
 dc_phai2=1;
 }
}
//**************************************************
void quay_trai()
{
 while(ra4>0){
 dc_trai1=0;
 dc_trai2=1;
 dc_phai1=1;
 dc_phai2=0;
 }
}
//**************************************************
void dung()
{
 dc_trai1=1;
 dc_trai2=1;
 dc_phai1=1;
 dc_phai2=1;
 delay_ms(1000);
}
//**************************************************
void nang()
{
 dc_nang1=1;
 dc_nang2=0;
 delay_ms(1000);
}
//**************************************************
void ha()
{
 dc_nang1=0;
 dc_nang2=1;
 delay_ms(1000);
}
//**************************************************
void day()
{
 dc_day1=1;
 dc_day2=0;
 delay_ms(1000);
}
//*************************************************
void thu()
{
 dc_day1=0;
 dc_day2=1;
 delay_ms(1000);
}
//*************************************************
void kep()
{
 dc_kep1=1;
 dc_kep2=0;
 delay_ms(1000);
}
//*************************************************
void nha()
{
 dc_kep1=0;
 dc_kep2=1;
 delay_ms(1000);
}
//*************************************************
int led_thu()
{
 int i;
 for (i=0;i<7;i++)
 {
     if (porta==lech_trai[i]) return(1);
     else if (porta==lech_phai[i]) return(2);
 }
 for (i=0;i<50;i++)
 {
     if(porta==nhieu[i]) return(0);
 }
}
namqn: bạn nhớ dùng các tag [ code] và [ /code] để bọc các đoạn mã nguồn, như vậy sẽ dễ đọc hơn (nhớ là các tag không có khoảng trắng nhé).
__________________
=============================
________ Leo XBS _________
E-mail:leo_xbs1408@yahoo.com
"Đi một ngày đàng học một sàng khôn"

thay đổi nội dung bởi: namqn, 01-01-2007 lúc 09:40 PM.
LEO-XBS vẫn chưa có mặt trong diễn đàn