Thông báo

Collapse
No announcement yet.

DB18S20 + Nút bấm

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

  • DB18S20 + Nút bấm

    Ai cho em code mach này với. E muốn khi ấn nút On/ Off thì led hiển thị nhiệt độ. Ấn cái nữa thì tắt. Đồng thời khi ấn On sau đó an Start thì Led van cấp của em báo sáng. Ai làm dc giúp e với.
    Click image for larger version

Name:	Untitled.png
Views:	1
Size:	37.1 KB
ID:	1421413.


    còn đây là code DB18S20.


    #include <REGX51.H>




    #define scan_seg P1
    #define dt_seg P2
    sbit DQ = P3^6; // chan ket noi voi DS1820


    unsigned char data_seg[13] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 ,0x9C,0xC6,0xBF }; // Ma led 7 thanh
    #include <stdio.h>

    void delay_18B20(unsigned int i);
    void Init_18B20(void) ; // khoi tao DS1820
    unsigned char ReadOneChar(void); // doc mot byte trong DS1820
    void WriteOneChar(unsigned char dat); // Ghi byte vao DS1820
    void ReadTemperature(void); // Doc gia tri nhiet do ket qu cuoi cung luu o temp

    unsigned char data_rs232,temp,temp_1,k;

    //*********************// chuong trinh cho DS18B20
    void delay_18B20(unsigned int i)
    {
    while(i--);
    }

    void Init_18B20(void)
    {
    unsigned char x=0;
    DQ = 1;
    delay_18B20(8);
    DQ = 0;
    delay_18B20(80);
    DQ = 1;
    delay_18B20(14);
    x=DQ;
    delay_18B20(10);
    }

    unsigned char ReadOneChar(void)
    {
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8;i>0;i--)
    {
    DQ = 0;
    dat>>=1;
    DQ = 1;
    if(DQ)
    dat |= 0x80;
    delay_18B20(4);
    }
    return(dat);
    }
    void WriteOneChar(unsigned char dat)
    {
    unsigned char i=0;
    for (i=8; i>0; i--)
    {
    DQ = 0;
    DQ = dat&0x01;
    delay_18B20(5);
    DQ = 1;
    dat>>=1;
    }
    }


    void ReadTemperature(void)
    {
    unsigned char a=0;
    unsigned char b=0;

    Init_18B20();
    WriteOneChar(0xCC); // Bo qua ROM
    WriteOneChar(0x44);

    delay_18B20(100); // this message is very important

    Init_18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0xBE); //Doc nhiet do

    delay_18B20(100);

    a=ReadOneChar(); //Read temp low value
    b=ReadOneChar(); //Read temp high value

    tempb*256+a)>>4); //gia tri nhiet do

    }

    void delay_us(unsigned int a)
    {
    unsigned int d;
    for (d=0;d<a;d++);
    }


    void hienthitemp(void)
    {
    ReadTemperature();
    //scan_seg=0x00;
    scan_seg=0x01;
    dt_seg=data_seg[temp/10];
    delay_us(120);
    // scan_seg=0x00;
    scan_seg=0x02;
    dt_seg=data_seg[temp%10];
    delay_us(120);
    //scan_seg=0x00;
    scan_seg=0x04;
    dt_seg=data_seg[10];
    delay_us(120);
    // scan_seg=0x00;
    scan_seg=0x08;
    dt_seg=data_seg[11];
    delay_us(120);

    }


    // chuong trinh chinh
    void main(void)
    {
    while(1)
    {
    hienthitemp();
    }
    }

Về tác giả

Collapse

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

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...
    12-12-2025, 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
Đang tải...
X