完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序找别人写的,电路都连好了,插上送的单片机,大部分功能都正常,但是ds18b20温度补偿用不了,一直显示95度。我把他发来的程序烧录进我自己的单片机想找找问题,但烧录进我的单片机之后LCD屏只显示初始化之后的第一面,也就是write_string(1,0,"G:0.00m B:0.00m"); write_string(2,0,"L:0.00m R:0.00m "); 之后就不继续执行了,按键也没反应。 俩问题,第一个程序问什么不能继续执行,第二个为什么温度补偿用不了 另外我发现温度补偿用的I/O口和另一个I/O重复了,复用什么的现在我还不太会,也许是这里的问题? 完整程序贴下面了,能答出来的话别拦我,我要给红包 原理图 #include #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #include ***it c_send_r = P2^0; //超声波发射 ***it c_recive_r = P2^1; //超声波接收 ***it c_send_z = P2^2; //超声波发射 ***it c_recive_z = P2^3; //超声波接收 ***it c_send_l = P2^4; //超声波发射 ***it c_recive_l = P2^5; //超声波接收 ***it c_recive_b = P2^6; //超声波接收 ***it c_send_b = P2^7; //超声波发射 ***it beep = P1^4; //蜂鸣器IO口定义 //这三个引脚参考资料 ***it rs=P1^0; //1602数据/命令选择引脚 H:数据 L:命令 ***it rw=P1^1; //1602读写引脚 H:数据寄存器 L:指令寄存器 ***it e =P1^2; //1602使能引脚 下降沿触发 uchar code table_num[]="0123456789abcdefg"; uint code wendu_buchang1[46] = { //温度补偿表格 331,332,333,333,334,334,335,336,336,337, // 0-9度 337,338,339,339,340,341,341,342,342,343, //10-19度 343,344,345,345,346,346,347,348,348,349, //20-29度 349,350,351,351,352,352,353,354,354,355, //30-39度 355,356,357,357,358,358 //40-45度 }; ***it dq = P3^1; //18b20 IO口的定义 uint temperature ; // uchar flag_value; uchar flag_value_l; uchar flag_value_r; uint flag_time0; //用来保存定时器0的时候的 uchar flag_hc_value; //超声波中间变量 long distance_z; //距离 long distance_l; //距离 long distance_r; //距离 long distance_b; //距离 long set_l; //距离 long set_r; //距离 long set_z; //距离 long set_b; //距离 bit flag_c***_juli_z; //超声波超出量程 bit flag_c***_juli_l; //超声波超出量程 bit flag_c***_juli_r; //超声波超出量程 bit flag_c***_juli_b; //超声波超出量程 /***********************语音模块控制IO口的定义************************/ ***it VBUSY= P3^4; ***it VRST = P3^0; ***it VSDA = P3^1; ***it VCS = P3^2; ***it VSCL = P3^3; bit flag_300ms ; uint flag_time0; //用来保存定时器0的时候的 // 按键的IO变量的定义 uchar key_can; //按键值的变量 uchar menu_1; //菜单设计的变量 uchar a_a; ***it led_r = P1^7; //指示灯 ***it led_z = P1^6; ***it led_l = P1^5; ***it led_b = P1^3; /***********************1ms延时函数*****************************/ void delay_1ms(uint q) { uint i,j; for(i=0;i for(j=0;j<120;j++); } /******************************************************************** * 名称 : delay_uint() * 功能 : 小延时。 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void delay_uint(uint q) { while(q--); } /******************************************************************** * 名称 : write_com(uchar com) * 功能 : 1602命令函数 * 输入 : 输入的命令值 * 输出 : 无 ***********************************************************************/ void write_com(uchar com) { e=0; rs=0; rw=0; P0=com; delay_uint(25); e=1; delay_uint(100); e=0; } /******************************************************************** * 名称 : write_data(uchar dat) * 功能 : 1602写数据函数 * 输入 : 需要写入1602的数据 * 输出 : 无 ***********************************************************************/ void write_data(uchar dat) { e=0; rs=1; rw=0; P0=dat; delay_uint(25); e=1; delay_uint(100); e=0; } /******************************************************************** * 名称 : write_string(uchar hang,uchar add,uchar *p) * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下 write_string(1,5,"ab cd ef;") * 输入 : 行,列,需要输入1602的数据 * 输出 : 无 ***********************************************************************/ void write_string(uchar hang,uchar add,uchar *p) { if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p == ' |