View Single Post
Old 02-10-2011, 09:55 PM   #2
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi levuphuong View Post
Tình hình mình làm 1 đề tài về ADC lấy điện áp từ 6 kênh nhưng có 1 cái swicth để điều chỉnh nhấn 1 cái thì lấy 3 kenh trên ,nhân thêm 1 cái thì lấy 3 kênh dưới rồi xuất ra 9 con led 7 đoạn.
Code:
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=8 
#use delay(clock=12000000)
#byte portb=0x06
#byte portd=0x08
Int8 ad1,ad2,ad0;
int8 a0,a1,a2,b0,b1,b2,c0,c1,c2 ;
const unsigned char digital[]={0x40,0x79,0x24,0x30,0x19,0x12,0x20,0x78,0x00,0x10} ;

void doc_ADC()
{
   set_ADC_channel(0);
   ad0=read_ADC();
   delay_us(10) ;
  

   set_ADC_channel(1);  
   ad1=read_ADC();
   delay_us(10) ;
   
   set_adc_channel(2);   
   ad2=read_ADC() ;
   delay_us(10) ;
  
}

void main()
{
set_tris_d(0) ;
set_tris_b(0);
setup_ADC(ADC_clock_internal);
setup_adc_ports(ALL_ANALOG);


while(true)
{
doc_ADC() ;

 ////hien chu so hang tram
 delay_ms(10) ;
portb=0x21 ;
c0=ad0/100 ;
portd=digital[c0] ;
delay_us(10) ;

portb=0x22 ;
c1=ad1/100 ;
portd=digital[c1] ;
delay_us(10) ;

portb=0x24 ;
c2=ad2/100 ;
portd=digital[c2];

delay_ms(10) ;

///chu hang chuc
portb=0x11;
b0=ad0/10-10*c0 ;
portd=digital[b0] ;

portb=0x12;
b1=ad1/10-10*c1 ;
portd=digital[b1] ;
delay_us(10) ;

portb=0x14 ;
b2=ad2/10-c2*10 ;
portd=digital[b2] ;

delay_ms(20) ;
////chu hang don vi
portb=0x09 ;
delay_ms(1) ;
a0=ad0%100 ;
portd=digital[a0] ;
delay_us(10) ;

portb=0x0a ;
a1=ad1%100 ;
portd=digital[a1] ;
delay_us(10) ;

portb=0x0c ;
a2=ad2%100 ;
portd=digital[a2];
delay_ms(10) ;

}
}
Mọi người xem giúp xem sơ đồ nguyên lí như vậy ổn chưa.
với lại code mình mới viết cho 3 kênh 1.2.3 thôi mà bị thế nào mà 3 đèn giữa và 3 den cuối hiên số liệu đúng còn 3 đèn đầu hiên ko đúng,và quét led nó chạy không ổn định(lúc sáng lúc chớp )
code sửa lại :
Code:
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device 16F877*=16 ADC=8 
#use delay(clock=12000000)
#byte portb=0x06
#byte portd=0x08
Int8 ad1,ad2,ad0;
int8 a0,a1,a2,b0,b1,b2,c0,c1,c2 ;
const unsigned char digital[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10} ;

void doc_ADC()
{
   set_ADC_channel(0);
   ad0=read_ADC();
   delay_us(10) ;
  

   set_ADC_channel(1);  
   ad1=read_ADC();
   delay_us(10) ;
   
   set_adc_channel(2);   
   ad2=read_ADC() ;
   delay_us(10) ;
  
}

void main()
{
set_tris_d(0) ;
set_tris_b(0);
setup_ADC(ADC_clock_internal);
setup_adc_ports(ALL_ANALOG);


while(true)
{
doc_ADC() ;
 ////hien chu so hang tram
// delay_ms(10) ;
portb=0x01 ;
c0=ad0/100 ;
portd=digital[c0] ;
portb=0x02 ;
c1=ad1/100 ;
portd=digital[c1] ;
portb=0x04 ;
c2=ad2/100 ;
portd=digital[c2];
portb=0x20 ;
delay_ms(2) ;
portb=0x00 ;
///chu hang chuc
portb=0x01;
b0=(ad0%100)/10 ;
portd=digital[b0] ;
portb=0x02;
b1=(ad1%100)/10 ;
portd=digital[b1] ;
portb=0x04 ;
b2=(ad2%100)/10 ;
portd=digital[b2] ;
portb=0x10 ;
delay_ms(2) ;
portb=0x00 ;
////chu hang don vi
portb=0x01 ;
a0=(ad0%10)%10 ;
portd=digital[a0] ;
portb=0x02 ;
a1=(ad1%10)%10 ;
portd=digital[a1] ;
portb=0x04 ;
a2=(ad1%10)%10 ;
portd=digital[a2];
portb=0x08;
delay_ms(2) ;
portb=0x00 ;
}
}
phần cứng có lỗi nhỏ đã sửa lại xem file đính kèm.
File Kèm Theo
File Type: zip sodonguyenli.zip (24.4 KB, 29 lần tải)
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn