单片机流水灯程序19页PPT
流水灯程序
图1流水灯硬件原理图从原理图中可以看出,假如要让接在PLO 口的LEDI 亮起来,那么只要把 P1.0口的电平变为低电平就可以了;相反,假如要接在PLO 口的LEDl 熄灭,就 要把PLO 口的电平变为高电平洞理,接在P1.1~PL7 口的其他7个LED 的点 亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管 LED1-LED8依次点亮、熄灭,8只LED 灯便会一亮一暗的做流水灯了。
在此 我们还应留意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很 短,我们在掌握二极管亮灭的时候应当延时一段时间,否则我们就看不到“流水” 效果了。
3.软件编程单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后, 我们还不能看到流水灯循环点亮的现象,我们还需要告知单片机怎么来进行工PlO POO Pll POl PlJ POi PlJ P03 Pl* PO* P15 PO 5 Pl 3PO 4 P17 λ!SS>C51POT am PJO nττoPnP22 Il pn IO P” P25 I∑∖T> PY P27Xl X :XXD!XD KD ALEP TlPSHT∖n47Kx8VCCLEDl-M —LED)W LED)LED1 W * LEDS人KLEDj WLED7W-44LEDS-M作,即编写程序掌握单片机管脚电平的凹凸变化,来实现发光二极管的一亮一灭。
软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。
下面我们以最简洁的流水灯掌握功能即实现8个LED灯的循环点亮,来介绍实现流水灯掌握的几种软件编程方法。
3.1位控法这是一种比较笨但又最易理解的方法,采纳挨次程序结构,用位指令掌握Pl 口的每一个位输出凹凸电平,从而来掌握相应LED灯的亮灭。
程序如下:ORG OOOOH ;单片机上电后从0000H地址执行AJMPSTART ;跳转到主程序存放地址处ORG 0030H ;设置主程序开头地址START : MOV SP , #60H ;设置堆栈起始地址为60HCLRPl.0;PLO输出低电平,使LEDl点亮ACALL DELAY ;调用延时子程序SETB P1.0;P1.0输出高电平,使LEDl熄灭CLR Pl.l ;P1.1输出低电平,使LED2点亮ACALL DELAY ;调用延时子程序SETB Pl.l ;P1.1输出高电平,使LED2熄灭CLR P1.2;P1.2输出低电平,使LED3点亮ACALL DELAY ;调用延时子程序SETB P1.2;P1.2输出高电平,使LED3熄灭CLR P1.3 ;P1.3输出低电平,使LED4点亮ACALL DELAY ;调用延时子程序SETB P1.3;P1.3输出高电平,使LED4熄灭CLR Pl.4 ;P1.4输出低电平,使LED5点亮ACALL DELAY ;调用延时子程序SETB P1.4;P1.4输出高电平,使LED5熄灭CLR P1.5;P1.5输出低电平,使LED6点亮ACALL DELAY ;调用延时子程序SETB P1.5;P1.5输出高电平,使LED6熄灭CLR P1.6 ;P1.6输出低电平,使LED7点亮ACALL DELAY ;调用延时子程序CLR P1.7 ;P1.7输出低电平,使LED8点亮ACALL DELAY ;调用延时子程序SETB P1.7pl.7输出高电平,使LED8熄灭ACALL DELAY ;调用延时子程序START ;8个LED流了一遍后返回到标号START处再循环AJMPDELAY :;延时子程序MOV RO , #255 ;延时一段时间Dl : MOV Rl , #255DJNZRl , $DJNZ RO , DlRET ;子程序返回END ;程序结束3.2循环移位法在上个程序中我们是逐个掌握Pl端口的每个位来实现的,因此程序显得有点简单,下面我们采用循环移位指令,采纳循环程序结构进行编程。
单片机-流水灯的程序 PPT课件
二、子函数的调用。
1)不带参数函数的写法及调用
在C语言中当一些语句不止一次使用到,而且语句内容相
同,我们就可以把这样的语句写成一个不带参数的子函
数,当在主函数中需要这些语句时,直接调用这个语句
就可以:
其中void表示这
例如:延时语句
个函数执行完后
for(i=0;i<xms;i++)
不返回任何数据。
程序分析:
#include <reg51.h> #include <intrins.h> int i,j; char Led;
void main() { Led = 0xfe;
while(1) { P2 = Led;
for(i=1;i<200;i++) for(j=1;j<200;j++); Led = _crol_(Led,1); if(P2 == 0x00 ) {Led = 0xfe; }
假设机器字长为8位,变量a的值为16,将a左移二位,即 a=a<<2: 左移前 0001 0000
左移后 0100 0000
由此看出,左移一位相当于该数乘2,左移二位相当于乘4 ,即22,但这要以该数左移之后不“溢出”为前提。所谓“溢出 ”指该数已超过机器字长所能容纳的范围,如该例若继续左移二 位,该数为16× 24=256,超出了字长8位的表示范围(257),
void main() {while(1) { P2=0xfe; delayms(120); P2=0xfc; delayms(120); P2=0xf8; delayms(120); P2=0xf0; delayms(120); P2=0xe0;
流水灯实验教学PPT学习教案
第11页/共28页
3.4 整型变量
整型变量是整数类型的数据。整型变量是最常用 的数据类型。整型变量的定义格式是“类型说明 符 变量标识符,变量标识符…”。示例如下:
第5页/共28页
2. LED流水灯原理
2.1 流水灯原理图部分
第6页/共28页
2.2 管脚电气信息
第7页/共28页
2.3 灌电流和拉电流 灌电流(sinking current) ,对一个端口而言,如果电流方
向是向其内部流动的则是“灌电流”,比如一个IO通过一 个电阻和一个LED连接至VCC,当该IO输出为逻辑0时可 以点亮LED。 拉电流(sourcing current),对一个端口而言,如果电流 方向是向其外部流动的则是“拉电流”,比如一个IO通过 一个电阻和一个LED连至GND,当该IO输出为逻辑1时能 不能点亮LED。
第17页/共28页
3.8 运算符和表达式
位运算符是对字节或字中的二进制位(bit)进行逐位逻辑处理或移位的运算符。C51 语言中的位运算符如下所示。
“&” 运算符:进行逻辑与(AND)运算。 “|” 运算符:进行逻辑或(OR)运算。 “^” 运算符:进行逻辑异或(XOR)运算。 “~” 运算符:进行按位取补(NOT)运算。 “>>”运算符:进行右移运算。 “<<”运算符:进行左移运算。 位运算符的操作对象整型和字符型数据的字节或字,位操作不能用于float、double、
在循环体语句中一定要加入能够 改变while表达式取值的语句,保 证循环在一定条件满足的时候能 够结束,防止出现死循环的情况。
完成一个流水灯项目(PPT 32张)
亚博科技
51单片机开发板28课配套视频教程
完成一个典型流水灯的设计
程序就是人的思想的反映,编程最重要的就是你的编程思路,有什么样的思 路就会编出什么样的程序。 先看上一讲的点一个发光管程序: 1、思路分析。流程图是整理我们思路的好工具,同时也能保证若干年以后 你还能轻易看懂自己编写的程序。 2、程序讲解(这个程序是利用了位输出操作) 。 宏定义 函数和函数调用 如何熄灭发光管 循环结构,while语句详解、关系运算和逻辑值 如何改变流水灯流动的速度
亚博科技
51单片机开发板28课配套视频教程
一个简单的延时函数
只需要了解一下,不需要记住,学会调用它就可以了。 • /*-----------------------------------------------• 延时函数,含有输入参数 unsigned int t,无返回值 • unsigned int 是定义无符号整形变量,其值的范围是 • 0~65535 • ------------------------------------------------*/ • void Delay(unsigned int t) • { • while(--t); • }
亚博科技51单片机开发板28课配套视频教程第6讲完成一 Nhomakorabea流水灯项目
亚博科技
51单片机开发板28课配套视频教程
流水灯设计
• 本讲任务: • 分别用位输出操作、移位操作、循环移位操作完成3个典 型流水灯的设计。 •掌握下列C语言知识点: •宏定义、函数和函数调用、循环结构、while语句、关系 运算和逻辑值 • 掌握流程图绘制。 • 完成闪烁灯的设计。 • 如 何 完 成 函 数 调 用。
单片机-流水灯的程序
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
单片机-流水灯的程序
流水灯PLCPPT课件
• 2.输出继电器(Q) • 输出继电器(又称输出映像寄存器)存储程序执行
的结果。每个输出继电器在存储区中占一位,每 一个输出继电器与一个输出口相对应。输出继电 器通过隔离电路,将程序运算结果送到输出口并 决定输出口所连接器件的工作状态。正常运行中 输出继电器的状态只由程序的执行决定。
第18页/共56页
输
微处理器(CPU)
输
入
出
部
运算器
控制器
部
件
件
外部设备 编程设备 计算机 打印机等
通
讯
系
用
I/O
及
统
户
扩
编
存
存
展
程
储
储
接
接
器
器
口
口
PLC系统结构示意图
第5页/共56页
现场用户输出设备 执行器
中间继电器 电磁阀
扩展设备 扩展单元 通讯模块 功能模块
2.1.1PLC的基本组成
1.微处理器(CPU)
➢接收并存储用户程序和数据; ➢诊断电源、PLC工作状态及编程的语法错误; ➢接收输入信号,送入数据寄存器并保存; ➢运行时顺序读取、解释、执行用户程序,完成用户 程序的各种操作; ➢将用户程序的执行结果送至输出端。
❖3.输出单元——带光电隔离器及滤波器 ➢多种输出方式:晶体管
晶闸管 继电器 ➢驱动直流负载(晶体管输出单元); ➢驱动非频繁动作的交/直流负载(继电器输出单元); ➢驱动频繁动作的交/直流负载(晶闸管输出单元)。
第12页/共56页
2.1.1PLC的基本组 成
❖4.外围设备—采用PC/PPI电缆 ➢连接专用编程器;
• 5.电源 • 外接220V交流电 • 提供5V供本机使用 • 提供24V供输入端使用。
5 AT89S52单片机开发入门:流水灯实验ppt课件
ppt课件
23
5.3 对程序进行调试
• 软件仿真 • 硬件仿真 • 调试
– 设置断点F8 – 单步执行F10(step over) – 单步执行F11(step in) – 全速执行F5
ppt课件
24
图5-3-1 软件仿真调试模式(simulator)
ppt课件
25
图5-4-1 汇编程序分析——系统复位后
ppt课件
36
5.6 查表法实现流水灯功能-定义数据 (表格)
code unsigned char tab[16]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0 x80,//9
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //8
ppt课件
32
深入了解程序执行过程(3)
-main函数部分
ppt课件
寄存器R5代替变量dat 寄存器R4代替变量i
取反输出
左移1位相对于乘2,这 里用累加器A的相加实现
循环控制变量R4加1 R4!=8则跳转到地 址0x0007执行
33
7、深入了解程序执行过程(4)
• 使用了哪9个内部RAM?
– 5个通用寄存器:R0、R4、R5、R6、R7 – A、P1、SP、C(PSW的一位)
ppt课件
39
ppt课件
19
AT89S52主要内部资源
• FLASH 8KB • RAM:256B • SFR(Special File Register) • 4个并口(每个8位) • 1个串口(占用P3口的2位) • 3个16bit定时器
ppt课件
20
AT89S52内部存储器资源