开关键盘控制流水灯设计

合集下载

4独立按键控制led灯

4独立按键控制led灯
设计要求1)选择一个I/O口控制八只流水灯。
2)设置四个按键K1—K4,按下K1跑马灯,K2流水灯,K3鸳鸯戏水,K4则循环三种控制方式。
3)跑马灯:共8个LED逐次点亮,每隔100ms点亮一个LED,点亮100ms后关闭。
4)流水灯:共8个LED逐次点亮,每隔100ms点亮一个LED,点亮100ms后下一个LED点亮,当所有LED灯全部点亮后,延时100ms,然后全灭;然后继续上次操作。5)鸳鸯溪水灯:共8个LED,第一次1、3、5、7号灯点亮,延时100ms,关闭,延时100ms,2、4、6、8号灯点亮,延时100ms,关闭,延时100ms。然后继续上次操作。
{
P1=yua[i];
delay(100);
}
}
if(j==4)
{
for(i=0;i<9;i++)
{
P1=pao[i];
delay(100);
}
for(i=0;i<9;i++)
{
while(key2==0)
{
}
j = 2;
}
}
if(key3==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key3==0) //再次确认按键是否按下,没有按下则退出
{
while(key3==0)
{
}
j = 3;
}
}
if(key4==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key4==0) //再次确认按键是否按下,没有按下则退出

流水灯控制系统设计

流水灯控制系统设计

目录第1章方案的论述以与与最终方案的确定......................... - 1 -1.1第一种方案的论述. (1)1.2第二种方案的论证 (1)1.3第三种方案的论述 (1)1.4最终方案的确定 (2)第2章硬件设计.................................................. - 3 -2.1总体方案设计分析. (3)2.2系统逻辑框图 (3)2.3主要元器件简介 (3)2.3.1 8086CPU ························································································- 3 -2.3.2 地址锁存器74LS373的内部电路与工作原理························- 6 -2.3.3 可编程外围接口芯片8255A的简介.........................................- 8 -第3章软件设计.................................................- 13 -3.1程序流程设计.. (13)3.1.1 主程序流程·················································································· - 13 -3.1.2 程序流程图·················································································· - 14 -3.1.3 系统硬件连接图········································································· - 15 -3.1.4 源程序设计(附录) ....................................................................... - 15 -3.2设计最终理想结果与原理.. (15)3.2.1 左向移动流水灯········································································· - 15 -3.2.2 右向移动流水灯········································································· - 15 -设计心得·························································- 17 -参考文献·························································- 18 -附录······························································- 19 -第1章方案的论述以与与最终方案的确定1.1 第一种方案的论述第一种方案,使用AT89C51单片机实现流水灯闪烁设计。

[知识]按键控制数码管和流水灯设计报告实验报告

[知识]按键控制数码管和流水灯设计报告实验报告

摘要000单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。

本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。

通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。

用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。

在硬件电路的基础上加上软件程序的控制来实现本设计。

其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。

000关键字:单片机、流水灯、数码管、控制系统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, the000 Keywords: SCM, water lights, digital tubes, control system000键盘控制流水灯和数码管实验报告00目录000一设计的目的 (200)二任务描述及方案设计 (300)1. 任务描述 (300)2. 方案设计 (300)三硬件设计方案 (30)001. Msp430f149单片机的功能说明 (30)2. 显示器功能 (40)3. 复位电路 (40)4. 按键的部分 (40)5. 74HC573的特点 (4)0006. 流水灯和数码管电路原理图 (40)007. 元器件清单 (40)四程序设计方案 (50)001. 用IAR Embedded W orkbench软件编程序 (5)002. 仿真电路图 (60)五实物实验 (70)001. 实物图 (7)002. 测试结果与分析 (700)六结论 (11)000八参考文献 (16)000一、设计目的0001、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;0002、培养学生实践动手能力及独立分析和解决工程实践问题能力;003、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。

任务3-2 按键控制多种花样霓虹灯设计

任务3-2 按键控制多种花样霓虹灯设计
} else if(K4==0)
//再次检测到K3按下,第三种模式,高四位亮 //第一次检测到K4按下
{ delay(TIME);
//延时去抖动
if(K4==0) P1=0xf0; //再次检测到K4按下,第四种模式,低四位亮
}
举一反三2
采用8个发光二极管模拟霓虹灯的显示,通过1个按键控制霓虹 灯在四种显示模式之间切换,由P0口的P0.0引脚控制按键K。
//LED全灭
while(1)
{
if(K==0)
//第一次检测到按键K按下
{
delay(1200); //延时10ms左右去抖动
if(K==0)
//再次检测到按键K按下
{ w=0x01;
//流水灯显示字初值为0x01
for(i=0;i<8;i++)
{
P1=~w;
//显示字取反后,送P1口
delay(10000);
{
if(K==0)
//第一次检测到按键K按下
{
delay(1200); //延时10ms左右去抖动
if(K==0)
//再次检测到按键K按下
{ w=0x01;
//流水灯显示字初值为0x01
for(i=0;i<8;i++)
{
P1=~w;
//显示字取反后,送P1口
delay(10000);
//延时,一个灯显示时间
//根据i的值显示不同模式
//i=1显示第1种模式 //i=2显示第2种模式 //i=3显示第3种模式 //i=4显示第4种模式
while(!K); delay(1200);
判断按键是否弹起
//等待K键释放,!为逻辑非操作 //延时消除抖动

cc2530按键控制流水灯

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结束(注意不要包含本句及上面的※号,注意不要改变格式!)。

任务三 键控流水灯控制器制作

任务三 键控流水灯控制器制作

任务分析:
前面一个任务我们已经完成了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}

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

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

实验三流水灯控制实验姓名专业通信工程学号成绩一、实验目的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延时程序;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有按键按下。

基础项目(1)流水灯项目讲解

基础项目(1)流水灯项目讲解

基础项⽬(1)流⽔灯项⽬讲解写在前⾯的话这⼀节呢,我们来实现⼀个流⽔灯驱动程序的编写,当然啦,点灯不是⽬的,最重要的是我们通过这个流⽔灯代码的实现可以掌握⼀些重要的规范。

项⽬需求我们要求流⽔灯模式如下:当复位键按下时,灯全部熄灭,当复位键放开以后,⾸先,点亮第⼀个灯,然后第⼀个灯熄灭,同时点亮第⼆个灯,接着,第⼆个灯熄灭,同时点亮第三个灯,然后,第三个灯熄灭,同时点亮第四个灯,最后第四个灯熄灭,同时点亮第⼀个灯,如此循环往复,实现流⽔。

相关技术介绍项⽬需求,我相信⼤家已经看清楚了,那么,接下来我们该怎么做呢?写代码?NO 我们来仔细的看看项⽬需求,这⾥⾯涉及到了按键,LED灯,还需要我们⽤按键控制流⽔灯的启动或停⽌。

那么,在写代码之前,我们⾸先应该明确按键按下和放开有什么区别、LED是低电平点亮还是⾼电平点亮。

只有清楚外设的性能,我们才可能编写代码正确地驱动这些外设。

代码体现的是我们的思路,所以在写代码之前我们必须⾸先理顺⾃⼰的思路,否则盲⽬的编写代码,⼀定是徒劳的。

硬件设计下图所⽰为轻触按键与FPGA的连接关系⽰意图由上述电路图可知,当按键放开时,FPGA端⼝等于接到了上拉电阻,所以检测到的为⾼电平。

当按键按下时,FPGA端⼦通过按键接到了地平⾯,检测到的为低电平。

下图所⽰为LED与FPGA的连接关系⽰意图由上述电路图可知,LED正极全部接到了3.3V电源。

那么,只有当FPGA端⼝给出低电平的时候,LED才会点亮。

当FPGA端给⾼电平时,LED熄灭。

顶层架构设计项⽬需求以及项⽬需求中所涉及到的所有外设都已经分析清楚了,那么接下来是不是可以开始编写代码了呢?答案还是—NO!哈哈,别着急,其实对于⼯程师⽽⾔,编写代码真的是⼩菜⼀碟,闭着眼睛都能敲⼏⾏哦。

⼀个项⽬最重要的、最终决定成败的⼀般来说不是代码的具体实现,⽽是前期的架构设计,好的架构可以化简为易,将⼀个很复杂的⼯程逐步的拆分成很多简单的⼦模块,不但提⾼了设计效率和成功率,同时也⽐较适合团队作战,分⼯合作。

CC2530按键控制流水灯

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;}}}。

用按键控制流水灯的例子

用按键控制流水灯的例子
main()
{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口配置为输入或输出模式,是实现流水灯功能的基础。

实验1_流水灯实验

实验1_流水灯实验

实验1 流水灯实验一、实验目的1) 简单I/O 引脚的输出2) 掌握软件延时编程方法 3) 简单按键输入捕获判断 二、实验实现的功能1) 开机是点亮全部12个发光二极管,闪烁三下;2) 按下不同的按键12个发光二级管按照不同的方式显示。

具体显示规则如下:1) 1号键按下,按照顺时针循环依次点亮发光二极管; 2) 2号键按下,按照逆时针循环依次点亮发光二极管;3) 3号键按下,按照顺时针间隔1个依次点亮发光二极管; 4) 4号键按下,按照逆时针间隔1个依次点亮发光二极管; 5) 5号键按下,按照顺时针间隔2个依次点亮发光二极管; 6) 6号键按下,按照逆时针间隔2个依次点亮发光二极管;三、系统硬件设计 1、系统原理框图2、系统硬件原理图D 1D 2D 3R N 11k123456789101112242322212019181716151413D 4D 5D 6D 7D 8D 9D 10D 11D 12P 22P 21P 20P 26P 25P 24P 23P 06P 05P 04P 27P 07V C CR 21kR 31kP 36S W 1S W 2S W 3S W 4S W 5S W 6P 32P 33P 37P 34R 1710k R 1810k R 1910kV C C80C51时钟部分电源与复位部分12个发光二极管键盘系统四、系统软件设计本次实验的主要部分是:确定发光二级管点亮规律和检测按键的动作。

其中发光二级管点亮规律通过给定的数组来确定,而检测按键,采用查询方式实现,详细程序如下:#include<stc10.h>#define uint unsigned int #define uchar unsigned char bit flag1=0; uchar f1,f=0; void main() {void Delay1ms(uint ms);uchar key(uchar f);uchar led[12]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xef,0xdf,0xb f,0x7f}; //表示各发光二级管 uchar key_value[6]={0,1,2,3,4,5}; uint num[6]={0,0,0,0,0,0};char type[6]={1,-1,2,-2,3,-3}; //分别表示顺时针、逆时针、间隔一个正逆时针、间隔两个正逆时针 uchar i;P2=0xff; //关闭D1——D8 P0=P0|0xf0; //关闭D9——D12Delay1ms(100); //延时方便清晰看到LED 闪烁现象 for(i=0;i<3;i++) //亮灭3次,中间间隔若干时间 { P2=0;//点亮D1——D8U 1S T C 10F 08XP S E N29A L E 30V C C 40E A 31X 119X 218R S T 9P 0.0/A D 039P 0.1/A D 138P 0.2/A D 237P 0.3/A D 336P 0.4/A D 435P 0.5/A D 534P 0.6/A D 633P 0.7/A D 732P 1.0/T 21P 1.1/T 2E X 2P 1.2/E C I 3P 1.3/C E X 04P 1.4/C E X 15P 1.5/C E X 26P 1.6/C E X 37P 1.7/C E X 48P 2.0/A 821P 2.1/A 922P 2.2/A 1023P 2.3/A 1124P 2.4/A 1225P 2.5/A 1326P 2.6/A 1427P 2.7/A 1528P 3.0/R X D 10P 3.1/T X D 11P 3.2/IN T 012P 3.3/IN T 113P 3.4/T 014P 3.5/T 115P 3.6/W R 16P 3.7/R D17C 330pC 430p X 111.0592MX 1X 2R 151kR 2010k单片机最小系统部分C 110u FD 13C 2104V C CV C CV C CC 510u FC M A XJ1C O N 28C12345678910111213141920212223242526272815161718P 02P 01P 00P 06P 05P 04P 03P 07P 23P 22P 21P 20P 27P 26P 25P 24D 5D 6D 7D 8D 1D 2D 3D 4W 1D 9W 4W 3W 2D 12D 11D 10P 23P 22P 21P 20P 25P 24P 31P 30P 27P 26P 35P 34P 33P 32P 37P 36P 03P 02P 01P 00P 07P 06P 05P 04P 13P 12P 11P 10P 15P 14X 2X 1P 17P 16P 11P 10R S T P 15P 14P 13P 12P 17P 16P 35P 34P 33P 32H 1H 2P 37P 36L 1L 2L 3EFG D P CBADV C CJ6C O N 40A 12345678910111213141516171819202122232425262728293031323334353637383940S W 8R S TP0=P0&0x0f; //点亮D9——D12Delay1ms(500); //延时P2=0xff; //关闭D1——D8P0=P0|0xf0; //关闭D9——D12Delay1ms(500); //延时}while(1){f1=key(f); //传递键值if((f1!=f)||(flag1))//判断是否有键按下,不管两次按键的键值是否相等,只要有键按下,都从D0重新开始循环{f=f1; //交换新键值num[f]=0; //从D0开始循环flag1=0; //标志位清零}if(num[f]%12<8) //先依次亮前8个{P2=led[num[f]%12];P0=P0|0xf0; //关闭D9——D12}else //再依次亮后4个{P0|=0xf0;P0&=led[num[f]%12];P2=0xff; //关闭D1——D8}Delay1ms(100);//num[f]=num[f]+type[f]; //点亮type[f]所对应模式的下一个LEDswitch(num[f]) //保证循环连续一致{case 65535:num[f]=65531;break;case 65534:num[f]=65532;break;case 65533:num[f]=65529;break;default: break;}}}void Delay1ms(uint ms) //@11.0592MHz {uchar i,j;uint k;for(k=0;k<ms;k++){i = 11;j = 190;do{while (--j);} while (--i);}}uchar key(uchar s) //按键扫描子函数{uchar flag=s;uchar k,i,p3;flag1=0;k=0x7f; //行扫描初值for(i=0;i<2;i++) //扫描行{P3=k;Delay1ms(5);p3=P3; //判断哪一列的键按下switch(p3&0x1c){case 0x18: flag=i*3;flag1=1;break;case 0x14: flag=i*3+1;flag1=1;break;case 0x0c: flag=i*3+2;flag1=1;break;default: break;}if(flag1)break;else k=k>>1|0x80;}return flag;}五、实验过程中遇到的问题及解决方法1.由于这个实验是第一个实验因此遇到了不少的问题。

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

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

-1-江苏安全技术学院实习总结报告实习单位江苏安全技术职业学院实习起止时间 2019 年 11 月 17 日至 2019 年 12 月 11 日指导教师所在院(系) 电气工程系班 级 电梯技术 2 班学生姓名 艾孜提艾力·阿迪力·玉苏甫江学号20183102932019 年 12 月 16 日江苏安全技术职业学院-1-目录第 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-1--2-第1章 按键控制流水灯设计1.1 实习目的本次实习以 STC89C52 单片机为控制核心。

(四)开关控制的跑马灯以及流水灯电路图以及程序

(四)开关控制的跑马灯以及流水灯电路图以及程序

(四)开关控制的跑马灯以及流⽔灯电路图以及程序电路图:⽬的:K1 开始跑马灯左->右K2 停⽌K3 跑马灯右-> 左K4 流⽔灯参考程序:#include<reg52.h>#include<intrins.h>#define uchar8 unsigned char#define uint16 unsigned int#define LED P1sbit key1=P2^0;sbit key2=P2^1;sbit key3=P2^2;sbit key4=P2^3;/*****************************/// 函数名称: DelayMS( )// 函数功能:延时// ⼊⼝函数:延时毫秒// 出⼝函数:⽆/************************* void DelayMs(uint16 val){uint16 i,j;for( i=0;i<val;i++)for(j=0;j<113;j++);}/****************************/// 函数名称: keyscan( )// 函数功能:检测按键// ⼊⼝函数:⽆// 出⼝函数: keyscan_num/*****************************/uchar8 keyscan(){uchar8 keyscan_num,temp;P2=0xff; // 置电平temp=P2; // 读P2⼝电平,送⼊ temp 中(因为这时候可能改变按键了)// if(~(temp&0xff)) 不会⽤,先不看,⽤下⾯的if(temp!=0xff) // 说明有键按下{if(key1==0){keyscan_num=1;}else if(key2==0){keyscan_num=2;}else if(key3==0){keyscan_num=3;}else if(key4==0){keyscan_num=4;}else{keyscan_num=2;}}return keyscan_num;}void main(){uchar8 key_num , temp , i ;while(1){key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: break ;}function0: // 跑马灯从左向右⾛temp=0x01; // 0000 0001for(i=0;i<8;i++){LED= ~temp;DelayMs(1000);temp=temp<<1;}key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: goto function0;break ;}function1: //停⽌LED=0xff;key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: goto function1;break ;}function2: // 从右向左temp=0x80; // 1000 0000for(i=0;i<8;i++){LED= ~temp;DelayMs(1000);temp=temp>>1;}key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: goto function2;break ;}function3: // 流⽔灯LED=0xff ; // 这⾥端⼝全被设置为 1111 1111 ,相当于全灭for(i=0;i<8;i++){LED=LED<<1; // 选择了左移循环DelayMs(1000);}key_num = keyscan(); // 将按键扫描的键值送⼊ key_num 中switch(key_num){case1: goto function0;case2: goto function1;case3: goto function2;case4: goto function3;default: goto function3;break ;}}}分析以及相关疑点:1、按键按下,是遵循实验现象了,但是不太好,按其他键不能⽴即响应,当然我们不要求2、实际⽤弹性开关,⽐较好,具体⾃⼰体会,⼀按下松开对程序没影响,。

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

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

按键控制数码管和流水灯设计报告实验报告实验名称:按键控制数码管和流水灯设计报告一、实验目的本实验旨在通过使用按键来控制数码管和流水灯的显示,加深对数码管和流水灯工作原理的理解,并掌握按键的基本输入输出原理。

二、实验器材1. Arduino开发板2.数码管模块3.面包板4.面包板连接线5.按键模块6.跳线三、实验原理数码管是一种将数字和一些常用符号通过数码电路显示在特定位置的显示器件,由多个LED组成,可显示0-9及一些小于9的字母和符号。

流水灯是一种LED灯的组合,通过不同的时序控制,实现灯光依次点亮或熄灭的效果。

本实验通过使用按键控制器将数码管和流水灯的状态控制与显示,按下不同的按键可以使数码管切换显示不同的数字,同时控制流水灯的点亮或熄灭。

四、实验步骤1. 将数码管模块连接到Arduino开发板的数字I/O口,连接方式可参考数码管模块的接口定义和Arduino开发板的编号。

2. 将按键模块连接到Arduino开发板的数字I/O口,连接方式可参考按键模块的接口定义和Arduino开发板的编号。

3. 按键模块和数码管模块都需要使用面包板连接线和跳线连接到Arduino开发板的相应引脚上。

4.根据按键的读取状态,通过编程控制数码管显示相应的数字,利用流水灯实现通过按键的控制点亮或熄灭。

五、实验结果经过编程和调试,实验中数码管能够正确显示按键输入的数字,同时根据按键输入状态控制流水灯的点亮或熄灭。

按不同的按键可以切换数码管的数字显示,实现了按键对数码管和流水灯的控制。

六、实验总结本实验通过按键来控制数码管和流水灯的显示,加深了对数码管和流水灯的工作原理的理解。

同时,掌握了按键的基本输入输出原理,并通过编程控制实现了按键对数码管和流水灯的控制。

本实验还有一些可以改进的地方,例如可以增加多个按键,实现更多的控制功能;还可以通过增加延时函数控制流水灯的点亮或熄灭速度。

通过不断改进和练习,可以提高对Arduino开发板的理解和掌握。

流水灯设计具体方案

流水灯设计具体方案

流水灯设计具体方案流水灯是一种以LED灯珠为光源,通过控制电路将不同颜色的光依次流动显示的装饰灯具。

下面我将为大家详细介绍流水灯的设计方案。

一、硬件设计:1.电源部分:流水灯需要一定的电压和电流来驱动LED灯珠,常见的电源方式有直流电源和交流电源。

直流电源能提供稳定的电流,但需要将交流电转换为直流电,可以使用变压器和整流电路来实现;交流电源则无需转换,但需要注意选择适当的功率和频率。

2.控制电路:控制电路是流水灯的核心部分,它能够控制LED灯珠的亮灭状态和颜色。

常见的控制电路有微控制器和逻辑门电路。

微控制器是一种集成电路芯片,具有逻辑控制、时序控制和输出控制等功能,适合实现复杂的流水灯效果;逻辑门电路则通过门电路的组合和控制信号的输入实现LED灯珠的控制,适合实现简单的流水效果。

3.LED灯珠:LED灯珠是流水灯的光源,常见的有单色LED灯珠和彩色LED灯珠。

单色LED灯珠只能发出一种颜色的光,常见的有红、绿、蓝等;彩色LED灯珠则可以发出多种颜色的光,一般由红、绿、蓝三种常用的LED灯珠组合而成。

二、软件设计:1.流水灯效果:流水灯的效果是LED灯珠以一定的速度从一端依次亮起,然后从另一端熄灭,如此循环。

可以通过控制LED的亮灭状态和顺序来实现不同的流水灯效果,如单向流水、双向流水、循环流水等。

2. 控制器程序:控制器程序可以通过编程实现。

对于微控制器来说,可以使用C语言或汇编语言编写程序,在程序中设置LED灯珠的控制状态和顺序;对于逻辑门电路来说,可以使用逻辑门的组合和逻辑电路来实现流水灯的控制,一般使用Verilog或VHDL语言进行描述。

三、组装与调试:1.组装:将电源部分和控制电路按照设计要求进行组装,确保各个部分的连接正确,不发生短路或接触不良等问题。

同时,要注意导线的长度和扎线的方式,避免电路布线混乱或短路。

2.调试:将LED灯珠连接到控制电路的输出端口上,将电源接入电路,然后通过开关或按钮来控制流水灯的亮灭和流动速度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

开关/键盘控制流水灯设计摘要目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。

在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的流水灯,主要介绍了利用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灯便会一亮一暗的做流水灯了。

在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

图1 A T89C51单片机硬件组成图2.2电源VCC - 芯片电源,接+5V。

VSS - 接地端。

用万用表测试单片机引脚电流一般为0v 或者5v,这是标准的TTL电平,但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这之是万用表反映没这么快而已,在某一个瞬间单片机引脚电流还是保持在0v或者5v的。

2.3时钟XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。

2.4控制线:控制线共有4根ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址。

PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。

PSEN:外ROM读选通信号。

RST/VPD:复位/备用电源。

RST(Reset)功能:复位信号输入端。

VPD功能:在Vcc掉电情况下,接备用电源。

EA/Vpp:内外ROM选择/片内EPROM编程电源。

EA功能:内外ROM选择端。

Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。

2.5 I/O线80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。

P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总)。

2.6晶振电路对于一个高可靠性的系统设计,晶体的选择非常重要,尤其设计带有睡眠唤醒(往往用低电压以求低功耗)的系统。

这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。

这一现象在上电复位时并不特别明显,原因时上电时电路有足够的扰动,很容易建立振荡。

在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易。

在振荡回路中,晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。

晶体的选择至少必须考虑:谐振频点,负载电容,激励功率,温度特性,长期稳定性。

89C51单片机的时钟信号通常用凉种电路形式得到:内部振荡和外部振荡方式。

基于晶振的振荡器通常提供非常高的初始精度和较低的温度系数。

相对RC振荡器能快速启动,但提供的初始精度和温度系数会较差。

图2所示的电路能产生可靠的时钟信号,但其性能受环境条件和电路元件选择以及振荡器布局的影响。

使用时,元件必须根据特定的逻辑系列进行优化。

引脚XTAL1与XTAL2外接晶体振荡器或陶瓷谐振起,构成内部振荡方。

单片机内部有一个高增益的反相放大器,XTAL1为内部反相放大器的输入端,XTAL2为内部反相放大器的输出端,在其两端接上晶振后,就构成了自激振荡电路,并产生振荡脉冲,振荡电路输出的脉冲信号的频率就是晶振的固有频率。

内部振荡方式第外部电路如图2所示。

在实际应用中通常还需要在晶振的两端和地之间各并上一个小电容图1中,C1,C2起振荡频率、快速起振的作用。

起值在5-30PF。

晶振频率的典型值是12MHZ,内部振荡方式所得时钟信号比较稳定,实用电路中使用较多。

外部振荡方式是吧外部已有的时钟信号引入单片机内着适用单片机的时钟与外部信号同步。

89C51XTAL1XTAL2C1C2图2 内部震荡方式的外部电路图复位电路复位是单片机的初始化操作。

单片机启运运行时,都需要先复位,其作用是使CPU 和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。

因而,复位是一个很重要的操作方式。

但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。

设计上电延时复位电路需考虑电源电压VDD的上升时间和振荡器的起振时间。

电源电压VDD的上升时间,与供电电源、电源所负担的整个单片机应用系统内各部分电路有关;振荡器的起振时间与振荡器频率有关,例如振荡频率为10mhz时,、起振时间约为1ms,振荡频率为1mhz时,起振时间约为10ms。

当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。

如果RST持续为高电平,单片机就处于循环复位状态。

根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。

上电复位要求接通电源后,自动实现复位操作。

常用的上电复位电路如下图3中所示。

电容在上接高电平,电阻在下接地,中间为RST。

图中电容C1和电阻R1对电源十5V来说构成微分电路。

上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用。

图3 上电复位电路单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。

常用的上电或开关复位电路如上图4所示。

上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。

当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。

图4上电或开关复位电路根据实际操作的经验,下面给出这两种复位电路的电容、电阻参考值。

上图3中:Cl=10-30uF,R1=1K。

上图4中:C:=1uF,Rl=lk,R2=10k。

实用上电或开关复位如图5所示,主要功能是要保证可靠复位,不要让干扰信号进入RET端,要能够和外围芯片的复位信号共用。

图5 上电或开关电路2.7 LED灯电路LED(Light-Emitting-Diode中文意思为发光二极管)是一种能够将电能转化为可见光的半导体,它改变了白炽灯钨丝发光与节能灯三基色粉发光的原理,而采用电场发光。

据分析,LED的特点非常明显,寿命长、光效高、无辐射与低功耗。

LED的光谱几乎全部集中于可见光频段,其发光效率可达80~90%。

将LED与普通白炽灯、螺旋节能灯及T5三基色荧光灯进行对比,结果显示:普通白炽灯的光效为12lm/W,寿命小于2000小时,螺旋节能灯的光效为60lm/W,寿命小于8000小时,T5荧光灯则为96lm /W,寿命大约为10000小时,而直径为5毫米的白光LED为20~28lm/W,寿命可大于100000小时。

有人还预测,未来的LED寿命上限将无穷大。

发光二极管串联一个510欧姆的电阻后接在5V的电压上。

LED灯电路接在单片机P1口上。

LED灯阳极接电源,阴极接单片机的I/O口,低电平驱动,只要在单片机相应引脚给出低电平,LED就会发亮。

3程序设计3.1 程序流程图3.2程序设计单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。

软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。

下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。

/////LYG 流水灯///////#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit KS=P3^0;sbit K0=P3^1;sbit K1=P3^2;sbit K2=P3^3;sbit K3=P3^4;sbit K4=P3^5;sbit ZP=P3^6;sbit JP=P3^7;bit a=0;int K;bit aa;uchar shijian=400;uchar code tab0[]={0xff,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};//1灯亮uchar code tab1[]={0x00,0x01,0x05,0x15,0x55,0xff,0x00};//1灯间隔uchar code tab2[]={0x00,0x03,0x06,0x0c,0x18,0x30,0x60,0xc0,0x00};//两个亮交叉uchar code tab3[]={0x00,0x03,0x0c,0x30,0xc0,0xff,0x00};//两个亮独立uchar code tab4[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00,0x80,0x40,0x20,0x10,0 x08,0x04,0x02,0x01,0x00}; //正反uchar code tab5[]={500,2000};void DelayMS(uint x){uchar t;while(x--){for(t=120;t>0;t--);}}key1(){if(KS==0){DelayMS(10);if(KS==0){aa=~aa;}return aa;};}///////////////////key2(){if(K0==0){DelayMS(10);if(K0==0){K=0;}return K;}if(K1==0){DelayMS(10);if(K1==0){K=1;}return K;}if(K2==0){DelayMS(10);if(K2==0){K=2;}return K;}if(K3==0){DelayMS(10);if(K3==0){K=3;}return K;}if(K4==0){DelayMS(10);if(K4==0){K=4;}return K;}}/////////////////////////////key3(){uchar SJ;if(ZP==0){DelayMS(10);if(ZP==0){SJ++;shijian=tab5[SJ];}return shijian,SJ;}////////////////////////////if(JP==0){DelayMS(10);if(JP==0){SJ--;shijian=tab5[SJ];}return shijian,SJ;}}///////////////////////////////void main(){key1();while(aa==1){ key1();if(aa==0)break;key2();key3();if(K==0){uchar I;for(i=0;i<12;i++){P1=~tab0[i];DelayMS(shijian);if(i==12)i=0;}}/////////////////////////////////if(K==1){uchar I;for(i=0;i<7;i++){P1=~tab1[i];DelayMS(400);}}///////////////////if(K==2){uchar I;for(i=0;i<9;i++){P1=~tab2[i];DelayMS(shijian);}}//////////////////////////////////if(K==3){uchar I;for(i=0;i<7;i++){P1=~tab3[i];DelayMS(shijian);}}//////////////////////if(K==4){uchar I;for(i=0;i<20;i++){P1=~tab4[i];DelayMS(shijian);}}}// else// {P1=0xff;}}总结通过在设计期间有许多心得与体会,首先,在专业知识方面,专业课知识学习都是孤立的,没有系统的联系起来,不知道该如何有机地利用。

相关文档
最新文档