版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.wd.wd.wd.简 介 单片机益智系列智能寻迹机器人是由益芯科技为科教方便而研发设计。根据现代学校对嵌入式系统开发的需求。依据提高学生实际动手操作能力和思考能力,以加强学生对现实生活中嵌入式系统的应用为参照。智能寻迹机器人全新的设计模式,良好的电路设计,一体化的机电组合,智趣的系统开发,更是成为加强学生学习兴趣的总动源。 智能寻迹机器人采用现在较为流行的8位单片机作为系统大脑。以8051系列家族中的AT89S51/AT89S52为主芯片。40脚的DIP封装使它拥有32个完全IO(GPIO通用输入输出)端口,通过对这些端口加以信号输入电路,控制电路,执行电路共同完成寻迹机器人。P0.0,P0
2、.1,P0.2,P0.3分别通过LG9110电机驱动来驱动电机1和电机2。由电机的正转与反转来完成机器人的前进,后退,左转,右转,遇障碍物绕行,避悬崖等 基本动作。在机器人前进时如果前方有障碍物,由红外发射管发射的红外信号被反射给红外接收管,红外接收将此信号经过P3.7传送入AT89S52中,主芯片通过内部的代码进展机器人的绕障碍物操作,同时主芯片将P3.7的信号状态通过P2.5的LED指示灯显示出来。机器人行走时会通过P3.5与P3.6的红外接收探头来进展检测。 当走到悬崖处时,P3.5或P3.6将收到一个电平信号,此电平信号将通过相应端口传送入主芯片中,主芯片通过内部代码完成机器人的避悬崖
3、操作。同时P3.5与P3.6的信号状态将通过P2.6/P2.7显示出来。在机器人的左转,右转,后退的过程,可以通过观看以P2.0/P0.7为指示灯的运行状态。P0.4为机器人的声控检测端口,在运行为前进状态时,可以能过声控(如拍手声)来控制它的运行与停顿。P0.6为机器人的声音输出端。在机器人遇到障碍物时。进展绕障碍物与避悬崖时可以通过此端口控制蜂鸣器发出报警声。当为白天或黑夜时可以通过P0.5端口中的光敏电阻来进展判断,以方便完成机器人夜间自动照明等功能。两个按键以查询/中断两种不同的方式来展现按键操作。你可以按下S1键来进展机器的停顿。再按下S2键来进展机器人的运行。这个按键的信息分别被P
4、3.2,P3.4接收到。IR1为红外遥控接收器,这就为机器人进展远程遥控创造了可能。这个红外遥控接收头接收到红外信号时将信号经过P3.3送入到主芯片,主芯片对其进展解密后以不同的方式对机器人进展控制。同时将用户的按键信息通过P2端口上LED数码管显示出来。P3.0、P3.l中COM端口的参加,让你完全可以用电脑对其进展控制。你可以通过对串口发送数据,数据会被显示到LED数码管中,并让机器人执行相应的功能。电脑的串口软件要求波特率为9600。8位数据位,这时你就可以快乐的用电脑来对它进展你的完全控制了。 EXKJ-ZN02功能的组合多样,使得学生可以充分发挥自主能力,制作出不同的机器人。它为学校
5、进展机器人竞赛和毕业工程设计建设了实物平台,是学校教师授课变得更轻松有趣。同时也能改变学生学习模式和激发学习兴趣。更是作为验证学生学习效果的有力工具。良好的电路板设计,让学生制作变得方便容易,其大大提高了学生的制作成功率。提高了学生对电子电路的兴趣,更是教学过程中不可或缺的教具。实验一 程序状态指示灯演示实验简介:本程序重点演示了一个最简程序的 基本构造,它从顺序、判断、循环的形式表现程序的 基本构造,此程序通过闪灯不断的闪动,及闪灯闪动的快慢来表示程序不不同工作状态。它也是常数字设备中进展状态表示的方法之一(例:网卡)。实验原理图:实现代码:/=/实验名称:程序状态指示灯演示程序 / 开发日
6、期: 2009/01/19 / 修改日期: / 程序作者: guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用. / 特别声明: 此程序可作研究之用,但引用,转载,使用请注明出处. /=/#include /包含头文件#define LED P1 /宏定义显示端口号void Delay(unsigned int DelayTime) /定义可变延时函数 while(DelayTime-); /延时函数进入倒计时void main() /程序主函数码 unsigned int CountData=0;
7、 /定义一个整形变量,用于闪动次数+ while(1) /主程序循环体开场 if(CountData30) /判断闪动次数是否位于0-30之间 Delay(60000); /用60000作为基数开场延时函数 else if(CountData60) /判断闪动次数是否位于30-60之间 Delay(30000); /用30000作为基数开场延时函数 else if(CountData90) /判断闪动次数是否位于60-90之间 Delay(10000); /用10000作为基数开场延时函数 else if(CountData120) /判断闪动次数是否位于90-120之间 CountData=
8、0; /仅进展一次操作即可退出. CountData=CountData+1; /闪动次数基数+ LED=LED; /将显示端口进展取反操作 运行效果:程序运行效果为:开机后程序以慢速闪动,一段时间后速度开场加快,再等待时间,闪灯的速度到达最快,之后一段时间后,闪动将回到开场状态。实验二 流水灯演示实验简介:本程序全面的表现了子程序的用法,它从对几个子程序的操作,显示不同的流灯技术,流水灯的不同需要不同的表现的形式,而这里主要介绍了移位操作和内部数据存储及读入操作。延时函数采用可重入标志,可进展函数的递归调用。实验原理图:实现代码:/=/ 开发日期: 2009/01/20 / 修改日期: /
9、程序作者: guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用. / 特别声明: 此程序可作研究之用,但引用,转载,使用请注明出处. /=/#include /包含头文件#define Led P1 /定义显示端口号unsigned int code BToM=0 x7E,0 x3C,0 x18,0 x00; /定义由两边到中间显示数据unsigned int code MToB=0 xE7,0 xC3,0 x81,0 x00;/定义由中间到两边显示数据void Delay() reentrant
10、/定义可重入的延时函数 unsigned int DelayTime=10000; /定义延时时间基数 while(DelayTime-); /程序开场延时开场void LeftToRight() /定义从左边到右边显示函数unsigned char TempCount=0; /定义显示次数变量 Led=0 xFE; /定义初步显示数据 for(TempCount=0;TempCount8;TempCount+) /通过循环进展数据显示 Delay(); /延时,用在每次移动数据开场处 Led=Led1; /由右边向左边移动数据 return; /空返回语句,说明此子程序的完毕.void Ri
11、ghtToLeft() /定义从右边到左边显示函数 unsigned char TempCount=0; /定义显示次数变量 Led=0 x7F; /定义初步显示数据 for(TempCount=0;TempCount1; /由左边向右移动数据 return; /空返语句,说明此子程序的完毕.void BothToMid() /定义由两边到中间显示子程序 unsigned char TempCount=0; /定义临时次数变量 Led=0 xFF; for(TempCount=0;TempCount5;TempCount+) /通过循环依次进展次数运行 Delay(); /延时,在每次运行前.
12、 Led=BToMTempCount; /读入当次显示数据. return; /空返回,说明此子程序的完毕.void MidToBoth() /定义由中间到两边子程序unsigned char TempCount=0; /定义临时次数变量 Led=0 xFF; for(TempCount=0;TempCount5;TempCount+) /通过循环进展数据显示 Delay(); /延时,在每次数据显示前. Led=MToBTempCount; /读入当次显示数据. return; /空返回,说明此次子程序的完毕.void main() /主程序入口处. while(1) /无穷循环开场. Le
13、ftToRight(); /从左到右进展显示 RightToLeft(); /从右到左进展显示 BothToMid(); /由两边到中间进展显示 MidToBoth(); /由中间到两边进展显示 运行效果:程序运行效果为:开机后,指示灯向从左向右依次点亮,从右向左依次点亮,由两边向中间依次点亮,由中间向两边依次点亮。实验三 数码管演示实验简介:本程序通过对端口的置数操作,展示了数码管的应用技术,数码管是将发光二极管通过一定的形式封装在一个数字的外壳中,可以通过不同的点亮方式来显不同的数字符号。 实验原理图:实现代码:/=/ 开发日期: 2009/01/26 / 修改日期: / 程序作者: gu
14、ojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用. / 特别声明: 此程序可作研究之用,但引用,转载,使用请注明出处. /=/#include /包含头文件typedef unsigned int uint; /重命名整数类型关键字typedef unsigned char uchar; /重命名字符类型关键字uchar code LedShowData=0 x9F,0 x25,0 x0D,0 x99,0 x49, /定义固定存储显示字符 0 x41,0 x1F,0 x01,0 x19,0 x03;/
15、1,2,3,4,5,6,7,8,9,0void Delay() /定义延时函数 uint TempTime=20000; /定义延时时间变量 while(TempTime-); /通过循环进展延时 void main() /主程序开场main() uchar CountData=0; /定义计数变量 while(1) /主程序无限循环开场 P2=LedShowDataCountData; /P2端口读入显示数据 CountData+; /计数变量+(加加) if(CountData=10) /判断是否超出计数范围 CountData=0; /重新置零 Delay(); /延时函数被调用 运行效
16、果:程序运行效果为:程序下载后,数码管将从1-9依次显示,最后将显示数字0. 实验四 数码管及跑马灯演示实验简介:本程序主要是将数码管及跑马灯放在一起显示,它主要说明了,如何将在单系中运行多个看似并行运行的子系统.本程序在此将跑马灯子程序放入到一个头文件中,对于一个大的工程这样将有益于程序文件的管理。实验原理图:实现代码:/=/ 开发日期:2009/01/26 / 修改日期: / 程序 guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注:此程序仅为表现本机功能而演示用,当用作实际工程时请慎用。 / 特别声明:此程序可作研究之用,但引用、转载、使用请注明出处
17、。 /=/#include /包含端口定义头文件unsigned char code LedShowData=0 x9F,0 x25,0 x0D,0 x99,0 x49,/定义数码管显示字符 0 x41,0 x1F,0 x01,0 x19,0 x03;/1,2,3,4,5,6,7,8,9,0#define Led P1 /定义显示端口unsigned char CountData=0; /定义数码管计数器unsigned int code BToM=0 x7E,0 x3C,0 x18,0 x00; /定义由两边到中间显示数据unsigned int code MToB=0 xE7,0 xC3,
18、0 x81,0 x00; /定义由中间到两边显示数据void Delay() reentrant /定义可重入延时函数 unsigned int DelayTime=10000; /定义延时时间变量 while(DelayTime-); /通过循环进展延时 P2=LedShowDataCountData; /置数码管显示数据到P2端口 CountData+; /数码管地址计数器+(加1) if(CountData=10) /判断计数器累计数值 CountData=0; /计数器清零 #include /包含显示方式头文件 void main() /主程序入口 while(1) /无穷循环开场.
19、 LeftToRight(); /从左到右进展显示 RightToLeft(); /从右到左进展显示 BothToMid(); /由两边到中间进展显示 MidToBoth(); /由中间到两边进展显示 /跑马灯.h/void LeftToRight() /定义从左边到右边显示函数unsigned char TempCount=0; /定义显示次数变量 Led=0 xFE; /定义初步显示数据 for(TempCount=0;TempCount8;TempCount+) /通过循环进展数据显示 Delay(); /延时,用在每次移动数据开场处 Led=Led1; /由右边向左边移动数据 retu
20、rn; /空返回语句,说明此子程序的完毕.void RightToLeft() /定义从右边到左边显示函数 unsigned char TempCount=0; /定义显示次数变量 Led=0 x7F; /定义初步显示数据 for(TempCount=0;TempCount1; /由左边向右移动数据 return; /空返语句,说明此子程序的完毕.void BothToMid() /定义由两边到中间显示子程序 unsigned char TempCount=0; /定义临时次数变量 Led=0 xFF; for(TempCount=0;TempCount5;TempCount+) /通过循环依
21、次进展次数运行 Delay(); /延时,在每次运行前. Led=BToMTempCount; /读入当次显示数据. return; /空返回,说明此子程序的完毕.void MidToBoth() /定义由中间到两边子程序unsigned char TempCount=0; /定义临时次数变量 Led=0 xFF; for(TempCount=0;TempCount5;TempCount+) /通过循环进展数据显示 Delay(); /延时,在每次数据显示前. Led=MToBTempCount; /读入当次显示数据. return; /空返回,说明此次子程序的完毕.运行效果:本程序运行效果:
22、本程序运行后,可以看到跑马灯按,从左到右,从右到左,从两边到中间,从中间到两边将依次运行。并且在运行过程中,可以看到数码管依次从1-9-0的顺序显示数字符号。 实验五 按键中断查询演示实验简介:本程序通过两个按键对数码管进展操作,分别向用户演示了查询与中断的操作方式,中断中应用了对按键进展查询的方法来判断按键的键值,查询按键方法中那么采用了键盘延迟的方法来消除按键重复输入。 实验原理图:实现代码:/=/ 开发日期: 2009/01/27 编写按键中断与查询的最初代码 / 修改日期: / 程序作者: guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注: 此程
23、序仅为表现本机功能而演示用,当用作实际工程时请慎用. / 特别声明: 此程序可作研究之用,但引用,转载,使用请注明出处. /=/#include /包含S51地址头文件typedef unsigned char uchar; /重定义无符号字符型typedef unsigned int uint; /重定义无符号整型sbit S1=P32; /定义S1变量sbit S2=P34; /定义S2变量uchar DataCount=0; /定义全局计数器uchar code LedShowData=0 x9F,0 x25,0 x0D,0 x99,0 x49, /定义固定存储显示字符 0 x41,0
24、x1F,0 x01,0 x19,0 x03;/1,2,3,4,5,6,7,8,9,0void KeyDelay() /定义键盘防抖子程序 uint KeyTime=20000; /定义防抖时间变量 while(KeyTime-); /防抖延时开场 return;void S1_Break() interrupt 0 /定义S1(INT0)外部中断0while(0=S1); /判断S1按键键值DataCount-; /计数器数值减1if(DataCount9) /判断计数器是否到最小值 DataCount=9; /显示数字0return; void main() /主程序开场 ET0=1; /设
25、定外部中断触发方式(1-低电平触发) EX0=1; /开启外部中断0 EA=1; /开记总中断 while(1) /程序主循环 if(0=S2) /通过查询判断键值 KeyDelay(); /键盘防抖动开延时子程序开场 DataCount+; /计数器加1 if(DataCount9) /判断当前计数器 DataCount=0; /将计数器置0 P2=LedShowDataDataCount; /通过端口显示计数器数值 运行效果:程序运行效果:开机后数码管显示数字1,当按S1不放时,数码管数字不变,,松开S1按键,数码减1;按S2键不放时,数码管数字会自动加1。并且数字遵守从0-9循环操作。
26、实验六话筒声音识别演示实验简介:本程序主要通过话筒对声音信号进展识别,由于本电路有效的去除杂波,所以仅能对响度较大的声音进展识别(例:拍手声)。像正常的说话声对本电路虑除,不会产生信息的输入。话筒识别的参加,为我们建设了声控平台。实验原理图:实现代码:/=/ 开发日期: 2009/01/27 / 修改日期: / 程序作者: guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用. / 特别声明: 此程序可作研究之用,但引用,转载,使用请注明出处. /=/#include /包含51单片机相关头文件sbi
27、t LeftLed=P20; /定义前方左侧指示灯端口sbit RightLed=P07; /定义前方右侧指示灯端口sbit B1=P04; /定义话筒输入端口void Delay() /定义去除杂音延时子程序 unsigned int DelayTime=1000; /定义去除杂音变量 while(DelayTime-); /延时循环开场 return;void main() /主程序入口 LeftLed=0; /前方左侧指示灯亮 RightLed=0; /前方右侧批示灯亮 while(1) /程序主循环 if(0=B1) /判断是否有声音输入 while(0=B1); /等待声音信号完毕
28、Delay(); /去除多余杂音 LeftLed=!LeftLed; /前方左侧指示灯取反 RightLed=!RightLed; /前方右侧指示灯取反 运行效果:程序运行效果:本程序开机后,前方两侧的指示灯点亮,拍一下手后,前方指示灯关闭。再一次进展拍手,指示灯又一次被点亮。实验七 光敏电阻与蜂鸣器演示实验简介:本程序讲述了光敏电阻的使用方法。当处于光暗时,光敏电阻导通,将信号传入到单片机,单片机将控制蜂鸣器按一定的频率响亮,并且前方的指示灯也开场闪闪亮。通过对光敏电阻信号的接收,从而实现了夜间自动照明的功能。 实验原理图:实现代码:/=/ 开发日期: 2009/01/27 编写光敏电阻与蜂
29、鸣器演示程序最初代码 / 修改日期: / 程序作者: guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用. / 特别声明: 此程序可作研究之用,但引用,转载,使用请注明出处. /=/#include /包含51单片机相关的头文件sbit RL1=P05; /定义光敏电阻接收端口sbit SB1=P06; /定义蜂鸣器响铃端口sbit LeftLed=P20; /定义前方左侧指示灯端口sbit RightLed=P07; /定义前方右侧指示灯端口void Delay() /定义蜂鸣器频率响亮子程序 u
30、nsigned int DelayTime=20000; /定义频率定时变量 while(DelayTime-); /频率定时循环开时 return;void main() /主程序入口 while(1) /程序主循环 if(1=RL1) /判断光敏的现在状态(有光0,无光1) Delay(); /延时子程序开时 SB1=!SB1; /蜂鸣器响亮 LeftLed=!LeftLed; /前方左侧指示灯闪亮 RightLed=!RightLed; /前方右侧指示灯闪亮 else SB1=1; /将蜂鸣器关闭 LeftLed=1; /前方左侧指示灯关闭 RightLed=1; /前方右侧指示灯关闭
31、运行效果:程序运行效果:翻开电源开关,如果本机在有光照的情况下,将无任何的反响,这时将机子移动到较黑暗的地方,将会看到前方指示灯闪亮和蜂鸣器响亮。实验八红外反射与直流电机驱动演示实验简介:本程序通过前端,底端的红外发射头和接收头来判断小车的运行轨迹,当前与底端发生信号输入时,信号将被单片机接收,单片机来控制机器按照写好的程序开场运行。同时为到达好的效果,参加声音识别与蜂鸣器输入输出设备。.使得此机器人的运动变得更加有趣。实验原理图:实现代码:/=/ 开发日期:2009/01/28 / 修改日期: / 程序 guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注
32、:此程序仅为表现本机功能而演示用,当用作实际工程时请慎用。 / 特别声明:此程序可作研究之用,但引用、转载、使用请注明出处。/=/#include /包含51单片机相关的头文件sbit LeftLed=P20; /定义前方左侧指示灯端口sbit RightLed=P07; /定义前方右侧指示灯端口sbit LeftIR=P35; /定义前方左侧红外探头端口sbit RightIR=P36; /定义前方右侧红外探头端口sbit FontIR=P37; /定义前方正前方红外探头端口sbit M1A=P00; /定义左侧电机驱动A端sbit M1B=P01; /定义左侧电机驱动B端sbit M2A=
33、P02; /定义右侧电机驱动A端sbit M2B=P03; /定义右侧电机驱动B端sbit B1=P04; /定义语音识识别传感器端口sbit SB1=P06; /定义蜂鸣器端口#define RunShow P1 /定义数据显示端口void Delay() /定义机器人调转子时间子程序 unsigned int DelayTime=50000; /定义机器人转弯时间变量 while(DelayTime-); /机器人转弯循环 SB1=!SB1; /蜂鸣器闪响 return;void ControlCar(unsigned char ConType) /定义电机控制子程序 M1A=0; /将M
34、1电机A端初始化为0 M1B=0; /将M1电机B端初始化为0 M2A=0; /将M2电机A端初始化为0 M2B=0; /将M2电机B端初始化为0 switch(ConType) /判断用户设定电机形式 case 1: /前进 /判断用户是否选择形式1 M1A=1; /M1电机正转 M2A=1; /M2电机正转 break; case 2: /后退 /判断用户是否选择形式2 M1B=1; /M1电机反转 M2B=1; /M2电机反转 break; case 3: /左转 /判断用户是否选择形式3 M1B=1; /M1电机反转 M2A=1; /M2电机正转break; case 4: /右转 /
35、判断用户是否选择形式4 M1A=1; /M1电机正转 M2B=1; /M2电机反转break; case 8: /停顿 /判断用户是否选择形式8 break; /退出当前选择 void main() /主程序入口 bit RunFlag=0; /定义小车运行标志位 RunShow=0; /初始化显示状态 ControlCar(1); /初始化小车运行状态 while(1) /程序主循环 LeftLed=LeftIR; /前方左侧指示灯指示出前方左侧红外探头状态 RightLed=RightIR; /前方右侧指示灯指示出前方右侧红外探头状态 RunShow=FontIR; /数据显示窗口,指示前
36、方红外探头状态 if(FontIR=0 | LeftIR=1 | /判断前方,左侧,右侧是否有信号输入 RightIR=1) ControlCar(2); /让小车后退Delay(); /开场小车后退延时子程序Delay(); /决定了小车后退的步数Delay(); /改变它可以改小车后退的距离Delay(); /这里只是一个延时 ControlCar(3); /改变小车为左转方向Delay(); /开场小车左转延时子程序Delay(); /改变它可以改变小车旋转的角度Delay(); /同上Delay(); /同上ControlCar(1); /改变小车为前进运行状态SB1=1; /这个多一
37、步将蜂鸣器关闭 if(B1=0) /判断是否有声音信号输入 while(B1=0); /去除声音多余的杂波if(RunFlag=0) /判断小车当前的运行状态标志RunFlag=1; /改变小车当前的运行状态标志 ControlCar(8); /停顿小车的运行else /否那么执行的代码如下RunFlag=0; /判断小车的运行状态标志 ControlCar(1); /改变小车为前进的运行状态 运行效果:程序效果: 翻开本机电源开关,机器人开场向前运行(这要看当时的条件),在运动的过程中,如果前方有障碍物,机器人那么开场向后后退一段时间后,向左运动,在向左运行一段时间后。再开场向前运行。在整个
38、调向的过程中,蜂鸣器闪响。并且在机器人前进的过程中,你可以通过拍手来控制机器人的停顿和运行。 实验九红外遥控器解码程序演示实验简介:本程序主要将现在比较常用M50462遥控器进展解码,将解码后的数据通过P2端口的数码管显示出来,为了更好的看到运行过程,特加了三个指示灯用来指示当前运行状态。P10闪亮,表示程序正在运行;P11闪亮,表示接收到数据;P12闪亮,表示触发内部的定时器操作;P13闪亮,表示正确接收完一个数据。 实验原理图:实现代码:/=/ 开发日期:2009/01/27 / 修改日期: / 程序 guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注
39、:此程序仅为表现本机功能而演示用,当用作实际工程时请慎用。/ 特别声明: 此程序可作研究之用,但引用、转载、使用请注明出处。 /=/#include /包含51单片机相关的头文件unsigned char code LedShowData= /定义数码管显示数据 0 x9F,0 x25,0 x0D,0 x99,0 x49, /1,2,3,4,5, 0 x41,0 x1F,0 x01,0 x19,0 x03; /6,7,8,9,0,static unsigned int RecvData; /定义接收红外数据变量static unsigned char CountData; /定义红外个数计数变
40、量static unsigned char AddData; /定义自增变量static unsigned int LedFlash; /定义闪动频率计数变量unsigned char HeardData; /定义接收到数据的高位变量sbit RunLed=P10; /定义运行指示灯变量位sbit RecvLed=P11; /定义接收指示灯变量位sbit InTimeLed=P12; /定义定时器开场指示灯变量位sbit ReadyLed=P13; /定义就绪指示灯变量sbit IR1=P33; /定义红外接收端口#define ShowPort P2 /定义数码管显示端口void Timer
41、0_IR1() interrupt 1 using 3 /定义红外定时器子程序 TH0=0 xFF; /向定时器定时间存放器填入高八位值 TL0=0 x19; /向定时器定时间存放器填入低八位值 InTimeLed=!InTimeLed; /将定时器指示灯进展取反 AddData+; /自增变量加1void Int1_IR1() interrupt 2 /定义红外接收中断子程序 RecvLed=!RecvLed; /将红外接收数据进展取反 ReadyLed=1; /红外接收数据指示灯置1 if(4=AddData) /0 /判断接收到的数据是0 RecvData=RecvData | 0; /
42、判断到0就将当前位写0 RecvData=RecvData 1; /将当前位向左移动1位 else if(8=AddData)/1 /判断接收到的数据是1 RecvData=RecvData | 1; /将当前位写1 RecvData=RecvData 1; /将当前位向左移动1位 CountData+; /将红外接收位计数器加1 if(CountData=8) /判断是否接收到8位数据 HeardData=RecvData; /是8位数据时,那么将数据暂存到高位变量中 else if(CountData=16) /判断是否接收到16位数据 ET0=0; /关闭红外定时器0 EX1=0; /关
43、闭红外外部中断1 AddData=0; /定时时间间隔变量清零 if(HeardData=226 | HeardData=112)/判断用户码是否正确 ReadyLed=0; /用户码正确那么就绪指示灯点亮一下HeardData=RecvData; /取出接收到的低八位数据 switch(HeardData) /判断低八位数据的值以下那一位 case 32: /电源 /说明按下了电源键 /在这里填写你自己的代码 /根据你的功能自己写 break; /返回 case 46: /TV/AV /说明按下了TV/AV键 /在这里填写你自己的代码 /根据你的功能自己写 break; /返回 case 0
44、: /1 /说明按下数字1键 ShowPort= LedShowData0; /数码管显示数字1 break; /返回 case 8: /2 /说明按下了数字2键 ShowPort= LedShowData1; /数码管显示数字2 break; /返回 case 4: /3 /说明按下了数字3键 ShowPort= LedShowData2; /数码管显示数字3 break; /返回 case 12: /4 /说明按下了数字4键 ShowPort= LedShowData3; /数码管显示数字4 break; /返回 case 2: /5 /说明按下了数字5键 ShowPort= LedSho
45、wData4; /数码管显示数字5 break; /返回 case 10: /6 /说明按下了数字6键 ShowPort= LedShowData5; /数码管显示数字6 break; /返回 case 6: /7 /说明按下了数字7键 ShowPort= LedShowData6; /数码管显示数字7 break; /返回 case 14: /8 /说明按下了数字8键 ShowPort= LedShowData7; /数码管显示数字8 break; /返回 case 64: /9 /说明按下了数字9键 ShowPort= LedShowData8; /数码管显示数字9 break; /返回
46、case 72: /0/30 /说明按下0/30键 ShowPort= LedShowData9; /数码管显示数字0 break; /返回 case 68: /10+ /说明按下10+键 /在这里填写你自己的代码 /根据你的功能写代码 break; /返回 case 76: /20+ /说明按下了20+键 /在这里填写你自己的代码 /根据你的功能写代码 break; /返回 case 36: /CH- /说明按下了CH-键 /在这里填写你自己的代码 /根据你的功能写代码 break; /返回 case 40: /CH+ /说明按下了CH+键 /在这里填写你自己的代码 /根据你的功能写代码 b
47、reak; /返回 RecvData=0; /将接收到的数据清零 CountData=0; /将接收计数器清零 HeardData=0; /将接收上下数据变量清零 return; /返回 AddData=0; /将定时器计数器清零 ET0=1; /翻开定时器中断void main(void) /主程序入口 bit ExeFlag=0; /定义可执行位变量 RecvData=0; /将接收变量数值初始化 CountData=0; /将计数器变量数值初始化 AddData=0; /将定时器计数器初始化 HeardData=0; /将上下计数器初始化 LedFlash=3000; /对闪灯数据进展初
48、始化 TMOD=0 x01; /选择定时器0为两个16位定时器 TH0=0 xFF; /对定时器进展计数值进展初始化 TL0=0 x19; /同上,时间大约为25uS TR0=1; /同意开场定时器0 EX1=1; /同意开启外部中断1 IT1=1; /设定外部中断1为低边缘触发类型 EA=1; /总中断开启 while(1) /程序主循环 while(LedFlash-) /闪灯总延时 if(IR1=0) /判断延时期间是否有红外信号输入 ExeFlag=1; /将可执行标志位置1 RunLed=!RunLed; /运行指示灯取反 LedFlash=3000; /运行闪动时间重设定 if(E
49、xeFlag=0) /判断可执行标志位 EX1=1; /开启外部中断1 ExeFlag=0; /可执行标志位置0 运行效果:程序运行效果: 翻开本机电源开关,可以看到P10不停的闪动,按下遥控器的数字键,数码管那么显示相应的数字键(1-9)。可以看到P11、P12在显示后呈亮状态,那么可以接收下一个数据,在上面过程中可以看到P13闪亮了一下,说明上次正确接收到数据。实验十串口通信程序演示实验简介:本程序通过数码管,LED指示灯的闪亮来表示当前串口通信的结果,串口通信使单片机与电脑之间通信的桥梁,通过对它的学习,可以很好的用电脑来进展单片机的控制,及对单片机数据的采集。因此串口通信被广泛的用于工
50、业控制中。 实验原理图:实现代码:/=/ 开发日期:2009/01/29 / 修改日期:: / 程序 guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注:此程序仅为表现本机功能而演示用,当用作实际工程时请慎用。 / 特别声明: 此程序可作研究之用,但引用、转载、使用请注明出处。 /=/#include /包含51单片机相关头文件#define RunLed P1 /定义运行指示灯显示端口#define ShowPort P2 /定义数码管显示端口unsigned char code LedShowData= /定义数码管显示数据变量 0 x03,0 x9F
51、,0 x25,0 x0D,0 x99,0 x49, /定义固定存储显示字符 0 x41,0 x1F,0 x01,0 x19;/1,2,3,4,5,6,7,8,9,0void ComBreak() interrupt 4 /定义串口通信子程序unsigned char RecvData; /定义串口数据接收变量 if(RI=1) /判断是否接收数据 RecvData=SBUF; /将接收到的数据放入暂时变量 if(RecvData10) /判断接收到的数据是否小于10 ShowPort=LedShowDataRecvData;/将接收到的数据通过数码管显示出来 SBUF=RecvData; /向
52、电脑返回当前接收到的数据 RI=0; /去除接收中断标志位 if(TI=1) /判断是否是发送中断 TI=0; /去除发送中断标志位 void main() /主程序入口 unsigned int FlashTime=8000; /程序运行指示灯延时变量 SCON=80; /设置串口模式为8位数据 TMOD=32; /设置定时/计数器模式 TH1=0 xFD; /给定时器1高八位初始化初值 TL1=0 xFD; /给定时器1低八位初始化初值 TR1=1; /开启定时器1 ES=1; /开启串口通信功能 REN=1; /开启接收中断标志 EA=1; /总中断开启 while(1) /程序主循环
53、while(FlashTime-); /延时子循环,用于运行闪灯效果 FlashTime=8000; /对指示灯延时初始化 RunLed=RunLed; /将指示灯显示端口取反 运行效果:程序运行效果:翻开本机电源开关后,可以看到P1端LED指示灯在不停的闪耀,我们使用“串口调试助手或其它软件向单片机发送数据,可以看到相应的数据显示在数码管上,并且发送的数据又返回到电脑中。(只显示0-9数字) 实验十一综合功能演示实验简介:本程序通过将以前所编写的分立程序通过有机结合,编制成一个大的应用系统。小车在完成自动防撞,防悬崖等动作外,还可以通过红外遥控器进展远程遥控。如果你对电脑编程很有趣兴的话,当
54、然也可以通过电脑对串口进展编程。以方便通过电脑来进展对小车控制。在正常的运特过程中,还可以通过声控(拍手声)来对小车进展控制,每一种控制小车都会完成相应的功能。为了更清晰的看到小车运行过程状态,特将P1端口中的8个指示灯作为运行状态指示灯。以用来观察小车运行中的每一步。 实验原理图实现代码:/=/ 开发日期: 2009/01/30 编写综合功能演示子程序的最初代码确 / 修改日期: / 程序作者: guojun 邮箱:GuoGuoExkj126 / 开发商:益芯科技技术部 / 程序备注: 此程序仅为表现本机功能而演示用,当用作实际工程时请慎用. / 特别声明: 此程序可作研究之用,但引用,转载
55、,使用请注明出处. /=/#include /包含51相关的头文件typedef unsigned char uchar; /重定义char数据类型typedef unsigned int uint; /重定义int数据类型#define ShowPort P2 /定义数码管显示端口uchar code LedShowData=0 x03,0 x9F,0 x25,0 x0D,0 x99, /定义数码管显示数据 0 x49,0 x41,0 x1F,0 x01,0 x19;/0,1,2,3,4,5,6,7,8,9static unsigned int RecvData; /定义接收红外数据变量st
56、atic unsigned char CountData; /定义红外个数计数变量static unsigned char AddData; /定义自增变量static unsigned int LedFlash; /定义闪动频率计数变量unsigned char HeardData; /定义接收到数据的高位变量bit RunFlag=0; /定义运行标志位/*完成 基本数据变量定义*/sbit S1State=P10; /定义S1状态标志位sbit S2State=P11; /定义S2状态标志位sbit B1State=P12; /定义B1状态标志位sbit IRState=P13; /定义
57、IR状态标志位sbit RunStopState=P14; /定义运行停顿标志位sbit FontIRState=P15; /定义FontIR状态标志位sbit LeftIRState=P16; /定义LeftIR状态标志位sbit RightIRState=P17; /定义RightIRState状态标志位/*完成状态指示灯定义*/sbit S1=P32; /定义S1按键端口sbit S2=P34; /定义S2按键端口/*完成按键端口的定义*/ sbit LeftLed=P20; /定义前方左侧指示灯端口sbit RightLed=P07; /定义前方右侧指示灯端口/*完成前方指示灯端口定义
58、*/sbit LeftIR=P35; /定义前方左侧红外探头sbit RightIR=P36; /定义前主右侧红外探头sbit FontIR=P37; /定义正前方红外探头/*完成红外探头端口定义*/sbit M1A=P00; /定义电机1正向端口sbit M1B=P01; /定义电机1反向端口sbit M2A=P02; /定义电机2正向端口sbit M2B=P03; /定义电机2反向端口/*完成电机端口定义*/sbit B1=P04; /定义话筒传感器端口sbit RL1=P05; /定义光敏电阻端口sbit SB1=P06; /定义蜂鸣端口/*完成话筒,光敏电阻,蜂鸣器.端口定义*/sbi
59、t IR1=P33; /定义红外接收端口/*完成红外接收端口的定义*/void Delay() /定义延时子程序 uint DelayTime=30000; /定义延时时间变量 while(DelayTime-); /开场进展延时循环 return; /子程序返回void ControlCar(uchar CarType) /定义小车控制子程序 M1A=0; /将电机1正向电平置低 M1B=0; /将电机1反向电平置低 M2A=0; /将电机2正向电平置低 M2B=0; /将电机2反向电平置低 LeftLed=1; /关闭前方左侧指示灯 RightLed=1; /关闭前方右侧指示灯 Delay
60、(); /将此状态延时一段时间 switch(CarType) /判断小车控制指令类型 case 1: /前进 /判断是否是前进 M1A=1; /将电机1正向端口置高 M2A=1; /将电机2正向端口置高 break; /退出判断 case 2: /后退 /判断是否是后退 M1B=1; /将电机1反向端口置高 M2B=1; /将电机2反向端口置高 LeftLed=0; /将前方左侧指示灯置低(亮) RightLed=0; /将前方右侧指示灯置低(亮) break; /退出判断 case 3: /左转 /判断是否是左转 M1B=1; /将电机1反向端口置高 M2A=1; /将电机2正向端口置高
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- KET-布局B-考试-补中文-随机版
- 邮储银行员工述职报告范文(17篇)
- 2026年度演出经纪人员资格考试《思想政治与法律基础》试卷及答案解析
- 车间安全常态化巡查细则
- DB15-T 4497-2026 旅游景区智慧服务规范
- 2025公司职工安全培训考试题含答案
- 2026年疾病预防控制中心招聘考试笔试试题及答案
- 2026年刺绣工艺市场价格分析
- 下放液压支架安全技术措施培训课件
- 2026中国无人机动力电池行业技术发展与竞争格局报告
- (正式版)DB11∕T 2291-2024 《建设工程电子文件与电子档案管理规程》
- 气象行业公共服务技能竞赛理论知识试题及答案
- 夏季四防培训试题及答案
- 各部门、岗位人员及施工现场总分包安全生产责任制
- (2026年)中小学阳光招生专项行动课件
- 2026年文联工作人员招聘面试常见问题与备考
- 2026 文物保护责任监理师《法律法规与工程管理》核心知识模块考试参考题库 含答案
- 维修业务接待制度
- 融资助贷合同范本
- GB/T 10412-2025带传动普通和窄V带轮(基准宽度制)
- 油罐防腐工程技术方案
评论
0/150
提交评论