键控双向流水灯
- 格式:ppt
- 大小:183.50 KB
- 文档页数:2
北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化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);}}。
按钮控制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流水灯从中间向两边,从两边向中间这个就是把先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的应该是这样的先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动;#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按键控制流水灯本次设计用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译码芯片。