按键控制流水灯
按钮控制流水灯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的亮、灭,从而实现流水灯。
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输出供后极使用。
综合实验一——按键控制流水灯实验(查询方式)
北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化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口内部上拉电阻的总开关。
开关键盘控制流水灯设计
开关/键盘控制流水灯设计摘要目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的流水灯,主要介绍了利用89C51制作一简易流水灯的软硬件设计过程,可实现花样流水灯的效果,重点给出了其软件编程的思想方法。
关键词:89C51单片机,霓虹灯,开关/按键目录1绪论 (1)2硬件设计 (1)2.1芯片介绍 (1)2.2电源 (2)2.3时钟 (2)2.4控制线:控制线共有4根 (2)2.5 I/O线 (3)2.6晶振电路 (3)2.7 LED灯电路 (6)3程序设计 (7)3.1 程序流程图 (7)3.2程序设计 (7)总结 (13)参考文献 (14)1绪论目前,国内外对于单片机流水灯的研究,大多是利用89c51单片机,软硬件相结合,构造成最简单的流水灯.城市夜景中,变幻多姿的霓虹灯历来是一道亮丽的风景。
利用单片机的自动控制功能,设计出相应不同的电路,可以实现彩灯不同模式的流水效果。
本设计通过对器件选择和线路连接进行分析讨论,结合相应的软件设计,达到相应的设计要求. 2硬件设计2.1芯片介绍按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机.从图1中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
按键控制流水灯课程设计
按键控制流水灯课程设计一、教学目标本课程的教学目标是让学生了解和掌握按键控制流水灯的基本原理和实现方法,培养学生的动手能力和创新能力,提高学生对电子技术的兴趣和热情。
具体目标如下:1.知识目标:使学生了解流水灯的工作原理,掌握按键控制电路的设计和搭建方法,了解电子元件的使用和调试技巧。
2.技能目标:培养学生具备基本的电子电路设计、搭建和调试能力,提高学生的动手实践能力,培养学生的创新思维。
3.情感态度价值观目标:通过本课程的学习,使学生认识到电子技术在现代社会中的重要性,增强学生对电子技术的兴趣和热情,培养学生的科学精神和团队合作意识。
二、教学内容教学内容主要包括以下几个部分:1.流水灯的工作原理:介绍流水灯的基本原理,使学生了解流水灯的工作过程,为学生设计按键控制流水灯电路打下基础。
2.按键控制电路设计:讲解如何设计按键控制电路,引导学生掌握电路设计的方法和步骤,培养学生的实际操作能力。
3.电子元件的使用:介绍电子元件的使用方法,如电阻、电容、二极管、三极管等,使学生能够熟练地使用这些元件进行电路搭建和调试。
4.电路调试与优化:教授学生如何对电路进行调试和优化,提高电路的性能和稳定性,使学生具备解决问题的能力。
5.创新实践:鼓励学生进行创新实践,设计出具有自己特色的按键控制流水灯电路,培养学生的创新思维和团队合作精神。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解流水灯的工作原理、电路设计方法和电子元件的使用,使学生掌握基本知识。
2.实验法:学生动手搭建和调试电路,培养学生的实践能力,使学生更好地理解电路原理。
3.案例分析法:分析实际案例,使学生了解按键控制流水灯电路在现实生活中的应用,提高学生的学习兴趣。
4.讨论法:分组讨论,引导学生思考和解决问题,培养学生的创新思维和团队合作意识。
四、教学资源教学资源包括:1.教材:选用合适的电子技术教材,为学生提供理论支持。
按键控制流水灯系统
按键控制流水灯系统设计摘要本设计旨在于通过所学知识,设计一个简单的按键控制流水灯系统,满足一些基本控制功能。
本设计选用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译码芯片。
流水灯的按键方向控制
流⽔灯的按键⽅向控制module liushuideng(clk,rst_n,led_0,sw1_n,sw2_n,sw3_n);input clk; //时钟信号,50MHZinput rst_n; //复位信号,低电平有效input sw1_n,sw2_n,sw3_n; //三个独⽴按键,低表⽰按下output[3:0] led_0; //流⽔灯,0--灭,1--不灭//--------------------------------------------------------reg led_dir; //0--right,1--leftreg led_on; //0--off,1--onreg[23:0] cnt;always @(posedge clk or negedge rst_n) //计数if(!rst_n)cnt <=24'd0;elsecnt <= cnt+1'b1;reg[3:0] led_move;always @(posedge clk or negedge rst_n) //流⽔灯if(!rst_n)led_move <= 4'b1;else if(cnt == 24'hffffff && led_on)beginif(led_dir)led_move <= {led_move[2:0],led_move[3]}; //leftelseled_move <= {led_move[0],led_move[3:1]}; //rightend//---------------------------------------------------------reg [2:0] key_rst;always @(posedge clk or negedge rst_n)if (!rst_n)key_rst <= 3'b111;elsekey_rst <= {sw3_n,sw2_n,sw1_n}; //每个时钟周期都会把按键值赋给key_rstreg[2:0] key_rst_r; //每个时钟周期的上升沿将low_sw信号锁存到low_sw_ralways @ (posedge clk or negedge rst_n)if(!rst_n)key_rst_r <= 3'b111;elsekey_rst_r <= key_rst; //第⼆级寄存器,将之前锁存的按键值给key_rst_rwire[2:0] key_an = key_rst_r & ( ~key_rst );//当寄存器key_rst由1变为0时,led_an的值变为⾼,维持⼀个时钟周期//------------------------------------------------------reg[23:0] cnt_cn;//计数寄存器always @ (posedge clk or negedge rst_n)if (!rst_n)cnt_cn <= 24'd0; //异步复位else if(key_an)cnt_cn <=24'd0;elsecnt_cn <= cnt_cn + 1'b1;reg[2:0] low_sw;always @ (posedge clk or negedge rst_n)if (!rst_n)low_sw <= 3'b111;else if(cnt_cn == 24'hffffff) //满20ms,将按键值锁存到寄存器low_sw中low_sw <= {sw3_n,sw2_n,sw1_n}; //每个20ms执⾏⼀次//------------------------------------------------------reg[2:0] low_sw_r;always @ ( posedge clk or negedge rst_n )if (!rst_n)low_sw_r <= 3'b111;elselow_sw_r <= low_sw; //每个时钟周期采⼀次/*low_sw 111 111 111 110 110 110~low_sw 000 000 000 001 001 001low_sw_r 111 111 111 110 110 110led_ctr1 000 000 000 001 000 000*///当寄存器low_sw由1变为0时,led_ctrl的值变为⾼,维持⼀个时钟周期wire[2:0] led_ctrl = low_sw_r[2:0] & ( ~low_sw[2:0]);always @ (posedge clk or negedge rst_n)if(!rst_n)beginled_on <= 1'b0;led_dir <= 1'b0;endelsebegin //某个按键值变化时,LED将做亮灭、左移或右移操作if ( led_ctrl[0] ) led_on <= ~led_on;if ( led_ctrl[1] ) led_dir <= 1'b1;if ( led_ctrl[2] ) led_dir <= 1'b0;endassign led_0 = led_dir; //LEDendmodule。
按键控制数码管和流水灯设计报告实验报告
按键控制数码管和流水灯设计报告实验报告摘要单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。
本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。
通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。
用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。
在硬件电路的基础上加上软件程序的控制来实现本设计。
其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。
关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the Keywords: SCM, water lights, digital tubes, control system键盘控制流水灯和数码管实验报告目录一设计的目的 (2)二任务描述及方案设计 (3)1. 任务描述 (3)2. 方案设计 (3)三硬件设计方案 (3)1. Msp430f149单片机的功能说明 (3)2. 显示器功能 (4)3. 复位电路 (4)4. 按键的部分 (4)5. 74HC573的特点 (4)6. 流水灯和数码管电路原理图 (4)7. 元器件清单 (4)四程序设计方案 (5)1. 用IAR Embedded Workbench软件编程序 (5)2. 仿真电路图 (6)五实物实验 (7)1. 实物图 (7)2. 测试结果与分析 (7)六结论 (11)八参考文献 (16)一、设计目的1、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;2、培养学生实践动手能力及独立分析和解决工程实践问题能力;3、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。
键控双流水灯
用单片机的P3.2、P3.3各接一只按键,按下 一个按键时,实现彩灯左移花样,按下另一个按 键时,实现彩灯右移花样。
一 . 电路原理图
二、中断的基本概念
1.中断 当中央处理器CPU正在处理某事件时,与
它并行工作的外围部件或者外部设备由于工作 的需要或者出现故障,请求CPU迅速去处理, CPU暂停当前工作,转去处理所发生的事件, 处理结束之后,再回到被打断的地方继续原来 的工作。这样的过程称为中P K2
;转移到K2,避开右移指令
K1:RR A K2:
;显示代码右移
LCALL DELAY
;调用延时子程
SJMP K0
;返回,继续下一拍
INT0:CLR FX RETI
INT1:SETB FX RETI
;外中断0服务程序,方向标志位清0 ;中断返回
;外中断1服务程序,方向标志位 置1 ;中断返回
序的开始处
三 . 实训内容与步骤
1.电平触发方式键控流水灯程序
(1)参考程序
FX BIT 00H
;位地址00H命名为FX
ORG 0000H
LJMP MAIN
;转移到主程序
ORG 0003H 口
;外中断0服务程序入
LJMP INT0 程序
;转移到外中断0服务
ORG 0013H 口
;外中断1服务程序入
SETB EX0 ;开外中断0
SETB EX1 SETB EA
样。
;开外中断1
;开总中断 ;*******
以下和程序(1)完全一
MOV A,#0FEH;显示代码初值送累加器A
任务三 键控流水灯控制器制作
任务分析:
前面一个任务我们已经完成了LED流 水灯的制作,本任务与前一任务相比仅是 增加了按键的控制,即点按一次按键K后 立即执行“流水灯程序”。“点按按键一 次”通常的理解是先按下按键,然后又放 开,所以编程时,首先要判断按键是否真 正的按下,若按下,就等待按键释放。释 放后,这次按键的动作就完成了。
P1.2
P1.1
P1.0
3
3
8
7
6
5
4
3
2
1
8
9
5
R
LED0
6
2
0
K
S S 2 1
5
R
LED1
6
3
0
5
R
LED2
6
4
05ຫໍສະໝຸດ RLED36
5
0
5
R
LED4
6
6
0
5
R
LED5
6
7
0
5
R
LED6
6
8
0
5
R
LED7
6
9
0
键控LED流水灯硬件模块接线图(YL-236单片机实训装置)
软件编程
1、主程序流程图 2、参考程序 3、程序知识点
程序知识点:
(1)if语句的使用 (2)带参数的延时函数使用 (3)“==”与“=”的区别 (4)数组查表法
(5)按键识别程序段
(1)if语句的使用
if(表达式) {语句}
if(表达式)
if(表达式1) {语句1} else if(表达式2) {语句2} ...... else {语句n}
{语句1}
else {语句2}
键控流水灯的程序
键控流水灯的程序硬件电路描述如下:89S52 单片机的P1 口接有8 个LED,当某一端口输出为“0”时,相应的LED 点亮,P3.2、P3.3、P3.4、P3.5 分别接有四个按钮K1~K4,按下按钮时,相应引脚被接地。
现要求编写可键控的流水灯程序,当K1 按下时,开始流动,K2 按下时停止流动,全部灯灭,K3 使灯由上往下流动,K4 使灯由下往上流动。
下面首先给出程序,然后再进行分析。
例 2-1:键控流水灯的程序#include "reg51.h"#include "intrins.h"#define uchar unsigned charvoid mDelay(unsigned int DelayTime){ unsigned int j=0;for(;DelayTime>0;DelayTime--){ for(j=0;j<125;j++){;} }}uchar Key(){ uchar KeyV;uchar tmp;P3=P3|0x3c; //四个按键所接位置KeyV=P3;if((KeyV|0xc3)==0xff) //无键按下return(0);mDelay(10); //延时,去键抖KeyV=P3;if((KeyV|0xc3)==0xff)return(0);else{ for(;;){ tmp=P3;if((tmp|0xc3)==0xff) break;}return(KeyV);}}void main(){ unsigned char OutData=0xfe; bit UpDown=0;bit Start=0;uchar KValue;for(;;){ KValue=Key();switch (KValue){ case 0xfb: //P3.2=0,Start { Start=1;break; }case 0xf7: //P3.3=0,Stop{ Start=0;break; }case 0xef: //P3.4=0 Up{ UpDown=1;break; }case 0xdf: //P3.5=0 Down { UpDown=0;break; }}if(Start){ if(UpDown)OutData=_crol_(OutData,1); elseOutData=_cror_(OutData,1); P1=OutData; }elseP1=0xff; //否则灯全灭mDelay(1000);}}。
CC2530按键控制流水灯
1、适用平台 佳杰科技 Q2530SB 硬件平台
2、实验设备
1.RF2530N 或者 RF2530仿真器 1块 1块 1条 1个
2
3、实验目的
让用户学会按键应用是这一常用的人机交互方式。本实验用 D1, D2, D3 灯及按键 S1 为 外设。采用 P10、P11、P14 口为输出口,驱动 D1/D2/D3,P01 口为输入口,接受按键信号 输入(高电平为按键信号) 。
#include <ioCC2530.h> #define uint unsi gned int #define ucha r unsigned cha r //定义控制灯的端口 #define RLED #define GLED #define YLED #define KEY1 //函数声明 voi d Delay(uint); voi d Ini tIO(void); voi d Ini tKey(void); ucha r KeyScan(void); // 延时函数声明 //初始化函数声明 // 初始化按键函数声明 // 按键扫描函数声明 3 P1_0 P1_1 P1_4 P0_1 //定义 LED1 为 P10 口控制 //定义 LED2 为 P11 口控制 // 定义 LED3 为 P14 口控制 // 定义按键为 P01 口控制
4、实验相关寄存器
相关寄存器:P1,P1DIR,P0SEL,P0INP, P0,P0DIR(前面以介绍过的这里不再重复介绍,寄存器 功能说明请参阅 CC2530Datasheet.pdf ) P0SEL(0XF3) P0INP( 0X8F) P0( 0X80) P0DIR(0XFD) P0 [7:0 ]功能设置寄存器,默认设置为普通 I/ O 口 P0[7: 0]作输入口时的电路模式寄存器 P0[7: 0]位寻址 I/ O 寄存器 P0 口输入输出设置寄存器,0:输入,1:输出
按键选择控制流水灯效果设计
按键选择控制流水灯效果设计设有一单片机控制系统:P2口上接有8只发光二极管。
二极管的阴极分别接P2口各I/O位,阳极分别连一500Ω的电阻接+5V的高电平电源。
通过按键选择8只发光二极管闪烁效果。
电路如下图所示。
流水灯仿真电路图流水灯系统结构框图主控模块流程图:0位闪烁 show()流程图:单只低位向高位移动show1()流程图: 单只高位向低位移动show2()流程图:单只来回移动show3()流程图:程序清单:#include<reg51.h>#define uchar unsigned char#define uint unsigned int//*************************//***** 延时Xms子函数*****void delay (uint x){uint i,j;for(i=x;i>0;i--)for(j=121;j>0; j--);}//**********show0()单只闪烁************void show0(){P2=0xfe; //送一个亮的控制信号字 delay(100); //延时P2=0xff; //送一个灭的控制信号字 delay(100); //延时}//********show1(); //单只左移*****************void show0(){uchar i , y ; //定义变量 i、 y 的类型,也就是能表达的最大数y=0x01 ; //设初始信号控制字for(i=0;i<8;i++) //重复执行8遍{}中的语句{P2=~y; //送一个控制信号字delay(100); //延时y=y<<1; //计算下一个控制信号字}}//**********show2()单只右移***************void show1(){uchar i , y ; //定义变量 i、 y 的类型,也就是能表达的最大数y=0x80 ; //设初始信号控制字for(i=0;i<8;i++) //重复执行8遍{}中的语句{P2=~y; //送一个控制信号字delay(100); //延时y=y>>1; //计算下一个控制信号字}}//**********show3()单只来回跑***************void show3(){uchar i , y ; //定义变量 i、 y 的类型,也就是能表达的最大数 y=0x01 ; //设左移初始信号控制字for(i=0;i<8;i++) //重复执行8遍{}中的语句{P2=~y; //送一个控制信号字delay(100); //延时y=y<<1; //计算下一个控制信号字} //左移完y=0x40 ; //设右移初始信号控制字for(i=0;i<6;i++) //重复执行8遍{}中的语句 {P2=~y; //送一个控制信号字delay(100); //延时y=y>>1; //计算下一个控制信号字} //右移完}//***** 主函数 main *****void main( ){uchar y; //说明y可以最大表示11111111B(255) while(1){y=P0;switch (y){case 0xfe:show0(); //单只闪烁break;case 0xfd:show1(); //单只左移 break;case 0xfb:show2(); //单只右移 break;case 0xf7:show3(); //单只来回跑break;default:break;}}}。
用按键控制流水灯的例子
{while(1){P0=0xff;
while(!key1)aa();
while(!key2)bb();
while(!key3)cc();
while(!key4)dd();
}} �
int c[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; //逐盏点亮,逐盏灭掉数组
//************************************************************************************************************
{ int i=0,j=0,k=0,h=0;
loop:P0=0xff;
if(key4==0) //第一次判断是否有键按下
{for(i=0;i<30000;i++); //延时防抖动
if(key4==1) //判断按键是否弹起
while(1){P0=a[j];delay();j++;if(j==8)j=0; //左流水灯
这是我刚写的一个用按键控制流水灯的例子,很适合初学者的
/*硬件电路连接:流水灯接在P0口, 阳极接高电平,
阴极接P0口,4个按键分别接P3.4,P3.5, P3.6,P3.7 ,按下时是低电平 */
#include <regx51.h>
sbit key1=P3^4;
sbit key2=P3^5;
void bb() // 实现要求(2)的子程序(key2按下时实现计数功能,弹开时停止计数;)
按键控制流水灯实训报告
一、实训目的1. 熟悉51单片机的I/O口编程,掌握按键输入和LED输出控制的基本方法。
2. 学习单片机程序设计的基本思路,提高编程能力。
3. 培养动手实践能力,提高电路焊接和调试水平。
二、实训原理1. 单片机I/O口编程:51单片机的I/O口可以编程设置为输入或输出模式。
在本实训中,我们将I/O口配置为输出模式,用于控制LED灯的亮灭;同时,将I/O口配置为输入模式,用于检测按键状态。
2. 按键输入:当按键未被按下时,单片机通过检测I/O口输入电平,判断按键是否处于高电平状态;当按键被按下时,单片机检测到低电平状态。
3. LED输出:单片机通过编程控制I/O口输出电平,从而控制LED灯的亮灭。
在本实训中,我们通过依次点亮LED灯来实现流水灯效果。
4. 流水灯控制逻辑:根据按键状态,单片机在无限循环中不断检测按键状态,并改变流水灯的方向。
三、实训步骤1. 准备工作:准备51单片机开发板、按键、LED灯、电阻等元器件,以及相关编程软件。
2. 电路连接:按照电路图连接好51单片机、按键、LED灯和电阻等元器件。
3. 编程:使用Keil C51集成开发环境编写程序,实现按键控制流水灯功能。
4. 调试:将编写好的程序烧录到单片机中,进行电路调试。
5. 测试:验证按键控制流水灯功能是否正常。
四、程序设计1. 初始化I/O口:将P1口配置为输出模式,用于控制LED灯;将P3口配置为输入模式,用于检测按键状态。
2. 按键检测:在主循环中,不断检测P3口状态,判断按键是否被按下。
3. 流水灯控制:根据按键状态,控制LED灯依次点亮,实现流水灯效果。
4. 延时函数:为了使流水灯效果更加明显,使用延时函数控制LED灯点亮时间。
5. 按键状态处理:当检测到按键被按下时,改变流水灯方向。
五、实训结果与分析1. 实训结果:通过编程和调试,成功实现了按键控制流水灯功能。
2. 分析:(1)I/O口编程:通过编程将51单片机的I/O口配置为输入或输出模式,是实现流水灯功能的基础。
单片机课程设计—8个按键控制8个LED自动设定控制流水灯
单片机课程设计—8 个按键控制 8 个 LED 自动设定控制流水灯东北石油大学实习总结报告实习类型生产实习实习单位东北石油大学实习基地实习起止时间 2018 年 7 月 7 日至 2018 年 7 月 16 日指导教师刘东明、孙鉴所在院(系) 电子科学学院班 级 电子科学与技术 15-2学生姓名学号15090124022018 年 7 月 16 日东北石油大学电子科学与技术专业生产实习目录第 1 章 按键控制流水灯设计 ................................................................................ 1 1.1 实习目的.................................................................错误!未定义书签。
1.2 实习要求.................................................................错误!未定义书签。
第 2 章 电路工作原理 ............................................................................................ 2 2.1 STC89C52 单片机工作原理 ................................................................. 2 2.2 LED 工作原理........................................................................................ 3 2.3 按键工作原理......................................................................................... 3 2.4 整体电路图............................................................................................. 5 2.5 本章小结................................................................................................ 6第 3 章 C 程序设计................................................................................................. 7 3.1 程序设计流程图.................................................................................... 7 3.2 实验结果................................................................................................. 8 3.3 本章小结................................................................................................ 9总结及体会 ............................................................................................................ 10 参考文献 ................................................................................................................ 11 附录......................................................................................................................... 12I东北石油大学电子科学与技术专业生产实习第1章 按键控制流水灯设计1.1 实习目的本次实习以 STC89C52 单片机为控制核心。
c51_1按键控制三种流水灯效果
c51_1按键控制三种流水灯效果#includesbit KEY=P2^0;//延迟程序void delay(unsigned int i){unsigned int j;while(i--)for(j=600;j>0;j--);}//主程序void main(void){while(1){unsigned int countX,countY,i,j,a,b,x;KEY=1;//初始化为高电平delay(10);countX=0;//定义计数器1、判断长按短按countY=1000;//定义计数器2、判断是否双击if(KEY==0)//判断是否按下按键{delay(10);if(KEY==0)//确认是否按键{while(KEY==0)//当按键松开时退出循环{countX++;delay(1);}}//按键松开时,计数器2开始计数while(KEY&&countY){countY--;delay(1);}delay(10);if(countY==0)//如果是因为计数器2时间到跳出循环,说明在一定时间内按键没有第二次触发{delay(10);if(countX<200)//短按效果(按键时间小于0.2秒){//第一种流水灯效果while(1){KEY=1;a=0x80;for(i=0;i<8;i++)//流水灯循环右移{P0=~a;a>>=1;delay(200);if(KEY==0){return;}}if(KEY==0){return;}b=0x01;for(i=8;i>0;i--)//循环八次{b|=0x01;a=0x80;for(j=0;j{a|=b;P0=~a;a>>=1;if(KEY==0){return;}delay(200);}b<<=1;if(KEY==0){return;}}for(i=5;i>0;i--)//闪烁{P0=0xff; delay(200);P0=0x00; delay(200);if(KEY==0) {return;}}if(KEY==0) {return;}a=0x80;for(i=0;i<8;i++) {P0=a;a>>=1;delay(200);if(KEY==0) {return;}}b=0x01;for(i=8;i>0;i--) {b|=0x01;a=0x80;for(j=0;j<i;j++) {a|=b;P0=a;a>>=1;if(KEY==0) {return;}delay(200);}b<<=1;if(KEY==0) {return;}}for(i=5;i>0;i--) {if(KEY==0) {return;}P0=0x00; delay(200);P0=0xff; delay(200);}}}else //长按效果{//第二种流水灯效果x=100;while(1){KEY=1;a=0x80;for(i=0;i<8;i++) {P0=~a;a>>=1;delay(x);if(KEY==0){return ;}}a=0x01;if(KEY==0){return;}for(i=0;i<8;i++) {P0=~a;a<<=1;</i;j++)if(KEY==0){return;}delay(x);}x+=150; //控制流水灯循环速度if(x>500){x=100;}}}}if(countY!=0)//双击{delay(1000);while(1){delay(10);a=0xff;//a=0x80;一个灯亮P0=~a;if(KEY==0){return;}delay(300); if(KEY==0) { return;}delay(300); a=0x00;P0=~a;if(KEY==0) { return;}delay(300); if(KEY==0) { return;}delay(300); a=0xaa;P0=~a;if(KEY==0) { return;}delay(300); if(KEY==0) { return;}delay(300);a=0x55;P0=~a;if(KEY==0) { return;}delay(300); if(KEY==0) { return;}delay(300); a=0xf0;P0=~a;if(KEY==0) { return;}delay(300); if(KEY==0) { return;}delay(300); a=0x0f;P0=~a;if(KEY==0) { return;}delay(300); if(KEY==0) { return;}delay(300); a=0x3c;P0=~a;if(KEY==0) { return;}delay(300); if(KEY==0) { return;}delay(300); a=0xc3;P0=~a; delay(300); if(KEY==0) { return;}delay(300); if(KEY==0) { return;}}}//while(KEY==0); delay(10);KEY=1;}}}。
【按键控制流水灯设计报告】
按键控制流水灯设计报告一、项目名称:按键控制流水灯二、目的:通过对按键控制发光二极管项目的改变,设计出自己的方案,来加深对硬件技术的理解,同时锻炼关于硬件的编程技术,掌握keil等软件的使用。
三、硬件原理:数码管与发光二极管硬件电路图:芯片引脚电路图:按键与导航按键:四、软件原理:变量Key1,Key2,Key3分别代表第一个、第二个、第三个按键,值为零时表示按下了该按键。
那么可以写出一个判断条件,当这三个变量的值分别为1 时,就分别调用三个不同的函数,三个函数分别表示LED灯的三种不同的闪亮方式。
五、软件流程:首先判断哪一个变量的值为1,即哪一个按键被按下,然后就调用相应的函数。
六、关键代码:void main(){Init();P0=0x00;while(1){//其他两个key通过中断实现// if(Key3==0)// {// G_count=0;// while(G_count!=200);//延时10ms// while(!Key3)//等待直到释放按键// {// P0=0x33;// }// }if(Key1==0)fun2();if(Key2==0)fun3();if(Key3==0)fun4();}}七、操作说明:当把软件下载到电路板以后,给它插上电源,然后按下不同的按键,可以观察到LED灯亮。
八、存在的问题:原先的main()函数中只有KEY3,并没有Key1和Key2,所以暂时不清楚如何感应到按键一和按键二什么时候按下。
九、后续设计计划:可以设计更炫酷的亮灯方式。
以下是附加文档,不需要的朋友下载后删除,谢谢顶岗实习总结专题13篇第一篇:顶岗实习总结为了进一步巩固理论知识,将理论与实践有机地结合起来,按照学校的计划要求,本人进行了为期个月的顶岗实习。
这个月里的时间里,经过我个人的实践和努力学习,在同事们的指导和帮助下,对村的概况和村委会有了一定的了解,对村村委会的日常工作及内部制度有了初步的认识,同时,在与其他工作人员交谈过程中学到了许多难能可贵经验和知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
input rst_n; //复位信号--低电平有效 output [3:0]led; //led 0--灭 1--亮 input sw1_n,sw2_n,sw3_n;
end else begin
if(led_ctrl[0])led_dir=~led_dir ; if(led_ctrl[1]) led_on=~led_on;//如果此位按键按下则 发光二级管取反
end endmodule
神秘地址 yaMrp6xEGO5c
if(!rst_n) cont<= 20'd0;
else cont<=cont+1'b1;//利用计数寄存器加1 延时
reg[3:0] led_r; always@(posedge clk or negedge rst_n)
if(!rst_n) led_r <= 4'b0001;
else if (cont==24'hffffff && led_on) begin if(led_dir) led_r<= {led[2:0],led[3]};//左循环移位 else led_r<= {led[0],led[3:0];
reg[2:0] key_rst; always @(posedge clk or negedge rst_n)
if(!rst_n) key_rst <= 3'b111;
else
key_rst <= {sw3_n,sw2_n,sw1_n};
reg[2:0] key_rst_r; always@(posedge clk or negedge rst_n)
reg led_on;// 定义寄存器类型变量 此变量只能在always语句中赋值 1--on 0--off reg led_dir;//定义流水灯方向寄存器变量 1--left 0--right
reg[23:0] cont; always@(posedge clk or negedge rst_n)
if(!rst_n) low_sw_r <= 3'b111;
else low_sw_r <= low_sw;
wire [2:0] led_ctrl = low_sw_r[2:0]&(~low_sw[2:0]);
always@(posedge clk or negedge rst_n) if(!rst_n) begin led_dir=1'b0; led_on=1'b0;
if(!rst_n) key_rst_r <= 3'b111; else key_rst_r <=key_rst; //当寄存器key_rst由1变为0时,key_an的值变为高,维持一个时钟周期 wire [2:0] key_an; assign key_an = key_rst_r&(~key_rst);
单片机控制流水灯
//author:Richard.Kong date : 2012.5.30 PM 20MHZ 一个时钟周期为5ns //功能描述:流水灯开启键led_on 流水灯方向控制键led_dir 只有开启led_on才能控制流动方向 //thanks 特权同学 //learn FPGA together //爱尚FPGA
reg[19:0] cnt;//20位计数器 always@(posedge clk or negedge rst_n)
if(!rst_n) cnt <= 20'd0; else if (key_an) cnt <= 20'd0; else cnt <= cnt +1'b1;
reg[2:0] low_sw; always@(posedge clk or negedge rst_n)
if(!rst_n) low_sw <= 3'b111; else if (cnt==20'hfffff)//计数满20ms将按键值锁存到寄存器low-sw中
low_sw <={sw3_n,sw2_n,sw1_n};
reg[2:0] low_sw_r; always@(posedge clk or negedge rst_n)