第一篇:基于单片机控制的红外线遥控器设计_赵健衡.pdf
ISSN 1009-3044 Computer Knowledge and Technology 电脑知识与技术 Vol.5,No.1,January 2009, pp.244-246
E-mail: kfyj@cccc.net.cn http://www.xiexiebang.com/hongwai/hs6221.pdf.[2] 台湾义隆电子股份有限公司.EM78P153S 单片机说明书[EB/OL].http://www.xiexiebang.com/datasheet/EM_mcu/em78p153.pdf.[3] 张爱全.红外线遥控的基本原理和应用范围[J].山西电子技术,2003(6):40-41.赵健衡(1963-),男,常州工学院讲师,硕士,研究方向:测控技术与单片机应 用技术。
(上接第 222 页)
参考文献: 提高教学效率。在现实使用中,多媒体网络教学软件有很大的适应性,但也存在一些使用缺陷,这就需要我们用创新的思维去发展它 的功能。多媒体网络教室的发展方向,既要满足广播教学的需求,还要满足交互方式的多样化需求,更进一步还要通过软件实现电子 教室的高效可管理与高度可控。只要用创新与发展的眼光去发展软件,就能将多媒体网络教学软件推向一个更高、更新的台阶。
[1] 鲁士文.多媒体网络技术与应用[M].北京:清华大学出版社,2002. [2] 李小平,曲大成.多媒体网络通信[M].北京:北京理工大学出版社,2001. [3] 李克东.新编现代教育技术基础[M].上海:华东师范大出版社,2002.
张士刚(1977-),男,湖南武冈人,广州铁路职业技术学院讲师,广 东工业大学工程硕士生,学士,研 究方向: 计算机教学、软件开发、软件测试。
246 计算机工程应用技术 本栏目责任编辑:贾薇薇
第二篇:基于单片机控制的交通灯设计系统
基于单片机控制的交通灯设计系统
班级:
姓名:
学号:
第一章 概述 1.设计内容
本系统需要采用AT89C51单片机AT89C5中心器件来设计交通灯控制器,实现以下功能: 1.1初始东西绿灯亮,南北红灯亮,东西方向通车。1.2黄灯闪烁后,东西路口红灯亮同时南北路口绿灯亮,南北方向开始通车。1.3延时27s,南北方向绿灯灭,黄灯闪烁3次,然后又切换成东西方向通车,如此重复。
设计交通灯控制系统硬件电路与软件控制程序,对硬件电路与软件程序分别进行调试,并进行软硬件联调,要求获得调试成功的仿真图。2.设计目的
2.1 了解交通灯管理的基本工作原理。2.2 熟悉AT89C51工作原理和应用编程。
2.3 熟悉AT89C51行接口的各种工作方式和应用。
2.4 熟悉AT89C51数器/定时器的工作方式和应用编程外部中断的方法。2.5 掌握多位LED显示问题的解决。3.设计原理
AT89C51片机具有控制二连体共阴极数码管和发光二极管的输出显示以及检测按键输入的功能。利用AT89C51片机模仿制作室外十字路口多功能交通灯,实现室内控制与室外显示的功能。合理控制交通繁忙,交通特殊情况和恢复交通正常的三种情况。
本设计用4个共阳极LED数码管的分别表示东、西、南、北四个方向路口,以数码管的上、中、下3个横段分别代表红、黄、绿3盏灯,用P0、P1口分别输出控制模拟交通灯的状态显示的数码管和倒计时显示数码管的状态码,P3^
1、P3^
2、P3^4-P3^7控制数码管的位选,P2^0-P2^4接收中断信号并反馈给INT0接口进行中断处理。
第二章 硬件设计
1.设计框图 如图2-1所示 此处要有文字说明
图2-1设计框图
2.元器件选择及其功能介绍
AT89C51是一种带4K字节LASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51片引脚图如下图2-2所示。
图2-2 AT89C51片引脚图
主要特性:
·与MCS-51 兼容
·4K字节可编程闪烁存储器 ·寿命:1000写/擦循环 ·数据保留时间:10年 ·全静态工作:0Hz-24MHz ·三级程序存储器锁定 ·128×8位内部RAM ·32可编程I/O线
·两个16位定时器/计数器,5个中断源 ·可编程串行通道
·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路 3.设计原理图
硬件电路图通过Proteus 仿真之后如图2-3所示,其中: 按钮K0连接P2^0端口实现红灯全亮,处理交通意外 按钮K1连接P2^1端口实现南北方向亮灯时间+1s 按钮K2连接P2^2端口实现南北方向亮灯时间-1s 按钮K3连接P2^3端口实现东西方向亮灯时间+1s 按钮K4连接P2^4端口实现东西方向亮灯时间-1s
图2-3整体连接电路原理图
第三章 软件设计
1.各个程序段介绍 1.1数码管显示
void Display(uchar j)//j控制显示table中连续位的起始点 { char h,l;if(j<11)//根据状态判定时间
{
h=Time_EW/10;//EW通行时间十位
l=Time_EW%10;//EW通行时间个位
} else if(j<23){
h=Time_SN/10;//SN通行时间十位
l=Time_SN%10;//SN通行时间个位
} for(i=0;i<4;)//按位显示通行状况及时间
{
P0=table1[j];//通行状况显示
P3=tab[i];//位选显示
i++;
j++;
if(i%2)//两位计时显示
{
P1=table[l];
Delay(400);
}
else
{
P1=table[h];
Delay(400);
} } Delay(5);} 1.2 INT0外部中断服务程序
void EXINT0(void)interrupt 0//INT0外部中断 { EX0=0;//关中断
if(Busy_Button==0){
P0=0xFE;//意外按钮按下全显示红灯
for(;Busy_Button!=1;)//意外按钮弹起时恢复之前状态
Display(24);} /*四个时间控制按钮分别控制SN、EW方向初始通行时间加减,最长不超过s,最少不低于s*/ if(SN_Add==0)//SN+1 {
SN1+=1;
if(SN1>99)
SN1=99;} if(SN_Red==0)//SN-1 {
SN1-=1;
if(SN1<20)
SN1=20;} if(EW_Add==0)//EW+1 {
EW1+=1;
if(EW1>99)
EW1=99;} if(EW_Red==0)//EW-1 {
EW1-=1;
if(EW1<20)
EW1=20;} EX0=1;//开中断 } 1.3延时子程序
void Delay(uchar a)//循环a次 { uchar x;x=a;while(x--){;} } 2.程序
#define uchar unsigned char #include
uchar x;x=a;while(x--){;} } void Display(uchar j){ char h,l;if(j<11){
h=Time_EW/10;
l=Time_EW%10;} else if(j<23){
h=Time_SN/10;
l=Time_SN%10;} for(i=0;i<4;){
P0=table1[j];
P3=tab[i];
i++;
j++;
if(i%2)
{
P1=table[l];
Delay(400);
}
else
{
P1=table[h];
Delay(400);
} } Delay(5);} void EXINT0(void)interrupt 0 { EX0=0;if(Busy_Button==0){
P0=0xFE;
for(;Busy_Button!=1;)Display(24);} if(SN_Add==0){
SN1+=1;
if(SN1>99)
SN1=99;} if(SN_Red==0){
SN1-=1;
if(SN1<20)
SN1=20;} if(EW_Add==0){
EW1+=1;
if(EW1>99)
EW1=99;} if(EW_Red==0){
EW1-=1;
if(EW1<20)
EW1=20;} EX0=1;
} void timer0(void)interrupt 1 using 1 { TH0=0x3C;TL0=0xB0;count++;if(count==20){
Time_EW--;
Time_SN--;
count=0;} } 第四章 仿真结果及其总结
1.仿真结果图
1.1正常状态的仿真结果如图4-1所示
图4-1正常状态
1.2黄灯状态的仿真结果如图4-2所示
图4-2黄灯状态
1.3紧急状态的仿真结果如图4-3所示
图4-3 紧急状态
1.4延长通行时间的仿真结果如图4-4所示
图4-4延长通行时间
2.总结
通过这次交通灯的课程设计,使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。
通过这次交通灯的课程设计,使我了解了写毕业设计的流程和方法。为自己以后的毕业论文的设计做一次练习,具有积极的意义。还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能力得到了很好锻炼,能够为我们以后的工作于学习打下基础。
由于本人的水平有限,设计中难免会有一些不合理的部分,系统的稳定性还有待提高,望批评更正。
第三篇:单片机控制的交通灯控制系统设计
摘要
本设计是单片机控制的交通灯控制系统设计。由单片机系统、LED显示、交通灯演示系统、键盘电路及其控制电路组成。该系统除基本交通灯功能外,还具有倒计时、紧急情况处理、调整通行时间以及根
据具体情况手动控制等功能。
十字路口的交通灯在工作时应具有如下特点:红灯表示该条道路禁止通性;黄灯表示该条道路上未过停车线的车辆禁止通行,已过停车线的车辆继续通性;绿灯亮表示该条道路允许通行。该系统使用12MHZ晶振与单片机AT89S52相连接,通过软件编程的方法实现十字路口的交通灯控制,输入装置是键盘开关,用于控制交通灯的运行模式以及设置通行时间,显示装置是两位的LED七段数码管。该系统是由AT89S52单片机控制的,可以实现以下功能:
1.南北方向(主干道)车道和东西方向(支干道)两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行间为20秒,时间可设置修改。
2.在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。
3.黄灯亮时,要求每秒闪亮一次。
4.东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采
用计时的方法)。
5.一道有车而另一道无车(实验时用开关 K0 和 K1 控制),交通灯控制系统能立即让有车道放行。
6.有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯。
关键字:AT89S52单片机,交通灯,LED显示,键盘开关电路。
目 录
1概述…………………………………………………………………………-3-1.1设计背景 ……………………………………………………………-3-1.2设计目的 ……………………………………………………………-3-1.3设计要求 ……………………………………………………………-3-2 系统总体方案及硬件设计 ………………………………………………-4-2.1 设计原理……………………………………………………………-4-2.2 各功能模块设计……………………………………………………-4-2.2.1单片机AT89S52介绍 …………………………………………-4-2.2.2总体方案 ………………………………………………………-5-2.2.3时钟电路模块 …………………………………………………-6-2.2.4复位电路模块 …………………………………………………-6-2.2.5交通灯演示模块 ………………………………………………-7-2.2.6 LED显示模块 …………………………………………………-7-2.2.7键盘开关模块 …………………………………………………-8-3 软件设计 …………………………………………………………………-10-3.1程序流程图 …………………………………………………………-10-3.2系统软件设计………………………………………………………-11-3.2.1 LED的编程……………………………………………………-11-3.2.2交通灯模块的编程设计………………………………………-12-3.2.3定时器程序……………………………………………………-12-3.2.4键盘程序………………………………………………………-13-3.2.4.1通行时间设置程序………………………………………-13-3.2.4.2紧急情况处理程序………………………………………-14-3.2.4.3状态调整程序……………………………………………-14-4 Proreus仿真 ……………………………………………………………-15-4.1正常工作状态………………………………………………………-15-4.2时间调整……………………………………………………………-17-4.3紧急状况……………………………………………………………-19-4.4状态调整……………………………………………………………-20-5课程设计体会 ……………………………………………………………-22-参考文献……………………………………………………………………-23-附1:源程序代码 …………………………………………………………-24-附2:系统原理图 …………………………………………………………-32-概述 1.1 设计背景
人们越来越关注城市交通问题,而交通灯在安全行车过程中起十分重要的作用, 现在交通灯一般设在十字路口,在醒目位置用红、绿、黄三种颜色的指示灯, 加上一个倒计时的显示计时器来控制行车, 对于一般情况下的安全行车、车辆分流发挥着作用, 但根据实际行车过程中出现的情况, 主要有如下几个缺点:
1、车道让车轮流放行时间相同且固定, 在十字路口, 经常出现有些车道车辆较多, 放行时间应该长些;而有些车道车辆较少,放行时间应短些。
2、没有考虑紧急车通过时, 两车道应采取的措施, 譬如, 有消防车通过执行紧急任务时, 两车道的车都应停止, 让紧急车辆通过。根据行车过程中出现的实际情况, 如何合理高效地利用交通灯指示交通情况,这是一个迫切需要解决的问题。
1.2 设计目的
1.进一步熟悉和掌握单片机的结构及工作原理。
2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。3.通过课程设计,掌握以单片机核心的电路设计的基本方法和技术。4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。5.了解开发单片机应用系统的全过程,为今后从事相关事业打下基础。
1.3 设计要求
1.设计一个十字路口的交通灯控制电路,要求南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行时间为20秒,时间
可设置修改。
2.在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;
3.黄灯亮时,要求每秒闪亮一次。
4.东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采
用计时的方法)。
5.一道有车而另一道无车(实验时用开关 K0 和 K1 控制),交通灯控制系统能立即让有车道放行。
6.有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯。系统总体方案及硬件设计
2.1 设计原理
本设计使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时更新系统,根据道路情况适时调整交通灯的状态,全面有效地利用交通灯指示交通情况。该设计是以单片机AT89S52为核心完成的,在硬件电路中采用P1口点亮交通指示灯,采用P0口和P2口作为2位LED数码管的驱动接口,可显示各个方向的交通灯的持续时间,单片机外围接有按键开关电路,可以响应外部中断及键盘程序,实现紧急情况处理、调整交通灯的点亮时间等功能。芯片选用AT89C51 单片机,电路由下列部分组成:时钟电路、复位电路、键盘电路、交通灯演示电
路、LED显示电路。
2.2 各功能模块设计 2.2.1 单片机AT89S52介绍
AT89S52是一个低电压,高性能CMOS型 8位单片机,片内含8KB的可反复擦写的Flash只读程序存储器(ROM)和256 B的随机存取数据存储器(RAM)。AT89S52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89S52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
引脚使用说明:
I/O端口的编程实际上就是根据应用电路的具体功能和要求对I/O寄存器进行编程。具体步骤如下:
l.根据实际电路的要求,选择要使用哪些I/O端口。
2.初始化端口的数据输出寄存器,应避免端口作为输出时的开始阶段出现不确定状态,影响外围电
路正常工作。
3.根据外围电路功能,确定PO端口的方向,初始化端口的数据方向寄存器。对于用作输入的端口可以不考虑方向初始化,因为PO的复位缺省值为输入。
4.用作输入的PO管脚,需上拉电阻。
5.最后对I/O端口进行输出(写数据输出寄存器)和输入(读端口)编程,完成对外围电路的相应功能。
几个特殊管脚:
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
RST: 复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平。
2.2.2 总体方案 此交通灯系统位于一个十字路口,此路口为东南西北走向。南北方向为主干道,东西方向为支干道。各干道有一组红、绿、黄三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行,黄灯亮提示人们注意红、绿灯的状态即将切换。
此交通灯系统工作过程分为4个状态。状态0南北方向绿灯亮,东西方向红灯亮。过25秒后转为状态1,南北方向绿灯灭,黄灯每秒闪亮一次,东西方向还是红灯亮。历时5秒钟再转为状态2,南北方向红灯亮,东西方向绿灯亮。过15秒后转为状态3,南北方向还是红灯亮,东西方向绿灯灭,黄灯每秒闪亮
一次。历时5秒钟又循环至状态0。
交通灯的状态表如下:
状态(时间)主干道—SN 红—R 0 1 2 3 0 0 1 1
绿—G 1 0 0 0
黄—Y 0 1/0 0 0
表01 交通灯的状态表
注:
1:SN:南北方向。WE:东西方向。2:状态:0:熄。1:亮。1/0:闪。
2.2.3 时钟电路模块
时钟电路模块给单片机提供特定的时钟周期,以备单片机工作使用。单片机的机器周期有6MHz和12MHz的两种。这里采用的是12MHZ的晶振,以给单片机提供12MHz的机器周期。另外有两个30P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。
其电路图如图02所示:
支干道—WE 红—R 1 1 0 0
绿—G 0 0 1 0
黄—Y 0 0 0 1/0
图02 时钟电路模块
2.2.4 复位电路模块
单片机系统的复位电路采用的是上电+按钮复位电路形式,其中电阻R采用10KΩ的阻值,电容采用
电容值为10μF的电解电容。其具体连接电路如图03所示:
图03 复位电路模块 2.2.5 交通灯演示模块
此交通灯演示模块由单片机的P1口作信号输出端来控制12个交通灯的亮灭,交通灯采用的是发光二极管。因为单片机的输出电流非常小,为了使发光二极管能够发光或者更亮,二极管采用共阳极接法。即阳极通过470Ω电阻接+5V直流电源,阴极接单片机P1口。同时南北方向同色灯连同上拉电阻一起并联,东西方向也是一样,以保证同一干道上的同色灯同时点亮或熄灭,并且流过二极管的电流不会因并联
而减半。
其具体连接电路如图04所示:
图04交通灯演示电路 2.2.6 LED显示模块 由于同一干道上的两个方向的红灯,绿灯,黄灯点亮时间相同,所以南北方向只需一个数码管显示
相应的时间即可,同理东西方向也只需一个。
本次交通灯设计采用两位一体的共阴极数码管来显示相应的时间。由单片机的P0口输出字型码,P2口的前四位P2.0~P2.3作位选端。位选端接LED的共阴极,故低电位有效。因为单片机I/O口的驱动电流很小,一般只有几个毫安。为了增加驱动能力,每个LED上都加上一个上拉电阻,接入+5V电源,本次设计采用的是排阻。当P0口输出低电平时,LED不导通,上拉电阻电流灌进单片机,而当P0口输出高电平时,LED导通。而且上拉电阻的电流也通过LED,这自然就增加了LED的发光亮度。
其具体连接电路如图05所示:
图05 LED显示电路 2.2.7 键盘开关模块
此系统通过5个开关实现所有的要求,开关一端接地,另一端接单片机的P3口。K0接P3^7,当主干道有车而支干道无车时,按一下K0键,可以实现主干道通行。K1接P3^6,当支干道有车而主干道无车时,按一下K1键,可以实现支干道通行。K2接P3^3,利用中断1的方式对紧急情况进行处理,即使东南西北四个方向都亮红灯停车。K4接P3^2,利用中断0的方式对各个干道的通行时间进行设置。在相应中断0期间,K0,K1起调整时间的作用。每按一下K0,主干道通行时间加一,每按一下K0,主干道通行时间加一。K3接P3^5,按一下K3,可以使系统退出中断,回到主程序。
其具体连接电路如06图示:
图06 键盘开关电路 软件设计 3.1 系统流程图
(注:判断框SN=0,WE=0处的Y,N位置标反了,读者自己改正。)
3.2 系统软件设计 本次单片机课程设计软件部分利用C语言编程,采用模块化程序设计。程序部分由主程序、定时器程序、T0/T1中断服务程序、键盘扫描程序、交通灯点亮程序、LED数码管扫描显示程序和延时程序构成。
3.2.1 LED的编程
本次交通灯设计采用两位一体的共阴极数码管来显示相应的时间。数码管为七段数码管,由8个发光二极管构成,通过不同的组合可用来显示数字0-9,字符A-F、H、L、P、R、U、Y、符号“-”及小数点“.”。
本设计只需要显示数字0-9,来表示相应的时间。
共阴极数码管的8个发光二极管的阴极连接在一起接位选端。两个两位一体的共阴极数码管共有4个位选端,分别接在 P2^O-P2^3,低电平有效。数码管各个阳极管脚接各段的驱动电路输出端,既P0口。P0^0接a,P0^1接b,……P0^6接g,P0^7接dp,高电平有效。
本设计采用逐位扫描的方式实现相应时间的动态显示。先将P2^1置低电平,P2^0、P2^
2、P2^3置高电平,来选中南北方向数码管的个位,此时P0口的数据接传送给它显示。经延时一段时间,将P2^1置低电位选中南北方向数码管的十位,此时P0口的数据接传送给它显示。再用同样的方法依次驱动东西方向数码管。通过不断改变P0口、P2口的输出,用循环扫描的方式,即可实现LED的动态显示。
LED动态显示的流程图如图08:
3.2.2交通灯模块的编写设计
本次设计的交通灯演示模块由单片机的P1口作信号输出端来控制12个交通灯的亮灭。P1^1-P1^6依次连接南北的红灯、绿灯、黄灯,东西的红灯、绿灯,黄灯。所以4种状态依次为0x6A,0x66,0x5C,0x3C。当交通灯的剩余时间为零时,改变P1口的输出,进而改变交通灯的点亮状态。交通灯依次循环上面的4个状态,就可以实现指挥交通的作用。
3.2.3 定时器程序
本次设计用定时计数器T1,TMOD是定时计算器的工作方式控制寄存器,通过对该寄存器的操作可以改变T1的工作方式。T1有4种工作方式,由TMOD寄存器中间的M1、M0这两位来决定。本次设计的定时计数器工作在工作方式1,M1、M0设定为01。定时计算器采用加1计数的方式,当接收到一个驱动事件时计数器加1。工作方式1的内部计数器宽度为16位,由TH1的8位和TL1的8位组成。当TL1溢出时将向TH1进位,当TH1溢出后会产生相应的溢出中断。
驱动事件之间的时间间隔即为定时计数器的定时宽度。在定时的工作方式下,定时宽度是单片机的机械周期,也是外部时钟频率的1/12。本次设计的外部时钟频率为12MHz。可知,接收106个驱动事件的时间为1s。
定是1s的流程图如图09所示:
3.2.4 键盘程序
为了实现设置通行时间、紧急情况处理、有车放行等功能,本次设计中有键盘电路。通行时间设置由外部中断0实现,紧急情况由外部中断1处理,有车放行是用普通的键盘程序实现的。按键实际是一种常用的按钮,按键未按下时,键的两个触点处于断开状态,按键按下时,两个触点闭合。按键是利用机械触点来实现键的闭合和释放,由于弹性作用的影响,机械触点在闭合及断开瞬间均
有抖动过程,从而使键输入也出现抖动。
抖动时间一般为5—10ms。本次设计采用软件的办法消抖。在第一次检测到有键按下时不动作,延时10ms,再次检测按键的状态,如果仍保持闭合状态,则确定真的有键按下。当按键释放后,转入按键的处理程序 延时程序如下: /*延时t毫秒*/ void delay(uchar t)
{
uchar i;/*定义无符号字符常量*/ for(t;t>0;t--)/*执行t次循环*/
{ for(i=2000;i>0;i--)/*由于时钟脉冲是12MHz,执行2000次循环的时间为1ms*/
{ } } }
3.2.4.1 通行时间设置程序
本次设计通过外部中断0设置各个干道的通行时间。
外部中断0的请求信号由P3^2引脚输入,采用低电平有效的方式响应中断,即IT0=1。响应中断0期间,CPU禁止响应其他中断,按键K0,K1起调整时间的作用。采用加1的方式,每按一下K0,主干道通行时间加1,每按一下K1,支干道通行时间加1。通行时间可以直接在数码管上显示出来。按一下K3,可以使系统退出中断,回到主程序断点处,从下一个状态开始执行新设置的通行时间。CPU再开放总中断。
由于本次设计使用两位一体的共阴极数码管显示时间,故设置各个干道的通行时间的范围为0—100s。考虑道路通车的实际情况,时间太短无法通过交通路口,所以本设计中通行时间下限为6s(绿灯1s,黄灯5s)。在6—99s之间可以任意设置通行时间,更合理高效的指挥交通。
3.2.4.2 紧急情况处理程序
本次设计通过外部中断1实现对紧急情况的处理。
与外部中断0相仿。外部中断1的请求信号有P3^3引脚输入,采用低电平有效的方式相应中断,即IT0=1。响应中断1期间,CPU禁止响应其他中断,东南西北四个方向均亮红灯,各个干道都禁止通行。由于不确定要持续多久,不采用倒计时的方式显示时间,数码管显示00。紧急情况结束时,按一下K3,可以使系统退出中断,回到主程序断点处,CPU再开放总中断。
3.2.4.3 状态调整程序
在实际交通系统中,很有可能会不时的出现一道有车而另一道无车的情况,为了更合理高效的指挥交通,本次设计的交通灯控制系统能立即让有车道放。由开关 K0 和 K1 控制。采用查询的方式不断扫描K0、K1,看有没有键按下。按一下K0键,可以实现主干道通行,按一下K1键,可以实现支干道通行。
此时交通状态的改变是因为另一路无车,所以不需要设置返回,直接按主程序循环指挥。也有可能较长时间出现一道有车另一道无车的情况,只需多次按K0或K1键即可。Proteus仿真 4.1 正常工作状态
本次设计的交通灯控制系统共有四个工作状态,分别是状态0、状态
1、状态2和状态3。开始时先执行状态0,南北方向绿灯亮,东西方向红灯亮。历时25秒。如图10所示:
图10 状态0 25秒后转为状态1,南北方向绿灯灭,黄灯每秒闪亮一次,东西方向还是红灯亮。历时5秒。如图
11所示:
图11 状态1 5秒后再转状态2,南北方向红灯亮,东西方向绿灯亮。历时15秒。如图12所示:
图12 状态2 15秒后转状态3,南北方向还是红灯亮,东西方向绿灯灭,黄灯每秒闪亮一次。历时5秒。如图1
3所示:
图13 状态3
此状态结束后再回到状态0,如此循环进行。
4.2 时间调整
按一下开关K4,系统响应外部中断0,进入通行时间调整程序。各个干道的通行时间有数码管显
示。如图14所示:
图14 时间调整
按键K0,K1起调整时间的作用,每按一下K0,主干道通行时间加1,每按一下K1,支干道通行时间加1。多次按键即可调整到合理的通行时间。如图15所示:
图15 通行时间+1 按一下K3,可以使系统退出中断,回到主程序断点处,从下一个状态开始执行新设置的通行时间。
如图16、17所示:
图16 主干道按新设置的时间执行
图17 支干道按新设置的时间执行
4.3 紧急情况
当出现紧急情况时,按一下开关K2,系统响应外部中断1,各个方向均亮红灯禁止通行,数码管均显示0。按一下K3,可以使系统退出中断,回到主程序断点处。如图18所示
图18 紧急情况 4.4 状态调整
为了更合理高效的指挥交通,当南北方向有车而东西方向无车时,按K0,系统会自动跳转到状态0,实现南北方向通行。如图19所示:
图19 南北方向有车而东西方向无车时,南北放行
当东西方向有车而南北方向无车时,按K1,系统会自动跳转到状态2,实现东西方向通行。如图20
所示:
图20 东西方向有车而南北方向无车时,东西放行 课程设计体会
很荣幸有这次课程设计的机会,我可以把理论的学习与实践有机的结合起来。
在设计过程中,首先要分析课题,根据所学知识绘制出系统总体设计框图。然后按照自己的设计思路,利用所给的元器件绘制出设计图。在绘制设计图连接各个元器件的时候,要尽量使布线合适,从而使所作设计图清晰易看。绘制完设计图后,接下来就是要根据设计所要求的功能和已完成的设计图编写程序,在编程时,首先应该绘制出主程序流程图,然后采用模块化程序设计的方式,编写实现各个功能的子程序,再将各个子程序与主程序连接起来。在设计程序时要不断对程序进行修改,同时在设计程序的过程中要养成注释程序的习惯,在对程序进行修改的时候,可以通过注释很容易的看出各句程序的功能,清晰明朗。当程序设计出来之后,就可以通过仿真软件对其进行编译,生成仿真所需要的HEX文件。将生成的文件加载到系统图的单片机上,就可以进行系统仿真。通过仿真,检测所作设计是否能实现预期功能。本次课程设计使我对单片机的工作原理有了更深刻的认识,掌握了许多在以前学习中混淆不清的知识点。在翻阅相关书籍和查询相关资料过程中学到了丰富的单片机知识,开阔了眼界,增广了知识面。在编辑程序中,对C语言又有了新的认识和理解。实物焊接中不仅锻炼了自己的动手能力,而且真正作到了
理论联系实际的重要性,收益匪浅。
本次课程设计我参考的三本书。一本是余发山教授的《单片机原理及其应用技术》,一本是在图书馆借的王为青老师编写的《单片机Keil Cx51应用开发技术》,还有一本就是贾宗璞老师的《C语言程序
设计》。在此向编者表示诚挚的谢意。
本次设计中,我曾多次在课堂上向谭兴国老师请教各个模块设计的细节问题,得到了谭老师的大力
帮助,在此深表感谢!
参考文献 [1] 余发山,王福忠.单片机原理及应用技术 徐州:中国矿业大学出版社,2008 [2] 贾宗璞,许合利.C语言程序设计 徐州:中国矿业大学出版社,2007 [3] 王为青,程国刚.单片机Keil Cx51应用开发技术 北京:人民邮电出版社,2007
附1 源程序代码
#include
有效*/ uchar code b[4]={0x0D,0x0E,0x07,0x0B};/****P2口,低有效*/ uchar code c[4]={0x6A,0x66,0x5C,0x3C};/****P1口.低有效*/ char SN=25,WE=30;/*SN表示南北方向——主干道,WE表示东西方向——支干道*/ char SN_G=25,WE_G=15,Y=5;/*SN_G表示南北方向的绿灯,WE_G表示东西方向的绿灯,Y表
示黄灯*/
uchar i,k=0,count=0;/*定义无符号字符串变量*/
void delay(uchar t);/*定义函数*/
void light();/*定义函数*/ void led();/*定义函数*/ void ledthrough();/*定义函数*/ void leddrive();/*定义函数*/ sbit K0=P3^7;/*开关K0接P3^7管脚*/ sbit K1=P3^6;/*开关K1接P3^6管脚*/ sbit K2=P3^3;/*开关K2接P3^3管脚*/ sbit K3=P3^5;/*开关K3接P3^5管脚*/ sbit K4=P3^2;/*开关K4接P3^2管脚*/
/*程序初始化*/ void init(void)
{ /*12MHz */ TMOD=0x01;/**计数器用模式1,为16位计数器*****/
TH1=(65536-50000)/256;/*0x3C*/ TL1=(65536-50000)%256;/*0xB0*//*计50000个数,用时50ms*/
IT0=1;/*外部中断为低电平触发方式*/
ET0=1;/*允许T0中断*/ TR0=1;/*启动计数器*/ EA=1;/*CPU开放总中断*/ EX0=1;/*允许外部中断0中断,即允许响应端口P3^2(K4)中断*/ EX1=1;/*允许外部中断1中断,即允许响应端口P3^3(K2)中断*/
}
/*中断0处理程序*/ void int0(void)interrupt 0
{
EA=0;/*CPU禁止响应一切中断*/ P1=0x6C;/*东西南北方向均红灯亮*/
TR0=!TR0;/*计数器停止工作*/
for(;;)/*无条件循环*/
{
ledthrough();/*调用通行时间显示函数*/
/*设置南北方向通行时间*/ if(K0==0)/*P3^7=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K0==0)
{ while(!K0)/*当松开K0开关时,跳出循环,执行后面的程序*/
{
ledthrough();/*调用通行时间显示函数*/
}
SN_G++;/*南北方向绿灯时间+1*/ if((SN_G+Y)==100)/*南北方向通行时间(绿灯加黄灯时间)为100s*/ SN_G=1;/*由于使用的是两位数码管,当南北方向通行时间加到100后绿灯时间归1*/
}
}
/*设置东西方向通行时间*/ if(K1==0)/*P3^6=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K1==0)
{ while(!K1)/*当松开K1开关时,跳出循环,执行后面的程序*/
{ ledthrough();/*调用通行时间显示函数*/
}
WE_G++;/*东西方向绿灯时间+1*/ if((WE_G+Y)==100)/*东西方向通行时间(绿灯加黄灯时间)为100s*/ WE_G=1;/*由于使用的是两位数码管,当东西方向通行时间加到100后绿灯时间归1*/
} } /*返回*/
if(K3==0)/*P3^5=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K3==0)
{ while(!K3)/*当松开K3开关时,跳出循环,执行后面的程序*/
{
ledthrough();/*调用通行时间显示函数*/
}
TR0=!TR0;/*启动计数器*/ EA=1;/*CPU开放总中断*/
break;/*跳出*/
}
} } }
/*中断1处理程序*/ void int1(void)interrupt 2
{ P1=0x6C,P0=a[0];/*东西南北方向均红灯亮,P0口输出0*/
EA=0;/*CPU禁止响应一切中断*/ TR0=!TR0;/*计数器停止工作*/
for(;;)/*无条件循环*/
{
leddrive();/*数码管驱动程序*/
/*返回*/
if(K3==0)/*P3^5=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K3==0)
{ while(!K3)/*当松开K3开关时,跳出循环,执行后面的程序*/
{
leddrive();/*数码管驱动程序*/
}
EA=1;/*CPU开放总中断*/ TR0=!TR0;/*启动计数器*/ break;/*跳出*/ }
} }
} /*键盘程序*/ void key()
{
/*南北有车而东西无车*/ if(K0==0)/*K0=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K0==0)
{ while(!K0)/*当松开K0开关时,跳出循环,执行后面的程序*/
{
light();/*调用交通灯函数*/
led();/*调用数码管函数*/
} count=0;/*清零*/
k=0;/*南北方向通车,东西方向不通车*/ SN=SN_G,WE=SN_G+Y;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为
南北方向绿灯通行时间加黄灯闪亮时间*/
} }
/*南北无车而东西有车*/ if(K1==0)/*K1=0*/
{
delay(10);/*延时,把抖动的时间抛掉*/
if(K1==0)
{ while(!K1)/*当松开K1开关时,跳出循环,执行后面的程序*/
{
light();/*调用交通灯函数*/
led();/*调用数码管函数*/
} count=0;/*清零*/
k=2;/*南北方向不通车,东西方向通车*/ SN=WE_G+Y,WE=WE_G;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东
西方向显示时间为东西方向绿灯通行时间*/
} } } /*定时函数*/
void time1(void)interrupt 1
{ TH0=0x3c;
TL0=0xb0;/*计50000个数,用时50ms*/
count++;/*自增运算*/
if(count>=20)/*当count大于或等于20时,历时1s,执行程序*/
{
SN--;/*自减运算*/ WE--;/*自减运算*/ count=0;/*清零*/ if(SN==0||WE==0)/*当SN=0或者WE=0时,执行程序*/
{
k++;/*自增运算*/ if(k>3)/*当k>3时,执行程序*/
k=0;/*清零*/ switch(k)/*switch 语句*/
{ case 0:SN=SN_G,WE=SN_G+Y;break;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/ case 1:SN=Y,WE=Y;break;/*东西南北方向显示时间均为黄灯闪亮时间*/ case 2:SN=WE_G+Y,WE=WE_G;break;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/ case 3:SN=Y,WE=Y;break;/*东西南北方向显示时间均为黄灯闪亮时间*/
} } } } /*延时t毫秒*/ void delay(uchar t)
{
uchar i;/*定义无符号字符常量*/ for(t;t>0;t--)/*执行t次循环*/
{ for(i=2000;i>0;i--)/*由于时钟脉冲是12MHz,执行2000次循环的时间为1ms*/
{ } } } /*交通灯函数*/ void light()
{
P1=c[k];/*交通灯对应着k的值变化*/ if(P1==c[1]&&count==0)/*当南北方向亮黄灯且count=0时,执行程序*/
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;/*延时50ms*/ P1=0x6E;/*南北方向黄灯熄灭,东西方向亮红灯*/
} else if(P1==c[3]&&count==0)/*当东西方向亮黄灯且count=0时,执行程序*/
{
TH1=(65536-300000)/256;TL1=(65536-300000)%256;/*延时50ms*/ P1=0x7C;/*南北方向亮红灯,东西方向黄灯熄灭*/
} } /*数码管函数*/ void led()
{
P2=b[0],P0=a[SN%10];/*显示南北方向个位*/
delay(5);/*延时*/
P2=b[1],P0=a[SN/10];/*显示南北方向十位*/
delay(5);/*延时*/
P2=b[2],P0=a[WE%10];/*显示东西方向个位*/
delay(5);/*延时*/
P2=b[3],P0=a[WE/10];/*显示东西方向十位*/
delay(5);/*延时*/
}
/*通行时间显示函数*/ void ledthrough()
{ P2=b[0],P0=a[(SN_G+Y)%10];/*南北方向数码管显示可通行时间的个位*/
delay(5);/*延时*/
P2=b[1],P0=a[(SN_G+Y)/10];/*南北方向数码管显示可通行时间的十位*/
delay(5);/*延时*/
P2=b[2],P0=a[(WE_G+Y)%10];/*东西方向数码管显示可通行时间的个位*/
delay(5);/*延时*/
P2=b[3],P0=a[(WE_G+Y)/10];/*东西方向数码管显示可通行时间的十位*/
delay(5);/*延时*/
}
/*数码管驱动函数*/ void leddrive()
{
P2=b[0];/*显示南北方向个位*/
delay(5);/*延时*/
P2=b[1];/*显示南北方向十位*/
delay(5);/*延时*/ P2=b[2];/*显示东西方向个位*/
delay(5);/*延时*/ P2=b[3];/*显示东西方向十位*/
delay(5);/*延时*/
} /*主函数*/ void main(void)
{
init();/*调用程序初始化函数*/
for(;;)/*无条件循环*/
{
key();/*调用键盘程序*/ light();/*调用交通灯函数*/ led();/*调用数码管函数*/
} }
附2 系统原理图
第四篇:开题报告-基于单片机的风扇速度控制设计
开题报告
电气工程及自动化
基于单片机的风扇速度控制设计
一、综述本课题国内外研究动态,说明选题的依据和意义
单片机因其体积小,抗干扰能力强、而且使用灵活方便,成本低等特点,它的应用范围非常广泛,尤其是他强大的面向控制能力,已深入工业控制、军事装置、家用电器等各个领域,应用前景十分广阔。单片机按照应用的系统结构不同,可分为总线方式和非总线方式。采用总线方式的应用系统多属于较复杂的系统,比如智能仪表、工控系统、检测系统等。非总线方式的应用系统多属于小型控制。按照应用范围的不同,可分为通用型和专用型。
目前我国普遍采用4位、8位或16位,对于单片机还处于低档的应用,而对于那些宏单片机、DSP等高档的应用还是空白。而国外很多公司都推出了自己的单片机系列,如Intel公司推出的MCS-96/196系列,Rockwell公司的6501、6502,日立公司的H8/3048系列等。目前单片机的应用领域有以下四大领域:一是家用电器业。单片机个传统的机械产品结合,构成新型的机、电、仪一体化产品,如洗衣机、电脑空调机等。二是通讯行业。最有代表性的就是手机。三是智能仪表应用。单片机的体积小、成本低、控制力强等特点,使仪器仪表重量大大减轻,又有很高的性价比,如数字式RLC测量仪。四的在计算机外设中的应用。如在接口中采用单片机进行控制管理、数据采集、多路分配管理等。
我国在将来很长的一段时间里,8位单片机还将是主流产品,因为8位单片机很好用,有丰富的功能,现在无论是国内还是国外,都还是以8位为主。4位单片机由于功耗较低,在国内也有一定的市场比例。目前世界各国的单片机发展各有不同。美国单片机的发展趋势主要是从8位到16位和DSP过度,欧洲等国家单片机主要应用于工业,因此仍以8位为主,主要以功能和运行速度的发展为主。我国对于单片机的需要目前主要是家电类等消费品为主,8位单片机有很大的市场分额和发展空间。国内也急需这方面的人才。
尽管单片机的发展迅速,其发展方向不外忽以下几点:一是微型单片化。现在的产品普遍向小型化、轻型化发展,就需要单片机在在原有的多功能、低功耗的前提下,集成更多的元件,如看门狗(Watchdog)、LCD控制器等。随着半导体技术的发展,片上系统(SOC)的发展前景很好。二是低功耗CMOS化。现在单片机的功耗普遍在100mW左右,许多生产厂家采用CMOS工艺,使单片机更适合在电池供电场合,今后也是单片机发展的主要趋势之一。三是大容量、高性能化。随着CPU的发展,单片机的处理数据能力大大提高,内部时序也加以改善,ROM的存储容量也大大提高,又加入了低噪声技术,加强了中断、定时控制。四是在接口方向的发展。现在许多新型单片机的接口,从类型和数量上有了很大的发展,如有些可以直接驱动液晶显示管LCD、有些可以直接输出大电流和高电压等。
21世纪是“数字化”的时代,单片机的发展有着翻天覆地的变化,各种型号、功能的单片机应用于人们生产和生活中的各个领域。单片机的发展逐渐取代了由传统模拟电路作为电机的控制器,因此单片机在家电方面的应用已经十分普遍,比如电风扇、洗衣机、空调等。+电动机是将电能转换成机械能的机电装置。1821年英国科学家法拉第首先提出电动机原理。1834年,德国的雅可比第一个发明了直流电动机。1879年,西门子公司用直流电动机驱动电车。1888年发明家特斯拉发明了交流电动机。1902年瑞典的工程师丹尼尔森首先提出同步电动机构想。至今为止,电动机发展迅速,电机理论、设计及制造工艺得到逐步的完善和提高,广泛应用与现代的各种机械生产领域。如在机械制造工业、轻重型制造工业、运输行业、农业生产等各个领域,电动机以不同的种类和功能发挥着重要的作用。可以这么说,电动机的出现使社会生产力大大提高,促进了社会的发展。
随着时代的进步和科技的发展,电机调速系统在工农业生产、交通运输以及日常生活中起着越来越重要的作用,因此,对电机调速的研究有着积极的意义.长期以来,直流电机被广泛应用于调速系统中,而且一直在调速领域占居主导地位,这主要是因为直流电机不仅调速方便,而且在磁场一定的条件下,转速和电枢电压成正比,转矩容易被控制;同时具有良好的起动性能,能较平滑和经济地调节速度。因此采用直流电机调速可以得到良好的动态特性。由于直流电动机具有优良的起、制动性能,宜与在广泛范围内平滑调速。在轧钢机、矿井卷机、挖掘机、金属切削机床、造纸机、高层电梯等领域中得到广泛应用。近年来交流调速系统发展很快,然而直流控制系统毕竟在理论上和在时间上都比较成熟,而且从反馈闭环控制的角度来看,它又是交流系统的基础,长期以来,由于直流调速系统的性能指标优于交流调速系统。因此,直流调速系统一直在调速系统领域内占重要位置。
选取本课题的意义在于单片机的发展极为迅速,以其独特的结构和性能,渗透到各个领域,产生了极大的影响。研究单片机、学习单片机,是社会发展的必然趋势,单片机有着其广阔的发展空间和社会价值。通过研究用单片机远程发射红外线来控制电动机的转速,从而达到控制风扇速度控制,能使使用者操作起来更加方便。
二、研究的基本内容,拟解决的主要问题:
1、单片机主芯片的选择;
2、电机控制系统设计;
3、遥控器的设计;
4、用数码管显示档位;
5、PWM的产生;
6、按键开关的设计。
三、研究步骤、方法及措施:
1、学校提供硬件材料、有关工具器件和实验制作场所;
2、查阅大量的相关资料和书籍;
3、与同类的论章进行对比,完善自己的设计思路;
4、系统的总体方案设计:发射部分和接收部分;
5、系统硬件电路的设计;
6、系统的软件设计
7、论文的修改及润色。
四、参考文献
[1]
张俊.单片机的发展与应用[J].北京:电子制作,1997:40-50.[2]
於丹.春风化雨芽将萌——谈我国单片机的发展[J].北京:微电脑世界,1998:9-13.[3]
张俊漠.单片机的发展及应用现状[J].北京:电子世界,2001:3-5.[4]
杨靖.用单片机控制的直流电机调速系统[J].广西:机床电器,2008.11:
45-47.[5]
楼然苗.胡佳文.李光飞,等.51系列单片机原理及设计实例[M].北京:高等教育出版社,2004.[6]
蔡美琴,张为民,何金儿,等.MCS-51系列单片机系统及其应用[M],第二版.北京:北京航空航天大学出版社,2010.
第五篇:单片机控制的循环彩灯控制系统的设计实习报告
一、实习目的 《单片机原理与接口技术》课程实习安排在该课程理论教学结束后进行。其目的是通过实习,使学生进一步弄懂所学到的课本知识,巩固和深化对单片机的结构、指令系统、中断系统、键盘/显示系统、接口技术、系统扩展、定时/计数控制、程序设计、应用开发等基本理论知识的理解,提高单片机应用技术的实践操作技能,掌握单片机应用系统设计、研制方面的一般方法,培养利用单片机进行科技革新、开发和创新的基本能力、为毕业后从事和单片机相关的工作打下一定的基础。
二、实习内容 利用TDN86/51二合一微机实验教学系统设计一个用8051单片机控制的循环彩灯控制系统。
三、设计过程:
1、能输出4种花型,并能由人工进行花型的切换。(按键)*利用单片机8031的P1.7做总开关,P1.0、P1.1做花型控制开关,P1.5、P1.6做调速开关。
实习花型:(1)使彩灯从右到左逐一循环点亮。(2)使彩灯交替闪烁。(3)使彩灯从右到左逐一点亮,当全部点亮后同时闪烁一次。(4)使彩灯从中间到两边顺序点亮,直至全部点亮;再将彩灯从两边到中间熄灭,直至全部熄灭。
2、循环彩灯的循环速度可调。*P1.5做加速控制开关,P1.6做减速控制开关。
3、按键要求:(1)启动/暂停。按动一次启动,再按一次暂停。是一个双态转换键 *“1”---启动,“0”---停止。(2)花型变化。按一次,立即停止当前花型的显示,转换为下一种花型。4种花型可以循环切换。表1.1 拨动开关与对应的花型 P1.0 P1.1 花型 0 0 花型1 1 0 花型2
花型3 1 1 花型4(3)速度+。按键一次,速度略加快一点。速度-。按键一次,速度略减慢一点。表1.2 拨动开关功能表
P1.5 P1.6 P1.7 功能 功能 功能 0 0 0 无加速 无减速 停止 1 1 1 加速 减速 启动 4在LED显示器上显示相应的花型号。
5、显像管显示相应数据
花型 显像管 A 花型1 B 花型2 C 花型3 D 花型4
6、利用软件子程序或单片机内部的定时/计数器实现定时功能,以模拟循环速度的基准值。
四、实习器材 TDN86/51二合一微机实验教学系统1台,配套计算机一台,连接导线若干
五、实验原理图: 0 1 如上图所示,8031的P0口接8155的AD0-7口,P2.7和P2.6分别接了8155的片选线和I0口,而8031的P1口做开关接口,8155的PA和PC接显像管的字位和字形,PB接LED。
六、程序及程序流程图:
开始
字型码赋值给R6 初始化 字位码初始值给人R0 总开关 字位码 C口
花型控制开关
显示数据
查表字形码
C口 花型 显示字形 显示 结束 调速 P1.7=0? 否 否 P1.6=1? 是 否 P1.5=1? P1.0=0? 是 是 P1.1=0? P1.0=0? 是 否 是 否 花型1 花型2 花型3 花型4
ORG 0000H
LJMP MAIN
ORG 1000H MAIN: SETB P2.6;8155初始化 CLR P2.7 ;片选线工作 MOV R0,#00H ;指向命令/状态口 MOV A,#07H ;命令字送A MOVX @R0,A ;装入8155 MOV DPTR,#DTAB ;控制花型的亮灭数据 MOV R4,#0FEH ;右量 MOV R2,#0FFH ;全灭 CHECK: JNB P1.7,MAIN
;总开关
JB P1.0,NEXT 控制花型开关 JB P1.1,TWO ONE: MOV R6,#77H ;字形码“A”(花型1)LCALL SHOW ;调用显示程序 MOV A,R4 RL
A
;左移
MOV R4,A
MOV R0,#02H ;PB输出 MOVX @R0,A LCALL DELAY ;调用延时程序 LJMP CHECK TWO: MOV R6,#7CH
;字型码“B”(花型2)LCALL SHOW MOV R3,#0AAH;10101010(0亮)MOV A,R3 MOV R0,#02H
MOVX @R0,A
LCALL DELAY
MOV R3,#55H ;01010101 MOV A,R3 MOVX @R0,A LCALL DELAY LJMP CHECK NEXT: JB P1.1,FOUR THREE: MOV R6,#39H ;字型码“C”(花型3)LCALL SHOW MOV R0,#02H
MOV A, R2
MOVX @R0,A LCALL DELAY CLR C RLC A ;带位左移 MOV R2,A CJNE A,#00H,NEXT3 MOVX @R0,A LCALL DELAY MOV A,#0FFH ;全灭 MOVX @R0,A LCALL DELAY MOV A,#00H
;全亮
MOVX @R0,A
LCALL DELAY
LJMP MAIN NEXT3: LJMP CHECK FOUR: MOV R6,#5EH ;字型码“D”(花型4)
LCALL SHOW MOV R0,#02H CLR A MOVC A,@A+DPTR
;查表
MOVX @R0,A LCALL DELAY
INC DPTR
CJNE A,#0FFH,NEXT4 MOVX @R0,A LCALL DELAY LJMP MAIN NEXT4: LJMP CHECK DTAB: DB 0E7H,0C3H,81H,00H
DB
81H, 0C3H, 0E7H,0FFH SHOW: MOV R0,#03H ;字位码送PC口
MOV A,#00H
显示程序 MOVX @R0,A MOV R0,#01H ;字位码送PA口 MOV A,R6 MOVX @R0,A LCALL DELAY RET DELAY: JB P1.6,DELAY1 ;延时程序 JB P1.5,DELAY2 MOV R7,#5 L0: MOV R6,#100 L1: MOV R5,#100 L2: DJNZ R5,L2 DJNZ R6,L1
DJNZ R7,L0
SJMP LAST
MOV R7,#15
;减速 DELAY1: SJMP L0 MOV R7,#01 ;加速 DELAY2: SJMP L0 RET LAST: END
七、实习总结: 学了一年的单片机,对这门功课一直抱着最害怕的心理,因为总觉得很难的样子,而且很多知识好像总是不能入脑一样,这时记得了,转身就会忘记,或许就是学得不牢固吧。不过它也有让人觉得有趣的时候,就是在实验室做实验的时候。将程序输入单片机,然后接上硬件电路,成功之后就会显示出我们要的结果,那样是很有趣的事情。这次的实习是一个循环灯的实验。当然这次不像以前那样,总是有程序让我们照打,然后接线,运行就可以了。现在的要我们自己的找程序,自己想怎么根据程序去接电路,一切都是要自己去动脑袋。开始的时候我和很多同学一样,由开始不知道怎么做,然后一点一点去失败,然后终于有了概念,自己要怎样去想怎样去做。后来参考了别人的那个程序,然后加上自己的理解,修改了一下那个程序,将花型变化了,还有显示的数据变化,有一个新的模式。不过其实总的结构还是万变不离其中的。我每一次改变,都会试一下,看看行不行,会不会有影响等等的。最后调试到我觉得可以之后,才交功课的。学了一年的单片机,几乎都要“使尽脑汁“了,完成了还是很高兴,有过构想,要是就这样把程序和方针的电路弄在一起,也做个电路板,还是不错的。