版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及应用项目三简易加减计数器和交通信号灯设计单片机原理及应用项目三简易加减计数器和交通信号灯设计1任务1简易加减计数器的设计1.技能要求单片机输出口接3位数码管和三个独立按键,这3位数码管分别显示一个变量的个位、十位和百位,三个按键分别作为“加”、“减”和“清零”功能,当按下“加”键时,数码管显示的变量加1,当按下“减”键时,数码管显示的变量减1,当按下“清零”键时,数码管显示和变量为0。任务1简易加减计数器的设计1.技能要求2知识链接一键盘接口电路独立联接式无编码键盘
独立联接式编码键盘
1、键盘的分类与结构◆独立联接式键盘◆矩阵联接式键盘◆屏幕键盘(触摸屏)◆无编码键盘◆编码键盘无编码,简单有效,键数较少时采用编码,节省I/O口线,键数较多时采用任务1简易加减计数器的设计知识链接一键盘接口电路独立联接式无编码键盘独立联接式编码31.键盘的工作原理及去抖动
对应任何按键来说,由于机械触点的弹性作用,触点在闭合和断开瞬间的电接触情况不稳定,造成了电压信号的抖动现象,如图所示。按键的抖动时间一般为5ms~10ms。这种现象会引起单片机对于一次键操作进行多次处理,因此必须设法消除键接通或断开时的抖动现象。常用的去抖动方法有硬件和软件两种。闭合稳定理想波形实际波形前沿抖动后沿抖动任务1简易加减计数器的设计1.键盘的工作原理及去抖动对应任何按键来说,由于机械触点4a)硬件去抖硬件消抖可以采用R-S触发器或单稳电路构成去抖电路,分别如图所示。硬件消抖因为要增加硬件开销,造成电路复杂,除了在数字电路里使用外,在单片机系统中不太采用。任务1简易加减计数器的设计a)硬件去抖任务1简易加减计数器的设计5
b)软件去抖在检测到有键按下时,执行一个10ms的延时程序后,再确认该键是否保持闭合状态。另外一种方法是连续判断按键所在线路的电平,如果连续100次(甚至更多)都出现低电平(一般按键都是低电平表示按下),就认为按键已经稳定,可以进行识别,这是企业实际开发产品中常用的方法。以P1.0所接按键为例,其编程流程图如图所示.
任务1简易加减计数器的设计b)软件去抖任务1简易加减计数器的设计6sbitkey=P1^0;key=1; //P1.0置“1”,作输入口if(key==0) //判断按键是否按下{delay10ms();//延时10msif(key==0)//再次判断按键是否按下{a++;//按键功能代码(变量a加“1”操作)while(key==0);//等待按键释放 }}任务1简易加减计数器的设计sbitkey=P1^0;任务1简易加减计数器的设计7
以单片机为基础的电子产品设计中,键盘是一种最为常见的人机交互设备。通常,键数较少、键盘的功能简单。1.简单键盘的扫描程序设计
★键盘扫描程序嵌入到主程序循环之中,与主程序一起构成主循环套。
★键敲击速度约几次/S,设计键盘扫描程序时,必须保证约100mS内就要循环扫描1次。任务1简易加减计数器的设计以单片机为基础的电子产品设计中,键盘是一种最为常见的人机8任务1简易加减计数器的设计任务1简易加减计数器的设计9任务1简易加减计数器的设计读取值输出值键码键名P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.011101110EEH1#11011110DEH2#10111110BEH3#011111107EH4#11101101EDH5#11011101DDH6#10111101BDH7#011111017DH8#11101011EBH9#11011011DBH10#10111011BBH11#011110117BH12#11100111E7H13#11010111D7H14#10110111B7H15#0111011177H16#1111××××F×H无键
按键数量进一步增加时,采用矩阵联接式键盘可节省更多的口线,接口电路也更简单。1.1.2矩阵连接键盘任务1简易加减计数器的设计读取值输出值键码键名P1.7P10键盘扫描程序的编写(1)判别有无键按下。(2)延时。(3)键盘扫描取得闭合键的行、列值-键值。(4)用计算法或查表法得到键号。*(5)判断闭合键是否释放,如没释放则继续等待。(6)将闭合键键号保存,然后返回。键盘扫描程序一般流程:任务1简易加减计数器的设计矩阵式键盘的工作原理
当键盘有键按下时,要逐行或逐列扫描,以判断是哪一个键按下。通常扫描方式有两种:扫描法和反转法。键盘扫描程序的编写(1)判别有无键按下。键盘扫描程序一般流程11任务1简易加减计数器的设计矩阵连接键盘扫描任务1简易加减计数器的设计矩阵连接键盘扫描12知识链接二:数码管显示技术任务1简易加减计数器的设计1.2.1七段LED显示器
通常的7段LED显示块中有8个发光二极管,故也叫做8段显示器。其中7个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。1.LED显示器的结构与原理知识链接二:数码管显示技术任务1简易加减计数器的设计1.13任务1简易加减计数器的设计2.LED显示器的显示方式(1)LED静态显示方式每一位显示都占用单独的具有锁存功能的I/O接口,com端连接在一起。(2)LED动态显示方式
是将所有数码管的“a,b,c,d,e,f,g,dp”的同名端连在一起,每个数码管的COM为各自独立的位选信号。即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态。任务1简易加减计数器的设计2.LED显示器的显示方式14任务1简易加减计数器的设计显示器由6个共阴极LED数码管构成;P0口输出显示段码,经由一片74LS245驱动输出给LED管;P1口输出位码(片选),经由74LS05输出给LED管。任务1简易加减计数器的设计显示器由6个共阴极LED数码管15动态扫描过程任务1简易加减计数器的设计首先从段选线上送出字型编码,再控制位选端,字符就显示在指定数码管上,其他位选端无效的数码管都处于熄灭状态,持续1.5ms时间,然后关闭所有显示;接下来又送出新的字型编码,按照上述过程又显示在另外一位数码管上,直到每一位数码管都扫描完为止,这一过程即为动态扫描显示。数码管其实是轮流依次点亮的,但由于人的视觉驻留效应,因此当每个数码管点亮的时间小到一定程度时,人就感觉不出字符的移动或闪烁,觉得每位数码管都一直在显示,达到一种稳定的视觉效果。动态扫描过程任务1简易加减计数器的设计首先从段选线上送出16任务1简易加减计数器的设计参考程序如下:#include<reg51.h>unsignedcharcodeTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C};unsignedcharcodeCol[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};voidDelay(){unsignedchari;for(i=0;i<250;i++);}voidmain()//同时显示123456{unsignedcharj;while(1){for(j=1;j<7;j++) {P0=Tab[j];P1=Col[j-1];//开第一个(共阴)数码管
Delay();P1=0xff;//关数码管
Delay();}}}任务1简易加减计数器的设计参考程序如下:17任务1简易加减计数器的设计1.3数码管显示4×4键盘编号1.技能要求单片机P2接1位数码管,P1口接由16个按键组成的4×4行列键盘。当按下这16个按键的其中之一时,数码管显示该按键对应的键盘编号。任务1简易加减计数器的设计1.3数码管显示4×4键盘编号18任务1简易加减计数器的设计.仿真电路图
数码管显示4×4键盘编号的电路图如下图所示,电路中的轻触按键使用元件库中的“button”元件,特别注意16个按键的连接关系及其和单片机之间的连接关系。任务1简易加减计数器的设计.仿真电路图19任务1简易加减计数器的设计.程序设计与调试程序采用线翻转法识别闭合键,反转法原理:行作低电平输出,列作输入,读列线;列作低电平输出,行作输入,读行线。数码管静态显示方式。任务1简易加减计数器的设计.程序设计与调试20任务1简易加减计数器的设计intmain(){while(1){keyScan();}}delay(unsignedinti){while(i--);}voidkeyScan(){unsignedchartemp,a;temp=0xff;P1=0xf0;if(P1!=0xf0)//判断是否有按键按下{delay(1000);//延时去抖if(P1!=0xf0)//再次判断是否有按键按下{P1=0xf0; //行作输出,列作输入temp=P1; //读取列值P1=0x0f; //列作输出,行作输入temp=temp|P1; //读取行值并和列值合并switch(temp){case0xee:a=0; break;case0xde:a=1; break;case0xbe:a=2;
break; case0x7e:a=3;
break;参考程序如下:#include<reg51.h>unsignedcharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
//09的段码0x88,0x83,0xc6,0xa1,0x86,0x8e}; //A~F的段码case0xed:a=4;
break;case0xdd:a=5; break;case0xbd:a=6; break;case0x7d:a=7; break;case0xeb:a=8;
break;case0xdb:a=9; break;case0xbb:a=10; break;case0x7b:a=11; break;case0xe7:a=12; break;case0xd7:a=13; break;case0xb7:a=14; break;
case0x77:a=15; break;}P2=seg[a];//将键值对应的段码送到P2口P1=0xf0;while(P1!=0xf0)delay(50);}}} 任务1简易加减计数器的设计intmain()delay21任务1简易加减计数器的设计(1)画出硬件电路图简易加减计数器任务实施:任务1简易加减计数器的设计(1)画出硬件电路图简易加减计22任务1简易加减计数器的设计(2).程序设计与调试
要获取一个变量的每一位数字的值,用到除法运算符“/”和模运算符“%”两个算术运算符。当两个整数作除法运算时结果仍为整数,余数则会被丢弃,因此可作为取整操作;模运算“%”表示取余操作。
例如,求一个变量temp的“百、十、个”位,分别赋给变量a、b、c的操作如下:a=temp/100%10; //除以100,再对10取余b=temp/10%10; //求得temp的十位c=temp%10; //求得temp的个位要在LED数码管上显示变量temp的“百、十、个”位,可直接写作:P2=seg[temp/100%10];P2=seg[temp/10%10];P2=seg[temp%10];其中seg[]是存放0~9段码的数组。任务1简易加减计数器的设计(2).程序设计与调试23任务1简易加减计数器的设计#include<reg51.h>#include<INTRINS.H>unsignedchara;unsignedcharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9十个数字的共阳型段码sbitk1=P1^0;sbitk2=P1^2;sbitk3=P1^4;voiddelay(unsignedintj){ while(j--);}display(){ unsignedchari,wk=0x01;//wk变量作位控,初始选通右边第1位 unsignedcharbuf[3]; //声明数码管显示字形缓冲数组 buf[0]=seg[a%10]; //a的个位buf[1]=seg[a/10%10]; //a的十位buf[2]=seg[a/100]; //a的百位,小于999时可以不对10取余独立按键控制数码管加减计数的程序如下:任务1简易加减计数器的设计#include<reg5124任务1简易加减计数器的设计for(i=0;i<3;i++){ P3=wk; //输出位控
P2=buf[i];//依次输出段码
delay(50);//延时
wk=_crol_(wk,1); //位控左移一位
P2=0xff; //熄灭所有数码管(消隐)
}}voidbutton(){ k1=1;if(k1==0){delay(1000);if(k1==0){a++;while(k1==0)display(); } }
k2=1;if(!k2)//如果k2为低电平的另一种写示{delay(1000);if(!k2){a--;while(!k2)display(); } }k3=1;if(k3==0){delay(1000);if(k3==0){a=0;while(k3==0)display();}}}intmain(){while(1){button();display(); }}任务1简易加减计数器的设计for(i=0;i<3;i+2526任务3方波发生器的设计1.技能要求设晶振频率6MHz。利用单片机定时器T0的方式1,在P3.0端口上输出周期为1ms的方波。2.仿真电路图本任务仿真电路图如图所示。P3.0端口的示波器用于观察波形和计算信号频率。图中示波器的每小格为0.1ms,因此信号周期为1ms,频率为1KHz。26任务3方波发生器的设计1.技能要求26
操作步骤:图中右上角的就是模拟示波器,4踪。仿真时可以出现示波器界面,可以对其操作。操作方法与一般示波器相同。
图中最下部的是个频率计,运行仿真时可以显示测量到的方波的频率值。添加这2个虚拟仪器的方法是,在软件左边点击虚拟仪器图标,选择第一个就是虚拟示波器,第三个就是频率计。把虚拟示波器的输入端接到P2口的任意引脚,虚拟频率计也可以将输入端接入P2口任意引脚。在这幅图里,采用网络标号的形式接线,看起来图面整洁一点。任务3方波发生器的设计操作步骤:任务3方波发生器的设计27采用查询方式处理的程序:#include<reg52.h>sbit P3_0=P3^0;voidmain(){TMOD=0x01;TL0=0x06;TH0=0xff;TR0=1;while(1) { while(!TF0);
TF0=0; P3_0=~P3_0; }}频率为1KHz的方波,其周期为1/1KHz,即1ms。要在P3.0端口上输出周期为1ms的方波,需要使P3.0端口每隔0.5ms取反一次。我们可以通过定时器作0.5ms定时,定时时间到,在程序中对P3.0取反。(1)确定工作模式和工作方式定时器T0工作方式1时:M1M0=01,c/T=0,GATE=0,高4位未使用,全部赋0,则TMOD=0x01。(2)计算0.5ms定时T0的初值。晶振频率6MHz,则机器周期为2μs,设T0的初值为X,则:X=(216-500÷2)=65036=FF06H因此,TH0的初值为0xff,TL0的初值为0x06。3.程序设计与调试任务3方波发生器的设计采用查询方式处理的程序:频率为1KHz的方波,其周期为1/128相关知识:利用定时器实现延时
8051单片机内部有两个16位的可编程定时器/计数器,称为定时器0(T0)和定时器1(T1),可编程选择其作为定时器用或作为计数器用。8051定时器/计数器由定时器T0、定时器T1、定时器方式寄存器TMOD和定时器控制寄存器TCON组成。TMOD、TCON与T0、T1间通过内部总线及逻辑电路连接,TMOD用于设置定时器的工作方式,TCON用于控制定时器的启动与停止。
基本思想:每隔1ms在程序中对P3.0取反,如此循环不止。任务3方波发生器的设计相关知识:利用定时器实现延时8051单片机内部有两个29定时器/计数器结构如图6-1所示,定时器/计数器T0由特殊功能寄存器TH0、TL0构成,定时器/计数器T1由特殊功能寄存器TH1、TL1构成。30图6-1AT89S51单片机的定时器/计数器结构框图
定时器/计数器的结构定时器/计数器结构如图6-1所示,定时器/计数器T0由特殊功301.计数功能计数器用于统计从TO(P3.4)和Tl(P3.5)两个引脚输入脉冲的负跳变数量。负跳变是指前一个机器周期采样为高电平,后一个机器周期为低电平。每输入一个脉冲负跳变,计数器加1。输入脉冲的高电平与低电平至少应保持一个机器周期时间,以确保正确采样,因此输入脉冲的频率最高为单片机内部脉冲频率的一半。如果内部脉冲频率为1MHZ,则最高计数频率为0.5MHz。定时器/计数器的功能DATE:2019/11/16311.计数功能定时器/计数器的功能DATE:2019/112.定时功能定时功能是单片机通过对内部机器脉冲信号计数实现的,计数值乘以机器周期就是相应的时间。例如,如果单片机采用12MHz的晶振,则机器内部脉冲频率为1MHz,则机器周期为1us,若共计数1000,则用时为1ms时间。
定时器/计数器的功能DATE:2019/11/16322.定时功能定时器/计数器的功能DATE:2019/
图5-1
TMOD格式8位分为两组,高4位控制T1,低4位控制T0。TMOD各位的功能。(1)GATE———门控位。
0:仅由运行控制位TRx(x
=
0,1)来控制定时器/计数器运行。
1:用外中断引脚(或)上的电平与运行控制位TRx共同来控制定时器/计数器运行。33
工作方式控制寄存器TMOD33工作方式控制寄存器TMOD33(2)M1、M0——工作方式选择位M1、M0共有4种编码,对应于4种工作方式的选择,如表所示。(3)C/—计数器模式和定时器模式选择位34
工作方式控制寄存器TMOD
0:为定时器工作模式;1:为计数器工作模式,计数器对外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。(2)M1、M0——工作方式选择位34工作方式控制寄存器T3435
定时器/计数器的4种工作方式1方式0M1、M0=00时,被设置为工作方式0,等效逻辑结构框图如图6-4所示(以定时器/计数器T1为例,TMOD.5、MOD.4
=
00)。35定时器/计数器的4种工作方式1方式0M1、M0=35【训练1】T0方式0定时设fosc=6Mhz,定时器/计数器T0以工作方式0定时2ms,编写初始化程序。说明:fosc即为晶振频率。首先计算计数初值。根据公式4-2有:定时时间=(8192-计数初值)×12/fosc计数初值=8192-定时时间×fosc/12 =8192-2000×6Mhz/12=7192=1C18H=11100000
11000B将此二进制数补足13位数(不够13位前面加0,这个例子够了,不用补),将高8位送给TH0,将低5位送TL0即可。
定时器/计数器的4种工作方式1方式0高8位是:11100000B=E0H,送给TH0低5位是:11000B=00011000B=18H送给TL0【训练1】T0方式0定时定时器/计数器的4种工作方式1362方式1当M1、M0=01时,定时器/计数器工作于方式1,这时定时器/计数器的等效电路逻辑结构如图5-3所示。方式1和方式0的差别仅仅在于计数器的位数不同,方式1为16位计数器,由THx高8位和TLx低8位构成(x=
0,1),方式0则为13位计数器,有关控制状态位的含义(GATE、C/、TFx、TRx)与方式0相同。
定时器/计数器的4种工作方式2方式1定时器/计数器的4种工作方式3738图6-3
定时器/计数器方式1逻辑结构框图
定时器/计数器的4种工作方式38图6-3定时器/计数器方式1逻辑结构框图定时器/38实例6-2欲采用8051单片机控制8个LED同时以1s为周期闪烁,设计电路原理图并编写程序。设置定时/计数器的过程:
1)先初始化工作方式寄存器TMOD2)为定时/计数器赋初值3)通过控制寄存器TCON中的TRO或TRl实现启动或停止。
定时器/计数器的4种工作方式DATE:2019/11/1639实例6-2欲采用8051单片机控制8个LED同时以1s为周#include<reg51.h>//将8051单片机头文件包含到文件中main(void){unsignedcharcounter;//设置无符号字符型变量,存储定时器中断次数。 TMOD=0x01;//设T0为定时模式,由TR0控制启动和停止,且工作于方式1 TH0=(65536-46083)/256;//初始化T0的高8位 TL0=(65536-46083)%256;//初始化T0的低8位 TF0=0;//初始化定时器溢出标志 P0=0xff;//关闭LEDcounter=0;//从0开始计数
TR0=1;//启动定时器0while(1){ while(TF0==1)//如果定时器溢出 {counter++;//计时次数加1if(counter==20)//计时时间达到1s{P0=~P0;//P0所有位取反,使LED闪烁
counter=0;//重新从0开始计数}TH0=(65536-46083)/256;//重新初始化T0的高8位TL0=(65536-46083)%256;//重新初始化T0的低8位TF0=0;//重新初始化定时器溢出标志}}}
定时器/计数器的4种工作方式DATE:2019/11/1640#include<reg51.h>3方式2方式0和方式1的最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。这不仅影响定时精度,也给程序设计带来麻烦。方式2就是针对此问题而设置的。当M1、M0为10时,定时器/计数器处于工作方式2,这时定时器/计数器的等效逻辑结构如图6-6所示(以定时器T1为例,x=
1)。
定时器/计数器的4种工作方式3方式2定时器/计数器的4种工作方式414方式3是为增加一个8位定时器/计数器而设,使AT89S51单片机具有3个定时器/计数器。方式3只适用于T0,T1不能工作在方式3。T1处于方式3时相当于TR1=
0,停止计数(此时T1可用来作为串行口波特率产生器)。1.工作方式3下的T0TMOD的低2位为11时,T0的工作方式被选为方式3,各引脚与T0的逻辑关系如图5-8所示。定时器/计数器T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的状态控制位C/、GATE、TR0、42
定时器/计数器的4种工作方式4方式342定时器/计数器的4种工作方式4243图6-6
定时器/计数器方式2逻辑结构框图
定时器/计数器的4种工作方式43图6-6定时器/计数器方式2逻辑结构框图定时43TF0,而TH0被固定为一个8位定时器(不能作为外部计数模式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断请求源TF1。2.T0工作在方式3时T1的各种工作方式一般情况下,当T1用作串行口的波特率发生器时,T0才工作在方式3。T0处于工作方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合。
定时器/计数器的4种工作方式TF0,而TH0被固定为一个8位定时器(不能作为外部计数模4445图6-8
定时器/计数器T0方式3的逻辑结构框图
定时器/计数器的4种工作方式45图6-8定时器/计数器T0方式3的逻辑结构框图定时45M1、M0——工作方式选择位M1、M0共有4种编码,对应于4种工作方式的选择,如表所示。464种工作方式总结M1、M0——工作方式选择位464种工作方式总结46
字节地址为88H,可位寻址,位地址为88H~8FH。格式如图5-3所示。定时器/计数器控制寄存器TCON(1)TF1、TF0——计数溢出标志位。当计数器计数溢出时,该位置“1”。使用中断方式时,此位作为中断请求标志位,进入中断服务程序后由硬件自动清“0”。(2)TR1、TR0——计数运行控制位。TR1位(或TR0位)=
1,启动定时器/计数器工作的必要条件。TR1位(或TR0位)
=
0,停止定时器/计数器工作。该位可由软件置“1”或清“0”。 字节地址为88H,可位寻址,位地址为88H~8FH。格47
例5-1:设定时器1为定时工作方式,按方式2工作,定时器0为计数方式,按方式1工作,均由程序单独控制启动和停止,请给出TMOD控制字。解:定时器1做定时器使用则D6=0;按方式2工作则D5=1,D4=0;由程序单独控制启停则D7=0。定时器0做计数器使用则D2=1;按方式1工作则D0=0,D1=1;由程序单独控制启停则D3=0。因此命令字TMOD的值应为00100101B,即25H。定时器/计数器控制DATE:2019/11/1648例5-1:设定时器1为定时工作方式,按方式2工作,定时器定时/计数器的控制实例6-3图6-4是产品包装生产线的计数系统,每个产品经过计数装置时由机械杆碰合按键S1一次。当第一次计满一包(5个)则D1亮,计满第二包则D2亮…,计满第八包则D1~D8全亮,八包包装成一箱,此后重复以上过程。编写程序实现此功能。DATE:2019/11/1649定时/计数器的控制实例6-3图6-4是产品包装生产线的计数解:程序如下:#include<reg51.h>//包含51单片机寄存器定义的头文件unsignedcharcounter;//计数初值main(void){ TMOD=0x60;//使用T1的工作方式2 TH1=256-5;//T1的高8位赋初值 TL1=256-5;//T1的低8位赋初值
counter=0; TR1=1;//启动T1 while(1){ while(TF1==1)//如果计满 {TF1=0;//计数器溢出后,将TF1清0counter++;//计数加15.3定时/计数器的控制DATE:2019/11/1650解:程序如下:5.3定时/计数器的控制DATE:2019
switch(counter)//检查中断计数值 {case1:P0=0xfe;break;//则第1个灯亮case2:P0=0xfd;break;//第2个灯亮case3:P0=0xfb;break;//第3个灯亮case4:P0=0xf7;break;//第4个灯亮case5:P0=0xef;break;//第5个灯亮case6:P0=0xdf;break;//第6个灯亮case7:P0=0xbf;break;//第7个灯亮case8:P0=0x00;counter=0;break;//8个灯全亮}} }}5.3定时/计数器的控制DATE:2019/11/1651switch(counter)//检查中断计数值5.东西方向
信号
绿灯亮绿灯关闭黄灯闪亮
红灯亮
时间
20S
2S5次共2S
22S南北方向
信号
红灯亮
绿灯亮绿灯关闭黄灯闪亮
时间
22S
20S2S
5次共2S任务4十字路口交通信号灯设计系统控制要求如下:(1)正常情况下,首先东西方向绿灯亮,南北方向红灯亮20s;经过后南北方向绿灯亮,东西方向红灯亮20s。(2)黄灯5次闪烁绿灯灭2s,之后重复(1)(2)。东西信号绿灯亮绿灯关闭黄灯闪亮红灯亮52任务4十字路口交通信号灯设计任务4十字路口交通信号灯设计53任务4十字路口交通信号灯设计任务4十字路口交通信号灯设计54任务4十字路口交通信号灯设计任务4十字路口交通信号灯设计551)对TMOD赋值,确定工作方式。
TMOD为T1、T2的工作方式寄存器
任务4十字路口交通信号灯设计T1控制T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7TMOD(89H)
TMOD=0
0
01
0000
软件启动定时方式1T0未使用∴TMOD赋值为10H1.采用定时器设计一个0.5秒的延时子程序1)对TMOD赋值,确定工作方式。任务4十字路口交通信号562)预置定时器初值X,将初值写入TH1、TL1中。初值X=最大计数值-计数次数若fosc=12MHZ,在方式1中,定时器T1的最大计数值为65536,而定时50ms需要完成50000次计数。由此可计算出计数器的初始值。初值X=65536-50000=15536D=3CB0H
任务4十字路口交通信号灯设计3)启动定时/计数器工作,当GATE=0时,只要用“SETBbit”指令将TCON寄存器中的启动位TR0或TR1置“1”即可,使用“CLRbit”指令可停止定时器工作。
2)预置定时器初值X,将初值写入TH1、TL1中。任务4十字57任务4十字路口交通信号灯设计0.5s延时子程序如下:DELAY:MOVR3,#0AH;循环次数MOVTMOD,#10H;定时器T1,方式1MOVTH1,#3CH;定时50ms的初值MOVTL1,#0B0HSETBTR1;启动定时器LP1:JBCTF1,LP2SJMPLP1LP2:MOVTH1,#3CH;重装初值MOVTL1,#0B0HDJNZR3,LP1RET任务4十字路口交通信号灯设计0.5s延时子程序如下:58单片机C语言程序设计:LED模拟交通灯
#include<reg51.h>#defineucharunsignedchar;sbitRED_B=P0^0;//北向灯sbitYELLOW_B=P0^1;sbitGREEN_B=P0^2;sbitRED_X=P0^3;//西向灯sbitYELLOW_X=P0^4;sbitGREEN_X=P0^5;sbitRED_N=P2^0;//南向灯sbitYELLOW_N=P2^1;sbitGREEN_N=P2^2;sbitRED_D=P2^3;//东向灯sbitYELLOW_D=P2^4;sbitGREEN_D=P2^5;ucharFlash_Count=0,Operation_Type=1;voidDelayMS(unsignedintx){TMOD=0x01;TR0=1;while((x--)!=0){TH0=0X3C;TL0=0Xb0;while(!TF0);TF0=0;}}任务4十字路口交通信号灯设计单片机C语言程序设计:LED模拟交通灯
voidDe59//交通灯切换voidTraffic_Light(){switch(Operation_Type){case1://东西向绿灯与南北向红灯亮RED_X=1;YELLOW_X=1;GREEN_X=0;RED_N=0;YELLOW_N=1;GREEN_N=1;RED_D=1;YELLOW_D=1;GREEN_D=0;RED_B=0;YELLOW_B=1;GREEN_B=1;DelayMS(400);Operation_Type=2;break;case2://东西向黄灯闪烁,绿灯关闭DelayMS(40);YELLOW_D=~YELLOW_D;GREEN_D=1;YELLOW_X=~YELLOW_X;GREEN_X=1;if(++Flash_Count!=10)return;//闪烁Flash_Count=0;Operation_Type=3;break;case3://东西向红灯,南北向绿灯亮RED_X=0;YELLOW_X=1;GREEN_X=1;RED_N=1;YELLOW_N=1;GREEN_N=0;RED_D=0;YELLOW_D=1;GREEN_D=1;RED_B=1;YELLOW_B=1;GREEN_B=0;DelayMS(400);Operation_Type=4;break;case4://南北向黄灯闪烁DelayMS(40);YELLOW_N=~YELLOW_N;GREEN_N=1;YELLOW_B=~YELLOW_B;GREEN_B=1;if(++Flash_Count!=10)return;Flash_Count=0;Operation_Type=1;}}//主程序voidmain(){while(1)Traffic_Light();}任务4十字路口交通信号灯设计//交通灯切换case3://东西向红灯,南北向绿灯亮任60采用查询方式处理的程序:#include<reg52.h>sbit P1_0=P1^0;voidmain(){TMOD=0x02;TL0=0x06;TH0=0x06;TR0=1;while(1) { while(!TF0);
TF0=0; P1_0=~P1_0; }}定时器编程总结一、定时器的初始化步骤1、选择工作模式和工作方式。
设置TMOD。2、设置定时器的计数初值。
设置THx和TLx。3、启动定时器。二、定时器查询式应用步骤1、选择工作模式和工作方式。
设置TMOD。2、设置定时器的计数初值。
设置THx和TLx。3、启动定时器。4、查询溢出标准TFX5、清零溢出标志6、应用处理7、重装初始值采用查询方式处理的程序:定时器编程总结一、定时器的初始化步骤611、设计方案
选用AT89C51单片机芯片、时钟电路、复位电路、电源、12个发光二极管和一个按键构成最小系统,完成对交通信号灯有急救车通过时的智能控制。任务要求图3-17交通信号灯模拟控制系统设计框图任务4
智能交通信号灯设计并行接口AT89C51单片机电源时钟电路复位电路红黄绿灯发光二极管按键1、设计方案选用AT89C51单片机芯片、时钟电路622、硬件电路设计
任务实施图2-24交通灯控制电路原理图
电路所用仿真元器件:AT89C51:单片机RES:电阻CRYSTAL:晶振CAP:电容CAP-ELEC:电解电容BUTTON:按钮LED-GREEN:绿色发光二极管LED-YELLOW:黄色发光二极管LED-RED:红色发光二极管任务4智能交通信号灯设计2、硬件电路设计任务实施图2-24交通灯控制电路原理图63表3-6交通灯控制口线分配及控制状态表任务4智能交通交通信号灯设计P1.5P1.4P1.3P1.2P1.1P1.0P1端口数据状态说明东西方向南北方向红灯黄灯绿灯红灯黄灯绿灯11100011011100,1交替111100011111111011100,1交替1F3HP1.3交替EBHDEHP1.0交替DDH东西向通行,南北向禁行东西向警告,南北向禁行东西向警告,南北向禁行南北向通行,东西向禁行南北向警告,东西向禁行南北向警告,东西向禁行100111100111EDHDBH紧急情况表3-6交通灯控制口线分配及控制状态表任务4智能交64相关知识:中断的基本知识1、中断的基本概念中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须中止原程序的执行,转去执行相应的处理程序,待处理结束之后,再回来继续执行被中止的原程序的过程。中断需要解决两个主要问题:如何从主程序转到中断服务程序和如何从中断服务程序返回主程序。(1)概念图3-1中断的示意图任务4智能交通交通信号灯设计相关知识:中断的基本知识1、中断的基本概念中断是指计651)分时操作:解决了快速CPU与慢速外设之间的矛盾,可使CPU与外设并行工作。这样,CPU可启动多个外设同时工作,大大提高了工作效率。2)实时处理:实时处理控制系统中许多随机产生的参数与信息,即计算机具有实时处理的能力,从而提高了控制系统的性能。3)故障处理:使系统具备处理故障的能力,如出现掉电、存储出错、运算溢出等故障,从而提高了系统自身的可靠性。
(2)特点(3)与中断相关的几个概念1)中断服务子程序:中断之后处理的程序,也称为中断处理子程序。2)主程序:原来正常执行的程序。3)中断源:发出中断申请的信号或引起中断的事件。4)中断请求:CPU接收到中断源发出的申请信号。5)中断响应:接收中断申请,转到相应中断服务子程序处执行。6)断点:主程序被断开的位置(即地址),转入中断程序的位置。7)中断入口地址:中断响应后,中断程序执行的首地址。8)中断返回:从中断服务程序返回到主程序。任务4智能交通交通信号灯设计1)分时操作:解决了快速CPU与慢速外设之间的矛盾,可使C66IE0TCONSCONINT0IT0=0IT0=1INT1IT1=0IT1=1TF0IE1TF1T0T1TIRITXDRXDESET0EX0EX1ET1EA自然优先级矢量地址高级中断请求自然优先级矢量地址低级中断请求PX0PT0PX1PT1PSIEIP中断标志位中断源允许总允许中断优先级(P3.2)(P3.3)(P3.0)(P3.1)(P3.5)(P3.4)2、MCS-51单片机的中断系统及其管理
(1)MCS-51中断系统的结构
任务4智能交通交通信号灯设计IE0TCONSCONINT0IT0=0IT0=1IN67(2)中断源
图3-1中断的示意图8051单片机有5个中断请求源:单片机INT0或
外部输入中断源INT0(P3.2)INT1或
外部输入中断源INT1(P3.3)T0
片内定时器T0的溢出(P3.4)T1
片内定时器T1的溢出(P3.5)串行口
片内串行口发送或接收中断源任务4智能交通交通信号灯设计(2)中断源图3-1中断的示意图8051单片机有5个中68(3)特殊功能寄存器TCON和SCON
1)中断控制寄存器TCONTF1
TF0
IE1IT1IE0IT0TCON7654321088H8F
8D
8B8A8988位地址T1溢出中断标志(TCON.7):
T1启动计数后,计满溢出由硬件置位TF1=1,向CPU请求中断,此标志一直保持到CPU响应中断后,才由硬件自动清0。也可用软件查询该标志,并由软件清0。任务4智能交通交通信号灯设计(3)特殊功能寄存器TCON和SCON1)中断控制寄存69TF1
TF0
IE1IT1IE0IT0TCON88H外部中断INT1中断标志位(TCON.3):IE1=1,外部中断1向CPU申请中断
外部中断INT1(P3.3)触发方式控制位(TCON.2):
IT1=0,电平触发方式
IT1=1,下降沿触发方式76543210注意:该寄存器可以位寻址。任务4智能交通交通信号灯设计TF1TF0IE1IT1IE0IT0TCO702)串行口控制寄存器SCON返回
TI(SCON.1)——串行发送中断标志。RI(SCON.0)——串行接收中断标志。
TIRISCON
98H76543210注意:该寄存器可以位寻址。
9998位地址任务4智能交通交通信号灯设计2)串行口控制寄存器SCON返回TI(SCON.171(4)中断的开放与禁止
MCS-51系列单片机的5个中断源都是可屏蔽中断,由中断系统内部的专用寄存器IE负责控制各中断源的开放或屏蔽。
IEA8H
EA
ESET1EX1ET0EX0例:允许定时器T0中断:
SETBEA位操作指令SETBET0
或MOVIE,#82H
字节操作指令或MOV
0A8H,#82H76543210注意:该寄存器可以位寻址。AF
ACABAAA9A8位地址任务4智能交通交通信号灯设计(4)中断的开放与禁止MCS-51系列单片机的572(5)中断优先权的处理
MCS-51中断系统设立了两极优先级—高优先级和低优先级,可以程序设置5个中断源优先级,由中断优先级寄存器IP进行控制。51单片机有两个中断优先级——高级和低级专用寄存器IP为中断优先级寄存器,用户可用软件设定相应位为1,对应的中断源被设置为高优先级,相应位为0,对应的中断源被设置为低优先级系统复位时,均为低优先级该寄存器可以位寻址
PSPT1PX1PT0PX0
IPB8H
76543210
BCBBBAB9B8位地址任务4智能交通交通信号灯设计(5)中断优先权的处理MCS-51中断系统设立了两极73同一级中的5个中断源的优先顺序是:
INT0中断
T0溢出中断
INT1中断
T1溢出中断
串口中断
高低出厂前已由厂家固化顺序——事先约定中断优先原则:(概括为四句话)1、低级不打断高级2、高级不睬低级3、同级不能打断4、同级、同时中断,事先约定。任务4智能交通交通信号灯设计同一级中的5个中断源的优先顺序是:I74例6-1,如果IP的值设为06H,如果5个中断请求同时发生,求中断响应的次序。
解:06H化为二进制是00000110B,根据表6-4知,定时器T0和外中断
被设置成高优先级中断,因此如果5个中断请求同时发生,中断响应的先后次序是:定时器T0→外中断INT1→外中断
→定时器T1→串行中断。任务4智能交通交通信号灯设计DATE:2019/11/16例6-1,如果IP的值设为06H,如果5个中断请求同时发生,753、中断处理过程(1)中断响应
中断处理过程分为三个阶段:中断响应、中断处理和中断返回。中断响应中断处理(又称中断服务)中断返回
中断请求的撤除
中断响应中断返回任务4智能交通交通信号灯设计3、中断处理过程(1)中断响应中断处理过程分76中断响应(以外部中断0为例)中断响应:在满足CPU的中断响应条件之后,CPU对中断源中断请求予以处理。中断响应过程:保护断点地址;中断响应把程序转向中断服务程序的入口地址(通常称矢量地址)。特别注意:这些工作是硬件自动完成的!
断点地址中断服务子程序的入口地址外部中断0入口地址0003ZD0AJMPORG0003HAJMPZD0ZD0任务4智能交通交通信号灯设计中断响应(以外部中断0为例)中断响应:在满足CPU的中断响应77中断响应中断服务子程序入口地址又称为中断矢量或中断向量。中断响应单片机中5个中断源的矢量地址是固定的,不能改动。断点地址中断服务子程序的入口地址任务4智能交通交通信号灯设计中断响应中断服务子程序入口地址又称为中断矢量或中断向量。中78任务4智能交通交通信号灯设计程序存储器ROM0000H:复位后,程序的入口地址(PC=0000H)0023H:串行口中断入口0003H:外部中断0入口-INT0000BH:定时器0溢出中断入口-T00013H:外部中断1入口-INT1001BH:定时器1溢出中断入口-T18字节8字节8字节002AH使用时,通常在这些入口地址处存放一条跳转指令,使程序跳转到用户安排的中断服务程序起始地址上去!任务4智能交通交通信号灯设计程序存储器ROM0000H:79中断处理中断服务程序从中断子程序入口地址开始执行,直到返回指令RETI为止,这个过程称为中断处理(或中断服务)。中断服务子程序一般包括两部分内容:一是保护和恢复现场,二是处理中断源的请求。中断响应入口地址RETI任务4智能交通交通信号灯设计中断处理中断服务程序从中断子程序入口地址开始执行,直到返回指80中断处理INTT0:PUSHACC PUSHDPHPUSHDPLPUSHPSW
中断源服务
POPPSW
POPDPLPOPDPHPOPACCRETI保护现场恢复现场任务4智能交通交通信号灯设计中断处理INTT0:PUSHACC保护现场恢81中断返回中断返回是指中断服务完后,计算机返回到原来暂停的位置(即断点),继续执行原来的程序。中断返回由专门的中断返回指令RETI来实现。中断响应中断返回任务4智能交通交通信号灯设计中断返回中断返回是指中断服务完后,计算机返回到原来暂停82中断返回
RETI指令功能:把断点地址取出,送回到程序计数器PC中去。另外,它还通知中断系统已完成中断处理,将清除优先级状态触发器。特别注意:不能用RET指令代替RETI指令!中断响应中断返回断点地址任务4智能交通交通信号灯设计中断返回RETI指令功能:把断点地址取出,送回到程序计数83中断请求的撤除
CPU响应某中断请求后,在中断返回前,应该撤除该中断请求,否则会引起另一次中断。
定时器0或1溢出:CPU在响应中断后,硬件清除了有关的中断请求标志TF0或TF1,即中断请求是自动撤除的。
边沿触发的外部中断(IT0或IT1=1):CPU在响应中断后,也是用硬件自动清除有关的中断请求标志IE0或IE1。
串行口中断:CPU响应中断后,没有用硬件清除TI、RI,故这些中断不能自动撤除,而要靠软件来清除相应的标志。任务4智能交通交通信号灯设计中断请求的撤除CPU响应某中断请求后,在中断返回84三、中断系统的编程中断函数的定义:void函数名(void)interruptnusingm{
中断函数内容}修饰符interruptn表明该中断服务程序所对应中断源的中断号,编译器会把该函数转化为中断函数,并在对应的中断入口地址处添加跳转指令,以便转入本中断函数。修饰符usingm用于指定本函数内部使用的工作寄存器组,m的取值为0~3。该修饰符可省略,由编译器去分配。任务4智能交通交通信号灯设计DATE:2019/11/1685三、中断系统的编程中断函数的定义:任务4智能交通交通信号编写中断函数时,应注意以下几点:(1)中断函数不带任何参数,否则会导致编译出错。(2)中断函数不能有返回值,所以函数类型应为void。(3)中断函数必须由中断源触发而自动调用,不得直接调用,因此也不用提前声明。(4)中断函数要精简,避免因执行时间过长影响其它中断的响应。任务4智能交通交通信号灯设计DATE:2019/11/1686编写中断函数时,应注意以下几点:任务4智能交通交通信号灯例6-2
如图所示,将P1口的P1.4~P1.7作为输入位,P1.0~P1.3作为输出位。要求利用89C52将开关所设的数据读入单片机内,并依次通过P1.0~P1.3输出,驱动发光二极管,以检查P1.4~P1.7输入的电平情况(若输入为高电平则相应的LED亮)。要求采用中断边沿触发方式,中断一次,完成一次读/写操作。任务4智能交通交通信号灯设计例6-2如图所示,将P1口的P1.4~P1.7作为输入位87
分析:5-9中,用外部中断0,中断请求从P3.2输入,并采用去抖动电路。当P1.0~P1.3的某一位输出为0时,相应的发光二极管就会发光。当开关S1来回拨动一次时,将产生一个下降沿信号,发出中断请求。中断服务程序的入口地址为0003H。
C语言程序:#include<reg52.h>voidmain(){EX0=1;//允许外部中断0中断IT0=1;//选边沿触发方式EA=1;//CPU开中断while(1);//等待中断}
voidint0_int(void)interrupt0{unsignedchar datad;P1=0xf0; //设P1.4~P1.7为输入d=P1; //取开关数P1=~(d>>4); //驱动LED发光}任务4智能交通交通信号灯设计 分析:5-9中,用外部中断0,中断请求从P3.2输入,并采88例6-3如图6-2所示,P0口连接了8个发光二极管,
引脚上接了一个按键,要求每次按键均能改变发光二级管的亮灭。任务4智能交通交通信号灯设计例6-3如图6-2所示,P0口连接了8个发光二极管,引89#include<reg51.h>#defineLEDP0 sbitKEY=P3^3;bitflag=0;
//延时子函数;voiddelay(unsignedcharn){ unsignedchara; for(a=0;a<n;a++);}
main(void){IT1=1;//设置边沿触发方式EA=1;EX1=1;LED=0xff;//发光二极管灭while(1){if(flag==1) //有外部中断的按键{delay(100); //延迟一段时间判断是否为抖动if(!KEY==0)//还有按键,说明不是抖动{while(!KEY);//等待按键松开LED=~LED;//改变发光二级管的亮灭 }flag=0; EX1=1;//再次开放外部中断} }}voidint1(void)interrupt2 //中断服务程序{flag=1;//设置中断标志变量为真,表明有按键闭合EX1=0;//暂时不允许再次产生外部中断}任务4智能交通交通信号灯设计DATE:2019/11/1690#include<reg51.h>while(1)任务4编写中断服务程序时,应避免使中断时间过长的操作,如果本例中断服务程序编成如下形式:voidint1(void)interrupt2//中断服务程序{delay(100);//延迟一段时间,判断是否为抖动if(KEY==0) //还有按键,说明不是抖动{while(!KEY);//等待按键松开LED=~LED; //改变发光二级管的亮灭}}
由于中断函数里有去除按键抖动以及等待按键松开的处理,当按键时间过长时,程序会陷入执行语句while(!KEY)不得退出,有可能造成程序逻辑错误。如果此时系统中同时使用串口中断收发数据,会使串口中断请求得不到CPU及时响应,造成串口数据收发错误。任务4智能交通交通信号灯设计编写中断服务程序时,应避免使中断时间过长的操作,如果本例中断91任务实施图2-24交通灯控制电路原理图
电路所用仿真元器件:AT89C51:单片机RES:电阻CRYSTAL:晶振CAP:电容CAP-ELEC:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度放心签工程车租赁合同示范4篇
- 二零二四年环境监测设备购销合同2篇
- 二零二四年度房地产开发商与合作方之间的土地开发合同
- 2024年度股权转让合同标的及受让方的权利与义务3篇
- 租赁合同解除通知书
- 二零二四年度融资租赁合同范本出租方权益保障2篇
- 2024版5G网络覆盖优化服务合同3篇
- 商铺租赁合同利于承租方2024年度权益实现3篇
- 二零二四年度物流服务合同标的及服务标准具体规定3篇
- 农村生活垃圾清运合同
- 人工智能技术应用专业调研报告
- 《中华民族共同体概论》考试复习题库(含答案)
- 不锈钢栏杆施工方案
- 液压管道施工方案(完整版)
- 皮肤生理学及皮肤问题
- 翰伯特的分裂人格—对电影《洛丽塔》(1997)的分析(英文)
- 人教部编版二年级数学上册《总复习(全章)》PPT教学课件
- 低压配电柜操作规程1
- 《美团外卖商家运营》ppt课件
- 员工档案表范本
- 归档文件整理规则DA/T22—2015
评论
0/150
提交评论