怎样通过上位机读取DS18B20温度传感器传过来的温度值

我目前仅具备以下三个条件:
1、一个DS18B20温度传感器(四线,485传输方式)
2、一个USB转485的转换器
3、一台联网的笔记本

我已经达到的效果:
将三者相连,并且使用串口调试助手进行调试,给温度传感器发送获取温度的报文,已经能够获取到包含温度值的报文:例如,发送00 03 00 00 00 02 C5 DA
返回报文00 03 04 01 08 01 81 AB 3D ,返回报文中的01 08 这两个字节对应的十进制就是264,所以温度值是26.4°C

我期望达到的目标:
怎样不使用这个串口调试助手,而是直接通过上位机中的一个程序直观的发送请求并获取到这个温度值?

2个回答

看你用什么,如果是vc++的话,可以用CSerialPort类,如果是vb,可以用mscom控件。

qq_28709507
qq_28709507 回复czkct: 楼主你温度传感器和上位机之间是直接通信吗,还是需要个单片机这种下位机
接近 2 年之前 回复
czkct
寻找小海螺 啊~忽然感觉明白了,多谢!~
2 年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复czkct: java用RXTXcomm 看这个 http://blog.csdn.net/kabini/article/details/1601324
2 年多之前 回复
czkct
寻找小海螺 Java有没有对应的相关类呢?
2 年多之前 回复

用c#最方便啦,直接调用串口类

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
新手求教ds18b20如何正确显示正负温度值

unsigned char gett(void) { Init_DS18B20(); //将DS18B20初始化 WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 for(time_DS18B20=0;time_DS18B20<100;time_DS18B20++); //温度转换需要一点时间 Init_DS18B20(); //将DS18B20初始化 WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位 temp_l=ReadOneChar(); //低位在前 temp_h=ReadOneChar(); //高位在后 flag1=temp_h&0xf8; if(flag1) { n=flag1; temp_h=~temp_h; if(temp_l==0)temp_h++; //若低8位全为0且温度为负,取补时就要向高位进1 temp_l=~temp_l+1; } temnum=(temp_h*256+temp_l)/16; return temnum; //返回温度值 } 上面是我的程序,但是temnum无法读出为负时的值,如何修改才能让返回的温度值temnum具有正负性

关于cc2530平台contiki编写ds18b20温度传感器的问题

各位大大,小弟需要采用cc2530板子读取ds18b20温度值并将之发送到服务器。其中,cc2530裸机测试ds18b20温度值无问题,能正确读取数值,如下: ![图片说明](https://img-ask.csdn.net/upload/201702/20/1487567146_95466.png) 放到contiki中,出现问题如下: ![图片说明](https://img-ask.csdn.net/upload/201702/20/1487583933_914186.png) ![图片说明](https://img-ask.csdn.net/upload/201702/20/1487583933_521002.png) 以下是部分代码: ``` PROCESS_THREAD(udp_sender_process, ev, data) { static struct uip_ds6_notification n; static struct udp_socket s; PROCESS_BEGIN(); leds_on(LEDS_ALL); set_global_address(); //设置IP地址 uip_ds6_notification_add(&n, route_callback); /* Register UDP socket callback */ udp_socket_register(&s, NULL, receiver); /* Bind UDP socket to local port */ udp_socket_bind(&s, DATA_CLIENT_PORT); /* Connect UDP socket to remote port */ udp_socket_connect(&s, NULL, DATA_SERVER_PORT); while(1) { PROCESS_WAIT_EVENT_UNTIL(ev == event_data_ready); sprintf(databuf,"temp=%s", data); udp_socket_sendto(&s, // socket databuf, 16, //数据指针,实际数据长度 &udp_server_addr, DATA_SERVER_PORT);// 服务器地址,服务器端口 } PROCESS_END(); } /*---------------------------------------------------------------------------*/ PROCESS_THREAD(read_ds18b20_process, ev, data) { static unsigned char ucTemp; static float fTemp; static char strTemp[8]; PROCESS_BEGIN(); event_data_ready = process_alloc_event(); etimer_set(&et_read_ds18b20, CLOCK_SECOND); while(1){ memset(strTemp, 0, ARRAY_SIZE(strTemp)); PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER); #if defined(FLOAT_TEMP) fTemp = floatReadDs18B20(); memcpy(strTemp, &fTemp, sizeof(fTemp)); #else ucTemp = ReadDs18B20(); strTemp[0] = ucTemp/10+48; //取出十位数 strTemp[1] = ucTemp%10+48; //取出个位数 #endif process_post(&udp_sender_process, event_data_ready, &strTemp); etimer_reset(&et_read_ds18b20); } PROCESS_END(); } ``` 上述代码非原创,小弟软件大四生一枚,之前并无类似开发经验,因项目需求得实现上述内容,若问的问题相当小白,也恳请大大们帮忙提供解决思路。

求多DS18B20温度测量系统

利用两个以上DS18B20温度传感器,共用数据线,测量温度,lpc2148,将温度显示在LCD上。

proteus 仿真 ds18b20 温度始终显示27.9 然后我的按钮也失灵,求能教我怎么做

![图片说明](https://img-ask.csdn.net/upload/201805/14/1526269677_709702.png)我尝试了并行三个温度传感器 但是温度一直显示不对,然后试了下只编程一个 也是27.9不知道为什么 然后我自己做的按钮,编程好像也有点问题,求会做的教我,追加悬赏80 /******************************************* 函数名称:DS18B20_Reset 功 能:对DS18B20进行复位初始化操作 参 数:无 返回值 :初始化状态标志:0--失败,1--成功 ********************************************/ uchar DS18B20_Reset(void) { uchar Error=0; P1DIR = 0xff; _DINT(); P1OUT = 0x00; DelayNus(500); P1OUT = 0xff; DelayNus(55); P1DIR = 0x00; _NOP(); if(P1IN == 0x00) { Error = 1; //初始化成功 } else { Error = 0; //初始化失败 } P1DIR = 0xff; //设置为输出,并MCU给出高电平 P1OUT = 0xff; _EINT(); DelayNus(400); return Error; } //总线读取一个数据位 uchar DS18B20_ReadDQ(void) { uchar DQ_S=0; P1OUT = 0x00; //8个DQ 线全部设置为低电平 DelayNus(6); P1OUT = 0xff; DelayNus(8); P1DIR = 0x00; //准备读取 _NOP(); //延时待总线准备好数据 DQ_S = P1IN; //一次性读取8条DQ线的数据状态 DelayNus(45); P1DIR = 0xff; P1OUT = 0xff; //恢复端口电平 DelayNus(10); //延时 return DQ_S; //返回读取的值 } //写数据 void DS18B20_WriteByte(uchar Com) { uchar i; _DINT(); for(i=0;i<8;i++) { P1DIR = 0xff; P1OUT = 0x00; DelayNus(6); if (Com&0x01) { P1OUT = 0xff; } else { P1OUT = 0x00; } Com = Com>>1; DelayNus(50); P1OUT = 0xff; DelayNus(10); } _EINT(); } // 录入两位数据 void DS18B20_Read2Byte(void) { uint i; for(i=0;i<16;i++) { Read_buf_8ch[i]=DS18B20_ReadDQ(); } } //启动温度转换 void DS18B20_Conver(void) { DS18B20_WriteByte(0xcc); DS18B20_WriteByte(0x44); } //读取温度值 void DS18B20_ReadTemp(void) { uchar i; char j,k; uchar Mask; do { i = DS18B20_Reset(); } while(i); DS18B20_Conver(); DelayNus(60000); do { i = DS18B20_Reset(); } while(i); DS18B20_WriteByte(0xcc); DS18B20_WriteByte(0xbe); DS18B20_Read2Byte(); for(j=16;j>0;j--) { Mask=0x01; for(k=0;k<3;k++) { uiData[k] = uiData[k]<<1; if(Read_buf_8ch[j-1]&Mask) uiData[k]++; Mask = Mask<<1; } } } //将十一位二进制数转换成六位整形数据 void Disp_Numb(uint temper) { uchar i; for(i = 0;i < 6;i++) dN[i] = 0; if(temper & BIT0) { dN[0] = 5; dN[1] = 2; dN[2] = 6; } if(temper&BIT1) { dN[1] += 5; dN[2] += 2; dN[3] += 1; } if(temper & BIT2) { dN[2] += 5; dN[3] += 2; if(dN[2] >= 10) { dN[2] -= 10; dN[3] += 1; } } if(temper&BIT3) { dN[3] += 5; } if(temper & BIT4) { dN[4] += 1; } if(temper & BIT5) { dN[4] += 2; } if(temper & BIT6) { dN[4] += 4; } if(temper & BIT7) { dN[4] += 8; if(dN[4] >= 10) { dN[4] -= 10; dN[5] += 1; } } if(temper & BIT8) { dN[4] += 6; dN[5] += 1; if(dN[4] >= 10) { dN[4] -= 10; dN[5] += 1; } } if(temper & BIT9) { dN[4] += 2; dN[5] += 3; if(dN[4] >= 10) { dN[4] -= 10; dN[5] += 1; } } if(temper & BITA) { dN[4] += 4; dN[5] += 6; if(dN[4] >= 10) { dN[4] -= 10; dN[5] += 1; } if(dN[5] >= 10) { dN[5] -= 10; } } } //显示当前温度 void Disp_TEM(void) { char Bai,Shi,Ge; //定义变量 Disp_Numb(Cur_TMP1); Bai=dN[5]; Shi=dN[4]; Ge =dN[3]; Disp_EN(1,6,table1[Bai]); Disp_EN(1,7,table1[Shi]); Disp_EN(1,8,table1[11]); Disp_EN(1,9,table1[Ge]); DelayNus(100); Disp_Numb(Cur_TMP2); Bai=dN[5]; Shi=dN[4]; Ge =dN[3]; Disp_EN(2,6,table1[Bai]); Disp_EN(2,7,table1[Shi]); Disp_EN(2,8,table1[11]); Disp_EN(2,9,table1[Ge]); DelayNus(100); Disp_Numb(Cur_TMP3); Bai=dN[5]; Shi=dN[4]; Ge =dN[3]; Disp_EN(3,8,table1[Bai]); Disp_EN(3,9,table1[Shi]); Disp_EN(3,10,table1[11]); Disp_EN(3,11,table1[Ge]); DelayNus(100); } //按键检测 uchar Keyscan() { uchar temp,key; P2DIR=0x00; temp=P2IN; if (temp==0x01) { DelayNus(10); if (temp==0x01) key=1; } if (temp==0x02) { DelayNus(10); if (temp==0x02) key=2; } if (temp==0x04) { DelayNus(10); if (temp==0x03) key=3; } else { DelayNus(10); } return key; } //主程序 int main(void) { WDTCTL=WDTPW+WDTHOLD; BCSCTL1 &= ~XT2OFF; _EINT();//打开全局中断 TACTL |= TASSEL_2 + ID_3; Ini_Lcd(); while(1) { GDWZ(); DS18B20_ReadTemp(); Cur_TMP1=uiData[0]; Cur_TMP2=uiData[1]; Cur_TMP3=uiData[2]; Disp_TEM(); key_number=Keyscan(); if (key_number==1) { if(Cur_TMP1<=10) { P3DIR = 0x05; P3OUT = BIT0+BIT2; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[10]); } if(Cur_TMP1>10&&Cur_TMP1<20) { P3DIR = 0x01; P3OUT = BIT0; Disp_HZ(4,4,table2[11]); Disp_HZ(4,5,table2[12]); } else { P3DIR = 0x03; P3OUT = BIT0+BIT1; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[9]); } } if(key_number==2) { if(Cur_TMP1<=20) { P3DIR = 0x05; P3OUT = BIT0+BIT2; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[10]); } if(Cur_TMP1>20&&Cur_TMP1<30) { P3DIR = 0x01; P3OUT = BIT0; Disp_HZ(4,4,table2[11]); Disp_HZ(4,5,table2[12]); } else { P3DIR = 0x03; P3OUT = BIT0+BIT1; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[9]); } } if (key_number==3) { if(Cur_TMP1<=30) { P3DIR = 0x05; P3OUT = BIT0+BIT2; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[10]); } if(Cur_TMP1>30&&Cur_TMP1<40) { P3DIR = 0x01; P3OUT = BIT0; Disp_HZ(4,4,table2[11]); Disp_HZ(4,5,table2[12]); } else { P3DIR = 0x03; P3OUT = BIT0+BIT1; Disp_HZ(4,4,table2[8]); Disp_HZ(4,5,table2[9]); } } else { P3DIR = 0x01; P3OUT = BIT0; Disp_HZ(4,4,table2[11]); Disp_HZ(4,5,table2[12]); } Delay_Nms(1000); Clear_LCD(); } }

关于51单片机的,DS18B20

这个代码是书上的代码,我有两个问题 1、51单片机已经从DS18B20上获得了温度数据,为什么不直接拿去显示,需要用串口传递 2、comm(buff);将数组里面的温度数据传递到哪里去了? 附上代码: #include <reg52.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int sbit ds=P2^2; //温度传感器信号线 sbit dula=P2^6; //数码管段选线 sbit wela=P2^7; //数码管位选线 sbit beep=P2^3; //蜂鸣器 uint temp; float f_temp; uint warn_l1=260; uint warn_l2=250; uint warn_h1=300; uint warn_h2=320; sbit led0=P1^0; sbit led1=P1^1; sbit led2=P1^2; sbit led3=P1^3; unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0xbf,0x86, 0xdb,0xcf,0xe6,0xed, 0xfd,0x87,0xff,0xef}; //不带小数点的编码 void delay(uint z)//延时函数 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void dsreset(void) //18B20复位,初始化函数 { uint i; ds=0; i=103; while(i>0)i--; ds=1; i=4; while(i>0)i--; } bit tempreadbit(void) //读1位函数 { uint i; bit dat; ds=0;i++; //i++ 起延时作用 ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return (dat); } uchar tempread(void) //读1个字节 { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit(); dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 } return(dat); } void tempwritebyte(uchar dat) //向18B20写一个字节数据 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) //写 1 { ds=0; i++;i++; ds=1; i=8;while(i>0)i--; } else { ds=0; //写 0 i=8;while(i>0)i--; ds=1; i++;i++; } } } void tempchange(void) //DS18B20 开始获取温度并转换 { dsreset(); delay(1); tempwritebyte(0xcc); // 写跳过读ROM指令 tempwritebyte(0x44); // 写温度转换指令 } uint get_temp() //读取寄存器中存储的温度数据 { uchar a,b; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); //读低8位 b=tempread(); //读高8位 temp=b; temp<<=8; //两个字节组合为1个字 temp=temp|a; f_temp=temp*0.0625; //温度在寄存器中为12位 分辨率位0.0625° temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入 f_temp=f_temp+0.05; return temp; //temp是整型 } ////////////////////显示程序////////////////////////// void display(uchar num,uchar dat) { uchar i; dula=0; P0=table[dat]; dula=1; dula=0; wela=0; i=0XFF; i=i&(~((0X01)<<(num))); P0=i; wela=1; wela=0; delay(1); } void dis_temp(uint t) { uchar i; i=t/100; display(0,i); i=t%100/10; display(1,i+10); i=t%100%10; display(2,i); } ////////////////////////////////////////////// void warn(uint s,uchar led) //蜂鸣器报警声音 ,s控制音调 { uchar i;i=s; dula=0; wela=0; beep=0; P1=~(led); while(i--) { dis_temp(get_temp()); } beep=1; P1=0XFF; i=s; while(i--) { dis_temp(get_temp()); } } void deal(uint t) { uchar i; if((t>warn_l2)&&(t<=warn_l1)) //大于25度小于27度 { warn(40,0x01); } else if(t<=warn_l2) //小于25度 { warn(10,0x03); } else if((t<warn_h2)&&(t>=warn_h1)) //小于32度大于30度 { warn(40,0x04); } else if(t>=warn_h2) //大于32度 { warn(10,0x0c); } else { i=40; while(i--) { dis_temp(get_temp()); } } } void init_com(void) { TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; } void comm(char *parr) { do { SBUF = *parr++; //发送数据 while(!TI); //等待发送完成标志为1 TI =0; //标志清零 }while(*parr); //保持循环直到字符为'\0' } void main() { uchar buff[4],i; dula=0; wela=0; init_com(); while(1) { tempchange(); for(i=10;i>0;i--) { dis_temp(get_temp());} deal(temp); sprintf(buff,"%f",f_temp); for(i=10;i>0;i--) { dis_temp(get_temp());} comm(buff); for(i=10;i>0;i--) { dis_temp(get_temp());} } }

Protues Arduino DS18B20总是显示-127

如题,用Arduino采DS18B20,用Protues仿真时,总是显示-127是为什么呢?实际电路没有错

DS18B20在大棚环境中,温度差值过大

1、使用环境在温室大棚中,阳光强烈的情况下,运用DS18B20实际测的温度值,与实际温度相差在3度左右,最高可达5度。阳光不强烈的情况下,温度与实际温度差值在1度以内。 2、在阳光下的这种差值,是属于正常现象还是?如何能在阳光强烈的温室大棚内,测得比较准确的数值呢?

DS18B20使用STM32单片机出现问题

各位大神请问下,DS18B20使用STM32单片机出现了挂3个传感器 分别是2米 10米 15米 ,2米和10米的传感器正常,15米的传感器没办法显示温度是什么原因呢?? 15米端口换上10米的就正常显示。。。我用的是3.3V供电口,用5V的测试就没问题。是不是线度太长了,造成电压不足?

基于Zigbee技术 DS18B20芯片的程序

基于上述芯片,读取芯片内温度传感器的数值,将外部温度和内部温度显示出来 或者是选一个外接传感器(温度、震动等),将传感器数值通过串口显示在电脑屏幕上

DS18b20对单片机无应答,无法在12864上显示温度

#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit a=P1^0; sbit CS1=P3^4;//片选1,低电平有效,CS1=0开左屏幕,CS1=1关左屏幕 sbit CS2=P3^3;//片选2,低电平有效,CS2=0开右屏幕,CS2=1关右屏幕![图片说明](https://img-ask.csdn.net/upload/202003/27/1585277082_423215.png)![图片说明](https://img-ask.csdn.net/upload/202003/27/1585277095_99069.png) sbit RS=P3^7;//数据,指令选择信号,RS=1为数据操作,RS=0为写指令或读状态(一般为读忙标志) sbit RW=P3^6;//读写选择信号,RW=1为读选通,RW=0为写选通 sbit EN=P3^5;//读写使能信号 sbit DQ = P1^1; // DS18B20传感器的引脚定义 void show(uchar screen,uchar page,uchar column,uchar *p); unsigned char code dang[]= { 0x00,0x40,0x42,0x44,0x58,0x40,0x40,0x7F,0x40,0x40,0x50,0x48,0xC6,0x00,0x00,0x00, 0x00,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00 }; unsigned char code qian[]= { 0x08,0x08,0xE8,0x29,0x2E,0x28,0xE8,0x08,0x08,0xC8,0x0C,0x0B,0xE8,0x08,0x08,0x00, 0x00,0x00,0xFF,0x09,0x49,0x89,0x7F,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00 }; unsigned char code wen[]= { 0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00, 0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00 }; unsigned char code t[]= { 0x06,0x09,0x09,0xE6,0xF8,0x0C,0x04,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00, 0x00,0x00,0x00,0x07,0x1F,0x30,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10,0x00,0x00 }; unsigned char code du[]= { 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00, 0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00 }; unsigned char code t1[][32]={ {0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x18,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x03,0x02,0x12,0x12,0x1F,0x12,0x12,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x84,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0C,0x10,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,0x00,0x00,0x00,0x00}, }; void Delay15us(void) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } void uartinit() { SCON=0x50; //设定串口工作方式 PCON=0x00; //波特率不倍增 TMOD|=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率 EA=1; ES = 1; //允许串口中断 TL1=0xfd; TH1=0xfd; //波特率9600 TR1=1; } //温度------------------------------------------------------------ /*********************************************************/ // 复位DS18B20(初始化) /*********************************************************/ void DS18B20_ReSet(void) { uchar i; a=0; DQ=0; i=240; while(--i); DQ=1; i=30; while(--i); while(~DQ); i=4; while(--i); a=1; } /*********************************************************/ // 向DS18B20写入一个字节 /*********************************************************/ void DS18B20_WriteByte(uchar dat) { uchar j; uchar btmp; for(j=0;j<8;j++) { btmp=0x01; btmp=btmp<<j; btmp=btmp&dat; if(btmp>0) // 写1 { DQ=0; Delay15us(); DQ=1; Delay15us(); Delay15us(); Delay15us(); Delay15us(); } else // 写0 { DQ=0; Delay15us(); Delay15us(); Delay15us(); Delay15us(); DQ=1; Delay15us(); } } } void delay (uchar z) { uchar i,j; for(i=z;i>0;i--) for(j=114;j>0;j--); } /*********************************************************/ // 读取温度值 /*********************************************************/ int DS18B20_ReadTemp(void) { uchar j; int b,temp=0; DS18B20_ReSet(); // 产生复位脉 DS18B20_WriteByte(0xcc); // 忽略ROM指令 DS18B20_WriteByte(0x44); // 启动温度转换指令 DS18B20_ReSet(); // 产生复位脉 DS18B20_WriteByte(0xcc); // 忽略ROM指令 DS18B20_WriteByte(0xbe); // 读取温度指令 for(j=0;j<16;j++) // 读取温度数量 { DQ=0; _nop_(); _nop_(); DQ=1; Delay15us(); b=DQ; Delay15us(); Delay15us(); Delay15us(); b=b<<j; temp=temp|b; } temp=temp*0.0625*10; // 合成温度值并放大10倍 return (temp); // 返回检测到的温度值 } /*********************************************************/ // 温度值的显示 /*********************************************************/ void LcdPrintTemp(int temp) { if(temp<0) { temp=0-temp; // 负数转为正数 } else { show(3,1,0*16,t1[temp/1000+0x30]); // 显示百位show(2,2,2*16,t1[flag/100+0x30]); } show(2,2,0*16,t1[temp%1000/100+0x30]); // 显示十位 show(2,2,1*16,t1[temp%100/10+0x30]); // 显示个位 //show('.'); // 显示小数点 show(2,2,2*16,t1[temp%10+0x30]); // 显示小数后一位小数 } void busy() {P0=0X00; RS=0; RW=1; EN=1; while(P0&0X80);//P0&0X80结果为真则一直执行空操作,也就是说P0&0X80为0则结束循环 EN=0; } void wcmd(uchar cmd) {busy(); //每次写入指令或数据之前都进行忙检测 RS=0; RW=0; P0=cmd; EN=1;_nop_();_nop_();//在EN下降沿写入数据和指令 EN=0; } void wdata(uchar dat) //写命令和写数据只在RS=0或RS=1上不同,其余都相同 {busy(); RS=1; RW=0; P0=dat; EN=1;_nop_();_nop_();//在EN下降沿写入数据和指令 EN=0; } void set_page(uchar page)//设置页,12864LCD共有8页,每页有8行点阵点。 {page=0xb8|page; //首页地址为0XB8 wcmd(page); //page取值范围为0~7,表示第1到8页 } void set_line(uchar line)//设置显示的起始行,共有0——63行,一般从0行开始显示 {line=0xc0|line; //起始行地址0XC0 wcmd(line); //line取值范围为0~63,表示第1到64行 } void set_column(uchar column)//设置显示的列 {//column=column&0x3f; //列的最大值为0X3F,即64 column=0x40|column; //列的首地址为0X40, wcmd(column); //column的取值范围为0~63,共64列 } void set_onoff(uchar onoff)//设置显示开关,onoff取值为0或1 {onoff|=0x3e;//0X3E是关显示,0X3F是开显示 wcmd(onoff);//所以若onoff为0,则表示关显示,onoff为1,则表示开显示 } void select_screen(uchar screen)//选屏,screen取值范围为0,1,2 {switch(screen) {case 0:CS1=0;CS2=0;break; //全屏 case 1:CS1=0;CS2=1;break; //左半屏 case 2:CS1=1;CS2=0;break; //右半屏 default:break; } } void clear_screen(uchar screen)//清屏 {uchar i,j; select_screen(screen);//先选屏 for(i=0;i<8;i++)//控制页数0——7,共8页 {set_page(i);//设置页 set_column(0); //设置列,每页都从第1列开始,共64列 for(j=0;j<64;j++)//控制列数0——63,共64列 wdata(0x00);//写入0,列地址指针会自动加1 } } void init() //LCD初始化 {busy(); //忙检测 select_screen(0);//选屏,全屏 set_onoff(0); //关显示 select_screen(0); //选屏,全屏 set_onoff(1); //开显示 select_screen(0); //选屏,全屏 clear_screen(0); //清屏 set_line(0); //起始行:0 } void show(uchar screen,uchar page,uchar column,uchar *p)//显示一个汉字,一个汉字有32字节数据 {uchar i; //screen表示选择屏幕,page表示页,column表示列,*p表示汉字的数组 select_screen(screen); //选屏 set_page(page); //设置页,写上半页 set_column(column);//设置列 for(i=0;i<16;i++) //控制16列的数据输出 wdata(p[i]); //汉字的上半部分 set_page(page+1); //写下半页 set_column(column); //控制列 for(i=0;i<16;i++) //控制16列的数据输出 wdata(p[i+16]); //汉字的下半部分 } void uart_init() { TMOD = 0x20; TH1 = 0XFd; TL1 = 0XFd; SCON = 0x50; PCON = 0X00; TR1 = 1; EA = 1; ES = 1; } void DelayMs(uint time) { uint i,j; for(i=0;i<time;i++) for(j=0;j<112;j++); } //------------------------------------------------------------------ void main() { int temp; init(); clear_screen(0); uart_init() ; set_line(0); while(1) { show(1,0,2*16,dang); show(1,0,3*16,qian); show(2,0,0*16,wen); show(2,0,1*16,du ); show(2,3,3*16,t); temp=DS18B20_ReadTemp(); LcdPrintTemp(temp); // 显示测量结果 } }![图片说明](https://img-ask.csdn.net/upload/202003/27/1585277112_164513.png)

DS18B20 时序问题,数码管显示的是乱码

我试了好多遍,还是有问题,我猜测是时序问题,请各位前辈指点一下。晶振是11.0592的 ``` #include"reg52.h" #define uint unsigned int #define uchar unsigned char sbit DQ=P3^7; sbit a=P2^1; sbit b=P2^2; sbit c=P2^3; uchar duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f},duan2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; void dy(uint x) { while(x--); } void dy30(void) //误差 -0.703125us { unsigned char a; for(a=11;a>0;a--); } void dy15(void) //误差 -0.894097222222us { unsigned char a; for(a=4;a>0;a--); } void dy45(void) //误差 -0.512152777778us { unsigned char a; for(a=18;a>0;a--); } void dy500(void) //误差 -0.868055555556us { unsigned char a,b; for(b=1;b>0;b--) for(a=227;a>0;a--); } uchar init() { uchar i=0; DQ=0; dy500(); //至少480us DQ=1; while(DQ) //等待拉低总线 15~60us内拉低 { i++; if(i>50000) return 0; } return 1; } void write(uchar dat) //发送一个字节数据 { uchar i; for(i=0;i<8;i++) { dy(1); //写时序时先将总线拉低最少1us,写0时序总线必须保持低电平60~120us然后释放总线(即拉高电平), //写1时序时要在总线产生写时序后15us内把总线拉高,2次写周期之间至少间隔1us DQ=0; dy15(); DQ=dat&0X01; //向最低位看齐 dy45(); //dy80(); DQ=1;//施放总线至少1us dat>>=1; } } uchar read() //读取一个字节数据 数据的传输时从最低位开始的 {//产生读时序时必须将总线拉低至少1us然后释放总线,在读信号开始15us内开始采集数据, //读一位数据至少保持在60us以上,俩次读周期之间至少间隔1us uchar i,a=0X00,b=0; for(i=0;i<8;i++) { DQ=1; dy(2); DQ=0; dy(6); DQ=1; dy(4); a|=DQ; dy30(); //便于检测 b=b>>1|a<<7; } return b; } void changetemp() //转化温度 { init(); dy(100); write(0Xcc); //忽略64位ROM地址,直接向18B20发送温度变换命令,适用于一个从机工作 write(0X44); //启动18B20进行温度转换,结果存入内部9字节的RAM中 } int gettemp() //读取温度 ,作为返回值返回 { char templ,temph; float ft; int temp; init(); dy(100); write(0Xcc); write(0Xbe); //读取命令,温度以2字节补码的形式存放在RAM的第0和第1个字节,负数的补码是原码取反然后加一,读出来后要进行转换 templ=read(); //读取低八位 temph=read(); //读取高八位 temp|=temph; temp=temp<<8|templ; ft=temp*0.0625*100+0.5; //转换为温度数据 temp=ft; //先试着只看整数部分 return temp; } void xs(int temp) //数码管显示温度 { uint i; for(i=0;i<6;i++) { switch(i) { case 0:a=0;b=0;c=0;break; case 1:a=1;b=0;c=0;;break; case 2:a=0;b=1;c=0;P0=duan[temp/1000%10];break; case 3:a=1;b=1;c=0;P0=duan2[temp/100%10];break; case 4:a=0;b=0;c=1;P0=duan[temp/10%10];break; case 5:a=1;b=0;c=1;P0=duan[temp%10];break; //最低位 } dy(100); P0=0X00; } } void main() { while(1) { changetemp(); xs(gettemp()); // xs(1232); } } ```

求助stc89c52+ds1302+ds18B20+12864液晶屏万年历(带三路闹钟)

求助stc89c52+ds1302+ds18B20+12864液晶屏万年历(带三路闹钟) 源 码、原理图 开发板原理图已经发附件图片了

关于FPGA的DS18B20模块的时序问题,感觉一点错都没有啊。。。。

求大神指导一下到底哪里错了,已经调试了三四天了,不管怎么调temp的值都是0.。。 module DS18B20 ( CLK48M, //RST, DQ, temp ); //Port declaration input CLK48M; //input RST; inout DQ; output [11:0] temp; reg [7:0] Cnt; reg clk1MHz; always@(posedge CLK48M) begin if(Cnt==8'd23) begin Cnt<=8'd0; clk1MHz<=~clk1MHz; end else Cnt<=Cnt+8'd1; end parameter IDLE = 11'b000_0000_0001, DO_RESET = 11'b000_0000_0010, CMD_CC = 11'b000_0000_0100, CMD_44 = 11'b000_0000_1000, CMD_BE = 11'b000_0001_0000, WRITE_BYTE = 11'b000_0010_0000, Write_High = 11'b000_0100_0000, Write_Low = 11'b000_1000_0000, WAIT_750ms = 11'b001_0000_0000, READ_BIT = 11'b010_0000_0000, GET_TMP = 11'b100_0000_0000, WAIT_4MS = 11'b100_1000_1000; //------------------------------------------------------------------- reg [10:0] state; reg [31:0] counter; reg DQ; reg [7:0] write_byte;//中间寄存器,保存主机要写的指令字节 reg [3:0] write_byte_cnt; reg [1:0] byte_flag; reg [3:0] read_bit; reg[11:0] temp;//12位温度数据 reg TMP_bit; always@(posedge clk1MHz) begin case(state) IDLE: begin DQ<=1'bz;//空闲状态释放数据总线,由外接上拉电阻将DQ数据线置高 counter<=0; write_byte_cnt<=4'b0000; byte_flag<=2'b00; read_bit<=4'b0; state<=DO_RESET; end DO_RESET://主机拉低数据总线持续至少480us,然后释放总线 begin if(counter<=480) begin DQ<=1'b0;//拉低数据线480us counter<=counter+1'b1; end else if(counter>480 && counter<=780) begin DQ<=1'bz;//释放数据总线60us+240us=300us counter<=counter+1'b1; if(DQ)//检测从机是否发送Presence Pulse(持续60us~240us低电平) begin state<=CMD_CC; counter<=0; end else begin state<=IDLE; end end end CMD_CC: begin write_byte<=8'hCC; state<=WRITE_BYTE; end WRITE_BYTE://写指令字节,由低位向高位依次写入从机 begin case(write_byte_cnt) 4'b0000: begin state<=write_byte[0]?Write_High:Write_Low; write_byte_cnt<=write_byte_cnt+1'b1; end 4'b0001: begin state<=write_byte[1]?Write_High:Write_Low; write_byte_cnt<=write_byte_cnt+1'b1; end 4'b0010: begin state<=write_byte[2]?Write_High:Write_Low; write_byte_cnt<=write_byte_cnt+1'b1; end 4'b0011: begin state<=write_byte[3]?Write_High:Write_Low; write_byte_cnt<=write_byte_cnt+1'b1; end 4'b0100: begin state<=write_byte[4]?Write_High:Write_Low; write_byte_cnt<=write_byte_cnt+1'b1; end 4'b0101: begin state<=write_byte[5]?Write_High:Write_Low; write_byte_cnt<=write_byte_cnt+1'b1; end 4'b0110: begin state<=write_byte[6]?Write_High:Write_Low; write_byte_cnt<=write_byte_cnt+1'b1; end 4'b0111: begin state<=write_byte[7]?Write_High:Write_Low; write_byte_cnt<=write_byte_cnt+1'b1; end 4'b1000://8bit字节写完后在此处进行状态转换 begin write_byte_cnt<=4'b0000; case(byte_flag) 2'b00: begin state<=CMD_44; byte_flag<=2'b01; end 2'b01: begin state<=DO_RESET; byte_flag<=2'b10; end 2'b10: begin state<=CMD_BE; byte_flag<=2'b11; end 2'b11: begin state<=GET_TMP; byte_flag<=2'b00; end endcase end default:write_byte_cnt<=4'b0000; endcase end Write_High://写‘1’时序:主机拉低数据线1~27us,然后释放数据总线30~数千us. begin if(counter<=8)//拉低数据线15us(至少1us) begin DQ<=1'b0; counter<=counter+1'b1; end else if(counter>8 && counter<80)//释放数据总线45us(至少30us) begin DQ<=1'bz; counter<=counter+1'b1; end else begin counter<=0; state<=WRITE_BYTE; end end Write_Low://写‘0’时序:主机拉低数据线30~227us,然后释放数据总线1us~数千us. begin if(counter<=78)//拉低数据线45us(至少30us) begin DQ<=1'b0; counter<=counter+1'b1; end else if(counter>78 && counter<80)//释放数据总线15us(至少1us) begin DQ<=1'bz; counter<=counter+1'b1; end else begin counter<=0; state<=WRITE_BYTE; end end CMD_44: begin write_byte<=8'h44; state<=WRITE_BYTE; end WAIT_750ms: begin if(counter>750000)//实际上只等待几us甚至不等待也可以 begin state<=DO_RESET; counter<=0; end else counter<=counter+1'b1; end CMD_BE: begin write_byte<=8'hBE; state<=WRITE_BYTE; end GET_TMP: begin case(read_bit) 4'h0: begin state<=READ_BIT; read_bit<=read_bit+1'b1; end 4'h1: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[0]<=TMP_bit; end 4'h2: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[1]<=TMP_bit; end 4'h3: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[2]<=TMP_bit; end 4'h4: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[3]<=TMP_bit; end 4'h5: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[4]<=TMP_bit; end 4'h6: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[5]<=TMP_bit; end 4'h7: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[6]<=TMP_bit; end 4'h8: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[7]<=TMP_bit; end 4'h9: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[8]<=TMP_bit; end 4'hA: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[9]<=TMP_bit; end 4'hB: begin state<=READ_BIT; read_bit<=read_bit+1'b1; temp[10]<=TMP_bit; end 4'hC: begin state<=WAIT_4MS; read_bit<=4'h0; temp[11]<=TMP_bit; end default:read_bit<=4'h0; endcase end READ_BIT://读时序:主机拉低数据总线约2~4us,然后释放数据总线2~4us,再读取DQ数据线上的值 begin if(counter>=0 && counter<=3) begin DQ<=1'b0;//主机拉低数据总线约5us counter<=counter+1'b1; end else if(counter>=4 && counter<=7)//最迟必须在29us处释放数据线 begin DQ<=1'bz;//释放数据总线5us counter<=counter+1'b1; end else if(counter==8) begin counter<=counter+1'b1; TMP_bit<=DQ; end else if(counter>=9 && counter<60) //recovery time 50us(at least 25us) begin counter<=counter+1'b1; end else begin state<=GET_TMP; counter<=0; end end WAIT_4MS: begin if(counter>4000) begin state<=IDLE; counter<=0; end else begin counter<=counter+1'b1; end end default:state<=IDLE; endcase end endmodule

怎么将basys2与TMP2温度传感器连接呢?

求助。我在用verilog写iic协议,使能够读出温度传感器的值,但我不清楚TMP2应该怎么接到basys2上。

关于DS18B20测温的程序,知道大概思路但不知道怎么下手去写。

![图片说明](https://img-ask.csdn.net/upload/201902/03/1549158495_876772.png) 就各种了解之后大概知道一些,但是要写代码的话,一点都不知道从哪里开始,救救孩子吧,就比如要第一个发送复位,我不知道怎么写“发送复位的代码呀”学这个就要郁闷到原地爆炸了。希望有好心人能跟我讲一下怎么写,()就一写两行出来跟我讲讲就行

89c51读取的十六进制传感器数据咋转化为十进制

串口接受的单次测量返回数据存到一个数组中,为16进制的 31 32 33 2E 34 35 36 , 其中每个数的最后一位为所需数据,上例数据的实际为123.456 米 SF=uartSbuf[0]%0x10*100000+uartSbuf[1]%0x10*10000+uartSbuf[2]%0x10*1000为啥这种思路读不出来。求大神指点

基于STM32和18B20的温控系统代码和硬件电路

求大神 给一个方案 基于STM32和18B20的温控系统代码和硬件电路 控制一个加热电阻 温度维持在50℃。 急需~!不胜感激~~!

labview上位机与aduino下位机温度传感接受显示

开始用的是VISA串口设置接受的数据与我用串口助手接受的数据不一样。 然后我到网上查了一下看见用人用labview LIFA可以调出adruino专用的控件;但是现在我到VIPM 没找到LIFA,然后说是用LINX 就帮忙看下是不是图中红圈中的控件。 还有那个adruino中老是说有无效库,并且那个程序也跑不通并且串口显示的数据也不对。PS:接线和程序都是按照例程写的 求解答!!!!!!!!!! 温度传感器是用的DS18B20。 ![图片说明](https://img-ask.csdn.net/upload/201912/25/1577260534_750309.jpg) 附adruino程序 int potPin = 0; //定义模拟接口0 连接LM35 温度传感器 void setup() { Serial.begin(9600);//设置波特率 } void loop() { int val;//定义变量 int dat;//定义变量 val=analogRead(0);// 读取传感器的模拟值并赋值给val dat=(125*val)>>8;//温度计算公式 Serial.print("Tep:");//原样输出显示Tep 字符串代表温度 Serial.print(dat);//输出显示dat 的值 Serial.println("C");//原样输出显示C 字符串 delay(500);//延时0.5 秒 }

高分急求改单片机c程序

这是一个基于单片机的恒温水箱控制系统程序,我现在想改成以STC12C5A60S2单片机为控制单元,以DS18B20为温度传感器的智能加温器,不需要A/D转换,直接把DS18B20接STC12C5A60S2的io口即可。且不需要测液位。![图片](https://img-ask.csdn.net/upload/201705/28/1495962078_1040.png)![图片](https://img-ask.csdn.net/upload/201705/28/1495962084_662851.png)![图片](https://img-ask.csdn.net/upload/201705/28/1495962394_276973.png)![图片](https://img-ask.csdn.net/upload/201705/28/1495962400_504073.png)![图片](https://img-ask.csdn.net/upload/201705/28/1495962103_631435.png)![图片](https://img-ask.csdn.net/upload/201705/28/1495962416_149950.png)![图片](https://img-ask.csdn.net/upload/201705/28/1495962438_102996.png)![图片](https://img-ask.csdn.net/upload/201705/28/1495962471_71787.png)

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

你连存活到JDK8中著名的Bug都不知道,我怎么敢给你加薪

CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public ArrayList(Collection&lt;? ...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

6年开发经验女程序员,面试京东Java岗要求薪资28K

写在开头: 上周面试了一位女程序员,上午10::30来我们部门面试,2B哥接待了她.来看看她的简历: 个人简历 个人技能: ● 熟悉spring mvc 、spring、mybatis 等框架 ● 熟悉 redis 、rocketmq、dubbo、zookeeper、netty 、nginx、tomcat、mysql。 ● 阅读过juc 中的线程池、锁的源...

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

SpringBoot系列之Redis缓存使用详细教程

Spring的缓存抽象 Spring从3.1开始定义了一系列抽象接口来统一不同的缓存技术;并支持使用Java Caching(JSR-107)注解简化我们进行缓存开发。Spring Cache 只负责维护抽象层,具体的实现由你的技术选型来决定。将缓存处理和缓存技术解除耦合。 JSR107 Java Caching(JSR-107)定义了5个核心接口,分别是CachingProvider, Cach...

推荐9个能让你看一天的网站

分享的这9个保证另你意外的网站,每个都非常实用!非常干货!毫不客气的说,这些网站最少值10万块钱。 利用好这些网站,会让你各方面的技能都得到成长,不说让你走上人生巅峰,但对比现在的你,在眼界、学识、技能方面都有质的飞跃。 一、AIRPANO 传送门:https://www.airpano.com/360photo_list.php 这是一个可以躺在家里,就能环游世界的神奇网站。 世界那么大,绝大多...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

月薪22K程序员,打卡迟到10次,收到工资短信一脸懵逼

每家公司为了保证公司员工每天的工作时间,一般都会采用上下班打卡的工作制度,这其实是一个很常见的是,本身也没有什么问题的。正所谓无规矩不成方圆,公司肯定是有公司的规矩,虽然每个员工都很不喜欢这些规矩来束缚我们,但是公司也只是为了能更好的管理员工。但是一家公司如果一成不变的使用打卡制度,而不会去变通管理,也真不一定是好事。 打卡制度特别对于销售部门来说,不但会让公司发展不起来,还很容易丢失员工。但如...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

程序员是做全栈工程师好?还是专注一个领域好?

昨天,有位大一的同学私信我,说他要做全栈工程师。 我一听,这不害了孩子么,必须制止啊。 谁知,讲到最后,更确定了他做全栈程序员的梦想。 但凡做全栈工程师的,要么很惨,要么很牛! 但凡很牛的,绝不是一开始就是做全栈的! 全栈工程师听起来好听,但绝没有你想象的那么简单。 今天听我来给你唠,记得帮我点赞哦。 一、全栈工程师的职责 如果你学习编程的目的只是玩玩,那随意,想怎么学怎么学。...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

十个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

文章目录前言正文**1、Kaspersky Cyberthreat real-time map****2、Finding Home****3、Silk – Interactive Generative Art****4、Liquid Particles 3D****5、WINDOWS93****6、Staggering Beauty****7、Ostagram图片生成器网址****8、全历史网址*...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

​能让德国人放弃现金支付​,也没谁了

在新冠疫情中,德国人越来越多地选择在超市,加油站或其他商店付款时使用非接触式付款方式。德国信贷协会Deutschen Kreditwirtschaft (DK) 的一位发言人告诉德国新...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

原来实现钉钉自动签到如此简单,每天准时上下班不是梦

本文主要介绍了如何利用现成软件快速实现钉钉自动签到功能,核心思路非常简单,甚至无任何编程基础的小白也能轻松实现定时自动打卡功能.

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

讲真,这两款idea插件,能治愈你英语不好的病

时不时就有小伙伴问我,“二哥,能推荐一款 IDE 吗?”你看这话问的,现在搞 Java 的不都在用 Intellij IDEA 吗,还用得着推荐(我已经和 Eclipse 分手了)。然后小伙伴又说,“二哥,IDEA 支持中文吗?我英语不太好。”你看这话问的,搞编程的,英语不好是硬伤啊! 不过,随着 IDEA 最新版(版本号是 2020.1)的发布,英语不好的病可以彻底治愈了。为什么这么说呢?因为 ...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

相关热词 c# 局部 截图 页面 c#实现简单的文件管理器 c# where c# 取文件夹路径 c# 对比 当天 c# fir 滤波器 c# 和站 队列 c# txt 去空格 c#移除其他类事件 c# 自动截屏
立即提问