1单片机并口简单应用(流水灯)
单片机控制左右循环的流水灯设计
单片机控制左右循环的流水灯设计单片机是一种微型计算机芯片,可以用于控制和管理各种电子设备。
流水灯是一种经典的电子元件,通过依次点亮或熄灭一组LED灯来形成流动效果。
本文将设计一个使用单片机控制的左右循环流水灯。
设计思路:1.硬件设计:a.先准备一个单片机开发板、一组LED灯和与LED灯串联的电阻。
b.将LED灯按照循序连接,连接方式可以为并联或串联。
c.通过引脚和外部电路将LED灯与单片机的IO口相连。
每个LED灯与一个IO口相连,并且通过电阻限流。
2.软件设计:a.在单片机上编写控制流水灯的程序。
这可以使用C语言或汇编语言进行编写。
b.程序主要通过循环结构来实现流水灯的效果。
编写一个循环函数,用于控制LED灯的点亮和熄灭。
c.在循环函数中,通过控制IO口输出高电平或低电平来控制LED灯的亮灭。
每次循环,根据需要逐个点亮或熄灭LED灯。
d.为了实现左右循环的效果,可以通过改变点亮或熄灭的顺序来改变流水灯的方向。
可以使用一个变量来控制点亮和熄灭的顺序,每次循环后改变该变量的值。
示例代码:以下是一个使用C语言编写的简单示例代码,来控制左右循环流水灯。
```c#include <reg52.h>//定义LED灯使用的IO口sbit LED1 = P1^0;sbit LED2 = P1^1;sbit LED3 = P1^2;sbit LED4 = P1^3;//控制流水灯循环void lightFlowint i;int direction = 1; // 控制流水灯的方向,1表示向右,-1表示向左//流水灯循环while(1)//控制LED灯的点亮和熄灭LED1=0;LED2=1;LED3=1;LED1=1;LED2=0;LED3=1;LED4=1;LED1=1;LED2=1;LED3=0;LED4=1;LED1=1;LED2=1;LED3=1;LED4=0;//根据方向改变控制顺序if(direction == 1)//向右direction = -1;}elsedirection = 1;}}void mainlightFlow(;```这个示例代码中,使用P1口上的4个IO口来控制4个LED灯的点亮和熄灭。
单片机的应用(1)流水灯
MOV TH1,A
TEST0: JB P32,TEST0 ;检测是否到a点 SETB TR0 ;到a点,TR0 = 1,做好取计时值准备。
T1计数 1
INT 1
解:
复习GATE的用法: GATE = 0时,TRi = 1,即可启动Ti定时 / 计数 GATE = 1时,TRi = 1,且 INTi =1,才启动定时 / 计数。
ORG 0000H
LJMP MAIN ORG 2000H
MAIN:MOV TMOD,#99H ;T0、T1均工作在定时,
ORG 0000H LJMP MAIN
ORG 000BH LJMP INSE1 ORG 1000H MAIN: MOV SP,#60H MOV TL0,#0CH MOV TH0,#0F0H MOV TMOD,#00H
SETB TR0
SETB ET0 SETB EA
SJMP $
………
INSE1: MOV TL0,#0CH MOV TH0,#0F0H CPL P10 RETI
小结:1、MCS-51单片机内有几个定时计数器?
如何计数? 2、T0、T1有几种工作方式? 3、编程应用前要事先确定的参数有几个?
定时 / 计数器的应用
复习:
TMOD TCON
GATE C/ T TF1 TR1 M1 TF0 M0 TR0 GATE C / T IE1 IT1 M1 IE0 M0 IT0
T0定时/计数,而T1停止计数,但可作波特率发生器。T0分成两独立定时/计数 器TL0和TH0。
C51单片机实现呼吸灯和花样流水灯程序
C51单⽚机实现呼吸灯和花样流⽔灯程序1.⽤C51单⽚机实现花样流⽔灯,代码如下:#include <reg52.h>#define LED_A P1 //led灯所⽤的接⼝,是哪个⼝就写P⼏void delayms(){unsigned char x = 0; unsigned char i;unsigned char y = 0;while(y < 0.001) //定义led灯的切换的延时时间,越⼩越快。
{ //(y < 0.001);(x<100);(i<100)都可以修改x = 0;while(x<100){i = 0;while(i<100){i++;}x++;}y++;}}#define LED_NUM 8 //定义led灯的数量,可快速实现不同⽤途的修改;void main(){unsigned char k;unsigned char j;unsigned char LED_ALL[] = {0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //led灯亮灭的⼗六进制数组;unsigned char LED_ALL_2[] = {0XFC,0XF3,0XCF,0X3F}; while(1) { for(k=0;k<3;k++) //第⼀个for实现奇偶灯交叉闪烁三次,想闪烁⼏次就修改(K<3)中的数值; { LED_A = 0xAA; delayms(); LED_A = 0x55; delayms(); } for(k=3;k>0;k--) //实现⼀个流⽔灯左右三次(从左到右再从右到左算⼀次); { for(j=0;j<LED_NUM;j++) { LED_A = LED_ALL[j]; delayms(); } for(j=6;j>0;j--) { LED_A = LED_ALL[j]; delayms(); } } for(k=0;k<3;k++) //实现前四个灯亮后四个灯灭,交叉闪烁3次,修改次数同上; { LED_A = 0xf0; delayms(); LED_A = 0xf; delayms(); } for(k=3;k>0;k--) //实现两个灯依次流⽔3次; { for(j=0;j<4;j++) { LED_A = LED_ALL_2[j]; delayms(); } for(j=2;j>0;j--) { LED_A = LED_ALL_2[j]; delayms(); } } }}2.实现第⼀个灯呼吸,由暗变亮,再由亮变暗,程序如下;#include <reg52.h>sbit LED1 = P3^0;void delay(unsigned int a) //定义⼀个延时函数{ while(--a);}void main(){ unsigned int t,circle=800; //定义变量,circle=800为led灯呼吸的间隔长短,数值越⼩,间隔越短。
1单片机并口简单应用流水灯
1单片机并口简单应用(流水灯)试验1 单片机并口简单应用(流水灯)实验目的1、了解单片机C语言程序的基本结构2、了解单片机C语言程序的设计和调试方法3、掌握顺序控制程序的简单编程4、熟悉51单片机的端口使用实验仪器单片机开发试验仪、稳压电源、计算机实验原理1、硬件电路如图1所示,流水灯硬件电路由发光二极管、单片机并口(P0)、限流电阻等组成。
发光二极管连接成共阳极结构。
发光二极管点亮的条件是:阳极接高电平、各阴极接低电平。
因此,二极管公共端阳极就接成高电平,然后再按一定规则从P0口输出数据,发光二极管就会点亮。
图1 流水灯电路图2、程序流程图如下。
开实验内容:1、开发板接线图2、开发环境设置打开keil软件,版本μ Vision2 ,μvision3,μvision4 都一样,在这里用μvision4版本演示,打开之后如下图,有的时候会默认打开上次使用的工程,单击Project 菜单,选择 Close Project 关闭了默认打开的工程,显示下图界面:我们要建立新的工程,选择Project→ newμvision projiect…选择工程要保存的路径,输入工程文件名,如图点击保存后会弹出一个对话框,要求用户选择单片机型号,可以根据用户使用的单片机来选择,我们使用的STC90单片机是兼容51内核的,Keil C51 几乎支持所有的51内核单片机,51内核具有通用型,如果程序用的资源不是太复杂,我们可以选择任意一款51单片机内核就行。
例程以添加Atmel 的AT89C51来说明。
如图,然后,单击确定(OK)。
功能描述如果出现下面的界面:单击是就可以,意思是将单片机的启动代码添加到工程,我们不用修改。
到目前我们还没建立一个完整的工程,只是有工程的名字,框架,工程中还没有任何文件代码,(除了启动代码,有的keil 版本不显示启动代码),接下来我们添加文件及代码。
单击菜单File→New选项,或者单击界面上的快捷图标,新建文件串口如下。
单片机的应用流水灯PPT
单片机流水灯采用低功耗设计 ,能够有效地降低能源消耗, 同时LED灯的使用寿命长,减 少了废弃物对环境的影响。
舞台灯光效果
舞台灯光效果
单片机流水灯可以用于舞台灯光 效果的设计,通过控制LED灯的 亮灭和颜色变化,营造出绚丽多
彩的舞台氛围。
颜色变化
通过单片机编程控制LED灯的颜色 变化,可以实现多种颜色的交替变 换,创造出梦幻般的舞台效果。
同时,单片机也具有丰富的外设接口 和强大的扩展能力,可以方便地与其 他设备进行连接和控制。
03
单片机控制流水灯的实现
硬件连接
确定单片机型号
根据项目需求选择合适的单片机型号,如常用的51 单片机、STM32等。
流水灯电路设计
根据单片机IO口的数量和项目需求,设计出合适的 流水灯电路,包括LED灯的连接方式、限流电阻的选 择等。
调试与测试
01
02
03
04
硬件调试
检查硬件连接是否正确,确保 电源、地线、信号线等连接无 误。
软件调试
通过仿真器或烧录器将程序代 码烧录到单片机中,进行软件 调试,检查程序逻辑和运行状 态是否正常。
功能测试
对流水灯进行功能测试,包括 单向流水、双向流水、闪烁等 功能的测试,确保满足项目需 求。
性能测试
详细描述
单片机的应用领域非常广泛,在工业控制领域中,单片机可以用于实现自动化控制和数 据采集;在智能家居领域中,单片机可以用于实现智能照明、智能安防等;在智能仪表 领域中,单片机可以用于实现智能化测量和控制;在消费电子领域中,单片机可以用于
实现各种智能化功能和人机交互。
02
流水灯简介
单片机的定义
智能控制
通过单片机编程,可以实现交通信号 灯的智能控制,根据交通流量和车流 情况自动调整信号灯的亮灭顺序和时 间间隔,提高交通效率。
手把手教你单片机流水灯实验
手把手教你单片机流水灯实验(详解)每当夜幕降临,我们可以看到大街各式各样广告牌上漂亮的霓虹灯,看起来令人赏心悦目,为夜幕中的城市增添了不少亮丽色彩。
其实这些霓虹灯的工作原理和单片机流水灯是一样的,只不过霓虹灯的花样更多,看起来更漂亮一些。
这一课我们就结合S51增强型单片机实验板、ISP 编程器来手把手教你详细学习单片机的流水灯实验。
首先介绍实验的硬件设备:S51增强型单片机实验板+ISP编程器图1:S51增强型单片机实验板图2:ISP编程器套件S51增强型单片机实验板上有8个高亮度发光二极管(见图1所示),可以用来做单片机流水灯、跑马灯。
等实验,电路原理图见下图3。
图3从原理图可以看出,如果我们想让接在P1.0口的LED1亮起来,那么我们只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平就可以;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭方法方法同LED1。
因此,要实现流水灯功能,我们只要将LED2~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。
实现8个LED流水灯程序用中文表示为:P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。
从上面中文表示看来实现单片机流水灯很简单,但是我们不能说P1.0你变低,它就变低了。
因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”机器代码。
我们又怎样来使单片机按我们的意思去工作呢?为了让单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。
今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译” 成单片机所需的二进制代码,然后交给单片机去执行。
实训报告单片机流水灯
一、实验目的1. 熟悉单片机的基本原理和组成,掌握51单片机的编程方法。
2. 理解单片机I/O口的使用,学会利用单片机控制LED灯的流水灯效果。
3. 提高动手实践能力,培养团队协作精神。
二、实验环境1. 实验设备:51单片机开发板、LED灯、面包板、电源、连接线等。
2. 实验软件:Proteus仿真软件、Keil uVision5集成开发环境。
三、实验原理流水灯实验是单片机入门级实验之一,通过控制单片机的I/O口输出高低电平,使LED灯依次点亮,形成流水灯效果。
实验中,利用单片机的定时器产生定时中断,每隔一定时间改变I/O口的输出状态,实现LED灯的流水灯效果。
四、实验步骤1. 打开Proteus软件,新建一个工程项目,添加51单片机开发板和LED灯等元件,绘制电路图。
2. 打开Keil uVision5,新建一个C51工程项目,选择对应的单片机型号。
3. 编写程序:(1)初始化I/O口:将P0口设置为输出模式,将P1口设置为输出模式。
(2)设置定时器:选择合适的定时器,设置定时时间,使其产生定时中断。
(3)编写中断服务程序:在中断服务程序中,改变I/O口的输出状态,实现LED灯的流水灯效果。
(4)编写主程序:在主程序中,启动定时器,进入中断服务程序。
4. 编译程序,生成HEX文件。
5. 将生成的HEX文件导入Proteus软件,运行仿真实验。
6. 观察实验现象,检查LED灯的流水灯效果是否正常。
五、实验结果与分析1. 实验现象:在Proteus软件中,LED灯依次点亮,形成流水灯效果。
2. 实验分析:通过设置定时器,每隔一定时间改变I/O口的输出状态,实现LED 灯的流水灯效果。
实验过程中,可以调整定时器的定时时间,改变流水灯的速度。
六、实验总结1. 本实验使我们对单片机的基本原理和组成有了更深入的了解。
2. 通过编写程序,掌握了51单片机的编程方法,提高了编程能力。
3. 实验过程中,我们学会了利用单片机控制LED灯,实现了流水灯效果。
单片机学习之项目1流水灯
02
硬件组成与原理
主要硬件设备介绍
LED灯
多个LED灯串联或并联在一起, 用于实现流水灯效果。
电源
为整个系统提供电能,一般采用 直流电源。
01
单片机
本项目采用常见的51单片机,负 责控制整个流水灯系统的运行。
02
03
04
电阻
用于限制电流,保护LED灯不会 因为电流过大而损坏。
电路连接及工作原理
• P0 = 0x00; // 初始状态为全灭
关键代码段解析
01
}
02
```
03
主循环代码:在循环中不断改变LED灯的亮灭状态,实现流水 灯效果
关键代码段解析
init_led(); // 初始化LED灯
void main() {
```c
01
03 02
关键代码段解析
01
while (1) { // 主循环
问题诊断及优化建议
检查单片机的程序代码,查找可 能导致问题的原因,如逻辑错误 、时序问题等。
重新进行测试验证,确保问题得 到解决,流水灯功能正常实现。
01
分析测试结果中出现的问题,如 LED灯亮灭顺序错误、时间间隔 不准确等。
02
03
根据问题原因提出相应的优化建 议,如修改程序代码、调整硬件 电路等。
关键代码段解析
01 unsigned int i, j; 02 for (i = ms; i > 0; i--) {
03
for ( j = 110; j > 0; j--); // 大约延时1ms
关键代码段解析
01
}
02
}
03
```
单片机流水灯实验总结
单片机流水灯实验总结引言流水灯是单片机实验中最基础的实验之一,通过控制单片机的IO口,让灯泡按照一定的顺序或方式依次点亮和熄灭,从而形成灯光的流动效果。
本篇文档将总结单片机流水灯实验的原理、实验步骤和实验结果,并对其中的关键点进行说明和分析。
实验原理单片机流水灯实验的原理主要涉及到两方面:单片机的IO口和时序控制。
单片机的IO口单片机的IO口是其与外部设备进行数据交换和控制的接口,通过设置IO口的电平状态,可以控制外部设备的操作。
在流水灯实验中,我们将使用单片机的多个IO口分别控制多个灯泡的点亮和熄灭。
时序控制流水灯的效果是通过按照一定的时序来依次点亮和熄灭灯泡。
在单片机中,我们可以通过控制程序中的延时和循环来实现灯泡的时序控制。
实验步骤以下将详细介绍单片机流水灯实验的步骤:1.准备材料和工具:单片机、灯泡、电阻、面包板、导线等。
2.连接电路:将单片机和灯泡通过导线连接起来,同时将电阻与灯泡串联,用以限流。
3.编写程序:使用相应的编程软件,编写控制流水灯的程序。
程序主要包括初始化IO口、控制时序、循环控制灯泡的点亮和熄灭等。
4.烧录程序:将编写好的程序烧录到单片机中。
5.调试和测试:将单片机连接到电源,观察灯泡是否按照预定的流水灯效果点亮和熄灭。
如果效果不符合预期,可以通过修改程序和调整电路进行调试。
实验结果经过以上步骤,我们成功搭建了单片机流水灯的实验电路,并编写了控制流水灯的程序。
经过测试,实验效果良好,灯泡按照预定的顺序和方式点亮和熄灭。
实验中的关键点分析在单片机流水灯实验中,有几个关键点需要特别注意:1.IO口的选择:根据需要控制的灯泡个数,选择合适数量的IO口。
如果使用的IO口数量较多,可以考虑使用扩展芯片或IO口拓展模块。
2.电路的设计:在电路设计中,需要合理选择电阻的阻值,以确保灯泡正常工作,并保护单片机和其他电路。
3.程序的编写:程序的编写需要注意控制流水灯的循序和时序,以及延时和循环的设置。
单片机并口简单应用(流水灯、数码管)实验报告6-1
实验一单片机并口简单应用(流水灯、数码管)实验目的1、了解简单单片机应用系统的设计方法。
2、了解单片机汇编语言程序的基本结构3、了解单片机汇编语言程序的设计和调试方法4、掌握应用PROTEUS仿真软件的操作方法。
5、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。
6、培养良好的实验习惯。
实验内容1、AT89S51为主控芯片,用PROTEUS仿真设计简单单片机应用系统。
2、编程实现8个发光LED“流水”的现象,用一个按键控制灯的上、下、开花三种状态,先用查询。
3、用四个数码管开始现实185,做二个按键,加5,减4,最多加到210,最多减到150。
发辉部分:修改程序,用中断完成以上功能,用六位数码管显示学号后六位。
实验原理1、流水灯(1)实验原理图(可打印)(2)实验程序(必须手写)流水灯中断ORG 0000HAJMP MAINORG 0003HAJMP KEYMAIN:CALL INITLOOP:CALL MOVECALL DELAYAJMP LOOPINIT:MOV R3,#0FEHMOV R4,#0MOV P2,#0FFHMOV R0,#00HSETB IT0SETB EX0SETB EARETMOVE:CJNE R0,#00H,MOV2 MOV A,R3RL AMOV R3,AMOV P2,R3MOV2:CJNE R0,#01H,MOV3 MOV A,R3RR AMOV R3,AMOV P2,R3MOV3:CJNE R0,#02H,LEND MOV DPTR,#TABMOV R7,#0MOV R6,#4LOP: MOV A,R7MOVC A,@A+DPTRMOV P2,ALCALL DELAYINC R7DJNZ R6,LOP LEND: RETKEY: PUSH PSWPUSH ACCMOV A,R0INC ACJNE A,#03H,HU1MOV A,#00HHU1: MOV R0,APOP ACCPOP PSWRETIDELAY:MOV R2,#150DE1: MOV R5,#200DJNZ R5,$DJNZ R2,DE1RETTAB: DB 0e7H,0dbH,0bdH,07eH END;OK查询ORG 0000HAJMP STARTSTART:MOV R3,#0FEHMOV R4,#0MOV P2,#0FFHMOV R0,#00HMAIN:CALL DETCALL MOVEAJMP MAINDET:JB P3.2,DENDJNB P3.2,$MOV A,R0INC AMOV R0,ACJNE A,#03H,DENDMOV R0,#00HDEND:RETMOVE:CJNE R0,#00H,MOV2MOV A,R3RL AMOV R3,AMOV P2,R3MOV2:CJNE R0,#01H,MOV3MOV A,R3RR AMOV R3,AMOV P2,R3MOV3:CJNE R0,#02H,LENDMOV DPTR,#TABMOV R7,#0MOV R6,#4LOP: MOV A,R7MOVC A,@A+DPTRMOV P2,ALCALL DELAYINC R7DJNZ R6,LOPLEND: RETDELAY: MOV R4,#250DE1: MOV R5,#200DJNZ R5,$DJNZ R4,DE1RETTAB: DB 0e7H,0dbH,0bdH,07eH END;OK2、数码管显示(1)实验原理图(可打印)(2)实验程序(可打印)(3)数码管查询(4) ORG 0000H(5) AJMP MAIN(6)(7) MAIN:(8)MOV R2,#000(9)MOV R3,#185(10)(11)MANAGE:(12)LCALL COMPUTING(13)LCALL BCD(14)LCALL DISPLAY(15)AJMP MANAGE(16)(17)(18)COMPUTING:(19)JB P3.1,SU(20)JNB P3.1,$(21)INC R3(22)INC R3(23)INC R3(24)INC R3(25)INC R3(26)CJNE R3,#210,PD1(27)PD1: JC LEND(28)MOV R3,#210(29)SU: JB P3.2,LEND(30)JNB P3.2,$(31)DEC R3(32)DEC R3(33)DEC R3(34)DEC R3(35)CJNE R3,#150,PD2 (36)PD2: JNC LEND (37)MOV R3,#150 (38)LEND:RET(39)(40)(41)BCD:(42)MOV A,R2(43)MOV B,#100 (44)DIV AB(45)MOV 30H,A(46)MOV A,B(47)MOV B,#10(48)DIV AB(49)MOV 31H,A(50)MOV 32H,B(51)(52)MOV A,R3(53)MOV B,#100 (54)DIV AB(55)MOV 33H,A(56)MOV A,B(57)MOV B,#10(58)DIV AB(59)MOV 34H,A(60)MOV 35H,B(61)(62)DISPLAY:(63)MOV R7,#7(64)MOV R0,#30H (65)MOV DPTR,#TAB (66)MOV R6,#0FEH (67)LOOP:(68)MOV A,@R0(69)MOVC A,@A+DPTR (70)MOV P1,R6(71)MOV P2,A(72)LCALL DELAY (73)MOV A,R6(74)RR A(75)MOV R6,A(76)LCALL DELAY(77)INC R0(78)DJNZ R7,LOOP(79)RET(80)(81)DELAY:(82)MOV R5,#50(83)DE1:MOV R4,#10(84)DJNZ R4,$(85)DJNZ R5,DE1(86)RET(87)(88)(89)TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H (90)(91)END(92)(93);OK(94)(95)中断(96) ORG 0000H(97) AJMP MAIN(98) ORG 0003H(99) AJMP KEY(100) ORG 0013H(101) AJMP KEY2(102)(103)MAIN:(104)LCALL INIT(105)MOV R2,#000(106)MOV R3,#185(107)(108)MANAGE:(109)LCALL BCD(110)LCALL DISPLAY(111)AJMP MANAGE(112)(113)INIT:(114) SETB IT0(115) SETB IT1(116) SETB EX0(117) SETB EX1(118) SETB EA(119) RET(120)(121)KEY: MOV A,R3 (122)ADD A,#5 (123)MOV R3,A (124)CJNE R3,#210,M1 (125)M1: JC KEND(126)MOV R3,#210 (127)AJMP KEND (128)KEY2: MOV A,R3 (129)SUBB A,#4 (130)MOV R3,A (131)CJNE R3,#150,M2 (132)M2: JNC KEND (133)MOV R3,#150 (134)KEND: RETI(135)(136)(137)BCD:(138)MOV A,R2(139)MOV B,#100(140)DIV AB(141)MOV 30H,A(142)MOV A,B(143)MOV B,#10(144)DIV AB(145)MOV 31H,A(146)MOV 32H,B(147)(148)MOV A,R3(149)MOV B,#100(150)DIV AB(151)MOV 33H,A(152)MOV A,B(153)MOV B,#10(154)DIV AB(155)MOV 34H,A(156)MOV 35H,B(157)(158)DISPLAY:(159)MOV R7,#7(160)MOV R0,#30H (161)MOV DPTR,#TAB (162)MOV R6,#0FEH (163)LOOP:(164)MOV A,@R0(165)MOVC A,@A+DPTR(166)MOV P1,R6(167)MOV P2,A(168)LCALL DELAY(169)MOV A,R6(170)RR A(171)MOV R6,A(172)LCALL DELAY(173)INC R0(174)DJNZ R7,LOOP(175)RET(176)(177)DELAY:(178)MOV R5,#50(179)DE1:MOV R4,#10(180)DJNZ R4,$(181)DJNZ R5,DE1(182)RET(183)(184)(185)TAB: DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H (186)(187)END(188)(189);OK3、显示学号后六位(1)实验原理图(可打印)(2)实验程序(可打印)学号ORG 0000HAJMP MAINMAIN:MOV R2,#071MOV R3,#082MANAGE:LCALL BCDLCALL DISPLAYAJMP MANAGEBCD:MOV A,R2MOV B,#100DIV ABMOV 30H,AMOV A,BMOV B,#10DIV ABMOV 31H,AMOV 32H,BMOV A,R3MOV B,#100DIV ABMOV 33H,AMOV A,BMOV B,#10DIV ABMOV 34H,AMOV 35H,BDISPLAY:MOV R7,#7MOV R0,#30HMOV DPTR,#TABMOV R6,#0FEHLOOP:MOV A,@R0MOVC A,@A+DPTRMOV P1,R6MOV P2,ALCALL DELAYMOV A,R6RR AMOV R6,ALCALL DELAYINC R0DJNZ R7,LOOPRETDELAY:MOV R5,#50DE1:MOV R4,#10DJNZ R4,$DJNZ R5,DE1RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END实验总结1、实验中出现的问题,如何解决2、心得体会。
单片机设计—流水灯
单片机设计—流水灯
流水灯是电子技术领域里最常见的发光元件,它的排列有许多模式,它的动态效果也会令人惊叹。
通常,它都是使用LED闪烁和循环表现出来,而且动态效果相当好,令人喜欢。
实现流水灯效果也可以使用单片机,使用单片机在模式比较简单,也可以实现很好的流水灯效果。
首先,我们需要用到单片机,一般可以选用51系列、增强型单片机,硬件环境的搭建包括单片机、晶振、外部存储器(如ROM、常数RAM)、I/O端口、看门狗、周边外设包括显示、AD、电源供电等等。
总的来说实现流水灯的工作的要点有:(1)将控制信号输入芯片;(2)编写程序给芯片,并调试主板电路;(3)控制LED闪烁,LED只能在程序中配置;(4)程序来驱动LED,按照要求实现流水灯特效。
在程序实现流水灯特效时,首先可以设置一个标量,即灯泡显示模式,该标量决定控制灯泡亮暗,以及显示延时。
接着,可以使用for循环结构语句来使LED闪烁,将用户自定义的标量赋给灯泡的控制位,将其输出到特定的端口,以实现要求的流水灯特效,以达到实现流水灯特效的目的。
流水灯的模式要根据使用场景设计,通过单片机控制LED,可以实现各种形式的流水灯,并且可以自行调整控制灯泡的频率、强度等参数,从而达到所需要的形式和效果。
通过使用单片机,我们可以更好地控制各种发光元件,实现各种美观的流水灯特效。
单片机的应用流水灯PPT课件
何降低成本等。
03
应用领域与前景
单片机流水灯控制技术不仅在照明领域有广泛应用,还可应用于广告牌、
舞台灯光、家庭装饰等领域。随着市场的不断扩大和技术的发展,其前
景十分广阔。
展望未来发展
技术升级与创新
未来,单片机流水灯控制技术将继续升级和创新,例如, 通过引入新型材料和工艺,提高流水灯的能效和寿命;通 过智能化技术,实现自适应调节和控制。
单片机的应用流水灯ppt课件
目
CONTENCT
录
• 引言 • 单片机基础知识 • 流水灯的工作原理 • 单片机控制流水灯的实现 • 流水灯的扩展应用 • 总结与展望
01
引言
主题介绍
流水灯是一种常见的电子装置,通过控制LED灯的亮 灭顺序,形成一种视觉上的动态效果。
单片机是一种集成电路芯片,具有微处理器和存储 器等功能,广泛应用于各种电子设备中。
软件编程
编程语言选择
选择适合单片机的编程语言, 如C语言或汇编语言。
程序编写
根据需求编写控制流水灯的程 序,实现LED灯依次亮灭的效 果。
程序调试
通过仿真器或烧录器将程序下 载到单片机中进行调试,确保 程序正确无误。
调试与测试
硬件调试
测试
检查硬件连接是否正确,确保电源、 信号线等连接无误。
在完成硬件和软件调试后,进行整体 测试,观察流水灯效果是否符合要求, 同时检查是否存在其他潜在问题。
软件编程
编写控制程序,使单片应用场景
广告展示
用于商业广告、品牌推 广等场合,吸引顾客注
意力。
舞台灯光
在演出、晚会等场合作 为舞台灯光效果,营造
氛围。
家居装饰
用于家庭装修、节日装 饰等,增添生活情趣。
单片机-流水灯的程序
#include<reg51.h> sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; void delay (unsigned char x);
其中void表示这 个函数执行完后 不返回任何数据。 ()内无任何东西, 所以这是个无参 数的函数。 Delayms是函数名。
1
2
3
4
5
6
2)带参数函数的用位定义实现流水灯(8位二极管循环点亮)
编程思路: a) 先点亮第一盏灯,延时点亮第二盏, 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
循环移动
循环左移 最高位移入最低位,其它依次向左移动一位。C语言中 没有专门的指令,通过移位指令和简单逻辑运算来实现循环左移,或直接利用C51库中自带的函数-crol-实现。
循环右移 最低位移入最高位,其它位依次向右移一位,C语言中没有专门的指令,通过移位指令与简单的逻辑运算可以实现循环右移,或专门利用C51库中自带函数-cror-实现
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
相关知识 二进制和十六进制之间的相互转换
二进制
十六进制
二进制
十六进制
0000
0
0100
4
0001
1
0101
5
0010
2
0110
6
0011
3
0111
7
二进制
十六进制
二进制
单片机控制流水灯
程序框架设计
01
主程序框架
主程序是单片机程序的核心,负 责程序的启动、初始化、中断处 理等任务。
02
中断服务程序框架
03
功能模块框架
中断服务程序用于处理外部中断 事件,如按键按下、定时器溢出 等。
功能模块是实现特定功能的程序 块,如LED灯控制、定时器计数 等。
程序功能模块设计
LED灯控制模块
该模块负责控制LED灯的亮灭状态, 可以通过编程实现流水灯效果。
物联网技术的应用
未来,单片机可能会更多地应用于物联网领域, 与互联网结合,实现更广泛的控制和应用。
3
人工智能与单片机的结合
未来,人工智能技术可能会与单片机结合,实现 更智能的控制和应用。
THANKS
[ 感谢观看 ]
02
包括主程序和中断服务程序,主程序负责循环控制LED灯,中断
服务程序负责处理外部中断。
调试过程
03
通过串口调试工具或示波器等工具对程序进行调试,确保程序
正确运行。
实际运行效果展示
流水灯效果
通过单片机控制LED灯的亮灭,实现流水灯效果 。
速度控制
通过程序延时控制LED灯亮灭的时间间隔,实现 流水灯的速度变化。
硬件连接
将单片机与LED灯连接,通过GPIO口控制LED灯的亮灭。
控制逻辑
通过编写程序控制单片机GPIO口的输出,实现LED灯的顺序亮 灭,形成流水灯效果。
延时控制
通过程序延时控制LED灯亮灭的时间间隔,实现流水灯的速度变 化。
控制程序编写及调试
编程语言
01
使用C语言或汇编语言编写单片机程序。
程序结构
电源管理优化
采用高效的电源管理方案,降 低流水灯的能耗。
用单片机实现流水灯的控制设计
用单片机实现流水灯的控制设计1.引言当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效方法就是理论与实践并重,本设计课题是流水灯的控制设计,流水灯是一串按一定的规律像流水一样连续闪亮。
流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。
2.硬件组成2.1 总体方案设计分析要求用8255的A口和B口做为输出,接16个发光二极管,从而实现16位流水灯的显示效果,基本的界限可如下图A所示,在C口的地两位接两个开关,实现两个扩展功能的控制。
i:基本流水灯显示电路A口和B口两个端口不能同时复制,从而在试验中可以用BX进行需要复制的数据的存储,因为BX可以分从BH BL两个部分进行独立的操作,在本次试验中用BH对A口进行赋值,用BL对B口进行赋值,通过演示一段时间再对BH BL 进行移位和输出,实现流水灯的效果。
ii:正反方向选择把PC.0口接在开关上,编写程序对C端口的数据进行读取,并进行判断,使得当PC.0为高电平的时候则灯进行左移,同时B口与A口相反。
iii:快慢速度控制把PC.1口接在开关上,编写程序对C端口的数据进行读取,并进行判断,使得当PC.1为高电平的时候则延时的时间缩短,使得流水灯的流水速度加快,低电平的时候则进行延时的时间变长,使得流水灯的流水速度加快。
3硬件原理设计A该模块的WR.RD分别练到PC总线接口模块的XIOW和XIORB该模块的数据(AD0~AD7)、地址线(A0~A7)分别连到PC总线接口模块的数据(D0~D7)、地址线(A0~A7)C 8255模块选通线CA连到PC总线接口模块的IOY3D 8255的PA0~PA7连到发光二极管的L1~L8;8255的PB0~PB7连到发光二极管的L9~L16E 8255的PC0 PC1分别练到开关K0 K1F 软件流程框图及程序清单按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
单片机并口简单应用(流水灯)
实验一单片机并口简单应用(流水灯)7509 电气陈毅斌 32号实验目的1、了解单片机汇编语言程序的基本结构2、了解单片机汇编语言程序的设计和调试方法3、掌握顺序控制程序的简单编程实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验原理1、流水灯硬件电路如图4-1所示,流水灯硬件电路由移位寄存器74LS164、功能选择开关J502、二极管、三极管、单片机并口(P0)、限流电阻等组成。
发光二极管连接成共阳极结构。
发光二极管点亮的条件是:阳极接高电平、各阴极接低电平。
因此,通过程序控制74LS164的Q0端。
Q0端输出0,公共端阳极就接成高电平,然后再按一定规则从P0口输出数据,发光二极管就会点亮。
图4-1 流水灯电路图2、单片机流水灯程序设计由上图可知,发光二极管要点亮,需要先把J502的2、3脚相连,三极管Q500导通,然后从P0口输出数据。
(1)控制三极管导通程序控制三极管有两种方法,第一种:在74LS164的第8脚产生一个正脉冲,此时1脚为0,三极管就导通;为1,三极管就截止。
第二种:在单片机IO模拟74LS164时序,一次输出一个字节,只要Q0=0即可控制三极管开通。
为1,三极管截止。
两种方法的程序流程如图4-2所示。
图4-2 流水灯位选信号控制(2)产生流水灯效果程序三极管导通后,就可以从P0口输出数据控制发光二极管。
P0口输出数据既可以编写程序逐个输出,也可以将输出数据序列定义在存储器中,然后用读程序存储器指令逐个取出并输出到P0口。
程序流程图如图4-3所示。
图4-3 流水灯程序流程图实验内容1、直接输出法输出数据序列LEDCLK bit P3.4LEDDIN bit P2.3ORG 0000HLJMP MAINORG 0030HMAIN: LCALL LedSequence ;调用LED此程序产生流水灯效果SJMP MAINLedSequence:CLR LEDCLK ;往74LS164的Q0端送一个0CLR LEDDIN ;CLK引脚产生一个正脉冲NOPSETB LEDCLKNOPCLR LEDCLKMOV P0,#0FEH ;为0的位对应的二极管亮,第一个灯亮MOV R7,#200 ;R7为延时量,N msLCALL DelayNms ;该程序延时时间由R7决定MOV P0,#0FDH ;第二个灯亮MOV R7,#200LCALL DelayNmsMOV P0,#0FBH ;第三个灯亮MOV R7,#200LCALL DelayNmsMOV P0,#0F7H ;第四个灯亮MOV R7,#200LCALL DelayNmsMOV P0, #11101111B ;第五个灯亮MOV R7,#200LCALL DelayNmsMOV P0, #11011111B ;第六个灯亮MOV R7,#200LCALL DelayNmsMOV P0, #10111111B ;第七个灯亮MOV R7,#200LCALL DelayNmsMOV P0,#01111111B ;第八个灯亮MOV R7,#200LCALL DelayNmsRETDelayNms:LCALL Delay1msDJNZ R7, $-3RETDelay1ms: ;延时1ms程序PUSH 07MOV R7,#250 ;1msNOPNOPDJNZ R7, $-2POP 07RETEND2、查表法输出数据序列LEDCLK bit P3.4LEDDIN bit P2.3ORG 0000HLJMP MAINORG 0030HMAIN: LCALL LedSequence ;调用LED此程序查表方法设置流水灯SJMP MAINLedSequence:LCALL LedLightMOV R6,#8 ;循环次数赋值MOV DPTR,#LedSequenceTab ;查表赋值首地址LedSequence1:MOV A,R6MOVC A,@A+DPTRCPL A ;取反使得只有一个位为0其余为1 MOV P0,AMOV R7,#200LCALL DelayNms ;调用延迟时间DJNZ R6,LedSequence1RETLedSequenceTab:DB 80H,40H,20H,10H,08H,04H,02H,01H,00HDelayNms:LCALL Delay1msDJNZ R7, $-3RETDelay1ms:MOV A,R7MOV R7,#250 ;1msNOPNOPDJNZ R7, $-2MOV R7,ARETLedLight:MOV B,#8MOV A,#0FEHCLR LEDCLKCLR LEDDINLedLight1:RLC AMOV LEDDIN,CSETB LEDCLKNOPCLR LEDCLKDJNZ B,LedLight1RET3.将学号后两位对应的二进制为1的灯点亮LEDCLK b it P3.4;LEDDIN bit P2.3;ORG 0000HSJMP MAINORG 0030HMAIN:MOV SP,#60H ;设置堆栈CLR LEDCLK ;开启三极管CLR LEDDINSETB LEDCLKMOV P0,#00010000B ;P0口送入值为0口灯亮MAIN1:AJMP MAIN1END运行结果:思考题1、请把学号后两位数进转换成二进制数,然后依次点亮其中为1对应的二极管,写出输出序列。
单片机实验报告流水灯
单片机实验报告流水灯单片机实验报告:流水灯引言:单片机是现代电子技术中非常重要的一部分,它广泛应用于各个领域,如家电、汽车、通信等。
单片机实验是学习单片机的基础,通过实际操作来理解单片机的原理和应用。
本报告将介绍一个常见的单片机实验项目——流水灯实验。
一、实验目的流水灯实验旨在通过控制单片机的IO口,实现多个LED灯按照顺序依次点亮和熄灭的效果。
通过这个实验,可以加深对单片机IO口的控制和编程的理解。
二、实验器材1. 单片机开发板:我们使用的是STC89C52开发板,它是一种基于8051内核的单片机开发板。
2. LED灯:我们使用了8个LED灯,分别连接到单片机开发板的8个IO口上。
3. 连接线:用于连接单片机开发板和LED灯。
三、实验原理流水灯实验的原理很简单,通过控制单片机的IO口输出高低电平来控制LED灯的亮灭。
当某个IO口输出高电平时,对应的LED灯点亮;当IO口输出低电平时,对应的LED灯熄灭。
四、实验步骤1. 连接电路:将8个LED灯分别连接到单片机开发板的8个IO口上,确保连接正确。
2. 编写程序:使用C语言编写单片机程序,控制IO口的高低电平变化。
程序的主要逻辑是通过一个循环,依次将某个IO口输出高电平,然后延时一段时间,再将该IO口输出低电平,再延时一段时间,以此循环实现流水灯的效果。
3. 烧录程序:将编写好的程序烧录到单片机开发板中,确保程序能够正确运行。
4. 调试实验:将单片机开发板连接到电源,观察LED灯是否按照预期的顺序点亮和熄灭。
如果有问题,可以通过调试程序或检查电路连接来解决。
五、实验结果经过调试和实验,我们成功地实现了流水灯的效果。
8个LED灯按照顺序依次点亮和熄灭,形成了一个流动的灯光效果。
这个实验不仅让我们学习了单片机的IO口控制,还提高了我们的动手能力和解决问题的能力。
六、实验总结通过这个实验,我们深入了解了单片机的原理和应用。
单片机作为一种微型计算机,具有体积小、功耗低、成本低等优点,广泛应用于各个领域。
单片机学习编程之流水灯篇OK
第一章单片机的基础学习第一个实验 LED发光二极管的左移右移(D1到D8依次)点亮二极管点亮的原理图如下。
实际上是接在P1口。
原理图说明:发光二极管阴极接单片机,让电流流入单片机,因为单片机输出电流小,点不亮发光二极管。
发光二极管点亮电流为5 mA至20mA。
编程说明:(1)做一个LED的左移右移,有硬件电路可知,输出“0”才能使LED亮。
开始时P1.0亮,——P1.1亮——P1.2亮….——P1.7亮——P1.0亮,重复循环点亮LED。
(2)延时时间的设计:石英晶体为12MHz,1个机器周期为1微秒,采用单片机每走一步指令需要的时间来延时。
✧延时时间子程序(10.002毫秒)Delay: MOV R4,#20 ;2个机器周期,2微秒D1: MOV R5,#248 ;2个机器周期,2微秒DJNZ R5,$ ;2个机器周期,2*248微秒DJNZ R4,D1 ;2个机器周期,2*20微秒RET这个延时子程序:20*(498+2)+2=10002个机器周期=10.002毫秒。
✧延时时间子程序(200毫秒)Delay: MOV R3,#20 ; 200微秒D1:MOV R4,#20 ;10微秒D2: MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RET(3)汇编程序源代码注意:向电脑上编辑程序时注意标点符号要在英文的格式下输入。
ORG 00HMAIN: MOV A,#0FFHCLR CMOV R2,#08H;左移点亮发光二极管LOOP: RLC A ;带进位左移一位MOV P1,A;点亮LED发光二极管CALL DELAY;调用延时子程序DJNZ R2,LOOP;左移、轮流点亮发;光二极管;左移点亮发光二极管后,再右移点亮发光二极管MOV R2,#07HLOOP1: RRC A ;带进位右移一位MOV P1,A;点亮LED发光二极管CALL DELAY;调用延时子程序DJNZ R2,LOOP1JMP MAIN; 返回到初始位置;设置延时时间DELAY: MOV R3,#20D1: MOV R4,#20D2: MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETEND(4)C程序源代码#include <reg51.h>void Delay()//延时子程序{ int i,j;for(i=0;i<=255;i++)for(j=0;j<=255;j++);}void main(){unsigned int i;unsigned int temp;P1=0xff;while(1){temp=0x01;for(i=0;i<8;i++){P1=~temp;逐位取反Delay();temp=temp<<1;}}}(4)实验结果图(注意学习板上的JJ_P1连接器连上)第二个实验采用定时器来设置延时时间(方式0)说明:(1)开始时p1.0亮,延时0.2秒后左移至p1.1亮,如此左移7次后至,再延时0.2秒右移至p1.6亮,如此右移7次后至p1.0亮;(2)延时时间0.2秒,使用定时器0在方式0下工作;采用查询的方式(3)程序源代码ORG 00HMOV TMOD,#00H /***设置定时器的工作方式***/START: CLR CMOV A,#0FFHMOV R2,#08 /***设置循环次数***/LOOP: RLC A /***带进位左循环累加器,点亮发光二极管***/ MOV P1,A /***设置定时器定时时间***/MOV R3,#100CALL DELAYDJNZ R2,LOOP /***点亮了八个发光二极管吗,没有继续***/MOV R2,#07LOOP1: RRC AMOV P2,AMOV R3,#100CALL DELAYDJNZ R2,LOOP1JMP START/***通过单片机内部的定时器设置定时时间***/DELAY: SETB TR0 /***启动定时器***/AGAIN: MOV TL0,#(8192-2000) MOD 32MOV TH0,#(8192-2000) / 32LOOP2: JBC TF0,LOOP3 ;通过查询的方式来判断时间定时器的计时JMP LOOP2LOOP3: DJNZ R3,AGAINCLR TR0RET;非中断END(4)实验结果图第三个实验采用定时器来设置延时时间(方式1)(1)开始时p1.0亮,延时0.2秒后左移至p2.1亮,如此左移7次后至,再延时0.2秒右移至p1.7亮,如此右移7次后至p1.0亮;(2)延时时间0.2秒,使用定时器0在方式1下工作;采用查询的方式(3)源程序代码ORG 00HMOV TMOD,#01HSTART: CLR CMOV A,#0FFHMOV R2,#08LOOP: RLC AMOV P1,AMOV R3,#20CALL DELAYDJNZ R2,LOOPMOV R2,#07LOOP1: RRC AMOV P1,AMOV R3,#20CALL DELAYDJNZ R2,LOOP1JMP STARTDELAY: SETB TR0AGAIN: MOV TL0,#0F0HMOV TH0,#0D8HLOOP2: JBC TF0,LOOP3JMP LOOP2LOOP3: DJNZ R3,AGAINCLR TR0RETEND附录资料:红外发射器的原理图AT89S52下载器的原理图。
单片机应用-流水灯设计
一、任务导入
任务要求
使用单片机控制8个发光二极管按顺序点亮 。 将8个发光二极管连接到51单片机的P1口,用C语言编程来控制 单片机的并行I/O端口,显示流水灯效果。
硬件电路
向P1口写入一个8位二进 制数来改变每个引脚的输出电 平状态,从而控制8个发光二 极管的亮灭。
二、程序设计
#include <intrins.h>
//包含内部函数库,提供移位和延时操作函数
void main()
//主函数
{
P1 = 0x7F;
//P1端口输出0x7F
while(1)
//无限循环
{
//循环体语句组开始
P1 = _cror_(P1,1); //调用内部函数_cror_(),将P1的二进制数值循环右移
将P1端口在: 11111110 、 11111101 、 11111011 、 11110111 、 11101111 、 11011111 、 10111111 、 01111111
这8种状态之间顺序转换, 就可以实现左移流水灯。
0xFE 左
程序设计思路
P1 = _crol_(P1,1);
举一反三2
使用移位运算符和循环程序结构编程,实现流水灯。
左移位运算符: <<
若 a: 11111110
执行:a<<1; //左移一位
高位移出
1 11111100 低位补0
右移位运算符: <<
若 b: 01111111
执行:b>>1; //右移一位
高位补0
00111111 1 低位移出
程序设计思路
a=0x80;
单片机-流水灯的程序
void main() {
Led = 0xfe; while(1) { P2 = Led;
for(i=1;i<800;i++) for(j=1;j<800;j++); Led = Led << 1; if(P2 == 0x00 ) {Led = 0xfe; } } }
方法四:利用移位操作实现流水灯(8位二极管循环点亮)
假设机器字长为8位,变量a的值为16,将a左移二位,即 a=a<<2: 左移前 0001 0000
左移后 0100 0000
由此看出,左移一位相当于该数乘2,左移二位相当于乘4 ,即22,但这要以该数左移之后不“溢出”为前提。所谓“溢出 ”指该数已超过机器字长所能容纳的范围,如该例若继续左移二 位,该数为16× 24=256,超出了字长8位的表示范围(257),
void main() { while(1) {
led1=0; delay(120);
led2=0; delay(120);
led3=0; delay(120);
led4=0; delay(120);
led5=0 ; delay(120);
led6=0; delay(120);
led7=0; delay(120);
即产生了溢出。
二、按位右移
按位右移是将一个运算量的各位依次右移若干位, 低位被移出,高位对无符号数补0,对有符号数要按最 高符号位自身填补。
右移一位相当于该数除以2,但有可能带来误差。假设机器 字长为8位,变量a值为15,将a右移二位,即a=a>>2:
右移前 0000 1111
右移后 0000 0011
单片机-流水灯的程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
试验1 单片机并口简单应用(流水灯)
实验目的
1、了解单片机C语言程序的基本结构
2、了解单片机C语言程序的设计和调试方法
3、掌握顺序控制程序的简单编程
4、熟悉51单片机的端口使用
实验仪器
单片机开发试验仪、稳压电源、计算机
实验原理
1、硬件电路
如图1所示,流水灯硬件电路由发光二极管、单片机并口(P0)、限流电阻等组成。
发光二极管连接成共阳极结构。
发光二极管点亮的条件是:阳极接高电平、各阴极接低电平。
因此,二极管公共端阳极就接成高电平,然后再按一定规则从P0口输出数据,发光二极管就会点亮。
图1 流水灯电路图
2、程序流程图如下。
实验内容:1、开发板接线图
延时
P0口初态循环右移1位
P0口状重新赋值0XFE
开始
P0口输出0XFE
P0是否等于0X00
Y
N
2、开发环境设置
打开keil软件,版本μ Vision2 ,μvision3,μvision4 都一样,在这里用μvision4版本演示,打开之后如下图,有的时候会默认打开上次使用的工程,单击Project 菜单,选择 Close Project 关闭了默认打开的工程,显示下图界面:
我们要建立新的工程,选择Project→ newμ vision projiect…
选择工程要保存的路径,输入工程文件名,如图
点击保存后会弹出一个对话框,要求用户选择单片机型号,可以根据用户使用的单片机来选择,我们使用的STC90单片机是兼容51内核的,Keil C51 几乎支持所有的51内核单片机,51内核具有通用型,如果程序用的资源不是太复杂,我们可以选择任意一款51单片机内核就行。
例程以添加Atmel 的AT89C51来说明。
如图,然后,单击确定(OK)。
功能描述
如果出现下面的界面:单击是就可以,意思是将单片机的启动代码添加到工程,我们不用修改。
到目前我们还没建立一个完整的工程,只是有工程的名字,框架,工程中还没有任何文件代码,(除了启动代码,有的keil 版本不显示启动代码),接下来我们添加文件及代码。
单击菜单File→New 选项,或者单击界面上的快捷图标,新建文件串口如下。
界面显示的Text1就是我们刚刚加入的文件,但是这个文件与我们的工程还没有直接联系起
来,单击图标,保存我们当前的text1文件,输入要保存的文件名,同时要输入文件扩展名,扩展名很关键,用C语言编写的程序,则必须为**.c,汇编语言必须为**.asm(**为文件名),文件名是用户自己取的。
填好文件名后单击保存。
回到编辑界面,单击Target1 前面的“+”号,然后在Source Group 1 上右键单击,选择
Add Files to Group Source Group1,选中我们刚才建立的.c文件,这里是led test.c,
单击add,只需单击一次。
之后单击Close就可以。
回到主界面后,单击Source Group 1前的“+”号,刚刚添加的文件显示在里面。
通过以上步骤我们就建立好了一个工程。
接下来就可以写代码了。
在写代码之前介绍介个常用的按钮:
按钮:用来编译我们正在操作的文件。
按钮:用来编译修改过的文件,并生成应用程序共单片机下载。
按钮:用来重新编译当前工程中所有的文件,并生成应用程序共单片机下载。
因为很多工程不止有一个文件,当有多个文件时,用它进行编译。
按钮:用来打开“Option for Target”对话框,对当前工程进行设置。
工程的各个参数都可以在这里设置,具体的设置方法用到的时候,再和大家详细讲述。
以上几个按钮是常用的,其他按钮在使用的时候再介绍。
3、编写程序
实验名: 流水灯实验
实验说明 : 延时实现LED流水灯效果P0口八个灯作跑马灯。
//--包含你要使用的头文件
#include <reg52.h> //此文件中定义了52的一些特殊功能寄存器
#include <intrins.h>
//--声明全局函数--//
void Delay10ms(unsigned int c); //延时10ms
/****************************************************************************** * 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
******************************************************************************/
void main()
{
unsigned char LED;
LED = 0xfe; //0xfe = 1111 1110
while (1)
{
P0 = LED;
Delay10ms(50);
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if (P0 == 0xFF) //当它全灭的时候,重新赋值
{
LED = 0xfe; // 0xfe = 1111 1110
}
}
}
/****************************************************************************** * 函数名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输入 : 无
* 输出 : 无
******************************************************************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--// for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}。