89C51单片机最小系统设计
- 格式:doc
- 大小:862.00 KB
- 文档页数:12
基于单片机遥控小车的设计摘要随着电子业的发展,自动化已不再是一个新鲜的话题,无人驾驶的遥控小汽车也必将进入实用阶段,智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。
智能电动车就是其中的一个体现。
本系统模拟基于51单片机的遥控小车的设计。
89C51单片机是一款八位单片机,他的易用性和多功能性受到了广大使用者的好评。
这里介绍的是如何用89C51单片机来实现无线遥控小车的毕业设计,该设计是结合实际应用而确定的设计类课题。
本系统以设计题目的要求为目的,采用89C51单片机为控制核心,采用L298N对小车电机的控制,利用以PT2262/PT2272芯片的无线遥控模块装置,本次设计基于完备的软硬件系统,很好的实现了电动小汽车的前后行进,特定路径的行驶,以及停车。
整个系统的电路结构简单,可靠性能高。
实验测试结果满足要求,本文着重介绍了该系统的硬件设计方法及测试结果分析关键词:单片机;无线控制技术;PWM调速;L298N;PT2262/2272。
The Design of Remote Control CarBased On MCUAbstractAlong with the development of electronic, automation is not a fresh word any more, and no-man controlled cars will be realized. The new invention of modern intelligence, is a future of development, he can follow the pattern set in advance in an environment where automatic operation, no human's management, used in scientific exploration and so on. Smart electric car is one of expression. That system is based on the design of 51 MCU controlled car. 89C51 MCU is eight-figure microcontroller, which receives high praise from the users because of its easy use and versatility. This graduation design introduces how 89C51 MCU realize the remote control of the car, a combination of the practical application and design. This system designs for the purpose of the topic request, using 89C51 MCU as control core, the car motor control by L298N,and wireless remote control which chip PT2262/2272 device, with the electric car, driving, and the particular path park. The whole system of the circuit structure is simple and reliable. This paper introduces the hardware design method of the system and the analysis of the test results.Keyword: MCU; Wireless Remote Control; PWM speed adjusting;L298N;PT2262/2272目录1 前言 (4)2 方案设计与论证 (6)2.1直流调速系统 (6)2.2无线控制系统 (7)2.3系统原理图 (8)3 硬件设计与实现 (10)3.189C51单片机硬件结构 (10)3.1.1 一个8位的微处理器(CPU) (11)3.1.2 存储器 (11)3.1.3 I/O接口 (12)3.1.4 定时器/计数器 (12)3.1.5 五个中断源的中断控制系统 (12)3.1.6振荡器及定时电路 (13)3.289C51单片机引脚及其功能 (13)3.2.1 电源引脚Vcc和Vss (14)3.2.2 时钟电路引脚XTAL1和XTAL2 (14)3.2.3 控制信号引脚RST,ALE,/PSEN和/EA (15)3.2.4 输入/输出端口P0,P1,P2和P3 (15)3.3系统运动控制部分设计 (16)3.3.1 电机选型 (16)3.3.2 L298N驱动电机 (17)3.4无线电发射接收模块介绍 (20)3.551单片机的最小应用系统设计 (24)3.6PWM调速系统 (26)4 软件设计 (29)5 测试数据、测试结果分析及结论 (31)致谢...................................................... 错误!未定义书签。
单片机课程设计论文题目:基于单片机的简易电子琴设计学院:机电工程学院专业:电气工程及其自动化姓名: ### ### ###指导教师:完成日期: 2012-12-27目录摘要 (1)绪论 (2)1方案论证 (3)1.1原理图 (3)1.2主体方案 (3)1.3系统方案设计绍 (4)1.3.STC89C51简介 (5)1.3.1单片机工作原理 (8)1.3.2数码管 (13)2实现过程 (14)2.1.1 程序设计内容 (14)2.1.2 I/O并行口直接驱动LED显示 (14)2.2 音乐产生的方法 (15)2.2.1 原理 (15)2.2.2 程序框图 (16)3全文总结 (17)3.1结束语 (18)参考文献 (19)附录 (20)1.电路原理图 (20)2.程序框图 (21)3.系统流程图 (22)4.语言源程序 (23)摘要在现代各种生活中,电子琴作为一种音乐型玩具,广泛用于与人们的日常生活中。
市场上有各种各样的电子琴。
特别是日本产的,音质优美,它是有专门的音乐控制芯片制造的。
由于其价格较贵,无法大面积普及,且功能单一。
用89c51作为主控中心,研制一种简易的微型电子琴,尽可能地体现较好的音质来,是一种可做的尝试。
以单片机为核心设计的简易电子琴系统,由按键扫描电路、声音产生驱动电路、复位电路、等模块组成的,是一种比较实用、廉价的电子玩具。
本论文所设计的简易电子琴,它分为两大部分,硬件电路的设计和软件的设计。
硬件电路的设计以AT89S51单片机为控制主板,辅以外围的扩展设备蜂鸣器、矩阵键盘、共阳数码管,形成一个可被控制的显示系统。
软件设计通过控制单片机内部的定时器T0来产生不同频率的方波,驱动喇叭发出不同音节的声音.再利用延迟来控制发音时间的长短,即可控制音调中的节拍.把乐谱中的音符对应的频率转换为定时常数,把相应的节拍变换为定时常数,然后作成表格存放在储存器中,由程序查表得到定时常数和延时常数,分别用以控制定时器产生方波的频率和该频率方波的持续时间.当延迟常数到时,再查下一个音符的定时常数和延迟常数.依次进行下去,就可演奏悦耳动听的音乐.主要实现 1》能够发出1.2.3.4.5.6.7等七个音符。
接触过单片机的朋友们都时常会听到别人提"最小系统"这个词.那到底什么是最小系统,有怎样设计称上"最小"呢?下面让依依电子来告诉大家:单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,单片机+晶振电路+复位电路,便组成了一个最小系统.但是一般我们在设计中总是喜欢把按键输入、显示输出等加到上述电路中,成为小系统。
应用89C51(52)单片机设计并制作一个单片机最小系统,达到如下基本要求:1、具有上电复位和手动复位功能。
2、使用单片机片内程序存储器。
3、具有基本的人机交互接口。
按键输入、LED显示功能。
4、具有一定的可扩展性,单片机I/O口可方便地与其他电路板连接。
51单片机学习想学单片机,有一段时间了,自己基础不好,在网上提了许多弱智的问题,有一些问题网友回答了,还有一些为题许多人不屑一顾。
学来学去,一年多过去了,可是还是没有入门,现在我就把我学习中遇到的一些问题和大家分享一下,希望在大虾的帮助下能快速的入门:)在学习之前我在网上打听了一下atmel公司的单片机用的人比较多,avr 系列这几年在国内比较流行,但是考虑到avr还是没有51系列用的人多,51系列的许多技术在实践中都已经的到了前人的解决,遇到问题后,有许多高人可以帮助解决,所以这次学习,选用了atmel公司的at89s52,来进行学习。
学习单片机是需要花费时间实践的;学之前我们先准备好所需的东西一、所需硬件at89s52一片;8m晶振一个,30pf的瓷片电容两个;10uf电解电容一个,10k的电阻一个;万用板(多孔板)一块;其他的器件如电烙铁一把30w的,松香,焊锡若干,如果是第一次学习,不知道这些东西,没关系,以下是它们的照片:Atmel公司生产的at89s528m晶振22pf瓷片电容电解电容图1/4 w 10k 的电阻普通的电木万用板好了,有了这些东西,我们就可以把它们组合到一起做成我们的最小系统了:)有了这些东西我们怎么焊接丫?不用着急,过一会我们把原理图给大家画出来大家就会了。
基于89C51的交通灯控制系统设计目录摘要 01.设计任务与要求 02.系统硬件设计 (1)3.系统软件设计 (4)4. Proteus软件仿真 (4)5.设计心得 (5)6.参考文献 (6)附录 (6)交通灯控制系统设计摘要自从1858年英国人发明了原始的机械扳手交通灯之后,随后的一百多年里,交通灯改变了交通路况,也在人们日常生活中占据了重要地位,随着人们社会活动日益增加,经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通灯更加显示出了它的功能,使得交通得到有效管制,对于交通疏导,提高道路导通能力,减少交通事故有显著的效果。
近年来,随着科技的飞速发展,电子器件也随之广泛应用,其中单片机也不断深入人民的生活当中。
本模拟交通灯系统利用单片机AT89C51作为核心元件,实现了通过信号灯对路面状况的智能控制。
从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。
系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。
本模拟系统由单片机硬/软件系统,两位8段数码管和LED灯显示系统等组成,较好的模拟了交通路面的控制。
关键词:交通灯单片机数码管LED灯1.设计任务与要求东西、南北两干道交于十字路口,各干道有一组红、绿、黄三个指示灯,指挥车辆和行人安全通行。
东西方向为主干道,通行时间为40秒;南北方向为支干道,通行时间为30秒。
通行时间最后3秒,绿灯灭,黄灯闪烁,黄灯闪烁完毕变更通行车道。
通行时间由数字显示器显示,黄灯3秒闪烁不单另计时。
2.系统硬件设计根据上面的功能要求,硬件系统主要有单片机模块、指示灯模块和倒计时显示模块。
各模块选择如下:(1)单片机模块主控芯片采用AT89C51单片机,其管脚图如图1所示。
图1 AT89C51引脚图AT89C51是AT89C5X系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。
本科毕业论文基于89C51单片机电子数字时钟的设计目录第一章第一章 电子时钟的总体设计电子时钟的总体设计 ....................................................................................................... ...................................................................................................... 44 1.1 设计目的设计目的.......................................................................................................................... 4 1.1.1 课程设计课程设计 ............................................................................................................... 4 1.1.2 AT89C51芯片的串口功能芯片的串口功能.................................................................................... 4 1.1.3用keil 软件进行编程与调试 .................................................................................. 4 1.2 设计任务设计任务 .......................................................................................................................... 4 1.3 设计思路设计思路.......................................................................................................................... 4 第二章第二章 硬件系统的设计硬件系统的设计............................................................................................................... .............................................................................................................. 66 2.1 电路原理图设计电路原理图设计 .............................................................................................................. 6 2.1.1 电子钟的硬件电路框图电子钟的硬件电路框图...................................................................................... 6 2.2 AT89C51引脚及其功能 (6)2.2.1 AT89C51的原理及说明的原理及说明 ........................................................................................ 6 2.2.2 引脚功能引脚功能 ............................................................................................................... 7 2.3 驱动部件驱动部件 .......................................................................................................................... 8 2.4 显示部分显示部分.......................................................................................................................... 9 第三章第三章 软件系统的设计软件系统的设计............................................................................................................. ............................................................................................................ 110 3.1 电子钟的主程序电子钟的主程序............................................................................................................ 11 3.2 电子钟的显示子序电子钟的显示子序 ........................................................................................................ 12 3.3 定时器中断服务程序定时器中断服务程序 .................................................................................................... 13 3.4 电子时钟设计程序清单电子时钟设计程序清单 ................................................................................................ 15 3.5 程序进行编译仿真程序进行编译仿真........................................................................................................ 18 3.5.1 89C51程序 ......................................................................................................... 18 3.5.2 用PROTEUS ISIS 进行电子万年历的仿真测试 . (20)第四章第四章对89C51设计的电子时钟的总结................................................................................. 22 参考文献 ........................................................................................................................................ . (2)23摘要本次实训是基于AT89C51单片机电子钟的设计,对时、分、秒的显示的控制,时、分、秒用六位数码管显示LED 数码管时钟电路采用24小时计时方式。
一、电子时钟、秒表与计数器得设计1、实现得功能:1)有key0,key1两个功能按键,复位后,数码管会默认显示时钟模式HH、MM。
(HH表示小时,MM表示分钟),key0短按一次就进入到了秒表模式,数码管显示格式S、SS、S,(分别表示百秒,秒,毫秒)key0再短按一次就进入到了计数器模式,数码管显示格式CCCC(分别为千位百位十位个位)。
key0再短按一次,又进入到了时钟显示模式,就这样由key0控制模式得转换。
2)有RST复位键,本身电路设计有上电自动复位功能,按下RST后,电路复位。
3)有ckey0,ckey1两个计数按键,按下ckey0,计数加一,按下ckey1,计数减一。
4) 电子时钟与秒表时间计时方法就是采用89S52内部计时器0得一种工作方式(详见后面得代码分析),通过计时器0中断来控制时间得运行.5)计数器就是采用外部中断0与外部中断1这两个外部中断实现加1与减1得操作.(1)电子时钟模式:(以下“长按”表示按下按键得时间大于1秒,“短按”表示按下得时间小于0、7 秒)1)长按key1一次,会进入到调整分钟得模式,短按key1一次,分钟会加一。
第二次长按key1,会进入到调整小时得模式,短按key1一次,小时加一.第三次长按key1,重新回到时钟显示模式,这时再短按key1,时间不会变化2)长按key0一次,会进入到显示秒得模式(2)秒表模式:1)由key0控制进入秒表模式后,短按key1一次,秒表计时开始,再短按key1一次计时结束2)长按key1一次,秒表清零(3)计数器模式1)按ckey0一下,计数加一,数码管相应得显示得数值加一,按ckey1一下,计数减一,数码管相应得显示得数值减一,由于数码管得位数限制,最大只能显示到9999,此时按下ckey0无反应;考虑到实际计数功能,没有设置负数,所以最小显示0000,这时按下ckey1,无反应。
2)长按key1一次计数器清零。
2、电路原理图(1)使用片内振荡器(2)具有上电复位与手动复位两个功能(3)key0,key1分别接P1、0与P1、1引脚(4)由P0、0~P0、7输出到七段数码显示管(5)由P2、0~P2、3接三极管,驱动共阳七段数码显示管(6) ckey0,ckey1接P3、2与P3、3两个引脚,为两个外部中断4.电路焊接实物图(1)正面(2)反面:由于显影、腐蚀过程做得不好,导致电路板过度腐蚀,但就是经过修改之后,电路可以正常运行,并无大碍,只就是不美观。
(4)电路板工作时。
此时为显示时钟得秒显示时钟显示秒表显示计数器5、程序设计分析(1)程序代码#include〈Reg51、h〉sbit key0=P1^0;sbit key1=P1^1;//定义key0,key1接口unsigned charflag,con,mcount;//flag为计数到一秒时给时钟发得信号unsignedcharcount=0;unsignedchar seccount =0;//作为时钟得秒得计量单位unsigned char hour = 0;//时钟得时unsigned char min = 0; //时钟得分unsigned charsec=0; //时钟得秒unsigned char keypress0,keypress1,mode,ms,s,ss,start;unsignedcharDisplaynum[]={0x14,0xd7,0x4c,0x45,0x87,0x25,0x24,0x57,0x04,0x05,0x10,0xd3,0x48,0x41,0x83,0x21,0x20,0x53,0x00,0x01,0xff,0xfb};//数码管十六进制译码表unsignedcharcontrolnum[]={0x08,0x04,0x02,0x01}; //控制四个数码管显示unsigned char DisplayBuff[]={0x00, 0x00,0x00, 0x00};//每个数码管得值void display_state();//数码管显示子程序void keyscan(); //键盘扫描子程序void timer();//秒表子程序unsigned charcount1,flag1,t_adjust=0,tm_adjust=0;unsigned charbKey0Pressed = 0,bKey1Pressed = 0;unsigned char ucStatus = 0;void main(){TMOD = 0x01; //定时器0工作在模式1,GATE=0,C/t=0,16位模TH0= (2^16-5000)/256;//定时器0预存值,TL0=(2^16—5000)%256;TR0= 1;//定时器0 启动ET0= 1; //定时器中断0 允许EA= 1; //开中断ﻩIT0=1; //外部中断0下降沿触发IT1=1;//外部中断1 下降沿触发EX0=1; //外部中断0允许EX1=1;//外部中断1允许PX1=1;//外部中断1 为高优先级中断while(1)//死循环,{if(flag ==1) //时钟显示{ﻩflag= 0;sec++;if(sec==60){sec = 0;min++;if(min ==60){min =0;hour ++;if(hour== 24){hour =0;}}}}display_state();keyscan();timer();}}//////////////////////////////////ISR中断服务程序,每5ms产生一个定时器0 中断void Display()interrupt 1{TH0= (2^16-5000)/256;TL0= (2^16-5000)%256;seccount ++;ﻩmcount++;ﻩkeypress0++;ﻩkeypress1++;P2=0x00; //P2口先清零ﻩP0= Displaynum[DisplayBuff[count]]; //P0口输出P2 = controlnum[count];//P2口输出count++;if(count==4)ﻩcount=0;if(seccount== 200)//200*5ms=1s{seccount =0;flag=1; //每过1秒给时钟信号加一秒}}///////////////////////////////////////////void display_state(){if(mode == 0) //时钟模式,显示时间{DisplayBuff[0] =hour/10;DisplayBuff[1]= (hour%10)+10; //“+10"就是为了显示加点得数字DisplayBuff[2] =min/10;DisplayBuff[3]= min%10;}if(mode == 1)//秒表模式,显示秒表{DisplayBuff[0] =ss+10;//“+10"就是为了显示加点得数字DisplayBuff[1]=s/10;DisplayBuff[2]= (s%10)+10;DisplayBuff[3]= ms;}if(mode== 2)//计数器模式,显示计数{DisplayBuff[0] = count1/1000;//千位DisplayBuff[1]=(count1-(count1/1000)*1000)/100;//百位DisplayBuff[2]= (count1—(count1/100)*100)/10;//十位DisplayBuff[3]= count1%10; //个位}ﻩif(mode==3)//显示时钟得秒,ﻩ{DisplayBuff[0] = 20;//第一位不显示DisplayBuff[1]= 21; //第二位显示一个点DisplayBuff[2] =sec/10;//显示秒得十位DisplayBuff[3] =sec%10;//显示秒得个位}}//**************////键盘扫描子程序////**************//void keyscan(){if(!key0 && bKey0Pressed== 0)//检测到key0按下{keypress0= 0;ﻩbKey0Pressed=1; //防止重入此判断while(!key0);//如果没放开,就等下去}if(key0 &&bKey0Pressed== 1)//检测到key0放开{ﻩbKey0Pressed= 0; //防止重入此判断ﻩif (keypress0<120)ﻩ//如果就是短按ﻩ{if(ucStatus == 0x02)ﻩ{ﻩucStatus =0x00;ﻩmode= 0; //时钟模式ﻩt_adjust=0;}elseif(ucStatus== 0x00)ﻩﻩ{ucStatus= 0x01;mode = 1; //秒表模式}ﻩﻩﻩelseif(ucStatus == 0x01)ﻩ{ﻩﻩucStatus=0x02;mode = 2; //计数模式}}ﻩelse if(keypress0〉200)//如果就是长按mode=3; //显示时钟得秒得模式}ﻩ////////////////////////////////if(mode == 0)//进入时钟模式后{ﻩif(!key1 &&(bKey1Pressed == 0))ﻩ{keypress1=0;bKey1Pressed = 1;while(!key1);ﻩ}if(key1 &&(bKey1Pressed ==1)){ﻩbKey1Pressed= 0;if(keypress1>= 200) //如果就是长按{t_adjust++;ﻩﻩif(t_adjust==3)ﻩﻩt_adjust=0;}ﻩelse if(keypress1<120)如果就是短按ﻩswitch(t_adjust)ﻩﻩﻩ {ﻩcase 1:{//调整分min++;ﻩﻩsec= 0;ﻩﻩﻩif(min==60)ﻩﻩmin =0;ﻩ}ﻩﻩﻩﻩbreak;ﻩcase 2:{//调整时ﻩhour++;ﻩﻩsec= 0;ﻩﻩif(hour == 24)ﻩﻩﻩhour= 0;ﻩﻩﻩﻩ}ﻩbreak;ﻩdefault:break;ﻩﻩ}}}else if(mode== 1)//进入秒表模式{if(!key1 &&bKey1Pressed== 0){keypress1= 0;ﻩbKey1Pressed =1;while(!key1);}if(key1 &&bKey1Pressed == 1){ﻩbKey1Pressed = 0;if(keypress1< 120) //短按ﻩ{ﻩif(flag1==0){ start=2;flag1=1;} //start=2代表秒表开始计时ﻩﻩﻩelse {start=0;flag1=0;}//start=0,秒表停止计时ﻩ}ﻩ else if(keypress1>200)//长按start=1; //秒表清零ﻩ}}}void timer() //秒表子程序{if(mode==1)//进入秒表模式才执行{if(start==1) //清零{ms= 0;s=0;ﻩss=0;mcount=0;ﻩ}ﻩif(start==2)//秒表开始计时{if(mcount==20) //20*5ms=0、1s{mcount=0;ms++;ﻩif(ms == 10) //10*0、1s=1s,s++ﻩ{ms =0;ﻩﻩs ++;ﻩif(s == 100)//100sﻩﻩ{s =0;ss ++;ﻩﻩif(ss==10)ﻩﻩ{ss = 0;ﻩs= 0;ﻩms = 0;ﻩ}ﻩﻩﻩ}ﻩﻩﻩ}}ﻩ}if(start==0);//秒表停止}}//////////////////////void it0(void)interrupt 0using 1 //外部中断0服务程序{if(mode==2)//只有在计数模式才执行ﻩ{count1++;//每响应一次,计数加一if(count1==10000)//超出四位时,不能再加count1 =9999;ﻩ }}voidit2(void)interrupt2using 2 //外部中断0服务程序{if(mode==2) //只有在计数模式才执行ﻩ{if(count1!=0){count1—-;}//计数减一,不显示负数,当减到零时便不能再减}}。