求C语言高手帮忙解决一下程序问题,51单片机

这个程序已经弄了我们好几天了,弄不出来,求大神们帮忙看看哪里出问题了。用的是stc89c52rs的最小系统,AD转换也是版上面自带的芯片精度为8位,传感器用的是夏普的GP2Y1010AU0F 程序在第一条评论
void Start(void) { Sda=1; _nop_();Scl=1; _nop_(); Sda=0;_nop_();Scl=0; }void Stop(void) { Sda=0;_nop_();Scl=1;_nop_();Sda=1;_nop_();Scl=0; }void Ack(void) { Sda=0;_nop_();Scl=1;_nop_();Scl=0;_nop_();}
void NoAck(void)
{Sda=1;_nop_();Scl=1;_nop_();Scl=0;
_nop_();
}

第一个循环内Data = temp;直接把Data给赋值没了,如传输的数是0x7F,程序传数据是高位开始,传0了后,程序把Data = temp,就相当后面的7位给清0了。所以在没完成你要的数据的时候,要小心原始数据。
把循环内 :temp = Data《 1; Data = temp; 改成 temp = temp 《 1;试试看,个人见解
温馨提示:内容为网友见解,仅供参考
无其他回答

请c语言高手帮忙,写一个程序,51单片机显示1234,2S后显示5678 ,一直循环...
include<reg51.h> define uchar unsigned char bit flag=1;uchar j,k;uchar code tab[]={ 0x06,\/*1*\/ 0x5B,\/*2*\/ 0x4F,\/*3*\/ 0x66,\/*4*\/ 0x6D,\/*5*\/ 0x7D,\/*6*\/ 0x07,\/*7*\/ 0x7F,\/*8*\/ };sbit P2_0=P2^0;sbit P2_1=P2^1;sbit P2_2=P2^2;sbit P2_3=P2...

求大神在keil上帮写51单片机C语言程序
\/\/第一个实验:\/\/假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2 ... D18连接P0.7\/\/假设K1按键在P2.3引脚#include<reg51.h>#include<intrins.h>sbit k1=P2^3;\/\/假设K1按键在P2.3引脚void main(){P0=0xfe;while(1){if(k1==0){while(k1==0);P0=_crol_(P0,1);}}}...

求一个51单片机C语言程序编程
实验内容:单片机甲、乙进行双机串行通信,甲机通过串口控制乙机LED闪烁(如下图所示,要求利用芯片MAX232),双方的晶振频率均为11.0592MHz(波特率为9600kb\/s)要求:甲机按开关K1一次,发送字符“A”给乙机,点亮灯D1与D2;按开关K1两次,发送字符“B”给乙机,点亮灯D3与D4;按开关K1三次,发...

用C语言如何开51单片机的计数器,最好编个实例程序
include <reg51.h> define uchar unsigend uchar define uint unsigned int unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};\/\/数码管段码 void main(){ uint k;TMOD=0X50;\/\/设...

怎么用c语言编程51单片机读写程序?
编程代码如下:ORG 0000H MOV DPTR,#1000H ;给源数据块地址指针DPTR赋初值 MOV P2, #20H ;给目的数据块地址指针P2和R0赋初值 MOV RO,#00H LOOP: MOVX A, @DPTR .MOVX @RO, A .INC DPTR INC RO CJNE RO,#64H, LOOP SJMP

求一个用C语言编写的51单片机音乐程序代码。
include <reg52.h> sbit speaker=P2^2;unsigned char timer0h,timer0l,time;\/\/生日歌 code unsigned char sszymmh[]={5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,5,1,1, 5,1,1, 5,2,2, 3,2,2,...

请高手具体解释一下以下51单片机C语言程序:
void timer() interrupt 1 using 2\/\/定时器0中断函数,interrupt 1是T0的中断入口 { Flag_Delay5ms=0;\/\/将 延时5ms 标志位 置为 0,表示5ms结束 TH0=-5000\/256;\/\/为T0高8位赋初值,相当于TH0=(65536-5000)\/256;可以推出晶振为12MHz TL0=-5000%256;\/\/为T0低8位赋初值,同上 } \/*延时...

请高手帮忙,51单片机C语言编程,按p2.1点亮P1.1后5分钟灭,按P2.2点亮...
sbit key1=P2^1;sbit key2=P2^2;sbit led1=P1^1;sbit led2=P1^2;uint num,num1,num2,num3;void delay1ms(uint xms){ uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);} void keyscan(){ if(key1==0){ delay1ms(10); \/\/去抖 if(key1==0){ TR0=1; \/...

大神,求51单片机做简易计算器的那个c语言程序
void display1(uchar A1,uchar A2,uchar A3,uchar A4,uchar A5) \/\/第1个数显示程序 { init2();write_com(0x80);\/\/第1行,第1字 Delay1ms(10);write_date(0x30+A1);Delay1ms(10);write_date(0x30+A2);Delay1ms(10);write_date(0x30+A3);Delay1ms(10);write_date(0x30+A4);Dela...

需要一个C语言程序。51单片机控制:按键按一下,延迟1分钟后开灯,灯亮半...
void delay1s(uint i) \/\/1s延时程序 { for(;i>0;i--){delay1ms(1000);} } void main(){ led=0;while(1){ if (s==0){ delayms(20);if (s==0);{delay1s(60);led=1; } } if(led==1){delay1s(1800);led=0; } } } 如果对时间要求精确,则要用到定时器,还要确保电路...

相似回答
大家正在搜