键控双向流水灯
基于单片机AT89C51控制的键控流水灯_课程设计报告

图3-5流水灯模块图
3.3
图3-6 键控流水灯图
4
#include<reg51.h>
#define smg1 P0
#definelsd1P1
#define smg2P2
unsignedinti=1,u=7,j,n,c,k,h=7,s=1;
voidsjms3(void);
voidsjms4(void);
voidsjms5(void);
voidmsms1(void);
voidmsms2(void);
voidmsms3(void);
voidmsms4(void);
voidmsms5(void);
voidzd1(void);
voidzd2(void);
3.2.5
发光二极管就是LED,是一种由磷化镓等半导体材料制成的、能直接将电能转换成光能的发光显示器件。当其内部有一定电流通过时,就是发光。发光二极管具有功耗低、体积小、可靠性高、寿命长和相应快等优点。
流水灯模块采用16个LED发光二极管,通过代码的编写,实现五种流水移动,其中电阻的作用是保护二极管,向它提供较小的电流,防止二极管因为电流过大而烧毁。
1
单片机控制系统能够取代以前利用复杂电子线路或者数字电路构成的控制系统,可以软件控制来实现,并能够实现智能化。现在的单片机的控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛。
2
2.1
随着经济的发展、科技的突飞猛进,芯片业得到了迅速的发展,是单片机技术在各种民用和工业控制等领域得到更广泛的应用。单片机凭借其低成本、高性能的不可代替优势已经成为了微电脑 控制的主力军。学习单片机的有效方法是将理论与实践并重,因此通过对单片机可控流水灯的设计和研究,鼓励学生在熟悉基本原理的前提下,与实际应用相联系,提出自己的方案,来完善设计,使得他们更好的掌握单片机的应用。
综合实验一——按键控制流水灯实验(查询方式)

北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化1101_ ______________ 姓名:__廖文骏_ ________________学号:_ 20111002124 ____________ 指导教师:___ _____王粉花____________2013年12 月综合实验一按键控制流水灯实验(查询方式)实验学时:2学时一、实验目的1.掌握ATmega16 I/O口操作相关寄存器2.掌握CodeVision AVR软件的使用3. 复习C语言,总结单片机C语言的特点二、实验内容1. 设计一个简单控制程序,功能是8个LED逐一循环发光0.5s,构成“流水灯”。
2. 用两个按键K1和K2控制流水灯(中断方式):(1)当按下K1时,流水灯从左向右流动;(2)当按下K2时,流水灯从右向左流动。
三、实验所用仪表及设备硬件:PC机一台、AVR_StudyV1.1实验板软件:CodeVision AVR集成开发软件、SLISP下载软件四、实验原理ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。
所有这些I/O口都是双(有的为3)功能复用的。
其中第一功能均作为数字通用I/O接口使用,而复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。
这些I/O口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。
每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。
I/O口的工作方式和表现特征由这3个I/O口寄存器控制。
AVR通用I/O端口的引脚配置情况:I/O口引脚配置表表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。
左右来回循环的流水灯

(大作业题目)报告单片机控制左右循环的流水灯学生学号:学生姓名:同组学号:同组姓名:指导老师:设计目的:1)学习P1口的使用方法;2)学习延时子程序的编写3)了解简单单片机应用系统的设计方法。
4)掌握应用编译源汇编程序的操作方法。
5)熟练掌握AT89c51型开发板的使用方法和注意事项。
设计要求:8个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。
编程实现制作左右来回循环的节日彩灯,显示规律如下图所示。
依次实现红蓝绿黄红蓝绿黄的循环亮灭。
设计步骤:1.按照电路图在proteus7.5的环境下进行仿真连接,在keilc3的环境下进行c环境的编译,然后下载到单片机内运行进行仿真,观察发光二极管的运行状态。
要注意的的,实验中一定要再p1口接上拉电阻或是一个74HC245的芯片,以提高单片机的P口驱动,以使LED灯亮。
如果使用74HC245,则引脚OE要接地,DIR要接高电平。
2.实现单片机工作的最小系统:电源电路﹑时钟电路﹑复位电路。
3.因为LED灯是共阳极接入,编程实现灯亮的时候,要使语句取反。
设计电路图:左右来回的流水灯.PDF源程序:左右来回的流水灯.C流程图:开始判断P口电平高电平低电平变向P口加1延时设计总结:1.实验中连接电路后运行发现等没有亮,检查程序,看接相应灯的P口输出语句是否取反了;如果没有循环,看控制方向的语句是否写对;检查上拉电阻的取值是否正确,一定要有上拉电阻。
2.通过本次设计试验,我了解了单片机是如何实现控制功能的,设计中会遇到错误的结果,要仔细分析错误,然后一一去改进,试验,直到没有错误为止。
三、/**左右来回的流水灯**/#include<reg51.h>typedef unsigned char uint8;typedef unsigned int uint16;void delay(uint16 x){uint8 i,j;for(i = x; i > 0; i --)for(j = 114; j > 0; j --);}void main(){uint8 b = 0, way = 0; //移动位数变量及移动方向变量while(1){if(way == 0) //根据way选择左移还是右移P0 = ~(0x01 << b); //最低位的0被左移b位 elseP0 = ~(0x80 >> b); //最高位的0被右移b位if( ++b == 8) //如果移动到左端或右端{b = 0; //b归0way = !way; //改变方向}delay(200);}}。
按钮控制流水灯C程序的编写

按钮控制LED——51单片机的Proteus实验实验原理51单片机的一个I/O口接按钮,再通过另一个I/O口控制LED的亮、灭。
主要器件以及电路图单片机——AT89C51,上拉电阻——pullup,按钮button,发光二极管——LED。
按钮控制LED汇编程序源码ORG 0START:MOV P1,#0 ;LED不亮MOV P0,#0FFH ;P0口准备读数ST1:JB P0.0,$ ;等待按钮抬起JNB P0.0,$ ;等待按钮按下;以上两句使得只有按一下按钮才可能执行下面的语句CPL P1.0 ;LED状态改变SJMP ST1 ;返回END流水灯——51单片机的Proteus实验实验原理通过个51单片机的一个I/O口送不同的数字,实现8个LED的流水灯。
本实验为移动一个不亮的LED。
通过修改送给I/O口送的数字可以实现不同方式的流水灯。
主要器件以及电路图单片机——AT89C51,8排电阻——RX8,发光二极管——LED。
流水灯汇编程序源码org 0sjmp startorg 30hstart: mov P1,#1 ;P1.0为1,不亮mov P1,#2 ;P1.1为1,不亮mov P1,#4 ;以下原理同上mov P1,#8mov P1,#10hmov P1,#20hmov P1,#40hmov P1,#80hsjmp startdelay: nopnopnopnopretend数码显示管——51单片机的Proteus实验实验原理51单片机的一个I/O口接4个开关,再通过另一个I/O口控制7段数码显示管显示想要的数字。
主要器件以及电路图单片机——AT89C51,共地的7段数码显示管——7SEG-COM-AN-GRN,开关——SW-SPST。
汇编程序源码汇编后139字节。
org 0sjmp STARTorg 30hSTART: mov P1,#0FFh ;LED不亮st1: mov P2,#0FFh ;准备读数(开关状态)mov A,P2 ;读数anl A,#0Fh ;取低四位acall SEG7 ;调用显示码子程序mov P1,A ;将得到的显示码送数显管显示sjmp st1 ;循环SEG7: inc A ;该子程序实现将数字转换为显示码movc A,@A+pcretDB 0c0h,0F9h,0a4h,0b0hDB 99h,92h,82h,0F8hDB 80h,90h,88h,83hDB 0c6h,0a1h,86h,8ehendC语言程序源码用C语言写了一下实现同样功能的程序,编译后1.39K,代码如下:#include<reg51.h>int main(){P1 = 0xff;while(1){P2 = 0xff;ACC = P2;ACC &= 0xf;switch(ACC){case 0: P1 = 0xc0; break;case 1: P1 = 0xf9; break;case 2: P1 = 0xa4; break;case 3: P1 = 0xb0; break;case 4: P1 = 0x99; break;case 5: P1 = 0x92; break;case 6: P1 = 0x82; break;case 7: P1 = 0xf8; break;case 8: P1 = 0x80; break;case 9: P1 = 0x90; break;case 10: P1 = 0x88; break;case 11: P1 = 0x83; break;case 12: P1 = 0xc6; break;case 13: P1 = 0xa1; break;case 14: P1 = 0x86; break;case 15: P1 = 0x8e; break;}}while(1);}用数组实现,更大(1.51K),代码如下:#include<reg51.h>int main(){int ledNum[16] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0 xa1,0x86,0x8e};P1 = 0xff;while(1){P2 = 0xff;ACC = P2;ACC &= 0xf;P1 = ledNum[ACC];}while(1);}开关控制流水灯2——51单片机的Proteus实验实验原理51单片机的一个I/O口接四个开关,每个开关控制流水灯的不同方面,再通过另一个I/O口控制8个LED的亮、灭,从而实现流水灯。
按键控制流水灯课程设计

按键控制流水灯课程设计一、教学目标本课程的教学目标是让学生了解和掌握按键控制流水灯的基本原理和实现方法,培养学生的动手能力和创新能力,提高学生对电子技术的兴趣和热情。
具体目标如下:1.知识目标:使学生了解流水灯的工作原理,掌握按键控制电路的设计和搭建方法,了解电子元件的使用和调试技巧。
2.技能目标:培养学生具备基本的电子电路设计、搭建和调试能力,提高学生的动手实践能力,培养学生的创新思维。
3.情感态度价值观目标:通过本课程的学习,使学生认识到电子技术在现代社会中的重要性,增强学生对电子技术的兴趣和热情,培养学生的科学精神和团队合作意识。
二、教学内容教学内容主要包括以下几个部分:1.流水灯的工作原理:介绍流水灯的基本原理,使学生了解流水灯的工作过程,为学生设计按键控制流水灯电路打下基础。
2.按键控制电路设计:讲解如何设计按键控制电路,引导学生掌握电路设计的方法和步骤,培养学生的实际操作能力。
3.电子元件的使用:介绍电子元件的使用方法,如电阻、电容、二极管、三极管等,使学生能够熟练地使用这些元件进行电路搭建和调试。
4.电路调试与优化:教授学生如何对电路进行调试和优化,提高电路的性能和稳定性,使学生具备解决问题的能力。
5.创新实践:鼓励学生进行创新实践,设计出具有自己特色的按键控制流水灯电路,培养学生的创新思维和团队合作精神。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解流水灯的工作原理、电路设计方法和电子元件的使用,使学生掌握基本知识。
2.实验法:学生动手搭建和调试电路,培养学生的实践能力,使学生更好地理解电路原理。
3.案例分析法:分析实际案例,使学生了解按键控制流水灯电路在现实生活中的应用,提高学生的学习兴趣。
4.讨论法:分组讨论,引导学生思考和解决问题,培养学生的创新思维和团队合作意识。
四、教学资源教学资源包括:1.教材:选用合适的电子技术教材,为学生提供理论支持。
单片机控制LED流水灯从中间向两边

单片机控制LED流水灯从中间向两边,从两边向中间这个就是把先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的应该是这样的先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动;#include< reg52.h>#include< intrins.h>#define uint unsigned int#define uchar unsigned charvoid delay();void main(){ uchar temp,temp1,temp2,a,b;P3=0xff;while(1){ for(b=3;b>0;b--){ temp=0xaa;P1=temp;delay();temp=0x55;P1=temp;delay();}for(a=3;a>0;a--){ temp=0xfe;for(b=7;b>0;b--){ P1=temp;temp=_crol_(temp,1);delay();P1=temp;delay();}}temp1=0xfe;temp2=0x7f;for(a=8;a>0;a--){temp=temp1&temp2;P1=temp;delay();temp1=_crol_(temp1,1);temp2=_cror_(temp2,1);}}void delay(){ uint a,b;for(a=100;a>0;a--)for(b=600;b>0;b--);}程序实现的第2种方法:下面是 51hei单片机12群里的朋友木信大侠提出的,实现单片机led流水灯从中间向两边,从两边向中间的效果,下面的程序就是实现思路,这个是直接调用,应该明白吧,数组那其实也可以改一下,如采用一维数组,在多次调用;也可以采用二维数组。
双向可调流水灯功能
双向可调流水灯1、 功能(1) 双向彩灯控制电路,能使彩灯的流向可以变化。
可以正向流水,也可以逆向流水。
K1打在高电平时,按住S1不放,LED 灯从LED1至LED8依次熄灭,形成从上到下的流水效果。
K1打在高电平时,按住S2不放,LED 灯从LED8至LED1依次熄灭,形成从下到上的流水效果。
(2) 流水速度可调,调节RP 时,改变555输出频率,则流水灯的的亮灭速度加快或减慢。
(3) 初始灯灭的位置可预置。
当K1拨到低电平时,4位拨码开关S3的1、2、3位对应二进制的低三位,对应十进制的0-7,代表8个LED 灯,例如S3的第三位都拨到0,则对应000,即最后一个灯亮。
若111,则对应LED1亮,即第一个灯亮。
二、原理框图基本原理设计框图如下图(1)所示:图(1)设计框图电路工作原理电路图如图所示,由脉冲信号发生器(555)、四位二进制可加减计数器(74LS193)、3~8线的计数译码器(74LS138)等器件组成。
脉冲信号发生器输出的脉冲信号,输入到加减计数器的输入端上;计数结果输出给计数译码器74LS138。
在74LS138的8路输出端上接有8只发光二极管,用来显示输出结果。
计数译码器可以按照不同的输入值,把8路输出端之中对应的一个输出端变成高电平,推动8只发光二极管轮流点亮。
(一)电路检修(本项分2小项,每小项7分,共14分)要求:在已经给出的《双向可调流水灯电路板》上,已经设置了两个故障。
请您根据提供的相关原理图(附图)加以排除,故障排除后电路才能正常工作(可参看本项目的(一)电路功能)。
并请完成以下的电路检修报告。
1.故障一电路检修报告2.故障二电路检修报告(二)电路功能(本项4分)在您已经维修好的线路板,能实现如下功能:在线路板P1端口接上5V电源,双向彩灯控制电路工作正常1.能使彩灯的流向可以变化,可以控制正向流水,也可以逆向流水2.还能够控制灯流动的速度。
(三)电路调整与测量(共10分)1.调试RP,使流水灯的流动速度可变。
cc2530按键控制流水灯
cc2530按键控制流水灯本次设计用LED1,LED2,LED3 灯及按键S1 为外设。
采用P10、P11、P14 口为输出口,驱动LED1/LED2/LED3,P01 口为输入口,接受按键信号输入(高电平为按键信号)。
1.高性能2.4G 射频模块Q2530RFQ2530RF是丘捷技基于TI公司第二代2.4GHz IEEE 802.15.4 /RF4CE/ZigBee的第二代片上系统解决方案CC2530 F256的全功能模块,集射频收发及MCU控制功能于一体。
外围原件包含一颗32MHz晶振和一颗32.768KHz晶振及其他一些阻容器件。
射频部分采用巴伦匹配和外置高增益SMA天线,接收灵敏度高,发送距离远,空旷环境最大传输距离可达400米。
模块引出CC2530所有IO口,便于功能评估与二次开发。
2.多功能开发板Q2530EB多功能扩展板Q2530EB 可支持多种射频主控模块(例如Q2530RF等),配置有串口液晶显示接口,USB供电接口,DC 5V电源接口,电池接口,RS232接口,DEBUG接口,五向按键及指示灯,红外遥控信号接收/发射等模块。
所有的外设均通过SPI总线/UART /DEBUG等接口与射频模块Q2530RF 相连,并完全受Q2530RF 控制和访问。
多功能仿真扩展板Q2530EB 采用三种电源供电方式:DC 5V供电、USB接口供电、电池供电,可在插座P5设置跳线选择,PIN1-PIN2 为电池供电,PIN2-PIN3 为外接直流电源或者USB接口供电。
电源开关为P4。
Q2530EB 板卡背面的电池盒可放置3节5号干电池,输出电压3.4~4.5V,板载电源电路将其调整到+3.3V 稳定的直流电压输出供后级使用。
当电池电压低于3.4V 时,应更换电池以保持模块正常工作。
Q2530EB 带有1个DC 5V的电源适配器接口P2和一个USB接口P1,输入电压经过稳压器降压为+3.3V输出供后极使用。
按键控制流水灯程序
最近有很多学弟来问我流水灯该怎么做,程序怎么写,现在在这里统一说下,很多时候没有时间让你们白跑一趟了,O(∩_∩)O~。
首先就说到单片机了,单片机对于你们来说是个新概念,可能以前都没听说过。
我想说的是它不是传统意义上的集成电路,只能按照特定的焊接来能工作,而是一块类似电脑CPU的芯片,对于一块正常的单片机,只要你提供合适的工作电源(4V都5.5V左右)、复位电路、起振电路它就可以工作了。
所有的输入输出口(以P开头的)都是可以灵活配置的,可以根据你焊接的硬件电路写程序,也可以根据你写的程序焊接硬件电路。
所以没有必要死板硬套。
前天没事写了一下,仿真了一下还可以用。
源码贴于下方供入门者参考,高手勿嘲笑,大家都是从流水灯程序写起的 (*^__^*) 嘻嘻……再就是我的51开发板不知道是谁借走了,很久没有用过51单片机了,所以下载程序的事就不要来找我了。
我把编译过后的代码也贴在下面,如果硬件和我做的一样的同学又不会写程序的就直接复制下面编译过后的代码,在电脑上新建一个文本文档(.txt)命名任意,将复制后的代码粘贴于记事本上,然后重命名,将".txt"改为“.hex”,保存,然后通过下载器下载到单片机里面去就可以用了。
不会的多去看一下教程。
以下仅供参考,不得一味模仿/****************************************************************************** *********************************源码:51单片机晶振频率12Mhz八位数码管采用共阳极接法(所有阳极接一起接Vcc,阴极接P0口)按键分别接P2.0 P2.1 P2.2(低电平有效)编译软件采用keil 4******************************************************************************* ************************************************************************/#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit key1 =P2^0; //按键1sbit key2 =P2^1; //按键2sbit key3 =P2^2; //按键3uchar flag1=0,flag2=0,flag3=0;void delay_ms(uint z){uint i,j;for(i=0;i<z;i++)for(j=0;j<110;j++);}void O_to_E() //1,3,5,7与2,4,6,8交替闪烁{P0=0Xaa;delay_ms(200);P0=~0Xaa;delay_ms(200);}void key_scan() //键盘扫描{if(!key1){delay_ms(10); //延时消抖if(!key1)flag1=1;}if(!key2){delay_ms(10); //延时消抖if(!key2)flag2=1;}if(!key3){delay_ms(10); //延时消抖if(!key3)flag3=1;}}void main(){uchar i;while(1){key_scan();if(flag1) //按键一按下?{for(i=0;i<8;i++) //从左至右亮,每次一盏{P0=~(0x80>>i);delay_ms(100);key_scan(); //按键扫描if(flag2||flag3){flag1= 0;break;} //如果有其它按键按下响应其它按键}}if(flag2) //按键一按下?{for(i=0;i<8;i++) //从右至左亮,每次一盏{P0=~(0x01<<i);delay_ms(100);key_scan();if(flag1||flag3){flag2= 0;break;}}}if(flag3){O_to_E(); //奇偶交替闪烁key_scan();if(flag1||flag2)flag3=0;}}}/****************************************************************************** *****************************************编译过后的文件注意:复制下面的代码(注意不要包含本句,注意不要改变格式):09015700010800010900010A0081:040123007F0A7E00D1:10012700E4FDFCC3ED9FEC9E5015E4FBFA0BBB000E:0F013700010AEB646E4A70F50DBD00010C80E407:010*********:100147007580AA7FC87E0012012775805502012796:0A00F400F4F5807F647E00120127FE:1000FE0020A00912012320A00375080120A10912D6:10010E00012320A10375090120A20912012320A2B7:05011E0003750A012237:10008F001200FE1200FEE5086021E4F97480A80159:10009F00088002C313D8FC1200F4E5097004E50AC6:1000AF006005E4F508800409B908E1E509601FE47B:1000BF00F97401A801088002C333D8FC1200F4E5DB:1000CF00087004E50A6003E4F50909B908E3E50AD5:1000DF0060B11201471200FEE5087004E50960A344:0500EF00E4F50A809E0B:03000000020003F8:0C000300787FE4F6D8FD75810A02004AFF:10000F0002008FE493A3F8E493A34003F68001F278:10001F0008DFF48029E493A3F85407240CC8C333F2:10002F00C4540F4420C8834004F456800146F6DFC1:10003F00E4800B0102040810204080900157E47EF9:10004F00019360BCA3FF543F30E509541FFEE493B6:10005F00A360010ECF54C025E060A840B8E493A37D:10006F00FAE493A3F8E493A3C8C582C8CAC583CAA8:10007F00F0A3C8C582C8CAC583CADFE9DEE780BE60:010********E:00000001FF结束(注意不要包含本句及上面的※号,注意不要改变格式!)。
按键控制流水灯系统
按键控制流水灯系统设计摘要本设计旨在于通过所学知识,设计一个简单的按键控制流水灯系统,满足一些基本控制功能。
本设计选用80C51芯片作为核心硬件,组合74LS138译码芯片,4×4键盘,74LS273锁存芯片以及其他必要元器件实现对8个发光二极管和2个数码管显示屏的功能控制。
控制过程中用到了51单片机的定时/计数器和中断技术。
本次设计旨在于在理论学习单片机的基础上,通过实际系统的搭建,提高对所学知识的实际应用能力。
设计中,我们主要做了方案设计,电路搭建,程序编写,控制仿真,报告撰写等一系列工作。
方案设计说明设计要求:(1)利用按键控制流水灯的显示。
(2)利用3×3或者4×4键盘,控制数码管的显示。
(3)利用到定时/计数器。
(4)利用到中断技术。
设计功能:(1)按键0—7键为普通亮灭控制键,对应8个发光二极管,每个按键按一下,对应的灯亮,再按一次,对应的灯熄灭。
(2)按键8,12,13,14号键为功能控制键。
1)8键:按一下,8个灯逐个点亮,熄灭,循环左移三次。
2)12键:按一下,灯全部点亮,闪烁20次,返回原来状态。
3)13键:按一下,从左至右,每次点亮一个灯并保持,至灯全部点亮,再逐个熄灭。
4)14键:左右两侧灯逐对向中间点亮,熄灭,当灯对相遇后,向相反方向进行,循环两次返回。
(3)数码管显示为两位,一号为按键显示(显示被按下的键号),二号为功能号显示(显示执行的功能,从0—4分别对应1—7号键,8号键,12号键,13号键,14号键的功能)功能实现方案:51单片机的P0口(P0.0—P0.7)为低位地址总线,兼做数据总线,连接74LS273锁存器,输出的数据通过其锁存。
单片机P1口(P1.0—P1.7)用作通用I/O口,与键盘连接,其中,高四位(P1.4—P1.7)接为列控制线,低四位(P1.0—P1.3)接行控制线。
单片机P2口(P2.0—P2.5)为高位地址线,接外部74LS138译码芯片。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MAIN:MOV SP,#5FH ;设置堆栈栈底 SETB IT0 ;设置外中断0为下降沿触发, 注意此 处做了修改, SETB IT1 ;设置外中断1为下降沿触发, CLR PX0 ;设置外中断0为低优先级 CLR PX1 ;设置外中断1为低优先级,由于复位时被 清零,以上 4条清零标志位的指令可以省略, SETB EX0 ;开外中断0 SETB EX1 ;开外中断1 SETB EA ;开总中断 ;******* 以下和程序(1)完全一 样。 MOV A,#0FEH;显示代码初值送累加器A
个低电平,触发外部中断0,运行外部中断0服务程序,把 方向标志位清零;按下P3.3处连接的按键,会触发外部中 断1,运行外部中断1服务程序,把方向标志位置1。当主 程序中执行到 JB FX,K1这条指令时,会根据FX的值是0还 是1,选择不同的流向,去执行RL A 或者执行RR A,使 彩灯出现不同的移动方向。 如果一直按下一只按键,会发现流水灯的运行速度 明显变慢,这是因为这段程序外部中断是采用了电平触发, 当执行完中断服务程序,回到主程序时,外部中断触发信 号仍然存在,所以在执行了一条主程序指令以后,又去执 行中断服务程序,如此反复,使执行主程序的速度大大降 低。 为了解决这个问题,可以采用下降沿触发外部中断。 按下按键会产生一个下降沿,CPU响应中断,执行完中断 服务程序程序以后,只要不再次按下按键,就不会再有下 降沿出现,不会再次响应中断,避免了上述问题。
K0:MOV P0,A ;把显示代码传送到P0口输出, 控制LED亮灭 JB FX,K1 ;FX=1(00H位为1),转移至K1,执 行右移 RL A ;FX=0,执行显示代码左移,暂存在A中 SJMP K2 ;转移到K2,避开右移指令 K2 K1: RR A ;显示代码右移 K2: LCALL DELAY ;调用延时子程序 SJMP K0 ;返回,继续下一拍
INT0:CLR FX ;外中断0服务程序,方向标志位清0 RETI ;中断返回 INT1:SETB FX;外中断1服务程序,方向标志位置1 RETI ;中断返回 DELAY MOV R7,#0FFH DELAY:MOV R7,#0FFH;延时子程序 L1: MOV R6,#0FFH DJNZ R6,$ DJNZ R7,L1 RET END ;程序结束
三.实训内容与步骤 实训内容与步骤
1.电平触发方式键控流水灯程序 电平触发方式键控流水灯程序 (1)参考程序 ) FX BIT 00H 位地址00H命名为 命名为FX ;位地址 命名为 ORG 0000H LJMP MAIN ;转移到主程序 ORG 0003H 外中断0服务程序入 ;外中断 服务程序入 口 LJMP INT0 转移到外中断0服务程序 ;转移到外中断 服务程序 ORG 0013H 外中断1服务程序入 ;外中断 服务程序入 口 LJMP INT1 转移到外中断1服务程序 ;转移到外中断 服务程序 ORG 0030H
任务九 键控双向流水灯
中断控制是单片机最重要的技术之一,实时控 制及人机交互等应用都是通过中断实现的。本 任务通过制作一个用按键控制移动方向的流水 灯来学习MCS-51单片机的中断系统,以及外部 中断的简单应用。
中断控制是单片机最重要的技术之一,实时 控制及人机交互等应用都是通过中断实现的。本 任务通过制作一个用按键控制移动方向的流水灯 来学习MCS-51单片机的中断系统,以及外部中断 的简单应用。 【任务目的】 任务目的】 利用单片机外部中断,完成左右移动的流水 彩灯设计,实现用按键对信号灯的控制。 任务描述】 【任务描述】 用单片机的P3.2、P3.3各接一只按键,按下 一个按键时,实现彩灯左移花样,按下另一个按 键时,实现彩灯右移花样。
(1). MCS-51的中断源 外部 :INT0,INT1低电平触发 INT0 INT1 内部:TF0 , TF1 , RI/TI 与中断有关的寄存器: (2).与中断有关的寄存器: ) 与中断有关的寄存器 定时控制寄存器TCON 定时控制寄存器 串行控制寄存器SCON 串行控制寄存器 中断允许控制寄存器IE 中断优先级控制寄存器IP
K0:MOV P0,A ;把显示代码传送到P0口输 出,控制LED 亮灭 JB FX,K;FX=1(00H位为1),移至K1, 执行 右移 RL A ;FX=0,执行显示代码左移,暂存在A中 SJMP K2 ;转移到K2,避开右移指令 K1:RR A ;显示代码右移 K2:LCALL DELAY ;调用延时子程 SJMP K0 ;返回,继续下一拍 INT0:CLR FX ;外中断0服务程序,方向标志位清0 RETI ;中断返回 INT1:SETB FX ;外中断1服务程序,方向标志位 置1 RETI ;中断返回 DELAY:MOV R7,#0FFH ;延时子程序 L1:MOV R6,#0FFH DJNZ R6,$ DJNZ R7,L1 RET END ;程序结束
与中断有关的指令 :RETI -中断返回 , BIT -位地址 符 号伪指令 3、中断程序的编写 、中断程序的编写: 中断程序的编写步骤如下: 中断程序的编写步骤如下: (1)设置堆栈指针 )设置堆栈指针SP (2)中断源的相关控制(如设置外部中断触发方 )中断源的相关控制( 启动定时器等) 式、启动定时器等) (3)设置中断优先级 ) (4)开中断 ) (5)编写中断服务程序 ) 其中前4个步骤称为中断初始化 个步骤称为中断初始化, 其中前 个步骤称为中断初始化,一般放在主程序 的开始处
四.拓展训练 拓展训练
用按键控制流水灯的速度,按下一只按键速 度变快,按下一只按键速度变慢。
一.电路原理图 电路原理图
二、中断的基本概念
1.中断 当中央处理器CPU正在处理某事件时,与 它并行工作的外围部件或者外部设备由于工作 的需要或者出现故障,请求CPU迅速去处理, CPU暂停当前工作,转去处理所发生的事件, 处理结束之后,再回到被打断的地方继续原来 的工作。这样的过程称为中断。如图8-2所示。 2.中断源 能够产生中断请求的条件称为中断源。 中断源可以来自单片机的外部和内部。在不同 种类的单片机中,中断源的数量一般并不相同。 MCS-51单片机有5个中断源
MAIN: MOV SP,#5FH ;设置堆栈栈底 CLR IT0 ;设置外中断0为低电平触发 CLR IT1 ;设置外中断1为低电平触发 CLR PX0 ;设置外中断0为低优先级 CLR PX1 ;设置外中断1为低优先级,由 于复位时被清零,以上 ;4条清零标志位的指令可以 省 略, SETB EX0 ;开外中断0 SETB EX1 ;开外中断1 SETB EA ;开总中断 MOV A,#0FEH ;显示代码初值送累加器 A
3.MCS-51的中断系统
4.中断的响应过程 中断的响应过程
CPU响应中断时,会根据不同的中断源, 自动转向不同的规定地址,执行中断服 务程序,这个规定地址,称为中断向量。 响应中断请求后,CPU按照中断源的不同, 自动转到各个中断入口地址去执行程序。 由于每个中断向量仅间隔8个字节,不可 能放下一般的中断处理程序。因此一般 在中断向量处放置一条无条件转移指令, 转到真正接的按键,会在P3.2引脚()输入一
2.下降沿触发方式键控流水灯的程序 下降沿触发方式键控流水灯的程序
FX ORG LJMP ORG LJMP ORG LJMP ORG BIT 00H 0000H MAIN 0003H INT0 0013H INT1 0030H ;位地址00H命名为FX ;转移到主程序 ;外中断0服务程序入口 ;转移到外中断0服务程序 ;外中断1服务程序入口 ;转移到外中断1服务程序