No.98252 作者:请帮助 邮件:baiyni888@163.com ID:44010 登陆:5次 文章数:4篇 最后登陆IP:117.89.11.110 最后登陆:2009/1/6 23:24:00 注册:2005/12/1 11:29:08 财富:126 发帖时间:2006/10/4 14:29:32 发贴者IP:222.49.242.180 标题:请帮助:[求助]用2051做超声波测距的源程序和电路图 摘要:No.98252[求助]用2051做超声波测距的源程序和电路图 是一个从别的网站上下的,用2051做超声波测距的源程序和电路图 当中这一句 P1=~buffer ; //显示数据送P1口 改为 P1= buffer ; //显示数据送P1口 就能在Keil 中编译通过,但是烧进单片机后,三位数码管显示是一样的. 请问是什么原因? 如果不改这一句,在Keil 中编译就不能通过!! 源程序要怎么样改才能正常??? 我的邮箱是: baiyni888@163.com 万分感谢!!!!!! 下面是有问题的源程序:
此主题相关图片如下:
 #include <REG2051.H> #define k1 P3_4 #define csbout P3_5 //超声波发送 #define csbint P3_7 //超声波接收 #define csbc=0.034 #define bg P3_3 unsigned char csbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs;//显示标识 unsigned char convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码 unsigned int s,t,i, xx,j,sj1,sj2,sj3,mqs,sx1; bit cl; void csbcj(); void delay(j); //延时函数 void scanLED(); //显示函数 void timeToBuffer(); //显示转换函数 void keyscan(); void k1cl(); void k2cl(); void k3cl(); void k4cl(); void offmsd(); void main() //主函数 { EA=1; //开中断 TMOD=0x11; //设定时器0为计数,设定时器1定时 ET0=1; //定时器0中断允许 ET1=1; //定时器1中断允许 TH0=0x00; TL0=0x00; TH1=0x9E; TL1=0x57; csbds=0; csbint=1; csbout=1; cl=0; opto=0xff; jpjs=0; sj1=45; sj2=200; sj3=400; k4cl(); TR1=1; while(1) { keyscan(); if(jpjs <1) { csbcj(); if(s> sj3) { buffer[2]=0x76; buffer[1]=0x76; buffer[0]=0x76; } else if(s <sj1) { buffer[2]=0x40; buffer[1]=0x40; buffer[0]=0x40; } else timeToBuffer(); } else timeToBuffer(); //将值转换成LED段码 offmsd(); scanLED(); //显示函数 if(s <sj2) bg=0; bg=1; } } void scanLED() //显示功能模块 { digit=0x04; for( i=0; i <3; i++) //3位数显示 { P3=~digit&opto; //依次显示各位数 P1=~buffer; //显示数据送P1口 delay(20); //延时处理 P1=0xff; //P1口置高电平 ......
>>返回讨论的主题
|