Thông báo

Collapse
No announcement yet.

Tại sao mạch đo nhiệt độ chỉ hiển thị giá trị 255

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

  • Tại sao mạch đo nhiệt độ chỉ hiển thị giá trị 255

    Chào các anh em đang làm mạch đo nhiệt độ nhưng khổ một nỗi khi mô phỏng lcd chỉ hiển thị giá trị nhiệt độ 255.cho dù có thay đổi giá trị đầu vào.có ai biết chỉ em với huhu.
    đây là code và hình mô phỏng
    cảm ơn các bác rất nhiều!
    Code:
    #include <AT89X51.H>
    #include <stdio.h>
    #include<string.h>
    
    
    #define RS P2_0
    #define RW P2_1//RW=0 => ghi
    #define EN P2_2//RW=1 => doc
    //RS=0 => code
    //RS=1 => data
    #define lcd_PORT P0
      
    sbit EOC     = P2^4	;
    
    sbit ALE_START 	= P2^3;
    
    sbit OE = P2^5 ;
    
    
    //===========================
    void delay_ms(int n)
    {
    	int k,j;
    	for(k=0;k<n;k++)
    	{
    		for(j=0;j<500;j++);
    	}
    
    
    }
    //==========================
    void delay_5ms(){
    int i,j;
    for(i=0;i<250;i++)
    for(j=0;j<4;j++){}
    }
    //===========================
    void delay_15ms(){
    int i,j;
    for(i=0;i<250;i++)
    for(j=0;j<100;j++){}
    }
    //============================
    void lcd_command(unsigned char c) //CT con ghi du lieu len LCD
    {
     RS=0;
     RW=0;
     lcd_PORT=c;
     EN=1;
     EN=0;
     delay_5ms();
    }
    //==============================
    void lcd_data(unsigned char c) //CT con doc du lieu tu LCD
    {
     RS=1;
     RW=0;
     lcd_PORT=c;
     EN=1;
     EN=0;
     delay_5ms();
    }
    //=============================
    void lcd_gotoxy(int x, int y)
    {
    	if((x<1||x>2)&&(y<1||y>16))
    	
    	if(x == 1)
    		lcd_command(0x7F+y);
    	else
    		lcd_command(0xBF+y);
    }
    //===============================
    void lcd_init()  // Khoi tao LCD
    {
     delay_15ms();
    
    
     lcd_command(0x38);
     lcd_command(0x0C);
    // lcd_command(0x06);
     lcd_command(0x01);  // Xoa man hinh LCD
    }
    //================================
    void lcd_clear()
    {
     lcd_command(0x01);
    }
    //===============================
    void lcd_home()
    {
     lcd_command(0x80);
    }
    //=============================
    void lcd_putsf(unsigned char *s)
    {
     while (*s)
     {
      lcd_data(*s);
     }
    }	    
    //============================
    void HienThi_ADC(unsigned char t)
    {
        unsigned char v;
        if(t<10)
             lcd_data(t+48);
        else if(t<100)
         {
             lcd_data(t/10+48);
         }
         else
         {
            v=t/10;
    	 lcd_data(v/10+48);
    	 lcd_data(t%10+48);
         }
    }
    
    
    void main (void)
    {
          unsigned char gt;	   //gt la bie^n' cho gia tri 8bit ADC
    	  lcd_init();
          lcd_command(0x83);
          lcd_putsf("khanh thoa");
          while(1)	  
          {
    	OE	= 1;
    	ALE_START 	= 1;
    	ALE_START 	= 0;
    	while(!EOC);				
    	OE=0;
    	gt		= P1;
    	ALE_START 	= 1;
    
    	  lcd_command(0x01);
    	  lcd_command(0x83);
    	  lcd_putsf("DO NHIET DO");
    	  lcd_command(0xC0);
    	  lcd_putsf("Nhiet do:");
          HienThi_ADC(gt);
    	  delay_ms(150);
    
          }
    }
    Last edited by thoa; 21-09-2011, 22:20.
    Biển học mênh mông lấy chuyên cần làm bến
    Mây xanh không lối lấy chí cả dựng nên !

  • #2
    bởi vì adc0808 độ phân giải chỉ có 8bit nên chỉ hiển thi dược 2^8 giá trị tương đương 0-255 thôi

    Comment


    • #3
      cảm ơn anh!
      Nhưng tại sao khi em thay đổi giá trị tại cảm biến vd như trong hình giá trị cảm biến lm 35 là 25 độ c mà lcd lại hiển thị là 255 là sao ạ.cho dù là giá trị nào thì lcd cũng chỉ hiển thị giá trị 255.
      Biển học mênh mông lấy chuyên cần làm bến
      Mây xanh không lối lấy chí cả dựng nên !

      Comment


      • #4
        bạn sửa lại code ở phần void main (void) chỗ OE Là được đó ,nhớ sửa lại mạch luôn nghe (out1 của adc0808 nối vào pi.7 ....out8 của adc0808 nối vào pi.0)


        void main (void)
        {
        unsigned char gt; //gt la bie^n' cho gia tri 8bit ADC
        lcd_init();
        lcd_command(0x83);
        lcd_putsf("khanh thoa");
        while(1)
        {
        OE = 1; ================================================== ==============>sửa lại thành 0
        ALE_START = 1;
        ALE_START = 0;
        while(!EOC); //Cho cho chan P1.1 tich cuc khi chuyen doi xong
        OE=0; ================================================== ==============>sửa lại thành 1
        gt = P1;
        ALE_START = 1;

        lcd_command(0x01);
        lcd_command(0x83);
        lcd_putsf("DO NHIET DO");
        lcd_command(0xC0);
        lcd_putsf("Nhiet do:");
        HienThi_ADC(gt);
        delay_ms(150);

        }
        }

        Comment


        • #5
          aaaaaaaaaaaaaaaaaaaaaa
          Last edited by believe4me; 21-09-2011, 15:54.

          Comment


          • #6
            Em cảm ơn anh nhiều!
            Nhưng vẫn còn tồn tại một vấn đề nho nhỏ đó là vẫn có sai số khoảng 5 độ c. anh có thể chỉ cho em cách khắc phục nó không ạ.có phải là chỉ cần điều chỉnh vref là được không ạ!
            tặng a vài ly cà phê hhehe
            Biển học mênh mông lấy chuyên cần làm bến
            Mây xanh không lối lấy chí cả dựng nên !

            Comment


            • #7
              ừ .chỉnh vref =2.56 von là được đó

              Comment


              • #8
                Vâng chiều nay em thử chình và nó chạy ngon rồi cảm ơn anh rất nhiều.may mà có anh ko thì em chít.hì hì nếu anh ở thái nguyên mời anh đi uống cà phê luôn hehe.
                Biển học mênh mông lấy chuyên cần làm bến
                Mây xanh không lối lấy chí cả dựng nên !

                Comment


                • #9
                  cho e hoi..em do nhieu do dung lm 35+adc0804+89c51 hien thi tren 4 led 7 thanh nhung sao no chi hien moi gia tri 255...moi nguoi chi giup em nguyen nhan voi

                  Comment


                  • #10
                    Lỗi của b phần giao tiếp ADC chưa hoạt động , xem lại code hoặc mạch.

                    Comment


                    • #11
                      code lấy giống trên mà chạy sai thì xem lại mạch hoặc ADC hoặc lm35 nhá...255 là full rồi đấy = 11111111 (đủ 8 số chưa?? )
                      nhớ lần sau viết có dấu

                      Comment


                      • #12
                        adc thi minh xem datasheet noi giong rui... 8bit ra hien thi thì mình mô phỏng xuất ra 8 bit nhị phân rùi mà ko hiểu chuyển đổi sang hệ thập phân và xuất led nữa

                        code cua minh viet day

                        code va mo phong.rar ....nho moi nguoi xem giup với....minh sắp phải nộp bài rồi mà vẫn chẳng làm đc..

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X