单片机通过USB接口与计算机通讯电路图

2024-11-16 08:15:14
推荐回答(4个)
回答1:

如图所示:需要单片机51,温度传感器18B02。USB转RS485的转串口线。直接用serialport控件,设置通讯参数,然后向串口发数据。

比如发1,然后使用事件触发接收单片机的数据,如果两侧通讯没问题,电脑会收到2,然后把它显示出来或者做其他处理。


扩展资料:

控制器由程序计数器、指令寄存器、指令译码器、时序发生器和操作控制器等组成,是发布命令的“决策机构”,即协调和指挥整个微机系统的操作。其主要功能有:

(1) 从内存中取出一条指令,并指出下一条指令在内存中的位置。

(2) 对指令进行译码和测试,并产生相应的操作控制信号,以便于执行规定的动作。

(3) 指挥并控制CPU、内存和输入输出设备之间数据流动的方向。

微处理器内通过内部总线把ALU、计数器、寄存器和控制部分互联,并通过外部总线与外部的存储器、输入输出接口电路联接。

外部总线又称为系统总线,分为数据总线DB、地址总线AB和控制总线CB。通过输入输出接口电路,实现与各种外围设备连接。

参考资料来源:百度百科-单片机

参考资料来源:百度百科-通信电路

回答2:

需要一个单片机51的 就行了     一个温度传感器18B02          电阻诺干   如果需要显示温度则需要数码管     

数码管驱动电路

单片机

温度传感器电路

单片机和电脑USB通讯电路

加上程序

#include

#include

#define uint unsigned int

#define uchar unsigned char

sbit adrd=P3^7;                          //IO口定义

sbit adwr=P3^6;

sbit diola=P2^5;

sbit dula=P2^6;

sbit wela=P2^7;

sbit csda=P3^2;

 

sbit dawr=P3^6;

unsigned char a,b;

sbit DS=P2^2;           //define interface

uint temp;             // variable of temperature

uchar flag1;            // sign of the result positive or negative

//sbit beep=P2^3;

void display1(unsigned char);

uchar code table_18b20[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,    //数码管编码

                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar code table2_18b20[]={0xbf,0x06,0x5b,0x4f,0x66,0x6d,0x7d,    //数码管编码

                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar code table1_18b20[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

                        0x87,0xff,0xef};

 

void delay1(uint count)      //delay

{

  uint i;

  while(count)

  {

    i=200;

    while(i>0)

    i--;

    count--;

  }

}

///////功能:串口初始化,波特率9600,方式1///////

 

void dsreset(void)       //send reset and initialization command

{

  uint i;

  DS=0;

  i=103;

  while(i>0)i--;

  DS=1;

  i=4;

  while(i>0)i--;

}

bit tmpreadbit(void)       //read a bit

{

   uint i;

   bit dat;

   DS=0;i++;          //i++ for delay

   DS=1;i++;i++;

   dat=DS;

   i=8;while(i>0)i--;

   return (dat);

}

uchar tmpread(void)   //read a byte date

{

  uchar i,j,dat;

  dat=0;

  for(i=1;i<=8;i++)

  {

    j=tmpreadbit();

    dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里

  }

  return(dat);

}

void tmpwritebyte(uchar dat)   //write a byte to ds18b20

{

  uint i;

  uchar j;

  bit testb;

  for(j=1;j<=8;j++)

  {

    testb=dat&0x01;

    dat=dat>>1;

    if(testb)     //write 1

    {

      DS=0;

      i++;i++;

      DS=1;

      i=8;while(i>0)i--;

    }

    else

    {

      DS=0;       //write 0

      i=8;while(i>0)i--;

      DS=1;

      i++;i++;

    }

  }

}

void tmpchange(void)  //DS18B20 begin change

{

  dsreset();

  delay1(1);

  tmpwritebyte(0xcc);  // address all drivers on bus

  tmpwritebyte(0x44);  //  initiates a single temperature conversion

}

uint tmp()               //get the temperature

{

  float tt;

  uchar a,b;

  dsreset();

  delay1(1);

  tmpwritebyte(0xcc);

  tmpwritebyte(0xbe);

  a=tmpread();

  b=tmpread();

  temp=b;

  temp<<=8;             //two byte  compose a int variable

  temp=temp|a;

  tt=temp*0.0625;

  temp=tt*10+0.5;

  return temp;

}

 

void display_18b20(uint temp)   //显示程序

   uchar A1,A2,A2t,A3,ser;

   ser=temp/10;

//   SBUF=ser;

   A1=temp/100;

   A2t=temp%100;

   A2=A2t/10;

   A3=A2t%10;

   dula=0;

   P0=table_18b20[A1];  //显示百位

   dula=1;

   dula=0;

   wela=0;

   P0=0x7e;

   wela=1;

   wela=0;

   delay1(1);

   dula=0;

   P0=table1_18b20[A2];  //显示十位

   dula=1;

   dula=0;

   wela=0;

   P0=0x7d;

   wela=1;

   wela=0;

   delay1(1);

   P0=table_18b20[A3];  //显示个位

   dula=1;

   dula=0;

   P0=0x7b;

   wela=1;

   wela=0;

   delay1(1);

}

 

void ds18b20()

 extern uchar message;

 P1=0xff;

 while(message!=27)

 {

  uchar a,c;

   for(c=0;c<20;c++)

   {

     tmpchange();

    // delay(200);

    for(a=10;a>0;a--)

      {   display_18b20(tmp());

      }

   }

  } 

 P1=0xff;

    P0=0xff;

  wela=1;

 wela=0;

           

}

 

 

 

回答3:

最省事的你去购一个USB转TTL电平串品的转换头,这样你的单片机就用它的串口就可这转换头就可和上位机通讯了。

回答4:

可以提供

电路图