Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
:
|
Trích:
Nguyên văn bởi levuphuong
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.
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
|