单片机控制-闪烁灯
- 格式:doc
- 大小:598.68 KB
- 文档页数:50
单片机闪烁灯跑马灯控制课程设计单片机闪烁灯跑马灯控制课程设计报告一、引言本课程设计旨在通过学习和实践单片机(MCU)编程,实现闪烁灯和跑马灯的控制。
我们将使用嵌入式C语言编程,通过了解单片机的内部结构、电路设计和编程流程,深入理解单片机的工作原理和应用。
二、系统硬件设计本课程设计选用51单片机作为主控芯片,外接8个LED灯和1个按键。
硬件电路设计如下:1.单片机:采用AT89C51,该芯片具有32K字节的Flash存储器,256字节的RAM,以及两个16位定时器/计数器。
2.LED灯:采用普通LED灯珠,与单片机引脚相连,通过编程控制LED灯的亮灭状态。
3.按键:采用机械按键,与单片机的外部中断0(EX0)相连,用于触发闪烁灯和跑马灯的切换。
三、系统软件设计1.闪烁灯模式:在此模式下,8个LED灯将按照一定的频率交替闪烁。
我们可以通过计时器和GPIO口控制LED灯的亮灭状态。
void blink_LED(void) {int i;while(1) {for(i = 0; i < 8; i++) {P1_0 = ~P1_0; // 翻转LED状态delay(500); // 延时,控制闪烁频率}}}2.跑马灯模式:在此模式下,8个LED灯将按照一定的顺序依次点亮。
我们可以通过计时器和GPIO口控制LED灯的亮灭状态。
void marquee_LED(void) {int i;int led_state[8] = {0, 1, 0, 1, 0, 1, 0, 1}; // LED状态数组,初始为交替亮灭while(1) {for(i = 0; i < 8; i++) {P1_0 = led_state[i]; // 设置LED状态delay(50); // 延时,控制跑马灯速度}}}四、按键处理程序我们通过外部中断0(EX0)接收按键信号,当按键按下时,将切换闪烁灯和跑马灯模式。
按键处理程序如下:void EX0_ISR(void) interrupt 0 { // EX0中断服务程序if (key_flag) { // 如果按键已经被按下过if (key_value == 0) { // 如果按键状态为低电平marquee_LED(); // 切换到跑马灯模式key_flag = 0; // 标记按键状态已经改变} else { // 如果按键状态为高电平blink_LED(); // 切换到闪烁灯模式key_flag = 0; // 标记按键状态已经改变}key_value = ~key_value; // 翻转按键状态值} else { // 如果按键还没有被按下过key_value = ~key_value; // 翻转按键状态值if (key_value == 0) { // 如果按键状态为低电平blink_LED(); // 切换到闪烁灯模式key_flag = 1; // 标记按键状态已经改变} else { // 如果按键状态为高电平marquee_LED(); // 切换到跑马灯模式key_flag = 1; // 标记按键状态已经改变}}}。
单片机控制 LED灯的闪烁变化李同学摘要:介绍了一种新型的LED彩灯控制系统的设计方法,以AT90S51单片机作为主控核心,与按键、显示器等较少的辅助硬件电路相结合,利用软件实现对LED彩灯进行控制。
本系统具有体积小、硬件少、电路结构简单及容易操作等优点。
关键词:LED彩灯 AT90s51 单片机随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。
LED彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建筑物已经成为一种时尚。
但目前市场上各式样的LED彩灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态参数。
这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。
此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。
因此有必要对现有的彩灯控制器进行改进。
一、设计思想LED发光灯可以分为单色发光灯、双色发光灯、三色发光灯、面发光灯、闪烁发光灯、电压型发光灯等多种类型。
按照发光灯强度又可以分为普通亮度发光灯、高亮度发光灯、超高亮度发光灯等。
这种单个的发光灯适宜用做指示灯,如电源指示、电路状态指示灯,进而对能够转变成电信号的各种物理量进行指示。
也可以用多个LED 发光灯组成固定的字符或图形进行显示,如大型剧场会堂的出入口及洗手间的显示。
和很多应用术语一样,LED图文显示屏并没有一个公认的严格的定义,一般把显示图形和/或文字的LED显示屏称为图文屏。
这里所说的图形,是指由单一亮度线条组成的任意图形,以便于不同亮度(灰度)点阵组成的图像相区别。
图文显示屏的主要特征是只控制LED点阵中各发光器件的通断(发光或熄灭),而不控制LED的发光强弱。
LED图文显示屏的外观可以做成条形,叫做条形图文显示屏(简称条屏),也可以按一定高度比例做成矩形的平面图文显示屏。
单片机led灯闪烁实验报告1. 实验目的:掌握单片机控制LED灯闪烁的方法,了解单片机数字输入输出端口的使用。
2. 实验材料:STM32F103C8T6开发板、杜邦线、LED灯3. 实验原理:在单片机中,数字输入输出口(IO口)是实现数字输入输出的重要接口。
在单片机中,IO口除了可以做通用输入输出口以外,还有很多专用功能口,如SPI 口、I2C口等。
单片机控制LED灯闪烁的原理就是利用IO口的输出功能,通过改变输出口的电平信号来控制LED的亮灭。
当IO口输出高电平时,控制LED为亮状态;当IO 口输出低电平时,控制LED为灭状态。
4. 实验步骤:(1)将LED灯的正极连接到单片机的GPB5号引脚(即B端口的5号引脚),将LED的负极连接到地。
(2)在Keil中新建工程,并配置IO口为输出口。
(3)编写程序,利用GPIO_WriteBit函数对GPB5号引脚进行高低电平控制,实现LED灯的闪烁。
(4)将程序下载到开发板中,观察LED灯的闪烁情况。
5. 实验代码:#include "stm32f10x.h"void Delay(uint32_t nCount) {for(; nCount != 0; nCount);}int main(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);while(1) {GPIO_SetBits(GPIOB, GPIO_Pin_5);Delay(0xFFFFF);GPIO_ResetBits(GPIOB, GPIO_Pin_5);Delay(0xFFFFF);}}6. 实验结果:当程序下载到开发板中时,LED灯会以一定频率闪烁。
单片机闪烁灯实验报告引言:单片机是一种集成电路,有着微处理器、存储器、计时器、通信端口等组件,可以按照预定程序进行运算控制。
在实际应用中,单片机的应用十分广泛,其中包括了各种各样的电子产品。
本实验以单片机的闪烁灯实验为例,介绍单片机的基本工作原理和应用。
一、实验介绍:本次实验的主要目的是通过调试单片机的程序,控制单片机的输出口,实现闪烁灯的功能。
同时,本实验还能让学生了解单片机的基本工作原理,熟悉单片机的编程语言和编程方法。
二、实验原理:单片机是一种集成电路,包含了微处理器、存储器、计时器、通信端口等组件,可以按照预定程序进行运算控制。
单片机的工作原理如下:1、单片机的处理器从存储器中读取指令,然后运行指令,执行相应的操作。
2、单片机的计时器用于产生精确的计时信号,以便处理器控制各种外设的时间。
3、单片机的输入和输出口用于与其他设备交换数据,包括传感器、执行器、显示器等。
本实验的闪烁灯功能,是通过控制单片机的输出口完成的。
单片机的输出口分为高电平和低电平两种状态,通过编写相应的程序,可以实现输出口的状态控制。
三、实验内容:本实验需要用到的材料包括:单片机、LED灯、电阻、面包板、电源等。
1、将单片机连接至电源,打开电源开关,待单片机启动后,将其连接至电路。
2、将LED灯连接至单片机的输出口,同时,将电阻连接至LED灯的一个端口,另一端口连接至地。
3、编写程序,使单片机控制输出口的状态,实现LED灯的闪烁。
四、实验步骤:1、准备工作:将单片机连接至电源并启动,将LED灯和电阻连接至电路。
2、编写程序:使用软件编辑器编写控制单片机输出口的程序。
3、调试程序:使用调试工具检查程序的正确性。
4、运行程序:将程序下载至单片机,观察LED灯的闪烁情况。
五、实验结果:经过不断的调试和修改,最终成功实现了LED灯的闪烁功能。
通过观察LED灯的闪烁状态,我们可以看到单片机的输出口不断地切换状态,实现了LED灯的闪烁。
单片机交替闪烁灯代码单片机在电子设备中起着至关重要的作用,它能够控制各种不同的电路和外部设备。
其中,控制LED灯进行交替闪烁是单片机的常见应用之一。
本文将介绍一种单片机交替闪烁灯的代码,并给出相应的格式。
该代码使用C语言编写,基于Keil C51编译器,并使用STC89C52单片机进行控制。
```c#include <reg52.h>// 定义延时函数void delay(unsigned int t) {while(t--);}// 主函数void main(){// 设置端口P1和P2为输出口P1 = 0x00;P2 = 0x00;// 无限循环while(1) {// P1灭,P2亮P1 = 0x00;P2 = 0xFF;// 延时delay(50000);// P1亮,P2灭P1 = 0xFF;P2 = 0x00;// 延时delay(50000);}}```根据上述代码,我们可以看到,交替闪烁灯的实现非常简单。
在主函数中,我们首先将单片机的P1口和P2口设为输出。
然后,在一个无限循环中,我们将P1口置为低电平(灯灭),P2口置为高电平(灯亮),并延时一段时间。
接下来,我们将P1口置为高电平(灯亮),P2口置为低电平(灯灭),再次延时一段时间。
通过循环这两个步骤,就可以实现交替闪烁效果。
这段代码使用了一个延时函数来控制灯的闪烁频率。
在delay函数中,我们使用了一个循环来模拟延时。
延时时间的长短,可以通过调整循环次数来实现。
50000这个值只是一个示例,您可以根据实际需要进行调整。
在实际应用中,单片机交替闪烁灯可以用于各种情景,例如警示灯、信号灯等。
无论是在家庭电器中还是在工业设备中,这种闪烁效果都能够起到引人注目的作用。
以上是单片机交替闪烁灯的代码,您可以根据实际需要进行修改和扩展。
单片机的应用非常广泛,掌握它的原理和编程能够为您在电子领域的学习和工作带来很大的帮助。
祝您在单片机的探索中取得成功!。
单片机发光管闪烁和流水灯的操作1、闪烁:尝试让第一个发光管闪烁程序如下:#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{unsigned int i; //定义一个int型变量while(1){i=50000; //变量赋初值为50000led1=0; //点亮灯while(i--); //延时i=50000;led1=1; //熄灭灯while(i--);}}2、流水灯程序如下:#include<reg52.h> //52单片机头文件void main() //主函数{unsigned int i; //定义一个int型变量while(1){i=50000; //变量赋初值为50000P1=0xfe; //点亮第一个灯while(i--); //延时i=50000; //变量赋初值为50000P1=0xfd; //点亮第二个灯while(i--); //延时i=50000; //变量赋初值为50000P1=0xfb; //点亮第三个灯while(i--); //延时i=50000; //变量赋初值为50000P1=0xf7; //点亮第四个灯while(i--); //延时i=50000; //变量赋初值为50000P1=0xef; //点亮第五个灯while(i--); //延时i=50000; //变量赋初值为50000P1=0xdf; //点亮第六个灯while(i--); //延时i=50000; //变量赋初值为50000P1=0xbf; //点亮第七个灯while(i--); //延时i=50000; //变量赋初值为50000P1=0x7f; //点亮第八个灯while(i--); //延时}}。
运用AT89C51使LED 灯闪烁1. 概述本文档将介绍如何使用AT89C51微控制器来控制LED灯的闪烁。
AT89C51是一种高性能、低功耗的8位单片机,具备丰富的GPIO(通用输入输出)引脚,适合用于各种嵌入式应用中。
2. 硬件准备在开始编程之前,我们需要准备以下硬件设备:•AT89C51单片机开发板•LED灯•220欧姆电阻(用于限流)3. 连接电路在连接电路之前,确保开发板和所需的元件处于关机状态。
按照以下步骤连接电路:1.连接LED灯的长脚(阳极)到AT89C51的P1.0引脚。
2.连接LED灯的短脚(阴极)通过220欧姆电阻接地。
确保连接正确后,即可准备开始编程。
4. 编程以下是使用AT89C51使LED灯闪烁的示例程序:#include <REG51.h>#define LED P1_0 // 定义LED控制引脚为P1.0void delay(int milliseconds){int i, j;for (i = 0; i < milliseconds; i++)for (j = 0; j < 120; j++);}void main(){while (1){LED = 1; // 将LED引脚置高,点亮LEDdelay(1000); // 延时1秒LED = 0; // 将LED引脚置低,熄灭LEDdelay(1000); // 延时1秒}}在上面的示例代码中,我们使用P1.0引脚来控制LED灯的开关。
程序使用了一个简单的延时函数delay来实现LED灯的闪烁效果。
当LED引脚置高时,LED 灯亮起;当LED引脚置低时,LED灯熄灭。
通过在LED灯亮起和熄灭之间加入适当的延时,我们可以实现LED灯的闪烁效果。
5. 下载程序在编程完成后,我们需要将程序下载到AT89C51单片机中。
以下是下载程序的步骤:1.将AT89C51单片机开发板连接到电脑的USB口或串口上。
单片机实验--实验报告-LED灯闪烁实验
为了深入了解单片机,本次实验我们选取LED灯闪烁实验,研究单片机控制LED闪烁
的原理。
经过这次实验,初步了解了单片机实验的基本设备及操作步骤,掌握了单片机语
言操控LED进行简单应用。
实验做法如下:
一、设计流程:
1.实验目的
本次实验的目的是了解单片机的原理,掌握单片机语言的基本使用方法,编制可控制LED灯闪烁的程序,完成LED灯闪烁的控制。
2.实验设备
实验设备主要包括:单片机51系列主控板,51单片机芯片,备有LED等硬件。
3.原理描述
本次实验主要是利用单片机来实现LED灯发出的闪烁效果,将单片机的P0作为一个
数据口出口实现闪烁的控制,这里使用一个定时器定时,通过程序实现数据口的翻转,可
以实现LED的闪烁效果。
二、实验步骤:
1.硬件的准备及接线
准备所需要的硬件,将单片机的芯片插入51系列主控板,将LED灯接线到主控板上。
2.软件编译
打开Keil软件,创建一个单片机工程文件,然后调用单片机库函数,建立用于控制LED灯闪烁的相关函数。
3.程序下载
编译、链接生成hex文件,将hex文件下载到单片机芯片上,运行程序(此处使用51编程器),完成LED的闪烁控制。
4.程序调试
完成程序的编写、下载即可实现LED的闪烁,对程序做个完整的测试,保证程序的可
靠性。
闪烁LED灯的设计本设计的闪烁小灯控制器,可使小灯轮流点亮、逐个点亮、间隔闪亮。
如果要控制交流彩灯,可在P1端口加接继电器或可控硅接口电路。
本设计可应用在广告彩灯控制器和舞台灯光控制器等领域。
一、系统硬件电路的设计图1为闪烁小灯控制器的电路原理图,其中:单片机采用AT89C2051,P1口作LED发光管输出控制用,P3.0-P3.2口为闪烁方式控制开关K1、K2、K3按键接口,P3.3口的按键作备用,限流电阻为510Ω,发光管工作电流约10mA,采用12MHz晶振。
图1 闪烁小灯电路原理图二、系统主要程序的设计1、主程序通过扫描P3.0-P3.2口,判断是否有按键按下,然后在20H内存单元的低3位的对应位置1标志,确定应执行的闪烁功能。
当20H.0为1时,发光管轮流点亮;当20H.1为1时,发光管逐点点亮;当20H.2为1时,发光管间隔闪亮。
在主程序对20H的低3位进行位值判定后,转入相应的闪烁控制程序。
上电初始化时,对20H的最低位置1,系统进入轮流点亮方式。
主程序流程图如图2所示。
2、键扫描子程序因按键较少,采用直接端口扫描键开关,用软件延时消抖确认后,对20H 内存单元相应的位置1,并把其余位清0。
图2 主程序流程图3、闪烁控制程序闪烁控制程序用来控制P1口的发光管发光变化方式,其中:执行功能程序0(FUN0)时的P1口输出值变化为11111110→延时→11111101→延时→11111011→延时→11110111→延时→11101111→延时→11011111→延时→10111111→延时→01111111→延时→结束转主程序。
执行功能程序1(FUN1)时的P1口输出变化为11111110→延时→11111100→延时→11111000→延时→11110000→延时→11100000→延时→11000000→延时→10000000→延时→00000000→延时→结束转主程序。
执行功能程序2(FUN2)时的P1口输出变化为10101010→延时→01010101→延时→结束转主程序。
闪烁灯跑马灯控制系统河南工院院系:电气工程系班级:电气0903学号:04010904XX姓名:WLM指导教师:赵阳第1章概述 (3)1.1设计的目的及意义 (3)1.2单片机的概述与应用 (3)第2章设计原理 (4)2.1设计要求与基本思路 (4)2.2设计方案选择 (5)2.3设计框图 (5)第3章硬件电路设计 (7)3.1时钟电路 (7)3.2扩展电路 (8)第4章程序设计 (9)4.1 程序设计思路与流程图 (9)4.2程序清单与代码 (11)4.3程序调试 (12)第5章原件明细表 (13)总结 (14)参考文献 (15)第1章概论1.1设计的目的与意义当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
竞争日益剧烈的今天,当代大学生不仅需要扎实的理论知识,还需要过硬的动手能力。
作为自动化专业的学生,更应该熟练掌握各种电路编辑软件,作为专业必需的技能更要及时地对这一类软件的更新版本进行学习,其日趋强大的功能是对我们专业技能的补充。
闪烁灯控制系统是利用8051单片机的P1控制的8个发光二极管。
可实现从右到左闪烁一次,再从左到右闪烁一次,每次亮灭1秒,如此循环,紧急情况下,控制P3.1进行报警2S停止。
闪烁灯控制系统是简易的单片机控制系统,作为课程设计课题,通过实际程序设计和调试,逐步掌握块化程序设计方法和调试技术,通过课程设计,掌握一单片机核心的电路设计的基本方法和技术,了解有关电路参数的计算方法,通过完成一个包括电路设计和程序设计开发的完整过程,了解开发单片机应用系统的全过程,通过本次设计对单片机应用上有一个初步的了解,增强自我的动手、动脑能力,以及发现问题,解决问题,总计经验教训的能力,为以后走向工作岗位,以及更高更远的发展打下坚实的基础1.2单片机概述与应用单片机是将CPU、存储器、定时/计数器以及I/O接口等主要部件集成在一块芯片上的微型计算机。
一、实验目的本次实训旨在通过实践操作,让学生掌握单片机的基本原理,了解单片机的I/O端口的使用方法,并学会编写简单的程序来控制LED灯的闪烁。
通过本次实训,使学生能够将理论知识与实际操作相结合,提高学生的动手能力和实际应用能力。
二、实验器材1. 单片机开发板:AT89C51单片机核心板2. LED灯:红色LED灯1个3. 电阻:220Ω电阻1个4. 连接线:杜邦线若干5. 计算机及编程软件:Keil uVision5三、实验原理单片机(Microcontroller Unit,MCU)是一种具有中央处理单元(CPU)、存储器(RAM、ROM)和I/O端口的集成电路。
在本实验中,我们使用AT89C51单片机作为实验平台,通过编写程序控制LED灯的闪烁。
实验原理如下:1. 当单片机的I/O端口输出高电平时,连接在该端口的LED灯会亮;当输出低电平时,LED灯会灭。
2. 通过在单片机程序中设置定时器,实现定时中断,使LED灯在亮和灭之间交替闪烁。
四、实验步骤1. 连接电路:将LED灯的正极连接到单片机的P1.0端口,负极通过220Ω电阻接地。
2. 编写程序:使用Keil uVision5软件编写程序,实现LED灯的闪烁。
3. 烧录程序:将编写好的程序烧录到单片机中。
4. 运行实验:上电后,观察LED灯的闪烁情况。
五、实验程序```c#include <reg51.h>// 定义定时器0的初值,用于产生1秒的定时中断#define TIMER0_INIT_VALUE 65536 - 50000void Timer0_Init() {TMOD &= 0xF0; // 设置定时器0为模式1TMOD |= 0x01; // 设置定时器0为16位定时器TH0 = (unsigned char)(TIMER0_INIT_VALUE >> 8); // 设置定时器0的初值高8位TL0 = (unsigned char)(TIMER0_INIT_VALUE & 0xFF); // 设置定时器0的初值低8位ET0 = 1; // 使能定时器0中断EA = 1; // 开启全局中断}// 定时器0中断服务程序void Timer0_ISR(void) interrupt 1 {TH0 = (unsigned char)(TIMER0_INIT_VALUE >> 8); // 重新加载定时器0的初值高8位TL0 = (unsigned char)(TIMER0_INIT_VALUE & 0xFF); // 重新加载定时器0的初值低8位P1 ^= 0x01; // 切换P1.0端口的电平,实现LED灯的闪烁}void main() {Timer0_Init(); // 初始化定时器0while (1) {// 主循环,等待定时器0中断}}```六、实验结果与分析1. 实验结果:按照实验步骤进行操作后,LED灯能够按照设定的频率闪烁。
单片机控制-闪烁灯1.实验任务如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2.电路原理图图4.1.13.系统板上硬件连线把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#20 2个 2D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498DJNZ R6,D1 2个2×20=4010002因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图如图4.1.2所示图4.1.26.汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H>sbit L1=P1^0;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void) {while(1){L1=0;delay02s();L1=1;delay02s();}2.模拟开关灯1.实验任务如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
2.电路原理图图4.2.13.系统板上硬件连线(1).把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上;(2).把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;4.程序设计内容(1).开关状态的检测过程单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。
单片机可以采用JB BIT,REL或者是JNB BIT,REL指令来完成对开关状态的检测即可。
(2).输出控制如图3所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图图4.2.26.汇编源程序 ORG 00HSTART: JB P3.0,LIGCLR P1.0SJMP STARTLIG: SETB P1.0SJMP STARTEND7. C语言源程序#include <AT89X51.H>sbit K1=P3^0;sbit L1=P1^0;void main(void){while(1){if(K1==0){L1=0; //灯亮}else{L1=1; //灯灭}}}3.多路开关状态指示1.实验任务如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。
(开关闭合,对应的灯亮,开关断开,对应的灯灭)。
2.电路原理图图4.3.13.系统板上硬件连线(1.把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上;(2.把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上;4.程序设计内容(1.开关状态检测对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。
(2.输出控制根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。
5.程序框图读P1口数据到A CC中A CC内容右移4次A CC内容与F0H相或A CC内容送入P1口<![endif]-->图4.3.26.方法一(汇编源程序)ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AXOR A,#0F0HMOV P1,ASJMP STARTEND7.方法一(C语言源程序)#include <AT89X51.H> unsigned char temp;void main(void){while(1){temp=P1>>4;temp=temp | 0xf0;P1=temp;}}8.方法二(汇编源程序)ORG 00HSTART: JB P1.4,NEXT1 CLR P1.0SJMP NEX1NEXT1: SETB P1.0NEX1: JB P1.5,NEXT2CLR P1.1SJMP NEX2NEXT2: SETB P1.1NEX2: JB P1.6,NEXT3CLR P1.2SJMP NEX3NEXT3: SETB P1.2NEX3: JB P1.7,NEXT4CLR P1.3SJMP NEX4NEXT4: SETB P1.3NEX4: SJMP STARTEND9.方法二(C语言源程序)#include <AT89X51.H>void main(void) {while(1){if(P1_4==0) {P1_0=0;}else{P1_0=1;}if(P1_5==0) {P1_1=0;}else{P1_1=1;}if(P1_6==0) {P1_2=0;}else{P1_2=1;}if(P1_7==0) {P1_3=0;}else{P1_3=1;}}}4.广告灯的左移右移1.实验任务做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。
2.电路原理图图4.4.13.系统板上硬件连线把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。
4.程序设计内容我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。
每次送出的数据是不同,具体的数据如下表1所示P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 说明L8 L7 L6 L5 L4 L3 L2 L11 1 1 1 1 1 1 0 L1亮1 1 1 1 1 1 0 1 L2亮1 1 1 1 1 0 1 1 L3亮1 1 1 1 0 1 1 1 L4亮1 1 1 0 1 1 1 1 L5亮1 1 0 1 1 1 1 1 L6亮1 0 1 1 1 1 1 1 L7亮0 1 1 1 1 1 1 1 L8亮表15.程序框图图4.4.26.汇编源程序ORG 0START: MOV R2,#8MOV A,#0FEHSETB CLOOP: MOV P1,ALCALL DELAYRLC ADJNZ R2,LOOPMOV R2,#8LOOP1: MOV P1,A LCALL DELAYRRC ADJNZ R2,LOOP1LJMP STARTDELAY: MOV R5,#20 ; D1: MOV R6,#20D2: MOV R7,#248 DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H> unsigned char i; unsigned char temp; unsigned char a,b;void delay(void) {unsigned char m,n,s; for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--); }void main(void){while(1){temp=0xfe;P1=temp;delay();for(i=1;i<8;i++) {a=temp<<i;b=temp>>(8-i);P1=a|b;delay();}for(i=1;i<8;i++) {a=temp>>i;b=temp<<(8-i); P1=a|b;delay();}}}5.广告灯(利用取表方式)1.实验任务利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。