本任务要求设计与制作一个基于单片机控制的简易自动循迹小车,小车以AT89C51 为控制核心,用单片机产生PWM波,控制小车速度。利用红外光电传感器对路面黑色轨迹进行检测,并将路面检测信号反馈给单片机。单片机对采集到的信号予以分析判断,及时控制驱动电机以调整小车转向,从而使小车能够沿着黑色轨迹自动行驶,实现小车自动寻迹的目的。加热用以红色发光二极管代表,红灯亮表示加热,红灯灭表示停止加热。
附件包含:proteus仿真图,C源码,hex文件。
单片机源程序如下:
#include #define uchar unsigned char #define uint unsigned int unsigned char zkb1=0; //**左边电机的占空比**// unsigned char zkb2=0 ; //**右边电机的占空比**// unsigned char t=0; //**定时器中断计数器**// sbit RSEN1=P1^0; sbit RSEN2=P1^1; sbit LSEN1=P1^2; sbit LSEN2=P1^3; sbit IN1=P0^0; sbit IN2=P0^1; sbit IN3=P0^2; sbit IN4=P0^3; sbit ENA=P0^4; sbit ENB=P0^5; //****************延时函数****************// void delay(int z) { while (z--); } //**********初始化定时器,中断***********// void init() { TMOD=0x01; TH0=(65536-100)/256; TL0=(65536-100)%256; EA=1; ET0=1; TR0=1; } //***********中断函数+脉宽调制***********// void timer0() interrupt 1 { if(t else ENA=0; if(t else ENB=0; t++; if(t>=100) {t=0;} } //******************直行******************// void qianjin() { zkb1=30; zkb2=30; } //***************左转函数1***************// void turn_left1() { zkb1=0; zkb2=50; } //***************左转函数2***************// void turn_left2() { zkb1=0; zkb2=60; } //***************右转函数1***************// void turn_right1() { zkb1=50; zkb2=0; } //***************右转函数2***************// void turn_right2() { zkb1=60; zkb2=0; } //***************循迹函数*****************// void xunji() { uchar flag; if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1)) { flag=0; }//*******直行*******// else if((RSEN1==0)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1)) { flag=1;} //***左偏1,右转1***// else if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1)) { flag=2;} //***左偏2,右转2***// else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==1)) { flag=3; }//***右偏1,左转1***// else if((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0)) { flag=4; }//***右偏2,左转2***// switch (flag) { case 0:qianjin(); break; case 1:turn_right1(); break; case 2:turn_right2(); break; case 3:turn_left1(); break; case 4 :turn_left2(); break; default:break; } } //****************主程序****************// void main() { init(); zkb1=30; zkb2=30; while(1) { IN1=1; //******给电机加电启动******// IN2=0; IN3=1; IN4=0; ENA=1; ENB=1; while(1) { xunji(); //*********寻迹**********// } } }
上一篇:单片机通过单个按键按下时间(长短按键)执行不同功能
下一篇:最后一页
推荐阅读
史海拾趣
Advantech公司是一家全球领先的工业计算机、自动化和嵌入式解决方案提供商,其发展历程充满了创新、合作和技术进步。以下是关于Advantech公司发展的五个相关故事:
创立与早期发展: Advantech公司成立于1983年,最初名为台湾多媒体公司,其初衷是提供音频和视频卡。随着技术的发展和市场需求的变化,公司逐渐转型为提供工业计算机和自动化解决方案的领先供应商。
全球化战略: 随着全球市场的不断扩大,Advantech制定了全球化战略,积极拓展海外业务。1994年,公司在美国成立了第一家子公司,标志着其国际化发展的开始。此后,Advantech陆续在欧洲、亚洲和其他地区建立了办事处和分支机构,构建起了覆盖全球的销售和服务网络。
技术创新与合作伙伴关系: 作为工业自动化领域的领导者之一,Advantech不断进行技术创新,并与全球各类合作伙伴密切合作。公司积极投入研发资金,不断推出新产品和解决方案,以满足客户不断变化的需求。同时,Advantech与众多软件和硬件供应商建立了紧密的合作关系,共同推动行业的发展。
智能化转型: 随着工业4.0和物联网的迅速发展,Advantech积极响应智能化转型的趋势,推出了一系列智能化解决方案,涵盖工业自动化、智慧城市、智能交通等多个领域。公司致力于为客户提供智能化、数字化的整体解决方案,助力其实现生产效率提升和智能化升级。
生态系统建设: 为了进一步提升解决方案的综合性和竞争力,Advantech积极构建生态系统,与行业合作伙伴共同打造全方位的服务体系。公司通过开放式的合作模式,与合作伙伴共享资源和技术,实现优势互补,共同拓展市场,推动行业的发展和进步。
以上述五个方面为基础,Advantech在电子行业中不断发展壮大,成为了全球工业自动化和智能化领域的领导者之一。
EUPEC,全称欧洲电力半导体与电子公司(European Semiconductors and Electronics Company),成立于1990年。它是由西门子和德国另一家大型电器公司AEG生产电力半导体器件的两个部门合并而成。这次合并标志着EUPEC正式进入电力半导体领域,凭借其强大的技术背景和丰富的行业经验,EUPEC迅速在市场中占据了一席之地。
进入21世纪,随着信息技术的飞速发展和工业4.0时代的到来,电子行业面临着前所未有的技术变革。Friedrich Lütze GmbH 积极应对这一挑战,致力于将物联网(IoT)、大数据、人工智能等先进技术融入产品之中,推动公司向智能化、网络化方向转型升级。公司通过建立智能制造体系,提升生产效率和产品质量,同时开发出更加智能、便捷的工业自动化解决方案,为客户提供更加全面的服务。
随着工业自动化需求的不断增长,Friedrich Lütze GmbH 敏锐地捕捉到了这一市场机遇。公司开始加大研发投入,不断推出新产品,如可编程逻辑控制器(PLC)、传感器和执行器等,以满足不同行业对自动化控制解决方案的需求。同时,公司积极拓展国内外市场,与多家知名企业建立了长期合作关系,进一步巩固了其在工业自动化领域的领先地位。
在电子行业的萌芽期,Friedrich Lütze GmbH 由弗里德里希·吕策(虚构姓名,代表公司创始人)于20世纪中期创立。当时,电子行业正处于快速发展阶段,吕策凭借对电气技术的深厚理解和敏锐的市场洞察力,决定专注于工业自动化控制领域。公司初期主要研发和生产电子控制元件,如继电器和接触器,这些产品凭借高质量和稳定性迅速在市场上获得认可,为公司的后续发展奠定了坚实基础。
进入21世纪后,电子行业迎来了新的发展机遇和挑战。面对行业内的激烈竞争和技术的快速迭代,Elite意识到必须加快转型升级步伐。公司开始涉足智能家居、物联网等新兴市场领域,并成功推出了一系列具有竞争力的产品。这些新产品不仅为公司带来了新的增长点,也进一步巩固了Elite在电子行业的领先地位。
在Wince里创建了cmnet进行GPRS拨号连接,但是连接属性里的拨号地点默认是“单位”,这样会导致拨号码前多了一个“9”,变成“9,*99***1#”,拨号连接不成功。必须手动将拨号地点改为“住宅”才行。 请问大家,如何设置能够使拨号地点默认为“住宅 ...… 查看全部问答∨ |
有调通过marvell wifi 8686 sdio接口驱动来讨论下??? 正在调sdio接口的wifi 8686驱动,sdio确认好的,读写寄存器,加载固件都没问题。有以下问题: 1. 我是直接把驱动放在bsp中编的,wince启动后自动加载wifi驱动, 并且这个wifi驱动会自行搜索热点。我的理解是wifi驱动加载固件启动完wifi芯片注册网络 ...… 查看全部问答∨ |
SESSION_POS_S *pTestpos1, *pTestpos2, *pTestpos3, *pPos; LIST *pMyList = NULL; int NodeIndex = 0; DPRINT("-------- lstAdd测试 -------\\n ...… 查看全部问答∨ |
|
想请问你一下 那个ez430-rf2500为什么ed连上电池两个灯还是不闪。。ap的红灯在闪烁。。并且PC上温度只有一个ap温度显示。。就是说ed的没有反应。。好像是没有连接到网络。。后来又折腾了一下。。现在ap的红绿灯都在闪。。但是ed还是没反应。 ...… 查看全部问答∨ |
|
#include<reg51.h> // 包含51单片机寄存器定义的头文件unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0~9的段码unsigned char int_time ; //中断次数计数变量unsigned ...… 查看全部问答∨ |
module main ( ....); wire clk1MHz; // 产生1MHz的时钟波形 // 输入为20MHz的时钟 clock_divider instT1MHz &nb ...… 查看全部问答∨ |