Thông báo

Collapse
No announcement yet.

đo nhiệt độ hiển thị LCD

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • đo nhiệt độ hiển thị LCD

    Chào các bạn mình đang lam bài tập về đo nhiệt độ và hiển thị ra LCD, mình đẫ cho hiển thị ra lcd rồi nhưng kết quả ko đúng ,Mong các ban giúp mình đây là phần mềm mình đẫ viết :

    Code:
    ;=========================================================
    title	"Do nhiet do va hien thi ra LCD.asm"
    processor	p16f877a
    include		<P16f877a.inc>
    ;_CONFIG_CP_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC&_LVP_OFF
    
    dem0		equ	0x20
    dem1		equ	0x21
    dem2		equ	0x22
    lenhlcd		equ	0x23
    delay12		equ	0x24
    A           EQU 0X25
    
    org		0x0030
    REGAD1	res		1   ;khai bao bien co ten regad1 nam o
                        ;dia chi 30h va chiem 1 byte
    org		0x0000
    goto	start
    
    start
    org		0x0010
    ;=========================================================
    ;khoi tao PORTB la lenh dieu khien lcd
    ;khoi tao PORTC la data
    ;khoi tao ADC
    ;=========================================================
    BANKSEL TRISB   	;CHON NGAN HANG THANH GHI CO CHUA TRISB VA TRISC
    BANKSEL TRISC   
    CLRF    TRISB   	;PORTB LA XUAT
    CLRF    TRISC   	;PORTC  LA XUAT
    BANKSEL PORTB   	;CHON NGAN HANG THANH GHI CO CHUA PORTB VA PORTC
    BANKSEL PORTC
    ;=========================================================
    ;khoi tao ADC
    ;=========================================================
    movlw	b'00000001'		;ADC ngo vao la Analog
    movwf	ADCON1
    
    ;=========================================================
    ;chuong trinh chinh
    ;=========================================================
    
    call	dkhienlcd
    MAIN    call	delay40ms
    call	donhietdo
    call    hthi
    goto	MAIN
    ;=========================================================
    ;chuong trinh con dieu khien LCD
    ;=========================================================
    dkhienlcd
    movlw	h'01'		;lenh xoa man hinh
    movwf	lenhlcd
    call	madieukhien
    call	delay40ms
    
    movlw	h'02'		;lenh return home tra bo dem AC =0
    movwf	lenhlcd
    call	madieukhien
    call	delay40ms
    
    movlw	h'06'		;lenh entry mode lam con tro dich chuyen
    movwf	lenhlcd
    call	madieukhien
    call	delay40ms
    
    movlw	h'0e'		;lenh hien thi man hinh
    movwf	lenhlcd
    call	madieukhien
    call	delay40ms
    
    movlw	h'34'		;lenh funtion co cac kieu giao tiep 8bit ,hien thi 1 hang va 5x10 diem anh
    movwf	lenhlcd
    call	madieukhien
    call	delay40ms
    
    MOVLW   H'80'       ;chon vung nho DDRAM
    MOVWF   lenhlcd
    CALL    madieukhien
    call    delay40ms
    RETURN
    
    madieukhien
    movf	lenhlcd,0
    movwf	PORTC
    bcf		PORTB,0			;chan RS ,chan RS va R/W =0 thi ghi va thanh ghi lenh IR
    bcf		PORTB,1			;chan RW
    bsf		PORTB,2			;tao ra 1 xung tren chan E
    bcf		PORTB,2
    return
    
    delay40ms
    		movlw	d'50'
    		movwf	dem0
    del2	movlw	H'FF'
    		movwf	dem1
    del1	decfsz	dem1
    		goto	del1
    		decfsz	dem0
    		goto	del2
    return
    
    ;=========================================================
    ;chuong trinh con do nhiet do
    ;=========================================================
    
    DONHIETDO
    		MOVLW	H'01'		;BAT NGUON CHO ADC VA CHON KENH THU 0
    		MOVWF	ADCON0
    DEL3		DECFSZ	DELAY12,F
    		GOTO		DEL3
    		BSF		ADCON0,2	;BAT DAU CHUYEN DOI BANG CACH SET BIT GO/DONE
    GODONE	BTFSC	ADCON0,2	;KIEM TRA GO/DONE=1 THI NHAY TOI NHAN GODONE
    		GOTO		GODONE
            		MOVF		ADRESH,0	;GO/DONE=0 THI LUU KET QUA
    RETURN
    
    hthi
    MOVWF   	REGAD1
    MOVF    	REGAD1,0
    MOVWF   	A
    MOVF    	A,0
    MOVWF	PORTC		;dua ket qua hien thi ra LCD
    BSF		PORTB,0
    BCF		PORTB,1
    BSF		PORTB,2
    BCF		PORTB,2
    RETURN
    
    END
    Last edited by namqn; 08-11-2007, 17:21.

  • #2
    you dang lam hien thi nhiet do a!

    Code:
    #include <16f877A.h>
    #include <def_877a.h>
    #device *=16 ADC=10
    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, LVP, NOCPD, NOWRT
    #use delay(clock=20000000)
    
    #include <lcd_4bit.c>
    
    int8 temp,high,low;
    int8 nghin,tram,chuc,donvi,mode;
    int16 xin[20];
    
    #define INTS_PER_SECOND0  4    // (20000000/(4*256*256))
    #define INTS_PER_SECOND1 19         // (20000000/(4*4*65536))
    byte int_count0,int_count1;
    
    void xuat_nhietdo();
    void temp_2_buff();
    //==================================
    //-----Ngat Ngoai------
    #INT_EXT
    void ngatngoai()
    {
       mode++;
       if (mode== 5) mode = 0;
    }
    //============Ngat Timer 0 1=============
    #int_rtcc                          // This function is called every time
    void clock0_isr() {                 // the RTCC (timer0) overflows (255->0).
                                       // For this program this is apx 76 times
        if(--int_count0==0) {           // per second.
          temp_2_buff();
          int_count0=INTS_PER_SECOND0;
        }
    
    }
    
    #INT_TIMER1                        // This function is called every time
    void clock1_isr() {                 // timer 1 overflows (65535->0), which is
                                       // approximately 19 times per second for
        if(--int_count1==0) {           // this program.
          xuat_nhietdo();
          int_count1 = INTS_PER_SECOND1;
        }
    }
    //==================================
    void main() {
    
       TRISC = 0;
       TRISD = 0;
       lcd_init();
       setup_adc_ports(AN0);
       setup_adc(ADC_CLOCK_INTERNAL);
       delay_us(10);
    // Khoi tao cho ngat ngoai
    //   enable_interrupts (INT_EXT);
    //   ext_int_edge(H_TO_L);
    //----------------------------
       lcd_putcmd(0x01);
       lcd_putcmd(0x80);
       printf(lcd_putchar,"DigiThermo 0-100");
       lcd_putchar(0xdf);
       lcd_putchar("C");
    // Khoi tao cho cac bo timer
       set_timer0(0);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); // Tran = 13ms
       enable_interrupts(INT_RTCC);
       setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
       set_timer1(0);
       enable_interrupts(INT_TIMER1);
       enable_interrupts (GLOBAL);
       int_count0=INTS_PER_SECOND0;
       int_count1=INTS_PER_SECOND1;
    while(true)
       {
       }
    }
    //------------------------------------
    void temp_2_buff() {
       xin[19]=xin[18];
       xin[18]=xin[17];
       xin[17]=xin[16];
       xin[16]=xin[15];
       xin[15]=xin[14];
       xin[14]=xin[13];
       xin[13]=xin[12];
       xin[12]=xin[11];
       xin[11]=xin[10];
       xin[10]=xin[9];
       xin[9]=xin[8];
       xin[8]=xin[7];
       xin[7]=xin[6];
       xin[6]=xin[5];
       xin[5]=xin[4];
       xin[4]=xin[3];
       xin[3]=xin[2];
       xin[2]=xin[1];
       xin[1]=xin[0];
       xin[0]=read_adc();
    //-------------------------------------
    }
    int16 cal_temp() {
    return((xin[19]+xin[1]+xin[2]+xin[3]+xin[4]+xin[5]+xin[6]+xin[7]+xin[8]+xin[9]+xin[10]+xin[11]+xin[12]+xin[13]+xin[14])/15);
    }
    //--------------------------------------
    void convert_bcd(int16 x)  {
    int16 temp2;
       temp2 = x;
       nghin = temp2 / 1000 + 48;
       temp2  = temp2 % 1000;
       tram  = temp2 / 100 + 0x30;
       temp2  = temp2 % 100;
       chuc  = temp2 / 10 + 48;
       donvi = temp2 % 10 + 48;
      }
    //===================================
    void xuat_nhietdo() {
    int16 temp1;
    
       temp1 = cal_temp();
       temp1 = temp1*50/1.023;
       convert_bcd(temp1);
       lcd_putcmd(0xC0);
       printf(lcd_putchar, "T=");
       lcd_putchar(nghin);
       lcd_putchar(tram);
       lcd_putchar(".");
       lcd_putchar(chuc);
       //lcd_putchar(donvi);
       lcd_putchar(0xdf);   // Ky tu do
       printf(lcd_putchar,"C");
    }
    chuc vui ve

    Comment


    • #3
      you nen wa http://vntelecom.org/diendan tham khao

      Comment


      • #4
        do nhiet do

        TAn ga!Co can pót len nua kg?

        Comment


        • #5
          cái nguyên lý của cái mạch đo nhiệt độ có rồi, bạn hiển thị được giá trị ra LCD rồi là tốt rồi. Còn cái việc hiển thì không đugns thì bạn phải xem lại chứ bạn post cái code lên đây ai mà biết để kiểm tra được. Bạn dùng cảm biến nào, ADC bao nhiêu bit, các thứ nữa, phải có những cái đó thì mọi người mới giúp được , bạn đưa mỗi cái code thì botay.com. Nói thật, 100 người thì có 99 người ngại đi đọc code của các bạn. Chưa gì đã vào thì nhau post code lên, mỗi thứ nó liên quan đến một phần cứng khác nhau mà.
          Phone: 0978536011

          Comment


          • #6
            mình dùng adc 10bit ,và dùng cảm biến LM35 ,mình chuyển kết quả bit thấp lưu vào một ô nhớ 8bit, nhưng mình chỉ hiển thị được từ 0 --> 9 độ C các bạn giúp mình giải thuật làm sao hiển thị được được 10 độ C trở lên, mong các bạn giúp

            Comment


            • #7
              trùi, mình hiển thị dc từ 0 đến >100 độ nè, nhưng mà sài LED (mình chưa chuyển)

              Code:
              ;Chuong trinh dieu khien do nhiet do
              ;author by: Bui Thinh Minh
              
              ;chuong trinh gom cac phan:
              ;	- tao xung vuong 10KHz tren chan CLOCK_ADC (P2.3)
              ;		+ f = 10KHz -> T = 100us (50 xung nhip clock thi doi trang thai)
              ;		+ timer 0 hoat dong che do 1 (tu nap lai 8 bit)
              ;		+ can 6 xung nhip de tao xung nen sai so la 6 xung nhip
              
              ;	- phat tin hieu ra chan START_CONVERT (P2.0)
              ;	- Delay (100ms) de giu cho Start_convert 
              
              ;	- doi tin hieu vao tren chan EOC (P2.1)
              ;	- Nhan dc tin hieu bao chuyen doi o bien co Flag thi phat tin hieu dc ADC
              ;	- lay du lieu  VALUE_ADC (P1) vao thanh ghi Dem la A
              ;	- Tat co Flag (Flag = 1)
              
              ;	- tach so ra 3 phan la: Tram, Chuc, Donvi
              ;	- chuyen chung thanh gia tri hien thi tren LED 7 doan nho Ham IC_74LS47
              
              ;	- Sau do hien thi lan luot ra 3 LED (quet LED)
              ;	- Dem bo dem se dem nguoc qua trinh quet LED
              ;	- Voi thoi gian hao phi', bo dem nguoc = 0 ung voi thoi gian = 2 giay
              ;	- thi kick xung Start 1 lan
              ;	- Sau do hoat dong binh thuong la kiem tra xem EOC tu ADC bao chua
              ;	- Neu bao thi Ta lai tien hanh cap nhat du lieu hien thi
              
              ;-----------------------------------
              
              ;dat ten cac chan dieu khien
              ;---------------------------
              VALUE_ADC		EQU		P1
              
              START_CONVERT	EQU		P2.0  	;Bit dieu khien ADC
              EOC				EQU		P2.1	;Bit Nhan tin hieu tu ADC
              READ_DATA		EQU		P2.2	;Bit dieu khien ADC
              CLOCK_ADC		EQU		P2.3	;Tao xung cho ADC
              
              FLAG			EQU		R3		;Co kiem Tra
              
              
              LED_DATA_OUT	EQU		P0	 	;thanh ghi chua gia tri hien thi cua LED
              LED_BUFFER		EQU		A		;Bo dem xu ly cho IC_74LS47
              
              
              ;3 Bit dieu khien LED
              LED_DONVI		EQU		P2.4	;Bit dieu khien LED don vi 
              LED_CHUC		EQU		P2.5	;Bit dieu khien LED chuc
              LED_TRAM		EQU		P2.6	;Bit dieu khien LED tram
              
              ;3 thanh ghi chua 3 gia tri nhi phan cua LED1, LED2, LED3
              TRAM			EQU		R2		;thanh ghi chua gia tri cua so hang tram
              CHUC			EQU		R1		;thanh ghi chua gia tri cua so hang chuc
              DONVI			EQU		R0		;thanh ghi chua gia tri cua so hang don vi
              
              ;cac bien dem phu
              TEMP1			EQU		R4		;bien dem phu 1
              TEMP2			EQU		R5		;bien dem phu 2
              
              ;-------------------------------
              ;CODE
              	org		0000h
              	jmp		30h
              
              ;timer interrup
              	org		0Bh
              	clr		TF0				;xoa co tran
              	cpl		CLOCK_ADC		;doi trang thai bit p1.3
              	reti
              ;---------------------------
              main:	
              	org 		30h
              ;khoi tao mot so gia tri ban dau
              	setb	LED_TRAM			;Ban dau thi 3 LED ko sang
              	setb	LED_CHUC
              	setb	LED_DONVI
              
              ;thiet lap cho phan tao xung Clock
              	mov		IE, #10000010B		;che do ngat co timer0
              	mov		TMOD, #00000010B	;timer 0 hoat dong che cho 2 (8 bit)
              	mov		TH0, #-25			;TH0 chua gia tri - 25
              	mov		TL0, #-25
              	setb	TR0					;chay timer 0
              ;----------------------------
              BEGIN:
              
              ;Giao tiep voi ADC
              	setb	START_CONVERT		;Dieu khien ADC chay
              	call	DELAY_20us			;tre 60us de dam bao start cho ADC
              	call	DELAY_20us				
              	call	DELAY_20us
              	Clr		START_CONVERT		;Bit start cua ADC kick bang xung
              
              ;Thiet lap cho Cac bien dem Temp
              	mov		TEMP1, #1AH		;#0B4H	;gia tri cua bien temp la gia tri sao cho cu 2 giay thi no bao
              	mov		TEMP2, #0AH		  	; #0CH	;Start_convert mot lan
              
              ;--------------------------
              KIEMTRA:
              	jb		EOC, GET_FLAG		;Kiem tra xem EOC = 1 thi ta xem R7
              	mov		FLAG, #1h			;Neu EOC = 0 thi cho FLAG = 1
              	jmp 	NEXT				; tiep tuc hien thi	LED
              
              GET_FLAG:							 
              	cjne	FLAG, #1h,  NEXT	;	 FLAG = 0 thi bo qua va tiep tuc hien thi
              	jmp 	READ_ADC			;Neu FLAG = 1 thi doc gia tri tu ADC vao 8051 
              
              ;---------------------------
              READ_ADC:
              	setb	READ_DATA			;Cho ADC phat du lieu
              	call	DELAY_20us			;tre 20us de cho ADC xuat gia tri ra
              	mov 	A, VALUE_ADC		; truyen gia tri tu ADC vao thanh ghi A
              	clr		READ_DATA			;Dung phat du lieu
              
              	mov		FLAG, #0H			;Tat co bao can chuyen doi
              
              ;--------------------------------------
              TACH_SO:						;De cat hang tram, chuc, don vi ra thanh 3 phan rieng
              	mov		B, #10				;cho B = 10 he thap phan	
              	div		AB					;thuong nam trong A, du nam trong B
              	mov		DONVI, B			;gia tri chia dau tien la hang don vi
              
              	mov		B, #10				;cho B = 10
              	div		AB					;chia lan 2
              	mov		CHUC, B				;gia tri hang chuc
              
              	mov		B, #10				;cho B = 10
              	div		AB					;chia lan 3
              	mov		TRAM, B				; Gia tri hang tram (thuong thi gia tri nay = 0 vi nhiet do ko len den muc >100 do C)
              
              ;---------------------------------------------
              CONVERT_BINARY_TO_7SEG:
              	mov		LED_BUFFER, TRAM	;chuyen hang tram
              	call	IC_74LS47
              	mov		TRAM, LED_BUFFER
              
              	mov		LED_BUFFER, CHUC	;chuyen hang chuc
              	call	IC_74LS47
              	mov		CHUC, LED_BUFFER
              
              	mov		LED_BUFFER, DONVI	;chuyen hang don vi
              	call	IC_74LS47
              	mov		DONVI, LED_BUFFER
              
              ;-------------------------------	
              NEXT:	 						;Phan hien thi LED          
              								
              	setb	LED_CHUC			;Hien thi LED hang tram
              	setb	LED_DONVI
              	clr 	LED_TRAM
              	mov  	LED_DATA_OUT, TRAM
              	call 	DELAY_100us			;tre 20us
              	mov		LED_DATA_OUT, #0FFh	;tat LED
              
              	setb	LED_TRAM			;hien thi LED hang Chuc
              	clr 	LED_CHUC
              	mov		LED_DATA_OUT, CHUC
              	call 	DELAY_100us			;tre 20us	
              	mov		LED_DATA_OUT, #0FFh	;tat LED
              
              	setb	LED_CHUC		   	;Hien thi LED hang Don vi
              	clr 	LED_DONVI
              	mov		LED_DATA_OUT, DONVI
              	call 	DELAY_100us			;tre 20us
              	mov		LED_DATA_OUT, #0FFh	;tat LED
              	
              ;------------------------------------
              DEM_TG_2S:						;dem 2 giay de tien hanh lay du lieu tu ADC
              	cjne	TEMP1, #0h, TRU1	;neu <>0 thi tru 1 roi` di tiep
              	mov		TEMP1, #0FFH		; = 0 thi nap lai va tru so hang chuc
              	cjne	TEMP2, #0h, TRU2	;neu <>0 thi tru 1 roi` di tiep
              	jmp 	BEGIN				;Tru het roi` thi nhay ve doc ADC
              
              TRU1:	 						;giam gia tri so dem
              	dec		TEMP1				 
              	jmp 	NEXT1
              TRU2:
              	dec		TEMP2
              	jmp		NEXT1
              
              ;--------------------------------
              NEXT1:	
              	jmp		KIEMTRA
              ;-------------------------
              
              ;FUNCTION 
              ;-----------------------------
              DELAY_20us:		   			;chuong trinh con tre 50us
              	mov		R7, #10			; 10*2 = 20us
              loop2:
              	djnz	R7, loop2
              	ret
              ;---------------------------
              DELAY_100us:
              	mov		R7, #50
              loop3:
              	djnz	R7, loop3
              	ret
              
              ;---------------------------
              IC_74LS47:
              NHAY0:	
              	cjne	LED_BUFFER, #0H, NHAY1		;SO 0
              	mov		LED_BUFFER, #01000000B
              	ret
              NHAY1:
              	cjne	LED_BUFFER, #1H, NHAY2		;SO 1
              	mov		LED_BUFFER, #11111001B
              	ret
              NHAY2:
              	cjne	LED_BUFFER, #2H, NhAY3		;SO 2
              	mov		LED_BUFFER, #00100100B
              	ret
              NHAY3:
              	cjne	LED_BUFFER, #3H, NHAY4		;SO 3
              	mov		LED_BUFFER, #00110000B
              NHAY4:
              	cjne	LED_BUFFER, #4H, NHAY5		; SO 4
              	mov		LED_BUFFER, #00011001B
              NHAY5:
              	cjne	LED_BUFFER, #5H, NHAY6		;SO 5
              	mov		LED_BUFFER, #00010010B
              	ret
              NHAY6:
              	cjne	LED_BUFFER, #6H, NHAY7		;SO 6
              	mov		LED_BUFFER, #00000011B
              	ret
              NHAY7:
              	cjne	LED_BUFFER, #7H, NHAY8		;SO 7
              	mov		LED_BUFFER, #01111000B
              	ret
              NHAY8:
              	cjne	LED_BUFFER, #8H, NHAY9		;SO 8
              	mov		LED_BUFFER, #00000000B
              	ret
              NHAY9:
              	cjne	LED_BUFFER, #9H, KT			;SO 9	   ko can thiet so sanh vi no la truong hop cuoi
              	mov		LED_BUFFER, #00011000B
              KT:
              	ret
              ;---------------------------------------
              
              END

              Comment


              • #8
                các pác chỉ cho mình với! mình đang làm với con lm335 nhưng sao nhiệt độ của nó không có ổn định tới chênh lệch nhau tới 4 độ. các bác có cách gì chỉ cho mình với! mình đang dùng con 16F877a
                Giúp nhau cùng tiến bộ....
                Học học..... vì tất cả......

                Comment


                • #9
                  Nguyên văn bởi thongtr Xem bài viết
                  các pác chỉ cho mình với! mình đang làm với con lm335 nhưng sao nhiệt độ của nó không có ổn định tới chênh lệch nhau tới 4 độ. các bác có cách gì chỉ cho mình với! mình đang dùng con 16F877a
                  Nói như bạn thì có thể là do phần cứng rồi, bạn kiểm tra lại các thông số: Vref của ADC, VCC của LM335, VCC của 16F877A. Ngoài ra có thể do: Dây dẫn dài quá => Bị nhiễu, chuơng trình chưa đúng chỗ nào đó, ... và ...
                  Nỏ biết chữ mần răng ký được??!! Thôi nhé.

                  Comment


                  • #10
                    Nguyên văn bởi thongtr Xem bài viết
                    các pác chỉ cho mình với! mình đang làm với con lm335 nhưng sao nhiệt độ của nó không có ổn định tới chênh lệch nhau tới 4 độ. các bác có cách gì chỉ cho mình với! mình đang dùng con 16F877a

                    1 khả năng nữa là tính sai công thức tính nhiệt độ, cái này phải hết sức cẩn thận, Tầm quan trong hok kém gì Vref đâu.
                    |

                    Comment


                    • #11
                      Nguyên văn bởi thanh_phuong Xem bài viết
                      you dang lam hien thi nhiet do a!

                      Code:
                      #include <16f877A.h>
                      #include <def_877a.h>
                      #device *=16 ADC=10
                      #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, LVP, NOCPD, NOWRT
                      #use delay(clock=20000000)
                      
                      #include <lcd_4bit.c>
                      
                      int8 temp,high,low;
                      int8 nghin,tram,chuc,donvi,mode;
                      int16 xin[20];
                      
                      #define INTS_PER_SECOND0  4    // (20000000/(4*256*256))
                      #define INTS_PER_SECOND1 19         // (20000000/(4*4*65536))
                      byte int_count0,int_count1;
                      
                      void xuat_nhietdo();
                      void temp_2_buff();
                      //==================================
                      //-----Ngat Ngoai------
                      #INT_EXT
                      void ngatngoai()
                      {
                         mode++;
                         if (mode== 5) mode = 0;
                      }
                      //============Ngat Timer 0 1=============
                      #int_rtcc                          // This function is called every time
                      void clock0_isr() {                 // the RTCC (timer0) overflows (255->0).
                                                         // For this program this is apx 76 times
                          if(--int_count0==0) {           // per second.
                            temp_2_buff();
                            int_count0=INTS_PER_SECOND0;
                          }
                      
                      }
                      
                      #INT_TIMER1                        // This function is called every time
                      void clock1_isr() {                 // timer 1 overflows (65535->0), which is
                                                         // approximately 19 times per second for
                          if(--int_count1==0) {           // this program.
                            xuat_nhietdo();
                            int_count1 = INTS_PER_SECOND1;
                          }
                      }
                      //==================================
                      void main() {
                      
                         TRISC = 0;
                         TRISD = 0;
                         lcd_init();
                         setup_adc_ports(AN0);
                         setup_adc(ADC_CLOCK_INTERNAL);
                         delay_us(10);
                      // Khoi tao cho ngat ngoai
                      //   enable_interrupts (INT_EXT);
                      //   ext_int_edge(H_TO_L);
                      //----------------------------
                         lcd_putcmd(0x01);
                         lcd_putcmd(0x80);
                         printf(lcd_putchar,"DigiThermo 0-100");
                         lcd_putchar(0xdf);
                         lcd_putchar("C");
                      // Khoi tao cho cac bo timer
                         set_timer0(0);
                         setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); // Tran = 13ms
                         enable_interrupts(INT_RTCC);
                         setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
                         set_timer1(0);
                         enable_interrupts(INT_TIMER1);
                         enable_interrupts (GLOBAL);
                         int_count0=INTS_PER_SECOND0;
                         int_count1=INTS_PER_SECOND1;
                      while(true)
                         {
                         }
                      }
                      //------------------------------------
                      void temp_2_buff() {
                         xin[19]=xin[18];
                         xin[18]=xin[17];
                         xin[17]=xin[16];
                         xin[16]=xin[15];
                         xin[15]=xin[14];
                         xin[14]=xin[13];
                         xin[13]=xin[12];
                         xin[12]=xin[11];
                         xin[11]=xin[10];
                         xin[10]=xin[9];
                         xin[9]=xin[8];
                         xin[8]=xin[7];
                         xin[7]=xin[6];
                         xin[6]=xin[5];
                         xin[5]=xin[4];
                         xin[4]=xin[3];
                         xin[3]=xin[2];
                         xin[2]=xin[1];
                         xin[1]=xin[0];
                         xin[0]=read_adc();
                      //-------------------------------------
                      }
                      int16 cal_temp() {
                      return((xin[19]+xin[1]+xin[2]+xin[3]+xin[4]+xin[5]+xin[6]+xin[7]+xin[8]+xin[9]+xin[10]+xin[11]+xin[12]+xin[13]+xin[14])/15);
                      }
                      //--------------------------------------
                      void convert_bcd(int16 x)  {
                      int16 temp2;
                         temp2 = x;
                         nghin = temp2 / 1000 + 48;
                         temp2  = temp2 % 1000;
                         tram  = temp2 / 100 + 0x30;
                         temp2  = temp2 % 100;
                         chuc  = temp2 / 10 + 48;
                         donvi = temp2 % 10 + 48;
                        }
                      //===================================
                      void xuat_nhietdo() {
                      int16 temp1;
                      
                         temp1 = cal_temp();
                         temp1 = temp1*50/1.023;
                         convert_bcd(temp1);
                         lcd_putcmd(0xC0);
                         printf(lcd_putchar, "T=");
                         lcd_putchar(nghin);
                         lcd_putchar(tram);
                         lcd_putchar(".");
                         lcd_putchar(chuc);
                         //lcd_putchar(donvi);
                         lcd_putchar(0xdf);   // Ky tu do
                         printf(lcd_putchar,"C");
                      }
                      chuc vui ve
                      cậu có thể cho tớ biết phần cứng của ccaju như thế nào ko?
                      cán ơn nha..!

                      Comment


                      • #12
                        Code và sơ đồ mạch đo nhiệt độ cho PIC6F877A có thể download tại link sau.
                        http://linhnc308.googlepages.com/TUT...INH.120206.pdf
                        http://linhnc308.googlepages.com/myprojects
                        @anh_gioi: Đọc kỹ file PDF đi kèm để hiểu về PIC và lập trình C CCS cho PIC, trong đó có đầy đủ code và sơ đồ mạch.
                        Lần sau chú nào có pót code của anh lên thì pót cho đầy đủ cả sch + code + file hướng dẫn.
                        Chúc năm mới vui vẻ với PIC
                        Ethernet-RS232, PIC Webserver, RFID Reader
                        CallerID, Cảnh báo BTS, ...
                        0988006696
                        linhnc308@gmail.com
                        http://linhnc308.blogspot.com

                        Comment

                        Về tác giả

                        Collapse

                        agnort Tìm hiểu thêm về agnort

                        Bài viết mới nhất

                        Collapse

                        Đang tải...
                        X