单片机与PC的通信的问题

\u5355\u7247\u673a\u4e0ePC\u673a\u7684\u901a\u8baf\u95ee\u9898

\u5355\u7247\u673a\u901a\u8fc7RS232\u4e32\u53e3\u6216USB\u8f6cTTL\u4e32\u53e3\u548c\u4e0a\u4f4d\u673a\u901a\u4fe1
\u5355\u7247\u673a\u53ea\u7ba1\u7b80\u5355\u53d1\u9001\u5373\u53ef\uff0c\u4e0a\u4f4d\u673a\u8981\u5bf9\u6570\u636e\u8fdb\u884c\u7b80\u5355\u5904\u7406\uff0c\u7528VB\u7f16\u7a0b\u6bd4\u8f83\u7b80\u5355\uff0c\u5229\u7528\u5b83\u7684\u4e32\u53e3\u901a\u4fe1\u63a7\u4ef6\uff0c\u6211\u6574\u8fc7\u3002\u754c\u9762\u5982\u56fe\uff0c

\u7ecf\u8fc7\u5904\u7406\u4fdd\u5b58\u5230\u6587\u672c\u6587\u4ef6\u4e2d\uff0c\u683c\u5f0f\u5982\u4e0b
2015-04-21 20:30:47 \u6536\u5230 4 \u4e2a\u6570\u636e
1\u7535\u538b 181.500 v 2\u7535\u538b 181.500 v
3\u7535\u538b 181.500 v 4\u7535\u538b 181.500 v
\u5f53\u7136\u4e5f\u53ef\u4ee5\u4fdd\u5b58\u5230EXCEL\u8868\u683c\u4e2d\uff0c\u8fd8\u53ef\u4ee5\u663e\u793a\u66f2\u7ebf
\u4f46\u6700\u4e3b\u8981\u662f\u5148\u5b66\u4f1a\u8bbe\u7f6e\u4e32\u53e3\u5e76\u63a5\u6536\u6570\u636e

\u90fd\u53ef\u4ee5\uff0c\u4e24\u79cd\u65b9\u5f0f\u6211\u90fd\u7528\u8fc7\uff0c\u4f60\u9009\u7b2c\u4e8c\u4e2a\u65b9\u6848\u597d\u4e86\uff0c\u534f\u8bae\u7b80\u5355\u3002\u5982\u679c\u7b2c\u4e00\u4e2a\u65b9\u6848\u5c31\u591a\u4e86\u4e00\u4e2a\u73af\u8282\uff0c\u534f\u8bae\u8981\u505a\u4e24\u4e2a\u5f88\u9ebb\u70e6\uff0c\u6bcf\u4e2a\u534f\u8bae\u90fd\u8981\u505a\u6821\u9a8c\u548c\u8d85\u65f6\u91cd\u53d1\uff0c\u6210\u672c\u4e5f\u4e0d\u5408\u7b97\u3002

我有一个DHT11的程序,自己参考下吧。

///////////////////////////////////数码管显示的DHT11湿温度示例程序//////////////////////////////20101031 参考沈老师的资料//////////////////////////////////////
//#include"stc12c5406ad.h"
#include"reg51.h"
#include"intrins.h"

#define uint unsigned int
#define uchar unsigned char

//数码管是LG5641BH。左边2个温度,右边2个湿度

uchar duan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit LED1=P1^0; // 控制第一盏LED 从上 第四个数码管
sbit LED2=P1^1; // 控制第二盏LED 往下 第三个数码管
sbit LED3=P1^2; // 控制第三盏LED 数 第一个数码管
sbit LED4=P1^3; // 控制第四盏LED 第二个数码管

sbit pw=P1^0; // DHT11数据线端口

uchar rh_h,rh_l,temp_h,temp_l,check_data,dat=0;
uchar r_rh_h,r_rh_l,r_temp_h,r_temp_l,r_check_data;
uchar check;

//
uchar c[6],d[1];

////////////////////////// /100u秒延时函数/////////////////////////////////////
void delay(uint xs)
{
uint i,j;
for(i=xs;i>0;i--)
for(j=110;j>0;j--);
}

////////////////////////延时10us的i为11/////////////////////////////// /////////
void delay10us(uchar i)
{
while(i--);
}

/////////////////////////////// //数码管显示函数////////////////////////////////////////////////
void display(uchar shidu,uchar wendu)

{
uchar i=280; //这个I延时不能少,100S,300s都导致DHT11死机了,就是进入死循环了
while(i--) //这个与DHT11的采集和转换周期有关系,要有一定的延时来保证一个采样
{ //周期地完成,以便顺利进行下一次的采样和输出。
//bai=shu/100;
//shi=shu%100/10;
//ge=shu%10;

LED3=0; //点亮最左一盏
LED4=1;
LED2=1;
LED1=1;
P1=duan[wendu/10];
delay(50);
LED3=1;

LED4=0; //点亮第二盏
LED2=1;
LED3=1;
LED1=1;
P1=duan[wendu%10];
delay(50);
LED4=1;

LED2=0; //点亮第三盏
LED4=1;
LED3=1;
LED1=1;
P1=duan[shidu/10];
delay(50);
LED2=1;

LED1=0; //点亮第四盏
LED4=1;
LED3=1;
LED2=1;
P1=duan[shidu%10];
delay(50);
LED1=1;
}
}

/////////////////////////DHT11核心程序///////////////////////////////////////
void dht11_com(void) //此函数是读数正确性与否的的决定性因素
// 主要问题是调整好此处的延时时间
{
uchar j;

bit wei;
// TH0=0x00; // 定时器清零
// TL0=0x00;

for(j=0;j<8;j++)
{
// flag=2; //延时
//并等待
// while((!pw)&&flag++); //低电平结束

// while(pw);

delay10us(11);
delay10us(11);

// delay10us(11);
// delay10us(11);
// delay10us(11);
// delay10us(11);
// delay10us(11);
// delay10us(11);

while(!pw);

if(pw)
{
delay10us(11); // 高电平持续时间
delay10us(11); // 为26us-28us的是0
delay10us(11);
delay10us(11);
// delay10us(2);
// delay10us(2);

wei=0; //
// 延时约50us如果还是高电平则被认为是1否则为0
if(pw) wei=1; //
// 高电平持续时间
// 为70us的是1

// flag=2;

// while(pw&&flag++);

dat<<=1;
dat|=wei; //DHT11数据是高位先出,这里将八位组成一个字节

}
}

}

/////////////////////////////////////////////////////////////////////////////////////////////////////
// if(pw) //如果是高电平,开启定时器0
// {
// TR0=1; //计算一个正脉冲的宽度
// }
// while(pw);
// TR0=0;

// a=TL0;
////////////////////////////////////////////////////////////////////////////////////////////////////////
// if(a>28)

// wei=1;

// else

// wei=0;
////////////////////////////////////////////////////////////////////////////////////////////////////////

/*
uint getbyte1(void)

{
uint i,j,dat;
dat=0;
for(i=0;i<8;i++)
{
///////// j=getbit();////////////////////////////////////////////////////////////////////////
dat=(dat<<1)|j;
}
return dat;
}

*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////

/*

void init(void) //定时器和传感器初始化

{
uint i;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
uchar flag;

// TMOD=0x09;
// EX0=0;

*/
///////////////////////////////////////////数据采集函数/////////////////////////////////////////////////////////
void shujushenchen(void)

{

pw=0; //主机上拉电阻拉低
delay(20); //开始信号 延时二十MS

pw=1; //主机拉高
// for(i=0;i<30;i++); //等待响应 延时30US
// delay10us(11);
delay10us(11);
delay10us(11);

pw=1; //设为输入模式

while(pw); //等待响应低电平

if(!pw) //如果从机DHT11发出响应信号
{
// flag=2;
// while((!pw)&&flag++); //等待从机响应信号延时约80US

delay10us(11);
delay10us(11);
delay10us(11);
delay10us(11);
// delay10us(11);
// delay10us(11);

while(!pw);

if(pw) //如果从机响应结束
{
// flag=2;

// while(pw&&flag++); //等待从机结束高电平状态

delay10us(11);
delay10us(11);
delay10us(11);
delay10us(11);
// delay10us(11);
// delay10us(11); //此过程约80us

while(pw);

// 此后开始接受数据
dht11_com(); //接受第一个字节即湿度的整数八位
// rh_h=dat;
c[0]=dat;

dht11_com(); // 以下的以此类推
// rh_l=dat;
c[1]=dat;

dht11_com();
// temp_h=dat;
c[2]=dat;

dht11_com();
// temp_l=dat;
c[3]=dat;

dht11_com();
// check_data=dat;
c[4]=dat;

pw=1; // 接受完最后一个字节后由主机拉高,以便下一次采集数据

//数据验证
// check=(rh_h+rh_l+temp_h+temp_l);

c[5]=(c[0]+c[1]+c[2]+c[3]);

//前四个字节之和是否等于最后一个字节如等,则说明数据传送正确
if(/*(check==check_data)*/d[0]==c[4]) //如果数据传送正确

{
r_rh_h=1;

r_rh_l=rh_l;

r_temp_h=temp_h;

r_temp_l=temp_l;

}

}

}

}

///////////////////////////////////////主函数/////////////////////////////////////////////////////////////
void main(void)
{
// uchar i;
delay(2000); //等待1秒钟越过不稳定状态

while(1)

{

shujushenchen(); //采集数据 c

// 生成数据
//送到数码管显示
// for(i=0;i<6;i++)
// {
display(c[0],c[2]); //湿度
// display(c[2]); //温度
delay(50);
// }

}
}

你用的是dht11温湿度传感器吧!这个我做过,串口发送的数据是直接采集过来的二进制代码,发送前,先转换成字符在发送,就可以在串口调试助手或者上位机上看到,直接显示的温度,和湿度值了,
还有一点这个传感器,精度达不到小数点后两位

你所说的计算机端的程序指的是上位机显示吧,这个你倒是可以看看VB,编写起来相对统一。对于你那温度显示的问题,你可以仔细看看你对应的温度转换程序代码,问题出在这儿的可能性比较大!

1.单片机与电脑之间用RS232协议通信,通信线路即串口线上传输的信号是数字例如STC的单片机。其指令系统同C51。 3.单片机与电脑之间存在电平不同问题,,

  • PC涓庡崟鐗囨満閫氫俊鐨勯棶棰
    绛旓細1.鍦╬c绔皢涓插彛鐨勬敹鍙戠煭璺紝鍗冲疄鐜拌嚜鍙戣嚜鏀讹紝鐪嬩竴涓嬫暟鎹湁鏃犻棶棰橈紝杩欐牱鍙互纭畾浣犵殑鐢佃剳涓插彛鏄惁鏈夋棤闂锛2.鍗曠敤USB渚涚數鏃舵娴嬩竴涓嬬數璺數鍘嬫槸鍚︾ǔ瀹氾紝璐熻浇杩囧ぇ锛岀數鍘嬪皢闄嶄綆
  • PC鏈轰笌鍗曠墖鏈洪氫俊闂
    绛旓細澶氫釜鍗曠墖鏈轰笌PC鏈洪氳鏄彲浠ワ紝浣嗘槸杩欑鏂规硶涓汉瑙夊緱涓嶇ǔ瀹氥佷笉澶熷畬鍠 濡傛灉闇瑕佽繙璺濈浼犺緭鐨勮瘽锛屽彲浠ヤ娇鐢≧S485 RS-485鏈澶х殑閫氫俊璺濈绾︿负1219M锛屾渶澶т紶杈撻熺巼涓10Mb/S锛屼紶杈撻熺巼涓庝紶杈撹窛绂绘垚鍙嶆瘮锛屽湪100Kb/S鐨勪紶杈撻熺巼涓嬶紝鎵嶅彲浠ヨ揪鍒版渶澶х殑閫氫俊璺濈锛屽鏋滈渶浼犺緭鏇撮暱鐨勮窛绂伙紝闇瑕佸姞485涓户鍣ㄣ俁S-485...
  • 鏈変釜闂,pc涓庡崟鐗囨満閫氫俊鐨鏃跺,usb鐨凞-銆丏+涓鍗曠墖鏈虹殑tx銆乺x闂村彧鐢╩ax...
    绛旓細浣犵殑鍋囪鏄敊璇殑銆侾C鏈轰笌鍗曠墖鏈鸿繘琛屼覆琛岄氫俊鐨勮瘽锛1銆佸鏋淧C鏈烘湁涓插彛纭欢锛屽苟涓旀湁DB9鎺ュ彛锛岄偅涔堥渶瑕丮AX232鎴栧叾浠栧悓鏍峰姛鑳界殑鑺墖杩涜鍙屽悜鐢靛钩杞崲锛屽洜涓哄崟鐗囨満杩欒竟鏄疶TL鐢靛钩锛孭C鏈鸿繖杈规槸卤10V鐢靛钩锛岀洿鎺ョ浉杩炴槸浼氬嚭鐜伴棶棰樼殑銆2銆佸鏋淧C鏈烘病鏈変覆鍙B9鎺ュ彛锛堢幇鍦ㄧ殑绗旇鏈嚑涔庨兘娌℃湁锛夛紝閭d箞灏卞緱鍋歎SB鍒颁覆鍙g殑杞崲...
  • 鍗曠墖鏈轰笌PC鐨勯氫俊鐨勯棶棰
    绛旓細鍗曠墖鏈轰笌PC閫氫俊,鍗曠墖鏈轰竴娆′粠涓茶鍙h緭鍑40浣嶆暟鎹暟鎹牸寮:8bit婀垮害鏁存暟鏁版嵁+8bit婀垮害灏忔暟鏁版嵁+8bi娓╁害鏁存暟鏁版嵁+8bit娓╁害灏忔暟鏁版嵁+8bit鏍¢獙鍜屾暟鎹紶閫佹纭椂鏍¢獙鍜屾暟鎹瓑浜庘8bit婀垮害... 鍗曠墖鏈轰笌PC閫氫俊,鍗曠墖鏈轰竴娆′粠涓茶鍙h緭鍑40浣嶆暟鎹暟鎹牸寮:8bit婀垮害鏁存暟鏁版嵁+8bit婀垮害灏忔暟鏁版嵁+8bi娓╁害鏁存暟鏁版嵁+8bit娓╁害灏忔暟鏁版嵁+8...
  • 鍦ㄨ皟璇時s232涓插彛閫氫俊鏃,鍗曠墖鏈寰PC鏈涓婂彂鏁版嵁,涓插彛璋冭瘯鍔╂墜鍙互鎺ユ敹...
    绛旓細锛2锛夋澘瀛愪笂鐨勫湴鎺ュ埌绀烘尝鍣ㄤ笂鐨勫湴锛孭C鎵嶈兘鏀跺埌鏁版嵁锛岃鏄庡崟鐗囨満涓嶱C娌℃湁鍏卞湴銆傚悓鏃讹紝涔熻瘉鏄庝簡鍗曠墖鏈虹殑鍙戦佺數璺佺▼搴忓拰PC鐨勬帴鏀剁數璺兘娌℃湁闂銆傚師鐞嗭細锛1锛塒C鐨勪覆鍙e嵆RS232鏈9涓紩鑴氾紝涓庡崟鐗囨満閫氫俊鏃剁敤鍒颁笁涓紩鑴氾紝渚濇鏄2鑴歊X銆3鑴歍X銆5鑴氫俊鍙稧ND銆傦紙2锛夎屽崟鐗囨満涓插彛涓庢鐩稿弽锛2鑴歍X銆3鑴歊X銆...
  • 鍗曠墖鏈轰笌PC鏈虹殑閫氳闂
    绛旓細鍗曠墖鏈閫氳繃RS232涓插彛鎴朥SB杞琓TL涓插彛鍜屼笂浣嶆満閫氫俊 鍗曠墖鏈哄彧绠$畝鍗曞彂閫佸嵆鍙紝涓婁綅鏈鸿瀵规暟鎹繘琛岀畝鍗曞鐞嗭紝鐢╒B缂栫▼姣旇緝绠鍗曪紝鍒╃敤瀹冪殑涓插彛閫氫俊鎺т欢锛屾垜鏁磋繃銆傜晫闈㈠鍥撅紝缁忚繃澶勭悊淇濆瓨鍒版枃鏈枃浠朵腑锛屾牸寮忓涓 2015-04-21 20:30:47 鏀跺埌 4 涓暟鎹 1鐢靛帇 181.500 v 2鐢靛帇 181.500 v 3鐢靛帇 181...
  • 鍗曠墖鏈轰笌PC鎬庝箞 閫氫俊?
    绛旓細鍗曠墖鏈虹殑閫昏緫0鏄0V,閫昏緫1鏄+5V;鑰孭C鐢ㄧ殑鏄礋閫昏緫锛岄昏緫0鍦+9v~+15v涔嬮棿锛岄昏緫1鍦-9v~-15v涔嬮棿銆傝嫢鐢ㄤ節閽堜覆鍙h繛鎺ョ殑璇濓紝鍏堝緱鐢靛钩杞崲锛(杞崲鑺墖灏辨槸澶у鐔熺煡鐨凴S232,杞3.3v 鐨勮瘽鐢≧S3232).涔嬪悗鏈閲嶈鍋氶夯鐑︾殑灏辨槸瑕佹妸鏃跺簭鍜屾尝鐗圭巼璁剧疆濂(璇寸櫧浜嗗氨鏄伒寰浉鍚岀殑鍗忚)锛岃繖鏍鍗曠墖鏈哄拰PC涔嬮棿灏...
  • pc鏈轰笌鍗曠墖鏈涓插彛閫氫俊闂 鍒╃敤涓插彛閫氫俊鍔╂墜灏嗕竴涓瓧绗︿覆鍙戠粰鍗曠墖鏈...
    绛旓細3.鍙兘浣犳兂瑕佺殑鏄瘡娆″彂閫佸涓瓧鑺傦紝涔熷氨鏄竴涓瓧绗︿覆锛岀劧鍚庡皢杩欎釜瀛楃涓蹭竴璧峰彂閫佸埌PC涓娿傞偅浣犲簲璇ュ湪涓插彛涓柇閲岄潰璁剧疆涓涓垽鏂紝涔熷氨鏄锛屼腑鏂噷闈㈠垽鏂埌涓婁綅鏈哄彂閫佺殑鏁版嵁缁撴潫鍚庯紝鍗曠墖鏈虹殑涓插彛涓柇绋嬪簭鎵嶈缃爣蹇椾綅锛岀劧鍚庢牴鎹爣蹇椾綅鍜屾帴鏀跺埌鏁版嵁鍒版暟閲忥紝鎶婃墍鏈夌殑鏁版嵁涓娆℃у彂閫佺粰PC銆4.鎸囧嚭浣犲嚭鐜板紓甯哥殑...
  • 鍗曠墖鏈轰笌璁$畻鏈閫氫俊,浣嗘槸鎺ュ彈鍒版暟鎹,灏卞嚭鐜闂銆
    绛旓細浜屽嚭鐜颁綘璇寸殑鈥滀絾鐢ㄤ覆鍙g▼搴忓彂閫佹暟鎹紝璁$畻鏈轰篃鑳芥帴鏀跺彂閫佸嚭鏉ョ殑鏁版嵁锛屼笉杩囨帴鏀剁殑鏁版嵁涓庡彂閫佺殑鏁版嵁鐩稿悓锛屾湁鏃朵細鍑虹幇涔辩爜锛佽鍗曠墖鏈涓婄殑绋嬪簭鏄鎺ュ彈鏁版嵁鍚庯紝鍐嶅姞涓锛岀劧鍚庡彂鍥鐢佃剳銆傗鐨勯棶棰锛屽彲鑳芥槸浣犻夋嫨鐨勬暟鎹笉濂斤紝鐢变簬鍑虹幇璇爜鍚庝綘鎵鎻忚堪鐨勬儏鍐碉紝骞舵帺鐩栦簡鍏跺畠閿欒鐜拌薄銆傚缓璁洿鎹㈡暟鎹簭鍒楀湪娴嬭瘯銆
  • PC涓庡崟鐗囨満涓插彛閫氫俊鐨勯棶棰!!
    绛旓細鍥犳鍦ㄥ畾鏃朵腑鏂悗灏介噺涓嶈鍋滈┗澶暱鏃堕棿锛屽埛鏂板畬鏄剧ず鍐呭椹笂閫鍑恒備篃鍙互鍦ㄦ樉绀哄瓙绋嬩腑涓存椂鍏抽棴鍏跺畠涓柇锛屽埛鏂板畬鏄剧ず鍐呭鍚庡啀寮鍚叾瀹冧腑鏂傛讳箣瑕佹潈琛″埄寮娿傚疄鍦ㄤ笉琛屽氨鍙兘閲囩敤甯﹂攣瀛樼殑IC瀹屾垚鏄剧ず锛岃繖鏍峰氨涓嶉渶瑕佷笉鍋滃埛鏂版樉绀哄唴瀹癸紝鍙湪鍐呭鏈夊彉鏇存椂鎵嶅鐞嗕竴娆℃樉绀虹粨鏋溿
  • 扩展阅读:单片机入门基础知识 ... 单片机工作太难找了 ... 现在搞plc还有出路吗 ... 单片机答疑有关问题 ... plc基础知识指令27个 ... plc工资那么高为啥没人学 ... 为什么不建议学单片机 ... 51单片机与pc串口通信 ... 51单片机面试常用问题 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网