Thông báo

Collapse
No announcement yet.

Mong các bác giúp em sửa cái code này

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

  • Mong các bác giúp em sửa cái code này

    Em làm đề tài đo nhiệt độ có cái code này dùng keil c dịch nó báo lỗi sửa mãi không được đây là code của em.các bác xem rồi sửa giùm em với
    #include"imt_reg51.h"
    #include"intrins.h"
    #include"delay.h"
    #include"port_init.h"
    #include"lcd.h"



    void main()
    {
    unsigned char value_T;
    port_init();
    LCD_ON_OFF = LCD_ON;
    lcd_init();
    while(1)
    {
    //TEMPERATURE SENSOR
    lcd_gotoxy(0,0);
    lcd_printf("T: C");
    lcd_cmd_wr(0x84);
    lcd_data_wr(0xdf);
    ADC_CH0=0;
    ADC_CH1=0;
    ADC_CH2=0;
    ADC_ALE=0;
    ADC_SOC=0;
    ADC_OE=0;
    value_T=hex_dec(start_conv());
    T=hex_dec(value_T+0x02);
    lcd_cmd_wr(0x82);
    lcd_print(T);

    }







    void port_init(void)
    {
    P0 = 0xFF; // Port0 initialized as input port
    P1 = 0xFF; // Port1 initialized as input port
    P2 = 0xFF; // Port2 initialized as input port
    P3 = 0xFF; // Port3 initialized as input port
    }





    void lcd_init(void)
    {
    uchar i;
    uchar lcd_initseq[4] =
    {
    MODE6, // Interface datalength=8, display lines=2, character font=5*7 dots.
    DISP_ON_CU_OFF, // Display ON and Cursor OFF
    CLR_DISP // Write space code to all DDRAM, set AC to 0 and set for Cursor Increment mode.
    };
    delay_msec(5);
    for(i = 0;i < 4;i++)
    {
    lcd_cmd_wr(lcd_initseq[i]); // LCD command write module
    }
    }

    void lcd_cmd_wr(uchar lcd_cmd)
    {
    wait_lcd(); // wait until lcd is busy
    DATA_BUS = lcd_cmd; // place lcd command value on the data bus
    LCD_RS = LCD_CMD_REG; // Select command register for storing command value
    LCD_RW = LCD_WRITE; // select write operation mode to write comand value into command register
    ADD_BUS = LCD_ADD; // enable lcd to read command value available on data bus and store into command register
    delay_msec(1);
    ADD_BUS = DISABLE; // disable all peripherl device
    }


    void lcd_data_wr(uchar lcd_data)
    {
    wait_lcd(); // wait until lcd is busy
    DATA_BUS = lcd_data; // place data value on data bus which is to be written into lcd.
    LCD_RS = LCD_DATA_REG; // select lcd data register to store data value
    LCD_RW = LCD_WRITE; // select write operation mode for writing data value into lcd data register
    ADD_BUS = LCD_ADD; // enable lcd to read data value available on the data bus
    delay_msec(1);
    ADD_BUS = DISABLE; //disable all peripheral devices
    }


    bit lcd_gotoxy(unsigned char x, unsigned char y)
    {
    unsigned char xy;
    bit flag = 0;
    y = (y == 0)?(0x80)y == 1)?(0XC0)0X00)); // Assign LCD column Address to y coordinate
    x = ((x >= 0)||(x <= 15))?x:0x00; // Assign LCD Row Address to X coordinate
    xy = x + y; // XY coordinate Address
    if(xy)
    {
    lcd_cmd_wr(xy); // If Valid Address Move cursor to LCD xy coordinate
    flag = 1;
    }
    return(flag);
    }



    void wait_lcd()
    {
    LCD_BF = 1; // set D7 data line as input line to read busy flag
    DATA_BUS = INPUT_PORT;
    LCD_RS = LCD_CMD_REG; //select lcd command register to read busy flag
    LCD_RW = LCD_READ; // select read operation to read busy flag from lcd
    ADD_BUS = LCD_ADD; // enable lcd to read busy flag
    delay_msec(1);
    while(LCD_BF) // check continuously until lcd is busy
    {
    }
    ADD_BUS = DISABLE; // disble all peripheral device including lcd.
    }




    unsigned char start_conv()
    {
    unsigned char C;
    P0=0xff;
    P2=0xff;
    ADC_ALE=1; //ADC_ALE//
    delay_msec(1);
    ADC_SOC=1; //ADC_SOC//
    delay_msec(1);
    ADC_ALE=0; //ADC_ALE//
    delay_msec(1);
    ADC_SOC=0; //ADC_SOC
    delay_msec(1);
    while(ADC_EOC==0);
    ADC_OE=1; //ADC_OE
    P0=0x22;
    C=P2;
    delay_msec(1);
    ADC_OE=0;
    P0=0xff; //ADC_OE

    return(C);
    }


    unsigned char hex_dec(unsigned char D)
    {
    unsigned char LB,HB,temp,count,AX;
    temp=D;
    temp=_crol_((0xf0&temp),4);
    for(HB=0x00,count=0x00;count<temp;count++)
    {
    HB=HB+0x16;
    AX=AC;
    if(AX==1)
    {
    HB=HB+0X06;
    }
    if((HB&0X0F)>0X09&&(HB&0XF0)>0X90)
    {
    HB=HB+0X66;
    }
    else if((HB&0X0F)>0X09)
    {
    HB=HB+0X06;

    }
    else if((HB&0XF0)>0X90)
    {
    HB=HB+0X60;
    }
    else
    {
    HB=HB;
    }
    }
    LB=D&0x0F;
    HB=HB+LB;
    cảm ơn các bác
    AX=AC;
    if(AX==1)
    {
    HB=HB+0X06;
    }
    if((HB&0X0F)>0X09&&(HB&0XF0)>0X90)
    {
    HB=HB+0X66;
    }
    else if((HB&0X0F)>0X09)
    {
    HB=HB+0X06;
    }
    else if((HB&0XF0)>0X90)
    {
    HB=HB+0X60;
    }
    else
    {
    HB=HB;
    }
    return(HB);
    }

  • #2
    tui có thấy Keil C báo lỗi j đâu , lỗi j thì u copy , up lên đây thì mới biết mà chữa đc chứ

    Comment


    • #3
      Cái biến T trong hàm main chưa khai báo kìa.
      , , ,

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      • Andrea14
        Vấn đề về tốc độ quay
        bởi Andrea14
        Chào mọi người,

        Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
        hôm nay, 12:42
      • bqviet
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi bqviet
        Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
        06-12-2025, 17:17
      • nguyendinhvan
        Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
        bởi nguyendinhvan
        Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
        05-12-2025, 19:59
      • afrendly
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi afrendly
        Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
        04-12-2025, 01:27
      Đang tải...
      X