目前国内超声波测距器的设计大多采用汇编语言设计。由于单片机应用系统的日趋复杂,要求所写
的代码规范化,模块化,并便于多人以软件工程的形式进行协同开发,汇编语言作为传统的单片机应用系
统的编程语言,已经不能满足这样的实际需要了,而C语言以其结构化和能产生高效代码满足了这样的需
求,成为电子工程师进行单片机系统编程时的首先编程语言。在本设计中,由于C语言程序有利于实现较
复杂的算法,汇编语言程序具有较高的效率并且容易精确计算程序运行的时间,而超声波测距器的程序既
有较复杂的距离计算又要求精确计算超声波测距时程序运行的时间,所以本设计采用C语言和汇编语言
混合编程来实现。本文论述的是一种基于AT89C52单片机的超声波测距器,可用于汽车倒车等场合⋯。
1设计要求
设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用
于如液位、井深、管道长度的测量等场合。要求测量范围在0.10—5.00 m,测量精度lem,测量时与被测物
体无直接接触,能够清晰稳定地显示测量结果。
2设计思路
2.1超声波及其测距原理
超声波是指频率高于20KHz的机械波。为了以超声波作为检测手段,必须产生超声波和接收超声波。
完成这种功能的装置就是超声波传感器,习惯上称为超声波换能器或超声波探头。超声波传感器有发送
器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。超声波传感器是利用压电效应
的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换为超声波,发射超声波;而在收到回
波的时候,则将超声振动转换成电信号。
超声波测距的原理一般采用渡越时间法TOt(time of fliight)。首先测出超声波从发射到遇到障碍物返
回所经历的时间,再乘以超声波的速度就得到二倍的声源与障碍物之间的距离。测量距离的方法有很多
种,短距离的可以用尺,远距离的有激光测距等,超声波测距适用于高精度的中长距离测量。因为超声波
收稿日期:2008-04-08
作者简介:周功明(1963一),男,副教授,主要研究方向:电子信息科学技术。
·50· 绵阳师范学院学报(自然科学版) 第27卷
在标准空气中的传播速度为331.45粑秒,由单片机负责计时,单片机使用12.0M晶振,所以此系统的测
量精度理论上可以达到毫米级。由于超声波指向性强,能量消耗缓慢,在介质中传播距离远,因而超声波
可以用于距离的测量。利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也
能达到要求。
超声波发生器可以分为两类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。本课题
属于近距离测量,可以采用常用的压电式超声波换能器来实现7。
2.2超声波测距器的系统框图
根据设计要求并综合各方面因素,可以采用AT89C52单片机作为主控制器,用动态扫描法实现LED
数字显示,超声波驱动信号用单片机的定时器完成,超声波测距器的系统框图如下图l所示¨2|:
3系统组成
3.1硬件部分
主要由单片机系统及显示电路、超声波发射电路
和超声波检测接收电路三部分组成。采用AT89C52来
实现对CX20106A红外接收芯片和TCT40—10系列超
声波转换模块的控制。单片机通过P1.0引脚经反相
\
超声波接收E :, LED显示单片机r
/\
Z ∑
超声波发送高控制器
:> 扫描驱动
图1 超声波测距器系统设计框图
Fig.1 Ultrasonic eLangi.g system design diagram
器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INTO引脚的电平由高电平变为低电平时就
认为超声波已经返回。计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍
物之间的距离¨≈J。
3.2软件部分
主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序等部分。
4系统硬件电路设计
4.1单片机系统及显示电路
单片机采用AT89C52或其兼容系列。采用12MHz高精度的晶振,以获得较稳定的时钟频率,减小测
量误差。单片机用P1.0端口输出超声波转化器所需的40KHz方波信号,利用外中断0口检测超声波接收
电路输出的返回信号。显示电路采用简单实用的4位共阳LED数码管,段码用74LS244驱动,位码用PNP
三极管驱动。单片机系统及显示电路如下图2所示‘1。31。
图2单片机及显示电路原理图
Fig.2 MCU and display circuit schematics
第8期周功明等:基于AT89C52单片机的超声波测距器设计·51.
4.2超声波发射电路原理图
压电超声波转换器的功能:利用压电晶体谐振工作。内部结构如图3‘3Ⅲ1所示,它有两个压电晶片和
一个共振板。当它的两极外加脉冲信号,其频
率等于压电晶片的固有振荡频率时,压电晶片PI.O
将会发生共振,并带动共振板振动产生超声波,
这时它就是一超声波发生器;如没加电压,当共
振板接收到超声波时,将压迫压电振荡器作振
动,将机械能转换为电信号,这时它就成为超声
波接收转换器。超声波发射转换器与接收转换
器其结构稍有不同。
4.3超声波检测接收电路图3发射电路原理图
参考红外转化接收电路,本设计采用集成
F‘g·3 U1‘ms。nie劬啪mi‘妇c‘咖1‘∞hem蚯c
电路CX20106A,这是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控
常用的载波频率38KHz与测距超声波频率
40KHz较为接近,可以利用它作为超声波检测
电路。如图43 J[71超声波检测接收电路原理图
所示,适当改变C4的大小,可改变接收电路的
灵敏度和抗干扰能力。⋯. J。j-二
5系统程序设计
超声波测距软件设计主要由主程序,超声
波发射子程序,超声波接收中断程序及显示子
程序组成。下面对超声波测距器的算法,主程
序,超声波发射子程序和超声波接收中断程序
逐一介绍。
5.1超声波测距器的算法设计
GND
图4超声波检测接收电路原理图
Fig.4 Ultrasonic receiver and detection circuit schematic
图5_列示意了超声波测距的原理,即超声
波发生器T在某一时刻发出的一个超声波信号,当超声波遇到被测物
体后反射回来,就被超声波接收器R所接受。这样只要计算出发生信
号到接收返回信号所用的时问,就可算出超声波发生器与反射物体的
距离。
距离计算公式:d=s/2=(c木t)/2,其中d为被测物与测距器的距
离,s为声波的来回路程,c为声速,t为声波来回所用的时间。
图5超声波测距原理图
Fig.5 Ultrasonic Ranging schematic
声速c与温度有关(见表1),如温度变化不大,则可认为声速是基
本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正。声速确定后,只要测得超声波往
返时间,即可求得距离。在系统加入温度传感器来监测环境温度,可进行温度补偿。这里可以用DSl8820
测量环境温度,根据不同的环境温度确定一声速提高测距的稳定性。为了增强系统的可靠性,可在软硬件
上采用抗干扰措施。
表1不同温度下的超声波速表
Table I Under different temperatures ultrasonic velocity Table
·52· 绵阳师范学院学报(自然科学版) 第27卷
5.2主程序
主程序首先对系统环境初始化,设置定时器1D工作模式为16位的定时计数器模式,置位总中断允许
位EA并给显示端Po和P2清0。然后调用超声波发生子程序送出一个超声波脉冲,为避免超声波从发射
器直接传送到接收器引起的直接波触发,需延迟0.1ms(这也就是测距器会有一个最小可测距离的原因)
后,才打开外中断0接收返回的超声波信号。由于采用12MHz的晶振,机器周期为lus,当主程序检测到接
收成功的标志位后,将计数器哟中的数(即超声波来回所用的时
间)按下式计算即可测得被测物体与测距仪之间的距离,设计时取
20℃时的声速为344 m/s则有:d=(C木TO)/2=172T0/10000cm
(其中,ID为计数器,ID的计数值)。
测出距离后结果将以十进制BCD码方式LED,然后再发超声
波脉冲重复测量过程。主程序框图如图6所示。
5.3超声波发生子程序和超声波接收中断程序
超声波发生子程序的作用是通过PI.0端口发送2个左右的
超声波信号频率约40KHz的方波,脉冲宽度为12 US左右,同时把
计数器,ID打开进行计时。超声波测距器主程序利用外中断0检
测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现
低电平),立即进入中断程序。进入该中断后就立即关闭计时器
,ID停止计时,并将测距成功标志字赋值l。如果当计时器溢出时
还未检测到超声波返回信号,则定时器rID溢出中断将外中断0关
闭,并将测距成功标志字赋值2以表示此次测距不成功H旬J。
5.4超声波测距器的部分程序清单
/宰超声波测距器d片机c程序使用Keil C51 ver 7.09
。
木/
#include<re951.h>
#define uchar unsigned int
#define uint unsigned int
#define ulong unsigned long
Extem void ca_t(void);
Extem void delay(uint);
Extem void display(unchar);
Data unehar testtok;
/木超声波测距器主程序术/
Void main(void)
{data unchar dispram[5];
data uint i;
data ulong time;
p0=0xff;
pl=0xff;
TMOD=0X11:
IE=0x80;
While(1)
{.“}
开始
系统初始化
发送超声波脉冲
等待发射超声波
计算距离
显示结果0.5s
图6主程序框图
diagram of the main program
第8期周功明等:基于AT89C52单片机的超声波测距器设计·53·
6软硬件调试
超声波测距仪的制作和调试,其中超声波发射和接收采用中15的超声波换能器TCT40一IOFl(T发
射)和TCT40—10S1(R接收),中心频率为40kHz,安装时应保持两换能器中心轴线平行并相距4—8 cm,
其余元件无特殊要求。若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。根据测量范围
要求不同,可适当调整与接收换能器并接的滤波电容C4的大小,以获得合适的接收灵敏度和抗干扰能力。
硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改超
声波发生子程序每次发送的脉冲宽度和两次测量的间隔时间,以适应不同距离的测量需要∞71。
7 结束语
本文设计的是基于AT89C52单片机的超声波测距器,可应用于汽车倒车等场合,提醒驾驶员倒车时有
效的避开可能对倒车造成危害的障碍物和行人,从而有效避免由于倒车造成的汽车碰撞或擦伤经济损失
和人身安全问题。具有较强的实用性。
参考文献:
[1] 周功明.基于AT89C2051d片机的防盗自动报警电子密码锁系统设计[J].绵阳师范学院学报,2007,26(5):112—
116.
[14]
张齐.单片机应用系统设计技术一基于c语言编程[M].北京:电子工业出版社,2006.
李光飞.单片机c程序设计实例指导[M].北京:航空航天大学业出版社,2005.
楼燃苗,李光飞.51系列单片机设计实例[M].北京:航空航天大学业出版社,2003.
Zhongbo Li.Electronic Technique[M].Beijing:Mechannic Industrical Prees,2003.
赖麒文.8051单片机c语言彻底应用[M].北京:科学业出版社,2002.
何希才.传感器及其应用电路[M].北京:电子工业出版社,2001.
丁元杰.单片微机原理及应用[M].北京:机械工业出版社,2001.
孙串友,孙晓斌.感测技术基础[M].北京:电子工业出版社,2001.
马忠梅.单片机的c语言应用程序设计[M].北京:航空航天大学业出版社,1999.
刘喜昂,周志宇.基予多超声传感器的机器人安全避障技术[J].测控技术,2003,23(2):71—73.
翟国富,刘茂恺.一种实时高精度的机器人用超声波测距处理方法[J].应用声学,1990,15(1):17—24.
Cray C,Swinhoe C F,Myinl.Target controlled infusion of ketamine曲analgessia for TIV A with propof01.Can.J Anesth,1999,
40:957.
R J Higgens.Electronics and Analog Integrated Circuits[M].N.J:Prentice—Hall Inc,2001.
//在gcc-472下编译通过。//命令行:g++-Wall-ansi-O2testcpp-otest#include<iostream>usingnamespacestd;voidinput(int&oper,constboolmeth){//meth为true则只判断1,为false则判断1或0while(true){cin>>oper;if(meth&&oper==1)break;elseif(oper==0||oper==1)break;cout<<"输入错误,请重新输入。"<<endl;//判断参数cinsync();//避免极端输入导致死循环cinclear();}}intmain(void){cout<<"1+1=2吗?那要看您怎么教我了,不要惊讶我会学习的"<<endl;intladd,radd,aprs,rcnt(0),wcnt(0);//定义输入与结果,正确次数与错误次数cout<<"开始学习……"<<endl;for(inti(0);i!=10;++i){cout<<"参数1(必须是1):"<<flush;//提示输入参数input(ladd,true);cout<<"参数2(必须是1):"<<flush;input(radd,true);cout<<"结果:"<<(ladd+radd)<<endl;//输出结果cout<<"您对这满意吗(满意输入1,不满意输入0):"<<flush;//评价等级input(aprs,false);if(aprs)//判断用户评价++rcnt;else++wcnt;cout<<"正确次数:"<<rcnt<<"错误次数:"<<wcnt<<endl;//错误次数}if(rcnt>wcnt)//判断学习结果cout<<"主人告诉我1+1=2。"<<endl;elseif(rcnt<wcnt)cout<<"主人告诉我1+1!=2。"<<endl;elsecout<<"我不明白主人是什么意思。"<<endl;intterm;//退出部分cout<<"您对我的表现满意吗?满意请输入1不满意请输入0:"<<flush;input(term,false);if(term)cout<<"谢谢我会继续努力学习"<<endl;elsecout<<"谢谢我会继续努力学习D"<<endl;//cin>>term;//在Windows上测试时启用return0;}
本程序将根据您的评价判断执行结果 "1+1=2"
实际上仅用了最简单的 if else for 语句
这就是一个机器学习的例子,通过环境影响来进行学习。
通过本例我们不难看出,在人工错误的引导下,机器会给出错误的答案 1+1不等于2。
所以此类学习方法,一定要在正确引导下实践,否则会得到最坏的结果。
学习完毕后,计算机会记录本次学习结果,存入数据库,下次执行相应任务时,再将结果调出执行。
下面的直接编译运行,vc下可以运行的。呵呵~
#include<iostream>
using namespace std;
void main()
{
char t;
cout<<"请问你是不是猪?回答是就输入a,回答否就输入b或其他"<<endl;
cin>>t;
if(t=='a' || t=='A')
{
cinget();
}else
{
while(1)
cout<<"崩溃了!"<<endl;
}
}
火车站售票查询系统:
#include <conioh>
#include <stdioh>
#include <stdlibh>
#include <stringh>
int shoudsave=0 ;
int count1=0,count2=0,mark=0,mark1=0 ;
/定义存储火车信息的结构体/
struct train
{
char num[10];/列车号/
char city[10];/目的城市/
char takeoffTime[10];/发车时间/
char receiveTime[10];/到达时间/
int price;/票价/
int bookNum ;/票数/
};
/订票人的信息/
struct man
{
char num[10];/ID/
char name[10];/姓名/
int bookNum ;/需求的票数/
};
/定义火车信息链表的结点结构/
typedef struct node
{
struct train data ;
struct node next ;
}Node,Link ;
/定义订票人链表的结点结构/
typedef struct people
{
struct man data ;
struct peoplenext ;
}bookMan,bookManLink ;
/ 初始界面/
void printInterface()
{
puts("");
puts(" Welcome to use the system of booking tickets ");
puts("");
puts(" You can choose the operation: ");
puts(" 1:Insert a train information ");
puts(" 2:Inquire a train information ");
puts(" 3:Book a train ticket ");
puts(" 4:Update the train information ");
puts(" 5:Advice to you about the train ");
puts(" 6:save information to file ");
puts(" 7:quit the system ");
puts("");
}
/添加一个火车信息/
void InsertTraininfo(Link linkhead)
{
struct node p,r,s ;
char num[10];
r = linkhead ;
s = linkhead->next ;
while(r->next!=NULL)
r=r->next ;
while(1)
{
printf("please input the number of the train(0-return)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break ;
/判断是否已经存在/
while(s)
{
if(strcmp(s->datanum,num)==0)
{
printf("the train '%s'has been born!\n",num);
return ;
}
s = s->next ;
}
p = (struct node)malloc(sizeof(struct node));
strcpy(p->datanum,num);
printf("Input the city where the train will reach:");
scanf("%s",p->datacity);
printf("Input the time which the train take off:");
scanf("%s",p->datatakeoffTime);
printf("Input the time which the train receive:");
scanf("%s",&p->datareceiveTime);
printf("Input the price of ticket:");
scanf("%d",&p->dataprice);
printf("Input the number of booked tickets:");
scanf("%d",&p->databookNum);
p->next=NULL ;
r->next=p ;
r=p ;
shoudsave = 1 ;
}
}
/打印火车票信息/
void printTrainInfo(struct nodep)
{
puts("\nThe following is the record you want:");
printf(">>number of train: %s\n",p->datanum);
printf(">>city the train will reach: %s\n",p->datacity);
printf(">>the time the train take off: %s\nthe time the train reach: %s\n",p->datatakeoffTime,p->datareceiveTime);
printf(">>the price of the ticket: %d\n",p->dataprice);
printf(">>the number of booked tickets: %d\n",p->databookNum);
}
struct node Locate1(Link l,char findmess[],char numorcity[])
{
Noder ;
if(strcmp(numorcity,"num")==0)
{
r=l->next ;
while(r)
{
if(strcmp(r->datanum,findmess)==0)
return r ;
r=r->next ;
}
}
else if(strcmp(numorcity,"city")==0)
{
r=l->next ;
while(r)
{
if(strcmp(r->datacity,findmess)==0)
return r ;
r=r->next ;
}
}
return 0 ;
}
/查询火车信息/
void QueryTrain(Link l)
{
Node p ;
int sel ;
char str1[5],str2[10];
if(!l->next)
{
printf("There is not any record !");
return ;
}
printf("Choose the way:\n>>1:according to the number of train;\n>>2:according to the city:\n");
scanf("%d",&sel);
if(sel==1)
{
printf("Input the the number of train:");
scanf("%s",str1);
p=Locate1(l,str1,"num");
if(p)
{
printTrainInfo(p);
}
else
{
mark1=1 ;
printf("\nthe file can't be found!");
}
}
else if(sel==2)
{
printf("Input the city:");
scanf("%s",str2);
p=Locate1(l,str2,"city");
if(p)
{
printTrainInfo(p);
}
else
{
mark1=1 ;
printf("\nthe file can't be found!");
}
}
}
/订票子模块/
void BookTicket(Link l,bookManLink k)
{
Noder[10],p ;
char ch,dem ;
bookManv,h ;
int i=0,t=0 ;
char str[10],str1[10],str2[10];
v=k ;
while(v->next!=NULL)
v=v->next ;
printf("Input the city you want to go: ");
scanf("%s",&str);
p=l->next ;
while(p!=NULL)
{
if(strcmp(p->datacity,str)==0)
{
r[i]=p ;
i++;
}
p=p->next ;
}
printf("\n\nthe number of record have %d\n",i);
for(t=0;t<i;t++)
printTrainInfo(r[t]);
if(i==0)
printf("\n\t\t\tSorry!Can't find the train for you!\n");
else
{
printf("\ndo you want to book it<1/0>\n");
scanf("%d",&ch);
if(ch == 1)
{
h=(bookMan)malloc(sizeof(bookMan));
printf("Input your name: ");
scanf("%s",&str1);
strcpy(h->dataname,str1);
printf("Input your id: ");
scanf("%s",&str2);
strcpy(h->datanum,str2);
printf("Input your bookNum: ");
scanf("%d",&dem);
h->databookNum=dem ;
h->next=NULL ;
v->next=h ;
v=h ;
printf("\nLucky!you have booked a ticket!");
getch();
shoudsave=1 ;
}
}
}
bookManLocate2(bookManLink k,char findmess[])
{
bookManr ;
r=k->next ;
while(r)
{
if(strcmp(r->datanum,findmess)==0)
{
mark=1 ;
return r ;
}
r=r->next ;
}
return 0 ;
}
/修改火车信息/
void UpdateInfo(Link l)
{
Nodep ;
char findmess[20],ch ;
if(!l->next)
{
printf("\nthere isn't record for you to modify!\n");
return ;
}
else
{
QueryTrain(l);
if(mark1==0)
{
printf("\nDo you want to modify it\n");
getchar();
scanf("%c",&ch);
if(ch=='y');
{
printf("\nInput the number of the train:");
scanf("%s",findmess);
p=Locate1(l,findmess,"num");
if(p)
{
printf("Input new number of train:");
scanf("%s",&p->datanum);
printf("Input new city the train will reach:");
scanf("%s",&p->datacity);
printf("Input new time the train take off");
scanf("%s",&p->datatakeoffTime);
printf("Input new time the train reach:");
scanf("%s",&p->datareceiveTime);
printf("Input new price of the ticket::");
scanf("%d",&p->dataprice);
printf("Input new number of people who have booked ticket:");
scanf("%d",&p->databookNum);
printf("\nmodifying record is sucessful!\n");
shoudsave=1 ;
}
else
printf("\t\t\tcan't find the record!");
}
}
else
mark1=0 ;
}
}
/系统给用户的提示信息/
void AdvicedTrains(Link l)
{
Noder ;
char str[10];
int mar=0 ;
r=l->next ;
printf("Iuput the city you want to go: ");
scanf("%s",str);
while(r)
{
if(strcmp(r->datacity,str)==0&&r->databookNum<200)
{
mar=1 ;
printf("\nyou can select the following train!\n");
printf("\n\nplease select the fourth operation to book the ticket!\n");
printTrainInfo(r);
}
r=r->next ;
}
if(mar==0)
printf("\n\t\t\tyou can't book any ticket now!\n");
}
/保存火车信息/
void SaveTrainInfo(Link l)
{
FILEfp ;
Nodep ;
int count=0,flag=1 ;
fp=fopen("c:\\traintxt","wb");
if(fp==NULL)
{
printf("the file can't be opened!");
return ;
}
p=l->next ;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next ;
count++;
}
else
{
flag=0 ;
break ;
}
}
if(flag)
{
printf("the number of the record which have been saved is %d\n",count);
shoudsave=0 ;
}
fclose(fp);
}
/保存订票人的信息/
void SaveBookmanInfo(bookManLink k)
{
FILEfp ;
bookManp ;
int count=0,flag=1 ;
fp=fopen("c:\\mantxt","wb");
if(fp==NULL)
{
printf("the file can't be opened!");
return ;
}
p=k->next ;
while(p)
{
if(fwrite(p,sizeof(bookMan),1,fp)==1)
{
p=p->next ;
count++;
}
else
{
flag=0 ;
break ;
}
}
if(flag)
{
printf("the number of the record which have been saved is %d\n",count);
shoudsave=0 ;
}
fclose(fp);
}
int main()
{
FILEfp1,fp2 ;
Nodep,r ;
char ch1,ch2 ;
Link l ;
bookManLink k ;
bookMant,h ;
int sel ;
l=(Node)malloc(sizeof(Node));
l->next=NULL ;
r=l ;
k=(bookMan)malloc(sizeof(bookMan));
k->next=NULL ;
h=k ;
fp1=fopen("c:\\traintxt","ab+");
if((fp1==NULL))
{
printf("can't open the file!");
return 0 ;
}
while(!feof(fp1))
{
p=(Node)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp1)==1)
{
p->next=NULL ;
r->next=p ;
r=p ;
count1++;
}
}
fclose(fp1);
fp2=fopen("c:\\mantxt","ab+");
if((fp2==NULL))
{
printf("can't open the file!");
return 0 ;
}
while(!feof(fp2))
{
t=(bookMan)malloc(sizeof(bookMan));
if(fread(t,sizeof(bookMan),1,fp2)==1)
{
t->next=NULL ;
h->next=t ;
h=t ;
count2++;
}
}
fclose(fp2);
while(1)
{
clrscr();
printInterface();
printf("please choose the operation: ");
scanf("%d",&sel);
clrscr();
if(sel==8)
{
if(shoudsave==1)
{
getchar();
printf("\nthe file have been changed!do you want to save it(y/n)\n");
scanf("%c",&ch1);
if(ch1=='y'||ch1=='Y')
{
SaveBookmanInfo(k);
SaveTrainInfo(l);
}
}
printf("\nThank you!!You are welcome too\n");
break ;
}
switch(sel)
{
case 1 :
InsertTraininfo(l);break ;
case 2 :
QueryTrain(l);break ;
case 3 :
BookTicket(l,k);break ;
case 4 :
UpdateInfo(l);break ;
case 5 :
AdvicedTrains(l);break ;
case 6 :
SaveTrainInfo(l);SaveBookmanInfo(k);break ;
case 7 :
return 0;
}
printf("\nplease press any key to continue");
getch();
}
return 0;
}
rem
窗体创建三个单选框按钮,option1、option2、option3
private
sub
form_activate()
option1caption
=
"石头"
option2caption
=
"剪刀"
option3caption
=
"布"
option1value
=
false
option2value
=
false
option3value
=
false
end
sub
private
sub
option1_click()
randomize
select
case
int(3
rnd)
case
0:
msgbox
"对方也出石头!继续!"
case
1:
msgbox
"哈哈!你赢了!对方出的是剪刀!奖励你一个苹果!"
case
2:
msgbox
"你输了!对方出的是布哦!不好意思,苹果给对方了哈!"
end
select
option1value
=
false
end
sub
private
sub
option2_click()
randomize
select
case
int(3
rnd)
case
0:
msgbox
"你输了!对方出的是石头哦!不好意思,苹果给对方了哈!"
case
1:
msgbox
"对方也出剪刀!继续!"
case
2:
msgbox
"哈哈!你赢了!对方出的是布!奖励你一个苹果!"
end
select
option2value
=
false
end
sub
private
sub
option3_click()
randomize
select
case
int(3
rnd)
case
0:
msgbox
"哈哈!你赢了!对方出的是石头!奖励你一个苹果!"
case
1:
msgbox
"你输了!对方出的是剪刀哦!不好意思,苹果给对方了哈!"
case
2:
msgbox
"对方也出布!继续!"
end
select
option3value
=
false
end
sub
以上就是关于求基于AT89C52超声波测距简易设计的源程序,要求用3个LED管显示其测距,精确到小数点后2位如,X.XX米。全部的内容,包括:求基于AT89C52超声波测距简易设计的源程序,要求用3个LED管显示其测距,精确到小数点后2位如,X.XX米。、谁能给个简单人工智能的源代码、求一简单的C++程序的源代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)