按键控制流水灯系统

按键控制流水灯系统
按键控制流水灯系统

设计摘要

本设计旨在于通过所学知识,设计一个简单的按键控制流水灯系统,满足一些基本控制功能。

本设计选用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译码芯片。P2口的P2.6引脚控制二极管的闪烁。P2.6口输出的脉冲,由单片机定时/计数器T0通过查询的方式所得到。(T0用于定发光二极管点亮与熄灭的延时时间,延时时间到,输出脉冲)

选用三片74LS273,两片用于数码管显示屏的显示数据锁存,一片用于8个发光二极管的亮灭数据锁存。74LS273芯片除了受到51单片机输出状态的控制,还受触发端CLK的控制,即为上升沿触发,也就是当CP从低电平到高电平时,输入锁存器的数据通过芯片,为0时数据锁存,输入的数据不变。

中断类型为外部事件中断,选取INT0为外部中断触发信号的输入端。对应的中断触发硬件为4×4键盘的按键。在中断的内部,则采用了线反转法对键盘数据进行采集。(使行线为输入,列线为输出,列线全部输出低电平,则航线中变为低电平的行线为按键所在的行;使行线为输出,列线为输入,行线输出全部为低电平,则列线中变为低电平的列线为按键所在的列。)

数码管显示器采用共阴型,静态显示方式。(两个数码管显示屏相互独立,每个数码管的8个显示字段控制端分别与并行的锁存芯片输出端相连,只要输出字型码,数码管就立即显示出相应的字符。)

程序模块构成:

(1)初始化:

初始化程序地址,中断地址,置堆栈指针,设置触发方式为边沿触发,开中断,允许外部事件中断。

ORG 0000H

LJMP START ;初始化

ORG 0003H

LJMP KEY ;转中断服务程序

ORG 0100H

START: MOV SP, #60H ;置堆栈指针

SETB IT0 ;边沿触发

MOV IP, #01H ;高优先级中断

SETB EA ;开中断

SETB EX0 ;允许中断

(2)主程序

状态初始化,求显示数据的字型码,扫描键盘,调用其他功能的程序;主程序:

MAIN: MOV A, #16 ;状态初始化

MOV DPTR, #LED_SEG

MOVC A, @A+DPTR

MOV DPTR, #04FFH

MOVX @DPTR, A

MOV DPTR, #0CFFH

MOVX @DPTR, A

MOV DPTR, #14FFH

MOV A, #00H

MOVX @DPTR, A ;状态初始化

MOV 43H, #00H

CLR P2.6

SCAN: LCALL KY0 ;开始扫描按键

LCALL Xfunction

LCALL Rereal

LCALL Judge1

LJMP SCAN ;重新扫描

(3)扫描程序(键盘识别和处理)

置列线为输入,行线为输出,并输出0,读取列线状态,并取反,

暂存列线状态,判断有无按键按下,如果有,置行线为输入,列线为输出,输入0,再读行线并取反,暂存,消除抖动,判断按键是否释放,计算键值(行号的4倍+列号)

;键盘扫描程序:

KY0: MOV P1,#0F0H

MOV A , P1

CPL A

ANL A, #0F0H

MOV R1, A

JZ KY0

KY1: MOV P1,#0FH

MOV A, P1

CPL A

ANL A, #0FH

MOV R2,A

JZ GRET

JBC F0,WAIT

SETB F0

LCALL DELAY

SJMP KY0 GRET: RET

WAIT: MOV A, P1

CPL A

ANL A, #0FH

JNZ WAIT

KY2: MOV A, R1

MOV R1, #03H

MOV R3, #03H

CLR C

KY3: RLC A

JC KY4

DEC R1

DJNZ R3 ,KY3 KY4: MOV A, R2

MOV R2, #00H

MOV R3, #03H

CLR C

KY5: RRC A

JC KY6

INC R2

DJNZ R3, KY5 KY6: MOV A, R2

CLR C

RLC A

ADD A, R1

MOV 40H, A

RET

(4)按键功能判断程序:

Xfunction: MOV A, 40H

CLR C

SUBB A, #8

JNC A1

MOV A, #0

LCALL Transform

RET

A1: MOV A, 40H

SUBB A, #9

JNC A2

MOV A, #1

LCALL Transform

RET

A2: MOV A, 40H

SUBB A, #12

JNC A3

MOV A, #16

LCALL Transform

RET

A3: MOV A, 40H

SUBB A, #13

JNC A4

MOV A, #2

LCALL Transform

RET

A4: MOV A, 40H

SUBB A, #14

JNC A5

MOV A, #3

LCALL Transform

RET

A5: MOV A, 40H

SUBB A, #15

JNCA6

MOV A, #4

LCALL Transform

RET

A6: MOV A, #16

LCALL Transform

RET

(5)显示程序

在数码管显示屏1上显示出当前按下的键号,在数码管显示屏2上显示出当前发光二极管正在运行的功能号。

;显示程序:

Rereal: MOV DPTR, #04FFH

MOV A, 41H

MOVX @DPTR, A ;显示按键号

MOV DPTR, #0CFFH

MOV A, 42H

MOVX @DPTR, A ;显示功能号

RET

(6)键值与显示码转换程序

转换按下的键所对应的的键值与显示屏所显示的码型的程序,每个数码管的8个显示字段控制端分别与并行的锁存芯片输出端相连,只要输出字型码,数码管就立即显示出相应的字符。

Transform: MOV DPTR, #LED_SEG ;字型表首地址

MOVC A, @A+DPTR

MOV 42H, A

MOV A, 40H

MOVC A, @A+DPTR

MOV 41H, A

RET

(7)字型码表

共阴极数码管字型编码,显示字型码所对应的的字段点亮,熄灭,转化为功能编号,按键编号通过显示屏显示。

;字形码表:

LED_SEG: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H ; '0,1,2,3,4,5,6,7'

DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H ;'8,9,A,B,C,D,E,F'

DB 40H ;'_'

;灯码表:

LED: DB 01H, 02H, 03H, 04H, 05H, 06H, 07H ;'0,1,2,3,4,5,6,7'

(8)按键号功能选择程序

;按键号功能选择程序1 Judge1: MOV A, 40H

CLR C

SUBB A, #8

JNC Aaa

LCALL Xfunction

LCALL Rereal

LCALL Function0

RET

Aaa: MOV A, 40H

SUBB A, #9

JNC Bbb

LCALL Xfunction

LCALL Rereal

LCALL Function1 Bbb: RET

;按键号功能选择程序2:

Judge2: MOV A, 40H

CJNE A, #0CH, Three

LCALL Function12

RET

Three: CJNE A, #0D H, Four

LCALL Function13

RET

Four: CJNE A, #0EH, Five

LCALL Function14 Five: RET

(9)功能程序

四个小的功能程序子模块分别对应1—7号键,8号键,12号键,13号键,14号键的功能,具体如下:

0—7键为普通亮灭控制键,对应8个发光二极管,每个按键按一下,对应的灯亮,再按一次,对应的灯熄灭。

;功能程序0

Function0: CLR P2.6

MOV DPTR, #LED ;普通显示

MOV A , 40H

MOVC A , @A+DPTR

XRL A, 43H

MOV 43H, A

MOV DPTR, #14FFH

MOVX @DPTR, A

RET

8键:按一下,8个灯逐个点亮,熄灭,循环左移三次。

;功能程序1

Function1: CLR P2.6

MOV R5, #3 ;外循环次数3次

MOV A, #01H

MOV DPTR, #14FFH

Out1: MOV R4, #8 ;内循环次数8次

IN1: MOVX @DPTR, A

LCALL DELY

RL A ;循环左移实现灯逐个点亮

DJNZ R4, IN1

DJNZ R5, Out1

RET

12键:按一下,灯全部点亮,闪烁20次,返回原来状态。

;功能程序2

Function12: LCALL Xfunction

MOV A, #0FFH

MOV DPTR , #14FFH

MOVX @DPTR, A

LCALL Blink ;调用闪烁程序

RET

13键:按一下,从左至右,每次点亮一个灯并保持,至灯全部点亮,再逐个熄灭。

;功能程序3

Function13: LCALL Xfunction

LCALL Rereal

MOV A, #00H

MOV R1, #08H ;点亮8个,循环8次

MOV R2, #08H ;熄灭8个,循环8次

MOV DPTR, #14FFH

BB1: MOVX @DPTR, A

SETB C ;将进位置1

RLC A ;带进位循环左移

DJNZ R1, BB1

BB2: MOVX @DPTR, A

CLR C ;将进位Cy清零

RRC A ;

DJNZ R2, BB2

RET

14键:左右两侧灯逐对向中间点亮,熄灭,当灯对相遇后,向相反方向进行,循环两次返回。

;功能程序4

Function14: LCALL Xfunction

LCALL Rereal

MOV A, #00H

MOV R1, #08H

MOV DPTR, #14FFH

BB3: MOV A, R2

ORL A, R3 ;或运算

MOVX @DPTR, A

RL A

MOV R2, A

MOV A, R3

RR A

MOV R3, A

DJNZ R1,BB3

RET

(10)闪烁程序

定时/计数器TO以工作方式1的定时模式,控制P2.6口在规定的时间内输出低电平,扫描方式输出

;闪烁程序:

Blink: MOV R1, #40

MOV TMOD, #01H

MOV TH0, #3CH

MOV TL0, #0B0H

SETB TR0

CLR P2.6

CONT: JBC TF0 , OVERF

SJMP CONT

OVERF: MOV TH0, #0D8H

MOV TL0, # 0F0H

CPL P2.6

DJNZ R1, CONT

RET

延时子程序(延时20ms)

每一次点亮,熄灭之间的延时间隙均为20ms([(5Tm+2Tm)×200+3Tm]×20+2Tm)

;延时子程序:(延时20MS)

DELAY: MOV R7, #20

DELAY1: MOV R6, #200

DELAY0: NOP

NOP

NOP

DJNZ R6,DELAY0

DJNZ R7,DELAY1

RET

(11)中断服务程序

;中断服务程序:

ORG 0B00H

KEY: PUSH ACC

PUSH PSW

SETB PSW.3 ;使用BANK1寄存器

MOV P1, #0F0H

MOV A, P1

CPL A

ANL A, #0F0H ;屏蔽行线提取列线

MOV R1, #00H ;置循环次数ONE: RLC A

JC TWO ;C=1,该列有按键按下

INC R1

DJNZ R3, ONE

TWO: MOV A, #0CH

ADD A, R1

MOV 40H, A

LCALL Judge2 ;调用按键判断程序

POP PSW

POP ACC

RETI

按键控制单片机改变流水灯速度

按键控制单片机改变流水灯速度 /*程序效果:有三个按键,按下其中任意一个流水灯的速度改变 */#includereg52.h //52 系列单片机的头文件#define uchar unsigned char//宏定义 #define uint unsigned intuchar count=40,flag=0; //定义刚开始的流水灯的速度,后 一个为标志变量void main(){uchar i=0;//定义局部变量EA=1; //打开总 中断ET0=1; //打开定时器TR0=1; //启动定时器TH0=(65536-50000) /256; //装初值TL0=(65536-50000)%256; P2=0xfe; //点亮第一个数码管, 为下次循环做准备while(1){ if(flag) //flag 被置位{ flag=0;//清零,为下次做准备P2=~P2; //取反P2=1; //左移一位P2=~P2; //取反i++; if(i==8) //移到第八个数码管,则从新装初值{ i=0; P2=0xfe; } } P0=0xf0; //赋初值if((P00xf0)!=0xf0) //判断是否有按键按下{ if(P0==0x70) //按下第一个按键count=60; //给count 从新赋值 if(P0==0xb0) count=20; if(P0==0xd0) count=10;} }}void time0() interrupt 1 //定时器0{static uchar cnt; //定义静态变量TH0=(65536-50000)/256;TL0=(65536-50000)%256; cnt++; //计数if(cnt==count){ cnt=0; //清零flag=1; //置标志位}} tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

按键控制流水灯设计报告

按键控制流水灯设计报告 一、项目名称: 按键控制流水灯 二、目的: 通过对按键控制发光二极管项目的改变,设计出自己的方案,来加深对硬件技术的理解,同时锻炼关于硬件的编程技术,掌握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,所以暂时不清楚如何感应到按键一和按键二什么时候按下。 九、后续设计计划: 可以设计更炫酷的亮灯方式。

花样流水灯设计

单片机课程设计 2014年 6月 15日 课 程 单片机课程设计 题 目 花样流水灯 院 系 电气工程及其自动化系 专业班级 1112班 学生姓名 温亿锋 学生学号 201111631227 指导教师 张瑛

一丶任务 设计一款以AT89C51单片机作为主控核心,按键控制电路、流水灯显示电路以及单片机最小系统等模块组成的核心主控制电路。 二丶设计要求 通过发光二极管显示不同的花样(至少有六种花样),并且可以通过按键来控制流水灯的速度。 三丶设计方案 本方案主要是通过对基于单片机的多控制、多闪烁方式的LED流水灯循环系统的设计,来达到本设计的要求。其硬件构成框图如下图所示,以单片机为核心控制,由单片机最小系统(时钟电路、复位电路、电源)、按键控制电路、LED 发光二极管和5V直流电源组成。 单片机流水灯循环控制系统硬件框图 此设计方案中单片机的P1口接5路按键控制电路,实现流水灯花型的切换功能;单片机的P3.7引脚接上一个按钮开关以实现对流水灯闪烁频率的控制,即实现了快慢两种节拍实现花型的变换;单片机上的P2口接八路LED发光二极管组成流水灯电路,显示流水灯循环情况。 四丶系统硬件设计 4.1 直流稳压电源电路

对于一个完整的电子设计来讲,首要问题就是为整个系统提供电源供电模块,电源电路的稳定可靠是系统平稳运行的前提和基础。电子设备除用电池供电外,还采用市电(交流电网)供电。通过变压、整流、滤波和稳压后,得到稳定的直流电。直流稳压电源是电子设备的重要组成部分。本项目直流稳压电源为+5V。 直流稳压电源的制作一般有3种制作形式,分别是分立元件构成的稳压电源、线性集成稳压电源和开关稳压电源。下图为稳压电源采用的是三端集成稳压器7805构成的正5V直流电源。 三端固定式集成稳压电源电路图 AT89C51单片机的工作电压范围:4.0V---5.5V,所以通常给单片机外接5V 直流电源。此处用3节1.5V的干电池供电。 4.2 单片机最小系统 要使单片机工作起来,最基本的电路的构成由单片机、时钟电路、复位电路等组成,单片机最小系统如图所示。 时钟电路:本系统采用单片机内部方式产生时钟信号,用于外接一个12MHz 石英晶体振荡器和2个30pF微调电容,构成稳定的的自激振荡器,其发出的脉冲直接送入内部的时钟电路。 复位电路:确定单片机工作的起始状态,完成单片机的启动过程。单片机系统的复位方式有上电自动复位和手动按键复位。本设计采用手动按键复位,该复位方式同样具有上电自动复位功能。

流水灯控制实验报告及程序

实验三流水灯控制实验 姓名专业通信工程学号成绩 一、实验目的 1.掌握Keil C51 软件与protues软件联合仿真调试的方法; 2.掌握如何使用程序与查表等方法实现流水效果; 3.掌握按键去抖原理及处理方法。 二、实验仪器与设备 1. 微机1台 2. Keil C51集成开发环境 3. Proteus仿真软件 三、实验内容 1.用Proteus设计一流水灯控制电路。利用P1口控制8个发光二级管L1—L8。P3.3口接一按 键K1。参考电路如下图所示。其中74LS240为八反响三态缓冲器/线驱动器。 2.用中断或查询方式编写程序,每按动一次K1键,演示不同的流水效果。若用KEY表示按键的 次数,则其对应的流水效果如下: ① KEY=0: L1-L8全亮; ② KEY=1: L1-L8先全灭,然后自右向左单管点亮,如此循环; ③ KEY=2: L1-L8先全灭,然后自右向左依次点亮,如此循环; ④ KEY=3: L1-L8先全亮,然后自左向右依次熄灭,如此循环; ⑤ KEY=4: L1-L8先全灭,然后整体闪烁,如此循环; ⑥ KEY=5:自行设计效果。 以上移位及闪烁时间间隔均设置为0.3秒,按动5次按键后,再按键时,流水效果从头开始循环。 四、实验原理 1.按键去抖原理:通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号 波形如下图所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5~10ms。按键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅做一次处理,必须去除按键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。常用软件方法去抖动,即检测到按键闭合后执行一个5~10ms延时程序;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有按键按下。当检测到按键释放后,也要给5~10ms的延时,待后延抖动消失后,才能转入该键的处理程序。 2.74LS240:八反相三态缓冲器/线驱动器 引脚排列图:

按钮控制流水灯C程序的编写

按钮控制LED——51单片机的 Proteus实验 实验原理 51单片机的一个I/O口接按钮,再通过另一个I/O口控制LED的亮、灭。 主要器件以及电路图 单片机——AT89C51,上拉电阻——pullup,按钮button,发光二极管——LED。 按钮控制LED汇编程序源码 ORG 0 START: 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 0 sjmp start org 30h start: mov P1,#1 ;P1.0为1,不亮mov P1,#2 ;P1.1为1,不亮 mov P1,#4 ;以下原理同上 mov P1,#8 mov P1,#10h mov P1,#20h mov P1,#40h mov P1,#80h sjmp start delay: nop nop nop nop ret end

数码显示管——51单片机的Proteus 实验 实验原理 51单片机的一个I/O口接4个开关,再通过另一个I/O口控制7段数码显示管显示想要的数字。 主要器件以及电路图 单片机——AT89C51,共地的7段数码显示管——7SEG-COM-AN-GRN,开关——SW-SPST。 汇编程序源码 汇编后139字节。 org 0 sjmp START org 30h START: mov P1,#0FFh ;LED不亮 st1: mov P2,#0FFh ;准备读数(开关状态)

cc2530按键控制流水灯

cc2530按键控制流水灯 本次设计用LED1,LED2,LED3 灯及按键S1 为外设。采用P10、P11、P14 口为输出口,驱动LED1/LED2/LED3,P01 口为输入口,接受按键信号输入(高电平为按键信号)。 1.高性能 2.4G 射频模块Q2530RF Q2530RF是丘捷技基于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输出供后极使用。

按键控制流水灯系统

设计摘要 本设计旨在于通过所学知识,设计一个简单的按键控制流水灯系统,满足一些基本控制功能。 本设计选用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译码芯片。P2口的P2.6引脚控制二极管的闪烁。P2.6口输出的脉冲,由单片机定时/计数器T0通过查询的方式所得到。(T0用于定发光二极管点亮与熄灭的延时时间,延时时间到,输出脉冲)

开关键盘控制流水灯设计

开关/键盘控制流水灯设计 摘要 目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的流水灯,主要介绍了利用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。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

花样流水灯设计

一、原理图设计的目的: 利用AT89C51,通过控制按键来实现六种流水灯花样的转换,实现花样流水灯的设计,同时通过外部中断0,来控制流水灯的速度。 二、各器件的功能作用: 1、AT89C51 AT89C51有40个引脚,每个引脚都有其功能。本次设计中,利用P0口当输出口,输出低电平来驱动发光二极管点亮。利用P1.0~P1.5六个引脚,通过按键接地,然后采用扫描的方式,判断哪个引脚所接按键按下,从而来控制六种流水灯的花样。利用P3.2引脚外接按键接地,通过控制按键来减慢流水灯的速度,利用P3.3引脚外接按键接地,通过控制按键来提高流水灯的速度。利用P3.7输出低电平,导通三极管Q1,从而给八个发光二极管的阳极加高电平,一旦P0口输出低电平就可以驱动发光二极管。 2、八个发光二极管: 通过八个发光二极管来实现流水灯的变化,用低电平驱动发光二级管亮,同时,用高电平使其熄灭 。 3、按键

通过P1.0-P1.5外接的按键来实现流水灯各种花样的变化,当按键按下时,驱动一种流水灯花样的闪烁。同时,利用按键来提供外部中断,当按下按键时,产生一个外部中断,向CPU申请中断,CPU 响应其中断,因此可以用按键来实现提高流水灯闪烁的速度。 通过在RST口处加上一个按钮手动复位电路,利用复位按钮可以使运行中的流水灯复位到初始的状态。 4、排阻 因为P0口作为输出口时需要外接上拉电阻 三、设计原理图:

四、程序如下: #include //51系列单片机定义文件#define uchar unsigned char //定义无符号字符#define uint unsigned int //定义无符号整数 void delay(uint);//声明延时函数 void main(void) { uint i; uchar temp; TCON=0x05; IE=0x85; PX1=1; PX0=0; while(1) { temp=0x01; for(i=0;i<8;i++) //8个流水灯逐个闪动 {

单片机课程设计—8个按键控制8个LED自动设定控制流水灯

东北石油大学
实习总结报告
实习类型
生产实习
实习单位
东北石油大学实习基地
实习起止时间 2018 年 7 月 7 日至 2018 年 7 月 16 日
指导教师
刘东明、孙鉴
所在院(系) 电子科学学院
班 级 电子科学与技术 15-2
学生姓名
学号
1509012402
2018 年 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 附录............................................................................................................................ 12
I

按键控制数码管和流水灯设计报告实验报告要点

摘要 单片机自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)

单片机课程设计—8个按键控制8个LED自动设定控制流水灯

`
东北石油大学
实习总结报告
实习类型
生产实习
实习单位
东北石油大学实习基地
实习起止时间 2018 年 7 月 7 日至 2018 年 7 月 16 日
指导教师
东明、鉴
所在院(系) 电子科学学院
班 级 电子科学与技术 15-2
学生
学号
1509012402
Word 文档
2018 年 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 附录............................................................................................................................ 12
Word 文档

键盘控制流水灯程序

#include #define uchar unsigned char #define uint unsigned int uchar k,flag1,flag2,flag3; sbit diocs=P2^5; sbit key1=P3^4; sbit key2=P3^5; sbit key3=P3^6; uchar code table1[]={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; uchar code table2[]={ 0x7f,0xbf,0xdf,0xef, 0xf7,0xfd,0xfb,0xfe}; uchar code table3[]={ 0x7e,0xbd,0xdb,0xe7, 0xdb,0xbd,0x7e,0xff, 0x00}; void delay(uint x) { uint i; while(x--) for(i=110;i>0;i--); } void keyscan() { if(key1==0) {delay(10); if(key1==0) { flag2=0; flag3=0; flag1=1; } } if(key2==0) {delay(10); if(key2==0) { flag3=0; flag1=0; flag2=1; } }

if(key3==0) {delay(10); if(key3==0) { flag2=0; flag1=0; flag3=1; } } } void main() { while(1) {keyscan(); if(flag1==1) { for(k=0;k<8;k++) { P1=table1[k]; delay(400); keyscan(); } } if(flag2==1) { for(k=0;k<8;k++) { P1=table2[k]; delay(400); keyscan(); } } if(flag3==1) { for(k=0;k<8;k++) { P1=table3[k]; delay(400); keyscan(); } } } }

流水灯控制实验报告及程序

流水灯控制实验报告及 程序 文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)

实验三流水灯控制实验 姓名专业通信工程学号成绩 一、实验目的 1.掌握Keil C51 软件与protues软件联合仿真调试的方法; 2.掌握如何使用程序与查表等方法实现流水效果; 3.掌握按键去抖原理及处理方法。 二、实验仪器与设备 1. 微机1台 2. Keil C51集成开发环境 3. Proteus仿真软件 三、实验内容 1.用Proteus设计一流水灯控制电路。利用P1口控制8个发光二级管L1—L8。口接一 按键K1。参考电路如下图所示。其中74LS240为八反响三态缓冲器/线驱动器。 2.用中断或查询方式编写程序,每按动一次K1键,演示不同的流水效果。若用KEY表 示按键的次数,则其对应的流水效果如下: ① KEY=0: L1-L8全亮; ② KEY=1: L1-L8先全灭,然后自右向左单管点亮,如此循环; ③ KEY=2: L1-L8先全灭,然后自右向左依次点亮,如此循环; ④ KEY=3: L1-L8先全亮,然后自左向右依次熄灭,如此循环; ⑤ KEY=4: L1-L8先全灭,然后整体闪烁,如此循环; ⑥ KEY=5:自行设计效果。 以上移位及闪烁时间间隔均设置为秒,按动5次按键后,再按键时,流水效果从头开 始循环。 四、实验原理 1.按键去抖原理:通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电

压信号波形如下图所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5~10ms。按键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅做一次处理,必须去除按键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。常用软件方法去抖动,即检测到按键闭合后执行一个5~10ms延时程序;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有按键按下。当检测到按键释放后,也要给5~10ms的延时,待后延抖动消失后,才能转入该键的处理程序。 2.74LS240:八反相三态缓冲器/线驱动器 引脚排列图:

单片机课程设计—个按键控制个LED自动设定控制流水灯

东北石油大学 实习总结报告实习类型生产实习 实习单位东北石油大学实习基地 实习起止时间 2018年7月7日至2018年7月16日 指导教师刘东明、孙鉴 所在院(系)电子科学学院 班级电子科学与技术15-2 学生姓名 学号 02 2018年 7月 16日

目录 第1章按键控制流水灯设计 (1) 实习目的.................................. 错误!未定义书签。 实习要求.................................. 错误!未定义书签。第2章电路工作原理 (2) STC89C52单片机工作原理 (2) LED工作原理 (3) 按键工作原理 (3) 整体电路图 (5) 本章小结 (6) 第3章 C程序设计 (7) 程序设计流程图 (7) 实验结果 (8) 本章小结 (9) 总结及体会 (10)

参考文献 (11) 附录 (12)

第1章按键控制流水灯设计 1.1实习目的 本次实习以STC89C52单片机为控制核心。通过它实现对八盏LED灯的亮灭进行设定,并在设定完成之后能够按照之前的设定实现流水灯效果。外部电路为按键控制流水灯。P0口控制八盏灯,P1口控制矩阵键盘,P2口控制独立按键,程序利用单片机内部计时器中断实现流水效果。要求流水灯能够自行设定、暂停、复位,工作稳定,可靠性高。 生产实习的主要目的是培养理论联系实际的能力,提高实际动手操作能力。本专业的生产实习旨在广泛了解实际单片机电子产品工作的全过程,熟悉电子产品的主要技术管理模式,并在实习的操作过程中学习掌握电子产品的焊接安装调试的实际操作技能。巩固和加深理解所学的理论,开阔眼界,提高潜力,为培养高素质大学本科人才打下必要的基础。透过学习,是理论与实际相结合,能够使学生加深对所学知识的理解,并为后续专业课的学习带给必要的感性知识,同时直接了解本业的生产过程和生产资料,为将来走上工作岗位带给必要的实际生产知识。 1.2实习要求 1.深入学习单片机开发软件Keil的使用,熟悉单片机电路设计,根据

keil-按键控制4种LED MODE STM32F107神舟四号-闪烁 流水灯 加减

按键控制4种LED MODE //------------------------------------------------- //功能: 按键控制LED闪烁(库) //版本号:v0.1.1 //日期:20121222 //------------------------------------------------- #include "stm32f10x.h" #include "led.h" #include "key.h" #include "delay.h" //////////////////////////////////////////////////////////////////////////////////// //------------------------------------------------- //主程序 //------------------------------------------------- int main(void) { int i=0; int led1,led2,led3,led4; TYPEDEF_KEY key = KEY_NULL; led1=0; led2=0; led3=0; led4=0; LedConfig(); KeyConfig(); while(1) { key=GetKey(); if(key == KEY_1) {i++; } switch(i%4) { case 0:

LedTurnOn(LED_ALL); Delay(5000000); LedTurnOff(LED_ALL); Delay(5000000); LedTurnOn(LED_ALL); Delay(5000000); LedTurnOff(LED_ALL); break; }; case 1: { LedTurnOn(LED_1); Delay(2000000); LedTurnOff(LED_1); LedTurnOn(LED_2); Delay(2000000); LedTurnOff(LED_2); LedTurnOn(LED_3); Delay(2000000); LedTurnOff(LED_3); LedTurnOn(LED_4); Delay(2000000); LedTurnOff(LED_4); break; }; case 2: { LedTurnOn(LED_4); Delay(2000000); LedTurnOff(LED_4); LedTurnOn(LED_3); Delay(2000000); LedTurnOff(LED_3); LedTurnOn(LED_2); Delay(2000000); LedTurnOff(LED_2); LedTurnOn(LED_1); Delay(2000000); LedTurnOff(LED_1); break; }; case 3:

按键控制流水灯程序

最近有很多学弟来问我流水灯该怎么做,程序怎么写,现在在这里统一说下,很多时候没有时间让你们白跑一趟了,O(∩_∩)O~。 首先就说到单片机了,单片机对于你们来说是个新概念,可能以前都没听说过。我想说的是它不是传统意义上的集成电路,只能按照特定的焊接来能工作,而是一块类似电脑C PU的芯片,对于一块正常的单片机,只要你提供合适的工作电源(4V都5.5V左右)、复位电路、起振电路它就可以工作了。所有的输入输出口(以P开头的)都是可以灵活配置的,可以根据你焊接的硬件电路写程序,也可以根据你写的程序焊接硬件电路。所以没有必要死板硬套。前天没事写了一下,仿真了一下还可以用。源码贴于下方供入门者参考,高手勿嘲笑,大家都是从流水灯程序写起的 (*^__^*) 嘻嘻…… 再就是我的51开发板不知道是谁借走了,很久没有用过51单片机了,所以下载程序的事就不要来找我了。我把编译过后的代码也贴在下面,如果硬件和我做的一样的同学又不会写程序的就直接复制下面编译过后的代码,在电脑上新建一个文本文档(.txt)命名任意,将复制后的代码粘贴于记事本上,然后重命名,将".txt"改为“.hex”,保存,然后通过下载器下载到单片机里面去就可以用了。 不会的多去https://www.360docs.net/doc/2613340652.html,看一下教程。以下仅供参考,不得一味模 仿 /****************************************************************************** ********************************* 源码: 51单片机 晶振频率12Mhz 八位数码管采用共阳极接法(所有阳极接一起接Vcc,阴极接P0口) 按键分别接P2.0 P2.1 P2.2(低电平有效) 编译软件采用keil 4 ******************************************************************************* ************************************************************************/ #include #define uint unsigned int #define uchar unsigned char sbit key1 =P2^0; //按键1 sbit key2 =P2^1; //按键2 sbit key3 =P2^2; //按键3 uchar flag1=0,flag2=0,flag3=0; void delay_ms(uint z) { uint i,j; for(i=0;i

相关文档
最新文档