单片机技术_按键控制的流水灯
- 格式:ppt
- 大小:2.49 MB
- 文档页数:33
说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。
那个单片机究竟有什么功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^)我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。
一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。
#include<reg51.h> //头文件定义。
或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。
//在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; //定义管脚void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。
因为我们把LED的正通过电阻接至VCC。
P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。
那么这样就能达到了我们预先的要求了。
while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。
如果我们要试着点亮其他的LED,也类似上述语句。
这里就不再讲了。
点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。
我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。
假设我们有8个LED分别接在P1口的8个引脚上。
硬件连接,在P1_1--P1_7上再接7个LED即可。
例程如下:#include<reg51.h>sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1;sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。
按键控制单片机改变流水灯速度/*程序效果:有三个按键,按下其中任意一个流水灯的速度改变*/#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:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化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:流水灯二、 具体操作:1、计数器功能数码管的动态显示。
每按一次K2键计数器加1通过数码管显示出来,计数器可以实现从0计数到9999。
2、流水灯当在计数器模式下的时候按下K3键时程序进入跑马灯模式,8个小灯轮流点亮每次只点亮一个,间隔时间为50ms 。
三、 程序流程图开始 定时器T0 设置初值,启动定时器,打开中断复位 Key2按下 中断关闭 计数器模式 计数器加1 Key3按下 流水灯模式 数码管显示数字加1 跑马灯点亮间隔50ms Key1按下中断打开四、程序#include <reg51.h>typedef unsigned char uint8;typedef unsigned int uint16; //类型定义sbit P2_1 = P2^1;sbit P2_2 = P2^2;sbit P2_3 = P2^3;sbit P2_4 = P2^4; //位声明四个数码管开关sbit Key2 = P3^2;sbit Key3 = P3^3; //位声明2个按键K2和K3sbit Ledk = P2^0 ; //LED 开关void delay(uint16 i); //延时函数声明void refresh (); // 数码管刷新函数声明void liushuideng(); //流水灯函数声明uint8 number[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码管的真值表uint8 out[4] = {0}; // 数组变量uint16 counter=0; //用作计数器的变量uint16 Time_counter=0; //用作定时器的变量void main() //主函数{TMOD = 0x01; //定时器0,工作方式一TH0 = 0xFC;TL0 = 0x18; //定时器初值使每次循环为1msTR0 = 0; //定时器0开始作ET0 = 0; // 定时器中断关EA = 0; // 关中断while(1) //计数器模式{Ledk =1 ; //led开关关out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10]; //十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000]; //千位if (!Key2) //计数器加1{++counter; //自加out[0]=number[counter%10]; //取个位out[1]=number[counter%100/10]; //十位out[2]=number[counter%1000/100]; //百位out[3]=number[counter/1000]; //千位while(!Key2) //等待键盘抬起refresh(); //刷新数码管}refresh(); //刷新数码管if (!Key3) // 进入跑马灯模式liushuideng();}} //主函数结束/*******************延时*************/void delay(uint16 i){uint8 j; // 定义局部变量for(i;i>0;i--) //循环i*240 次for(j=240;j>0;j--);}/************数码管刷新******************/void refresh (){uint8 j;for (j=0;j<4;j++) //四次循环刷新数码管{switch(j){case 0: P2_1=1;P2_2=1;P2_3=1;P2_4=0;break;case 1: P2_1=1;P2_2=1;P2_3=0;P2_4=1;break;case 2: P2_1=1;P2_2=0;P2_3=1;P2_4=1;break;case 3: P2_1=0;P2_2=1;P2_3=1;P2_4=1;break;//每次循环只选中一个数码管default:break;}P0 = out[j]; // 位选,给数码管送值delay (20); //延时消抖}}/*************定时器的中断服务函数**************/void Timer0_Overflow() interrupt 1 //定时器0溢出中断,这个语句1ms执行一次{TH0 = 0xFC;TL0 = 0x18; //每1ms重新赋定时器初值Time_counter++; //计数,看经过了几个1ms}/***********************流水灯子函数****************************/ void liushuideng(){uint8 j = 0 ; //定义局部变量P0 = 0xff; // 小灯全关TR0 = 1; //定时器1开始计时EA = 1; //中断开放ET0 = 1; //定时器0中断开while(1){Ledk = 0 ; //打开LED开关P2 = P2|0x1E; //关掉数码管if(50 == Time_counter) //50个毫秒{P0=~(1<<j++); //控制小灯Time_counter = 0; //清零开始下一次循环定时}if (8==j) //移完8次再重新移{j=0;}}}。
最近有很多学弟来问我流水灯该怎么做,程序怎么写,现在在这里统一说下,很多时候没有时间让你们白跑一趟了,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译码芯片。
郑州科技学院《单片机》课程设计题目单片机控制流水灯学生姓名X X X 专业班级电气工程及其自动化X班学号201XXXX院(系)电气工程学院指导教师X X完成时间201X年XX月XX日目录1设计的目的 (1)2设计的任务与要求 (2)3设计方案与论证 (2)4 元器件介绍 (4)4.1 单片机5 硬件电路设计 (8)6软件设计 (10)7硬件的制作与调试 (12)8总结 (13)参考文献 (14)附录1 总体电路原理图 (15)附录2 实物图 (15)引言基于单片机的LED流水灯的应用十分广泛,由单片机作为的核心控制器,通过按键实现控制功能和数据输入是非常普遍的。
通常在所需按键数量不多时,系统常采用独立式按键。
这种按键的电路配置灵活,软件结构简单。
由于实际应用中,不同系统对按键的要求不同,因此,对按键程序的设计要考虑全面,以便更好地完成按键所设定的功能,简述了该系统中一些重要芯片的基本工作原理,着重论述了硬件线路各个模块的设计思想。
进而熟练掌握相关专业基础知识的综合应用,提高学生的实际动手和设计能力。
本系统是基于AT89C51系列单片机为核心的LED流水灯设计,实现12个LED灯变化方向和速度的可调。
1 设计的目的1、使自己在学习理论知识的同时与实际操作相结合,从而提高自己动手操作的能力。
2、可以培养自己自主学习的能力,自己可以查阅资料,从而提高自己的知识储备。
3、可以提高自己的动手能力,提前为以后走向社会,适应社会而做准备。
4、在自己动手的同时,遇到不懂的可以请教老师,可以查阅资料,也可以通过自己的思考解决问题,这些都可以提高自己对理论知识的理解和对课外知识的扩展,从而提高以后工作的社会竞争力。
5、自己通过自己的努力而完成的作品会有一种巨大的成就感,会让自己更喜欢这门学科,从而以后更加好好学习这门学科。
2 设计的任务与要求1、通过单片机实现对LED灯进行闪烁控制。
2、学会实物的设计和制作。
3、能够自己设计仿真电路。
按键选择控制流水灯效果设计设有一单片机控制系统: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;}}}。
流水灯、蜂鸣器、独立按键一、实验目的1、学习实验系统的基本操作,了解在实验系统中进行程序设计、仿真和调试的操作方法和步骤;2、了解单片机的基本输入、输出功能;3、熟悉Proteus的基本仿真功能;二、实验原理1、LED流水灯的原理即为单个控制LED的亮灭、亮灭,让单个LED灯先亮然后很快灭掉,并在很短的时间里使下一个LED重复这一过程。
这样让一排LED灯依次亮灭后即形成流水灯的效果。
2、在本次实验中把蜂鸣器用扬声器替代,通过控制扬声器工作时间来控制扬声器的发音频率。
3、按键是机械装置,在其闭合的时候会产生震荡,这会让软件产生误判。
为了消除这种影响,就需要对按键进行软件消抖。
消抖原理为两次判断,只要相隔一段时间的两次判断皆为按键已按下,那么这次的判断结果就是可信的,所以用到延时函数。
三、实验步骤;1、硬件仿真。
先分析实验所需的硬件条件,然后在Proteus上连接好硬件电路,注意连接好必要的电阻等。
2、软件编写。
在Keil或其它的单片机编程软件上用C语言编写出构思好的软件。
3、将程序编译为HEX文件,然后烧录到仿真单片机中,进行仿真。
四、实验结果及分析1、LED流水灯的硬件仿真电路图:实验中加入了循环处理,所以该流水灯可以顺着亮一遍再逆着亮一遍,如此反复。
并且改变流水灯亮灭的时间间隔还可以得到各种不同的效果。
2、蜂鸣器驱动的硬件仿真电路图:这里用扬声器代替蜂鸣器。
以单片机产生的一方波脉冲作为扬声器的电信号输入,用不同频率的方波信号产生不同音调的声音。
3、;4、独立按键延时去抖的硬件仿真电路图:用一个按键控制LED灯的亮灭,在软件中对按键进行消抖。
五、体会这一次的单片机实验让我感到自己对Proteus的运用还欠缺许多,基本可以说是一窍不通。
所以,这次实验以后还要花大量的时间在Proteus的学习上,希望可以从中学习到很多的东西。
还有在编程方面,很多的编程思想都还不成熟,想到的方法都有很多欠缺的地方,和书上所给的例子差距还很大。
一、实训目的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-江苏安全技术学院实习总结报告实习单位江苏安全技术职业学院实习起止时间 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 单片机为控制核心。