搜档网
当前位置:搜档网 › UART串口通信—控制LED灯查询法

UART串口通信—控制LED灯查询法

UART串口通信—控制LED灯查询法
UART串口通信—控制LED灯查询法

UART串口通信—控制LED灯(查询法)

项目说明:

1.通过串口来控制LED灯,发送1(十六进制)点亮LED灯(8个LED蓝灯),发送2(十六进制)关闭LED灯(8个LED蓝灯)。

2.通信速率:9600bps(即波特率为9600)。

3.串口通信:采用查询的方法。

此项目练习的目的:(我们应掌握如下知识点)

(1)理解串口是什么。

(2)熟悉串口相关的寄存器。

(3)熟练波特率的计算。

(4)熟悉串口通信的参数:如停止位、奇偶校验位等。

完整代码:

#include

/*串口初始化:主要涉及寄存器配置*/

void UartInit(void) //初始化uart

{

TMOD = 0X20; //定时器1定时器方式工作模式2,可自动重载的8位计

数器常把定时/计数器1 以模式2 作为串行口波特率发生器

SCON = 0X50; //串口选择工作模式1使能接收,允许发送,允许接收

PCON = 0X00; //8位自动重载,波特率加倍

TH1 = 0XFD; //用11.0592MHz波特率9600

TL1 = 0XFD;

TR1 = 1; //打开中时器

}

void main(void)

{

unsigned char TempDat;

UartInit();/*调用串口初始化函数,进行相应的配置,如波特率等*/

while(1)

{

if (RI)/*查询串口是否接收到一个完整的数据*/

{

RI = 0;/*清除标志,准备下一次判断*/

TempDat = SBUF;/*读取串口数据*/

if (1 == TempDat)/*判断串口接收到的数据*/

{

P1 = 0;/*如果接收到的数据是1,则点亮8个LED蓝灯*/

}} else if (2 == TempDat)

{

P1 = 0xff;/*如果接收到的数据是2,则关闭8个LED蓝灯*/

}} else

{

}

}

}

}

根据“爱普学法:整框图→出步骤→实践中学理论,理解深刻且透彻。”我

们先来整框图(产品设计的时候称为硬件架构):我们需要先看看这个项目和哪些硬件以及工具有关。

题目中要求我们通过串口控制LED 灯,所以肯定和串口、LED 灯有关。当

然核心永远少不了的,那就是单片机(MCU)STC89C52。看下图1:

当然由于要通过串口向开发板发送数据,所以这里需要用到一个串口调试工具,这个工具将来我们会经常用到。串口调试工具网上一大堆,我们直接用STC-ISP 下载软件自带的串口调试工具即可。

这样我们的思路就是:写好串口驱动,通过串口接收的数据来控制LED 灯。我们的步骤就是:第一步弄好串口配置,第二步看一下如何点亮LED灯,第三步根据串口接收的数据来控制LED灯,即所谓的逻辑实现。

第一步:串口配置

我们首先需要看一下开发板电路原理图串口的硬件连接方式:

从图3 可以看出,串口的2 个脚RXD(接收),TXD(发送)接到单片机的

第10 脚和第11 脚。由于这两个脚是单片机的固有功能,因此只需要使用串口,即默认使用这两个引脚。

接下来我们进行串口配置:打开STC89C52 芯片手册:STC89C52RC 中文手

册.pdf 找到串行口通信这一章节:

我们主要了解配置串口需要配置哪些寄存器:

我们仔细看一下数据手册中关于SCON、SBUF、PCON 各自的功能和作用,进

一步理解串口原理:

这边简要介绍下这三个寄存器的各自功能:

SCON:串行控制器(Serial Controller)配置串口工作方式,是 8 位传送还是9

位传送以及波特率是否可以变;配置是否允许发送和接收。

我们常用方式1:即8 位串口,波特率可变。

在《扬帆起航篇》里面我们知道波特率其实就是通信的速率,在经后我们经常会

看到波特率9600、4800、19200 等。下面我们就会想波特率是如何计算出来的:如果我们选择常用的方式1:有上面的图5 我们查到:

波特率=(2SMOD / 32)×(定时器1的溢出率)

如果学过了《LED灯闪烁(定时法)》,我们就知道定时器 T1 的溢出率的计

算了,当然图5 里面已经说明了:

那波特率的公式就变为: 2 / 32 SYS clk /12 /(256 TH1) 波特率=(SMOD )×?

如果系统SYSclk 为11.0592MHz,我们就可以算出来波特率为9600 的时候定时器1 的初值TH1 了。

9600 = (20 / 32)×11059200 /12 /(256 ?TH1)

?TH1 = 253

十进制253 表示成16 进制为0xFD。

备注:为什么选择晶振频率为11.0592MHz,这边就得到了体现,因为波特率刚好除尽。当然串口通信速率是允许一定的误差的,一般±3%,所以用12M也可以正常通信的。

SBUF:串行口数据缓冲寄存器(Serial Buffer)用来保存串行线上接收或者发送

的数据。

PCON:电源控制器(Power Controller)配置波特率是否加倍(SMOD位)。

到这里,我们就可以写串口相关寄存器配置函数了:

/*串口初始化:主要涉及寄存器配置*/

void UartInit(void) //初始化uart

{

/*我们将串口配置成方式1,且允许发送和接收,将SCON寄存器相应的

位置1*/

SCON = 0X50;

/*我们波特率不加倍,SMOD=0*/

PCON = 0X00; //8位自动重载,波特率加倍

/*定时器1作为串口的波特率发生器,选择8位自动重装*/

TMOD = 0X20;

/*给定时器赋值初值*/

TH1 = 0XFD; //用11.0592MHz波特率9600

TL1 = 0XFD;

/*启动定时器*/

TR1 = 1;

}

同样,我们先看一下开发板原理图硬件连接:

从图6 中我们可以看到,8 个LED 灯刚好接到P1 口的8 个引脚。这样控制

就很方便了,要点亮8 个LED 灯,只需要P1 = 0;要灭掉8 个LED 灯,则P1= 0xff。

第三步:根据串口接收的数据控制LED灯

我们项目的要求是:接收到1,点亮8 个LED 灯,接收到2 灭掉8 个LED。

这个逻辑功能还是比较简单的,我们可以直接写:

/*读取串口接到到的内容:当然得先定义一个临时变量*/

unsigned char TempDat;

TempDat = SBUF;/*SBUF 是串口接到一个字节的数据*/

/*判断这个临时变量的值,如果是1,则点亮8 个LED 灯,如果是2,则灭

掉8 个LED*/

if (1 == TempDat)

{

P1 = 0;/*点亮8个LED灯*/

}} else if (2 == TempDat)

{

P1 = 0xff;/*关闭8个LED灯*/

}

其实到这里,我们算是完成了项目的功能,不过我需要等到串口正确接收一

个字节的数据采取读数据,这个数据才有意义。当然,串口正确接收到一个字节数据后,会更新一个标志RI,因此我们只需要一直判断RI 就可以了。

完整的程序请参考文档的首页部分。

知识点补充及总结

(1)串口是什么?

串口是串行通信,用来和其他设备通信的(RXD ,TXD,GND),是单片

机的内部资源,全双工方式。

(2)串口相关寄存器。

如果不考虑中断和多机通信,我们目前只需要考虑以下3 个寄存器,

SCON,PCON,SBUF 当然由于串口波特率和定时器T1 有关,所以还需要考虑定

时器T1 的相关寄存器,TCON,TH1,TL1 等。

(3)波特率计算。

公式为: 2 / 32 SYS clk /12 /(256 TH1) 波特率=(SMOD )×?

(4)串口通信的参数。

常用的是1 位停止位、无奇偶校验位。

双单片机控制流水灯(精)

案例8 双单片机通信控制流水灯 用串行工作方式进行单片机之间的通信,电路图如下图所示。两个89S51单片机通过串行口进行通信,设置U1使用的晶振频率是11.0592MHz,U2使用的晶振频率是22.1184MHz,U1的RXD接U2的TXD,U1的TXD接U2的RXD,U2接8个发光二极管,要求由U1向U2发送数据,使8个发光二极管按从左到右逐一点亮的流水灯效果。 MCS-51单片机之间的串行异步通信 1.串行口的编程串行口需初始化后,才能完成数据的输入、输出。其初始化过程如下: (1)按选定串行口的工作方式设定SCON的SM0、SM1两位二进制编码。 (2)对于工作方式2或3,应根据需要在TB8中写入待发送的第9位数据(地址为1,数据为0)。 (3)若选定的工作方式不是方式0,还需设定接收/发送的波特率。 (4)设定SMOD的状态,以控制波特率是否加倍。 (5)若选定工作方式1或3,则应对定时器T1进行初始化以设定其溢出率。 2.案例分析由于串行口通信时传输的“0”或者“1”是通过相对于“地”的

电压区分的,因此使用串行口通信时,必须将双方的“地”线相连以使其具有相同的电压参考点。需要注意的是,异步通信时两个单片机的串行口波特率必须是一样的。由于U1使用的晶振频率是11.0592MHz,U2使用的晶振频率是22.1184MHz,因此二者的串行口初始化程序不完全一样。假设使用240bit/s的波特率,使用串行工作方式1,Tl使用自动装载的方式2,则Ul的TH1应初始化为136,U2的TH1应初始化为16。 对应的程序完成如下功能:Ul和U2进行双工串行通信,Ul给U2循环发送流水灯控制字,U2收到控制字后送到P0口,点亮相应发光二极管,双方都用中断方式进行收发。 (1)单片机U1的源程序 #include unsigned char sdata=0xfe; void isr_uart(); void main() { TMOD=0X20; TH1=136; TL1=136; SCON=0x40; PCON=0; TR1=1; EA=1;ES=1; SBUF=sdata; while(1); } void isr_uart() interrupt 4 {

利用8255A芯片实现流水灯闪烁设计

目录 摘要 (2) 第1章利用8255A芯片实现流水灯闪烁设计的概述 (2) 第2章三种方案的论述与最终方案的确定 (2) 2.1第一种方案的论述 (2) 2.2第二种方案的论述 (5) 2.3第三种方案(最终方案)的论证 (10) 第3章测试结果及体会心得 (13) 第4章致谢 (14) 第5章参考文献 (14) 附录1 方案一Proteus仿真电路效果图 (15) 附录2 方案一源程序代码 (16) 附录3 方案二Proteus仿真电路效果图 (18) 附录4 方案二源程序代码 (19) 附录5 方案三(最终方案)Proteus仿真电路效果图 (20) 附录6 方案三(最终方案)源程序代码 (21)

摘要: 8255A是一种通用的可编程并行I/O接口芯片(Programmable Peripherial Interface),它是为Inter系列微处理器设计的配套电路,也可用于其它微处理器系统中。通过对它进行编程,芯片可工作于不同的工作方式。此次课程设计的目的就是利用端口和8255协同工作来实现LED显示功能,对8255A芯片进行编程使流水灯左移或右移,通过延时程序使流水灯进行顺序点亮。通过这次课程设计掌握8255A的功能特点、工作原理以及显示器接口的基本原理与方法技术。 关键词: 8086芯片AT89C51单片机8255A芯片LED流水灯 第1章利用8255A芯片实现流水灯闪烁设计的概述 流水灯在日常的生活中有着广泛的应用,例如,许多楼面上的彩灯广告就是应用了流水灯设计。此次的课程设计的题目是利用了端口和8255A协同工作来实现LED显示功能,编写程序,使用8255的A口和B口均为输出,接8个或16个发光二极管,实现流水灯的显示效果。在实验中8255A的A和B两个端口不能同时赋值,从而我们可以用通用寄存器BX对所需要赋值的数据进行存储,因为BX可以分从高8位寄存器BH和低8位寄存器BL两部分进行独立的操作,我们用寄存器BH对A口进行赋值,用寄存器BL对B口进行赋值,通过延时一段时间再对BH 和BL进行移位和输出,实现了流水灯的效果。 第2章三种方案的论述与最终方案的确定 2.1第一种方案的论述 第一种方案,我们使用了8086CPU芯片与8255A芯片一起实现了流水灯闪烁的设计,同时还使用了地址锁存器74LS373芯片。74ls373是常用的地址锁存器芯片,它是一个是带三态缓冲输出的8D触发器,在单片机系统中为了扩展外部存储器,通常需要一块74ls373芯片。在方案一中,当8086CPU的引脚ALE(地址锁存允许信号,输出,高电平有效,用作地址锁存器74LS373的锁存控制信号)处于下降沿时将8086CPU输出的地址信息进行锁存,以定义8255A的工作方式。下面先对74LS373芯片进行简介: 1.地址锁存器74LS373的内部电路与工作原理

实验五 流水灯与中断控制

一、实验设备 (1)PC一台 (2)单片机多功能试验板一块 (3)KEIL uVision 4.22 集成开发环境、STC-ISP烧录软件、串口调试助手(电子工程基础实验QQ群文件共享) 二、实验目的 (1)了解单片机的4组I/O端口 (2)掌握通过串口通信控制LED灯的方法 (3)复习巩固C语言知识 三、实验要求与任务 使用KEIL uVision 4软件新建一个C51内核工程,步骤如下: (1)在”Soruce Group 1”新建C程序文件,文件名:main.c (2)在工程中新建两个组,名称分别为com和myled. (3)在工程文件对应的目录下,再新建两个目录,com文件夹和myled文件夹。 (4)在工程中新建四个文件,分别名称com.c, com.h, myled.c, myled.h,前两个文件保存在com文件夹中,后两个文件保存在myled文件夹中。 (5)将共享资料的“单片机开发板资料\学习版资料\例程\LED\driver”目录及文件拷贝到工程文件所在的目录中,并在工程中新建driver组,把driver文件夹下的 两个文件添加进去。(提示,我们要使用它提供的延时函数) 文件的组织结构如下图: 实验任务: 通过串口助手输入分别输入字符‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,分别完成以下功能: 输入’0’,打开led1到led5共5个灯,它们处于常亮状态。 输入’1’,关闭led1到led5共5个灯。 输入’2’,led1到led5这5个灯间隔0.5秒轮流点亮(流水灯效果)。

输入’3’,led1、led3、led5这3个灯间隔0.5秒轮流点亮(流水灯效果)。 输入’4’,led2、led4这3个灯间隔0.5秒轮流点亮(流水灯效果)。 四、示例代码 1. 实例代码 https://www.sodocs.net/doc/9a11873001.html,.c文件(不需要修改,可参考主程序中如何调用它里面的函数)

单片机控制左右来回循环的流水灯

左右来回循环的流水灯 设计要求 8个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。编程实现制作左右来回循环的节日彩灯,显示规律如下图所示。 题37图节日彩灯的花样显示的规律 为了使显示效果更加绚丽多彩,P1端口8个引脚分别接有不同颜色的发光二极管。具体如题37表所示。 题37表P1口8个引脚的不同颜色的发光二极管 使用C51编流水灯程序以及设计相应的硬件电路十分简单,且有多种方法。本方案力求程序最简化最清晰原则,用NS图(盒图)表示算法如下:

程序中设置中间变量temp用来给P1口赋值,命令_crol_和_cror_用于使temp左移或右移,例如当temp=11111110B时,执行_crol_(temp,1)之后temp=11111101,应用此两条语句必须把头文件包含进来。 全部代码如下: #include #include unsigned char temp; //定义字符变量temp,temp左移或右移并给连接LED的P1口赋值 int a; //定义延迟函数delay() void delay(void); void main() { temp=0xfe; //给temp赋初值 P1=temp; //temp赋值给P1口,第一个LED(红色)点亮 while(1) //主程序,括号中的程序将一直循环 { for(a=0;a<7;a++) //左移部分,LED从左到右依次点亮 { temp=_crol_(temp,1); //_crol_语句控制变量temp左移 delay(); //每个灯点亮之后延迟一会在点下一个灯 P1=temp; }

多功能多路流水灯控制电路的设计仿真与制作

附件1: 学号:0121209310130 课程设计 题目多功能多路流水灯控制电路的设 计仿真与制作 学院信息工程学院 专业电子信息工程 班级电信1201 姓名鲁玲 指导教师孟哲 2014 年 6 月20 日

课程设计任务书 学生姓名:鲁玲专业班级:电信1201 指导教师:孟哲工作单位:信息工程学院 题目: 多功能多路流水灯控制电路的设计仿真与制作 初始条件: 集成译码器、计数器、555定时器、移位寄存器、LED和必要的门电路或其他器件。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具 体要求) 1、课程设计工作量:1周内完成对数字频率计的设计、仿真、装配与调试。 2、技术要求: 错误!未找到引用源。设计一个具有16路(或矩阵)LED不同显示方式或显示图形的控制电路。 错误!未找到引用源。不同显示方式的控制可以是自动结合按键手控等。 ③确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分 电路,画出总体电路原理图,阐述基本原理。 3、查阅至少5篇参考文献。按《武汉理工大学课程设计工作规范》要求撰写设计报告 书。全文用A4纸打印,图纸应符合绘图规范。 时间安排: 1)第1-2天,查阅相关资料,学习设计原理。 2)第3-4天,方案选择和电路设计仿真。 3)第4-5天,电路调试和设计说明书撰写。 4)第6天,上交课程设计成果及报告,同时进行答辩。 指导教师签名:年月日

系主任(或责任教师)签名:年月日

前言 (2) 1 设计方案 (3) 1.1 设计意义 (3) 1.2 设计目的 (3) 1.3 原理图及工作原理 (3) 2 电路板焊接技术介绍 (4) 2.1 焊接操作要领 (4) 2.2 注意事项 (5) 2.3.焊接调试 (6) 3 电路板的安装与制作 (6) 3.1 确定电路板整体布线图 (6) 3.2 555振荡电路 (6) 3.3 74LS191计数部分 (7) 3.4 74LS138译码电路和LED显示部分 (7) 3.5 5V直流稳压电源电路 (7) 4 电路板的调试 (8) 4.1 调试方法和步骤 (8) 4.2 出现的问题及处理方法 (8) 5 电路实拍图 (10) 6 总结及心得体会 (12) 7 元件清单 (13) 8 参考文献 (14) 附件 (15)

(完整word版)51单片机流水灯

51单片机的流水灯控制 班级:100712 姓名:全建冲 学号:10071047

一、设计要求 用51单片机设计一个流水灯的控制方案,要求采用定时器定时,利用中断法控制流水灯的亮灭,画出电路图和程序流程图,写出程序代码以及代码注释。 二、电路原理图 原理图分析: 本原理图采用STC89S52单片机控制8个LED灯,其中8个LED灯的负极接单片机的P1端口,正极通过1KΩ排阻连接到电源上。原理图中还给出了晶振与复位端,以保证控制器的稳定工作。

三、程序流程图

四、程序代码及注解 1.非中断定时器控制 #include #include//包含了_crol_函数的头文件 #define uchar unsigned char #define uint unsigned int uint i=0; uchar a=0xfe; void main() { TMOD=0x01;//设置工作方式为定时器0,16位手动重装初值 TH0=(65536-46080)/256;//50毫秒定时赋初值 TL0=(65536-46080)%256; TR0=1;//启动定时器0 while(1) { If(TF==1)//读溢出标志位 { TH0=(65536-46080)/256;//重新赋初值 TL0=(65536-46080)%256;

i++; if(i==10)//500毫秒定时 { i=0; P1=a;//P1端口赋值 a=_crol_(a,1);//循环左移 } TF=0;//清除定时器溢出标志 } } } 程序分析:本程序采用非中断定时器法控制流水灯,核心语句在于读取标志位TF位,TF为定时器溢出标志位,溢出时硬件自动置一,所以循环读取标志位以判断定时器是否溢出,而每次溢出需要手动清零,否则定时器无法再次溢出,利用标志i读取10次即可达到500毫秒的定时。另外需要注意的是单片机晶振为11.0592MHz,所以计时一个数的时间为12/11.0592=1.085us,故定时50毫秒的计数为50000/1.085=46080。 2.中断定时器控制 #include

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。那个单片机究竟有什么 功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^) 我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机 上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。 #include //头文件定义。或用#include其具体的区别在于:后者定义了更多的地址空间。 //在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 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) {

流水灯电路的制作

流水灯电路的制作 一、概述: 随着电子技术的快速发展尤其是数字技术的突飞猛进,多功能流水灯凭着简易,高效,稳定等特点得到普遍的应用。在各种娱乐场所、店铺门面装饰、家居装潢、城市墙壁更是随处可见,与此同时,还有一些城市采用不同的流水灯打造属于自己的城市文明,塑造自己的城市魅力。目前,多功能流水灯的种类已有数十种,如家居装饰灯、店铺招牌灯等等。所以,多功能流水灯的设计具有相当的代表性。 多功能流水灯,就是要具有一定的变化各种图案的功能,主要考察了数字电路中一些编码译码、计数器原理,555定时器构成时基电路,给其他的电路提供时序脉冲,制作过程中需要了解相关芯片(NE555、CD4017)的具体功能,引脚图,真值表,认真布局,在连接过程中更要细致耐心。 二、电路原理图 三、电路工作原理 多功能流水灯原理电路图如上图所示。原理电路图由振荡电路、译码电路和光源电路三部分组成。本文选用的脉冲发生器是由NE555与R2、R3及C1组成的多谐振荡器组成。主要是为灯光流动控制器提供流动控制的脉冲,灯光的流动速度可以通过电位器R3进行调节。由于R3的阻值较大,所以有较大的速度调节范围。灯光流动控制器由一个十进制计数脉冲分配器CD4017和若干电阻组成。 CD4017的CP端受脉冲发生器输出脉冲的控制,其输出端(Q0~Q9)将输入脉冲按输入顺序依次分配。输出控制的脉冲,其输出控制脉冲的速度由脉冲发生器输出的脉冲频率决定。10

个电阻与CD4017的10个输出端Q0~Q9相连,当Q0~Q9依次输出控制脉冲时10个发光二极管按照接通回路的顺序依次发光,形成流动发光状态,即实现正向流水和逆向流水的功能。电源电路所采用的电源为。 四、板的设计 五、元器件清单 六、电路的组装与调试 1、电路的组装方法和步骤 (1)筛选元器件。对所有购置的元器件进行检测,注意它们的型号、规格、极性,应该保质量。 (2)按草图在PCB板上组装并焊接。 要求:①元器件布局整齐、美观,同类型元器件高度一致;

定时器控制流水灯

成绩 信息与通信工程学院实验报告 (操作性实验) 课程名称:微机原理与微控制器应用 实验题目:c51单片机的定时器实验指导教师: 班级: 学号:学生姓名: 一、实验目的和任务 1.掌握定时器中断的编程方法。 2.掌握keil C51集成开发环境在硬件仿真条件下各参数的设置。 二、实验仪器及器件 硬件:电脑一台、微机原理与单片机试验箱:51开发板、开关及LED显示单元、导线若干 软件:keil uVision4 三、实验内容及电路图 利用实验板上的八个LED灯作显示,利用定时器中断编写中断一次为50ms的定时程序,控制单片机定时器进行定时,总定时时间为0.75ms。

四、流程图与程序 #include "SST89x5x4.h" #include int temp=0x01,num=0; void T0Int() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; num++; if(num==15) { num=0; P1=_crol_(temp,1);

temp=P1; } } void main() { EA=1; ET0=1; TMOD=0X01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; TR0=1; while(1); } 五、实验结果 八个LED灯由左往右依次亮起,并且每个LED灯点亮时间大约为0.75m。

六、实验数据分析及处理 从实验现象来看,LED灯从左到右依次点亮,符合实验要求,说明实验操作正确,实验结果正确。 七、实验结论与感悟(或讨论)

最新五种编程方式实现流水灯的单片机c程序讲课教案

五种编程方式实现流水灯的单片机C程序 //功能:采用顺序结构实现的流水灯控制程序 /*此方式中采用的是字操作(也称为总线操作)*/ #include void delay(unsigned char i); //延时函数声明 void main() //主函数 { while(1) { P1 = 0xfe; //点亮第1个发光二极管,0.000389s delay(200); //延时 P1 = 0xfd; //点亮第2个发光二极管,0.155403s,0.1558 delay(200); //延时 P1 = 0xfb; //点亮第3个发光二极管 delay(200); //延时 P1 = 0xf7; //点亮第4个发光二极管 delay(200); //延时 P1 = 0xef; //点亮第5个发光二极管 delay(200); //延时 P1 = 0xdf; //点亮第6个发光二极管 delay(200); //延时 P1 = 0xbf; //点亮第7个发光二极管 delay(200); //延时 P1 = 0x7f; //点亮第8个发光二极管 delay(200); //延时 } } //函数名:delay //函数功能:实现软件延时 //形式参数:unsigned char i; // i控制空循环的外循环次数,共循环i*255次 //返回值:无 void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{ unsigned char j, k; //定义无符号字符型变量j和k for(k = 0; k < i; k++) //双重for循环语句实现软件延时 for(j = 0; j < 255; j++); } //功能:采用循环结构实现的流水灯控制程序 //此方式中采用的移位,按位取反等操作是位操作 #include //包含头文件REG51.H void delay(unsigned char i); //延时函数声明 void main() //主函数

利用电位器改变流水灯速度控制程序

#include #include #include #include unsigned int x; unsigned int y; unsigned int mode = 1; unsigned int AD_value; main() { bit key_mode1 = 1; bit key_mode2 = 1; PORT_INI(); CLK_ICKR|=0x01; //开启内部HSI while(!(CLK_ICKR&0x02));//HSI准备就绪 CLK_SWR=0xe1; //HSI为主时钟源 CLK_CKDIVR=0x00; _asm("rim");//开总中断 TIM1_CR1 = 0b10000100; TIM1_PSCRH = 0x00; //定时时间0.6S TIM1_PSCRL = 1; //20分频 TIM1_ARRH = 0xEA; TIM1_ARRL = 0x60;//自动重装载寄存器 TIM1_IER|=0X01; //中断使能寄存器 TIM1_CNTRH = 0X00; TIM1_CNTRL = 0X00; TIM1_EGR |=0X01; //软件产生更新事件,让预分频立即有效。TIM1_SR1 = 0; //状态寄存器 TIM1_CR1 |=0X01; //TIM1_RCR=0; ADC_CR1 = 0x00; //分频系数为4 单次转换模式 ADC_CR2 = 0x00; //非外部触发数据右对齐 ADC_CSR = 0x05; //禁止转换结束中断设置转换通道ADC_CR1 |= 0x01; //第一次写1是从低功耗模式唤醒

单片机课程设计 外部中断控制流水灯变化

单片机课程设计报告 设计题目:外部中断控制流水灯变化 姓名

一.设计目的 通过学习单片机工作原理和各种工作方式及各管脚的功能,想通过P3口的俩管脚P3.2和P3.3第二功能,即外部中断来使CPU响应,达到控制流水灯的目的。 二.设计要求 主程序实现8个灯从P2.0到P2.7依次亮灭,灯与灯 之间间歇约0.5秒.当P3.3口是低电平时,灯从P2.7到P2.0依次亮灭,灯与灯之之间间歇约0.5秒.循环3次返回主程序.当P3.2口是低电平时,灯全灭,当P3.2口是高电平时,返回主程序.当同时使P3.2和P3.3为低电平时,灯全灭,因为外部中断0的优先级高于外部中断1的优先级. 三.MCS-51的硬件结构: 四.P3口的状态 P3口是双功能口,默认为第一功能(通用I/O口),通过编程可设

置第二功能。 五.中断传送方式: 中断方式则是在外设为数据传送做好准备之后,就向CPU发出中断请求信号(相当于通知CPU)。CPU接收到中断请求信号之后立即作出 响应,暂停正在执行的原程序(主程序),而转去外设的数据输入输出 服务,待服务完之后,程序返回。CPU再继续执行被中断的原程序。六.外部中断 外部中断是指从单片机外部引脚输入请求信号。输入/输出的中断请求、实时事件的中断请求、掉电和设备故障的中断请求都可以作为 外部中断源,从引脚INT0、INT1输入。 外部中断请求、有两种触发方式:电平触发及跳变(边沿)触发。 这两种触发方式可以通过对特殊功能寄存器TCON编程来选择。 七.电路原理逻辑图如下:

八.实验硬件电路图如下

九.程序流程图如下 十.程序清单 ORG 0000H AJMP START ORG 0003H AJMP SER ORG 0013H AJMP SER1 ORG 0030H START: MOV IE,#85H ;外部中断0和1都开

51单片机LED流水灯拖尾效果

高级流水灯--水滴效果(渐变带拖尾效果)实现和讲解 简介 学习嵌入式第一个例子通常都是控制一个LED亮灭,然后是花样繁多的流水灯,但不管灯的花样如何变化,单个LED的亮度没有变化,只有亮、灭两个状态,本章我们实现如何控制LED的亮度。 1 什么是PWM 脉冲宽度调制(Pulse Width Modulation,简称PWM),是利用微处理器的数字输出来对模拟电路进行控制的一种技术。 在本章的应用中可以认为PWM就是一种方波。比如图1: https://www.sodocs.net/doc/9a11873001.html,/bbs_upload782111/files_48/ourdev_701979FVHE6E.png (原文件名:120611_0.png) 图1 方波 是周期为10ms,占空比为60%的PWM。 占空比:高电平在一个周期之内所占的时间比率。 2 硬件设计 在例说51单片机的第三章,我们讲过如何控制开发板上LED的亮灭。首先译码器输出端LEDS6为低,T10导通,给8个LED供电,然后通过缓冲器8个输出端BD0~BD7的控制LED的亮灭(低亮高灭)。https://www.sodocs.net/doc/9a11873001.html,/bbs_upload782111/files_48/ourdev_701980ZDAXQ9.png (原文件名:120611_1.png) 图2 LED硬件连接 如果BD口输出高低不断变化,则LED会闪烁;如果这种高低电平变化非常快,由于人的视觉暂留现象,LED就会出现不同的亮度。 3 软件设计 3.1 PWM能否控制亮度 下面我们就用实践验证PWM是否能够控制LED的亮度,测试代码如下: 程序清单L1:验证PWM能否控制LED的亮度 1 #include 2 #include "my_type.h" 3 #include "hw_config.h" 4 5 6 void main(void) 7 { 8 u8 i = 0; 9 10 //使能独立LED的供电,即LEDS6输出低电平 11 LEDEN = 0; 12 ADDR0 = 0; 13 ADDR1 = 1; 14 ADDR2 = 1; 15 ADDR3 = 1;

单片机控制LED流水灯从中间向两边

单片机控制LED流水灯从中间向两边,从两边向中间 这个就是把先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的应该是这样的先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动; #include< reg52.h> #include< intrins.h> #define uint unsigned int #define uchar unsigned char void delay(); void main() { uchar temp,temp1,temp2,a,b; P3=0xff; while(1) { for(b=3;b>0;b--) { temp=0xaa; P1=temp; delay(); temp=0x55; P1=temp; delay(); } for(a=3;a>0;a--) { temp=0xfe; for(b=7;b>0;b--) { P1=temp; temp=_crol_(temp,1); delay(); P1=temp; delay(); } } temp1=0xfe; temp2=0x7f; for(a=8;a>0;a--) { temp=temp1&temp2; P1=temp; delay(); temp1=_crol_(temp1,1); temp2=_cror_(temp2,1);

} } void delay() { uint a,b; for(a=100;a>0;a--) for(b=600;b>0;b--); } 程序实现的第2种方法:下面是https://www.sodocs.net/doc/9a11873001.html,单片机12群里的朋友木信大侠提出的,实现单片机led流水灯从中间向两边,从两边向中间的效果,下面的程序就是实现思路,这个是直接调用,应该明白吧,数组那其实也可以改一下,如采用一维数组,在多次调用;也可以采用二维数组。主要看个人喜好. ----------------------------------------------------- #include< reg52.h> unsigned char code TABLE[]={ 0xFF,0xE7,0xC3,0x81,0x00, //从中间向两侧点亮 0xFF,0xE7,0xC3,0x81,0x00, 0xFF,0xE7,0xC3,0x81,0x00, 0xFF,0x7E,0x3C,0x18,0x00, //从两侧向中间点亮 0xFF,0x7E,0x3C,0x18,0x00, 0xFF,0x7E,0x3C,0x18,0x00 }; unsigned char i; DELAY() { unsigned int s; for(s=0;s<30000;s++); } main() { while(1) { if(TABLE[i]!=0x01) { P1=TABLE[i]; i++; DELAY(); } else

EDA实验流水灯控制

彩灯控制器 一、设计内容及要求: 设计一个彩灯控制器,要求: 1.四路彩灯从左向右逐次渐亮,间隔为1秒。 2.四路彩灯从右向左逐次渐灭,间隔为1秒。 3.四路彩灯同时点亮,时间间隔为1秒,然后同时变暗,时间为1秒,反复4次。 二、总体框图 图(1)总体框图 根据设计要求,电路设计大体思路如下: 由脉冲发生器发出频率脉冲信号,利用计数器加法计数功能输出0000~1111的脉冲信号,经过数据选择器分别在0000~0011,0100~0111,1000~1111三个时段输出不同的高低电平,控制移位寄存器实现右移→左移→置数功能,从而控制彩灯按照设计要求实现亮灭。 三、选择器件 本次课程设计所用器件如表一: 表一本次课程设计所用器件

1.同步二进制计数器74LS163 表二7-3 74LS163功能表 根据逻辑图、波形图、功能表分析,74LS163具有如下功能:

管脚图逻辑符号 1)1是同步4位二进制加法计数器,M=16,CP上升沿触发 2)2既可同步清除,也可异步清除。同步清除时,清除信号的低电平将在下一个CP上升沿配合下把四个触发器的输出置为低 电平。异步清除时,直接用清除信号的低电平把四个触发器的输出置为低电平。 3)3同步预置方式:当LD = 0时,在CP作用下,计数器可并行打入预置数据.当LD = 1时,使能输入PT同时为高电平,在 CP作用下,进行正常计数。 4)PT任一为低时,计数器处于保持状态。 5) 5 CO为进位输出,可用来级联成n位同步计数器。 2.四位双向移位寄存器74LS194 74LS194内部原理图 74LS194四位双向移位寄存器具有左移、右移、并行数据输入、保持、清除功能。 1)从图1中74LS194的图形符号和引脚图分析。SRG4是4位移位寄存器符号,D0~D3并行数据输入端、D SL左移串行数据输入端、D SR右移串行数据输入端、S A(M0)和S B (M1)(即9脚和10脚)工作方式控制端分别接电平开关,置1或置0,CP 时钟输入端接正向单次脉冲,清零端接负向单次脉冲,Q0~Q3输出端。 表三逻辑符号逻辑框图

多按键花样流水灯设计

指导教师:许景辉

多按键花样流水灯的设计 摘要:自人类发明计算机以来,单片机技术在社会各领域中得到了广泛的应用。在流水灯控制系统中,单片机的作用更是发挥的淋漓尽致,成为此系统中的核心部分。利用单片机的可编程功能,软硬件结合,来控制LED的灯的开通关断,通过丰富多彩的花样变化,给人以不同的视觉效果,更是成为现代商业社会不可缺少吸引消费者的普遍手段。本文结合单片机的突出特点,着重介绍通过单片机来实现多按键花样流水灯的变化,主要包括其软件程序的编写、硬件电路的搭接、器件的选择,以及通过PROTEUS的仿真和PCB板的制作等。 关键词:单片机、可编程控制器、多按键花样流水灯、准确。

目录 前言 (4) 第一章设计目的和要求 (5) 1.1 设计目的 (5) 1.2 设计基本要求 (5) 第二章方案设计 (6) 2.1 方案设计任务分析 (6) 2.2硬件系统的设计要求 (6) 2.2.1 主控系统 (7) 2.2.2花样灯输入及中断控制模块 (7) 2.2.3 花样灯输出控制部分 (8) 2.2.4 时钟及复位部分电路 (9) 2.3 软件总体设计 (13) 2.3.1 程序设计流程图 (13) 2.3.2 主程序 (13) 第三章硬件设计 (17) 3.1 80c51单片机 (17) 3.2PCB板的生成 (18) 第四章软件设计 (20) 4.1 中断子程序 (20) 4.2 跑马灯子程序 (20) 4.3 流水灯子程序 (20) 4.4戏水灯子程序 (21) 4.5 延时子程序 (21) 第五章操作说明 (22) 5.1 跑马灯操作说明 (22) 5.2 流水等操作说明 (22) 5.3 戏水灯操作说明 (23) 5.4 顺寻循环执行三种花样灯操作说明 (23) 结束语 (24) 参考文献 (25)

PLC控制的流水灯

自主创新实践报告 设计题目P LC在流水灯中的应用 学生姓名 专业 班级 指导教师

目录 第一章绪论 (2) 1.1引言 (2) 1.2采用流水灯的意义和目的 (2) 1.3本次设计的主要内容 (2) 第二章主要硬件设备的介绍 (3) 2.1可编程控制器的发展历史 (3) 2.1.1可编程控制器的定义 (4) 2.1.2可编程控制器的特点 (4) 2.1.3PLC的基本结构和工作原理 (5) 2.2西门子S7-200的硬件组成 (8) 第三章电路及软件设计 (10) 3.1硬件电路设计 (10) 3.1.1流水灯分布图 (10) 3.1.2控制系统I/O点及地址分配 (10) 3.2软件设计 (11) 3.2.1梯形图 (11) 3.2.2指令表 (19) 第四章系统调试 (21) 4.1系统的连接与运行 (21) 4.2流水灯闪烁 (21) 4.3流水灯的调试 (22) 总结 (23)

第一章绪论 1.1引言 随着改革的不断深入,社会主义市场经济的不断繁荣和发展,各大中小城市都在进行亮化工程。企业为宣传自己企业的形象和产品,均采用广告手法之一:流水灯广告屏来实现这一目的.当我们夜晚走在大街上,马路两旁各色各样的广告灯均可以见到,一种是采用流水灯管做成的各种形状和多中彩色的灯管,另一种为日光等管或白炽灯管作为光源,另配大型广告语或宣传画来达到宣传的效果。这些灯的亮灭,闪烁时间及流动方向等均可以通过PLC 来达到控制的要求。可编程控制器PLC:英文全称Programmable Logic Controller,中文全称为可编程逻辑控制器,是一种数字运算操作的电子系统,专为在社会环境应用而设计的。它采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算,顺序控制,定时,计数与算术操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程.作为自动控制装置的核心,它具有功能强,可靠性高等诸多优点。该装置可以完成各种指令系统训练以及多种控制对象的程序设计训练。 1.2采用流水灯的意义和目的 随着社会市场经济的不断发展,各种装饰流水灯,广告流水灯越来越多的出现在城市中。在大型的晚会现场,流水灯更是不可缺少的一道景观。小型的流水灯多为采用霓虹灯管和各种各样和多种彩色的灯管,或是以日光灯,白炽灯做为光源。而现代生活中大型楼宇的轮廓装饰或大型晚会的灯光布景,由于其变化多,功率大数字电路则不能胜任。针对PLC日益日益得到广泛应用的现状,本文介绍PLC在不同变化类型的流水灯控制中的应用,灯的亮灭,闪烁时间及流动的控制均通过PLC来达到控制要求。 1.3本次设计的主要内容 本次设计要求我利用在学校学的PLC知识,应用于流水灯控制系统中。通过本次设计,让我掌握如何应用PLC来设计一套流水灯自动控制的系统的方法以及设计中对PLC机型的选择,PLC输入/输出点数的选择和PLC程序的编制,为我们今后今进入社会工作,打下一定基础。本次设计是用PLC来控制流水灯。PLC控制流水灯是根据一定的变化方式和周期进行程序的编写,变化灯随着时间变化灯的亮灭也随之变化。其特点是在整个工作过程中周期性的花样变化,但频率不高。

多按键花样流水灯的设计

摘要 自人类发明计算机以来,单片机技术在社会各领域中得到了广泛的应用。在流水灯控制系统中,单片机的作用更是发挥的淋漓尽致,成为此系统中的核心部分。利用单片机的可编程功能,软硬件结合,来控制LED的灯的开通关断,通过丰富多彩的花样变化,给人以不同的视觉效果,更是成为现代商业社会不可缺少吸引消费者的普遍手段。 本文结合单片机的突出特点,着重介绍通过单片机来实现多按键花样流水灯的变化,主要包括其软件程序的编写、硬件电路的搭接、器件的选择,以及通过PROTEUS的仿真和PCB 板的制作等。 关键词: 单片机、可编程控制器、多按键花样流水灯、准确。

前言 单片微型计算机简称单片机(single-chip microcomputer),又称为单片机微型控制器(single-chip microcontroller),是由CPU、RAM、ROM、定时/计时器、I/O接口电路通过应刷电路板上的总线连成一体的完整计算机系统。 从1971年出现单片机的雏形开始,短短四十多年的时间里,单片机便社会各领域中得到了广泛的应用在流水灯控制系统中,单片机更是取代了由齿轮调节延迟时间的旧式控制系统,成为日后此系统中的核心部分。 由于单片机具有一些突出的优点:体积小、重量轻、电源单一、功耗低;功能强、价格低;数据大都在单片机内部传送,运行速度快、抗干扰能力强、可靠性高,所以单片机被广泛的应用于测控系统、数据采集、智能仪器仪表、机电一体化产品、智能接口、计算机通信以及单片机的多级系统等领域。 本文主要讲的是单片机,课题名称为多按键花样流水灯,它使我们学会了如何使用单片机控制我们日常生活中的多设备设施的应用。通过本课题的设计以后,使我了解到了单片机的许多方面的应用。

用单片机控制的LED流水灯设计(电路、程序全部给出) 开关电源设计制作

用单片机控制的LED流水灯设计(电路、程序全部给出)开关电源设计制作学习园地 » 您尚未登录注册 | 社区服务 | 勋章中心 | 帮助 | 首页 | 无图版 社区服务 银行 朋友圈 开关电源设计制作学习园地 -> 好好学习-天天向上 -> 用单片机控制的LED流水灯设计(电路、程序全部给出) XML RSS 2.0 WAP --> 本页主题: 用单片机控制的LED流水灯设计(电路、程序全部给出)加为IE收藏 | 收藏主题 | 上一主题 | 下一主题 pwmdy 级别: 电源-1级工程师 精华: 0 发帖: 212 威望: 126 点 金钱: 212 RMB 贡献值: 0 点 注册时间:2009-05-21 最后登录:2009-11-22 用单片机控制的LED流水灯设计(电路、程序全部给出) 1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。 2.硬件组成 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个

推荐-基于单片机AT89C51控制的中断控制流水灯课程设计

宁波技师学院 课程设计报告 设计课题:单片机——中断控制流水灯

摘要 随着计算机技术的迅猛发展,计算机越来越广泛地应用于人们工作和生活的各个领域。作为计算机领域里的一个重要方面单片机及其应用技术近年来也得到了长足的发展。 单片机被广泛地应用在工业自动化控制、智能仪器仪表、数据采集、通讯以及家用电器等领域。单片机以其与通用微机完全不同的发展模式,不断满足工业测控、恶劣环境下可靠运行的要求。、单片机已成为现代工业领域中不可缺少的重要角色。 单片机技术的发展速度十分迅速,速度更快、功能更强的16位、32位单片机以及陆续问世,但8位机,特别是新一代高档8位机具有优异的性能,已能满足大部分单片机应用领域的需要,另外,它还具有可靠性高、外围芯片配套、系统结构简单、应用软件丰富、技术成熟、开发应用方便等优点,在单片机市场中依旧据有一定地位。

目录

一总体设计方案 1.1系统设计方案 流水灯系统主要由:复位电路、晶振电路、数码管显示电路、LED灯指示电路、速度与方式选择电路等部分电路组成。 各器件的选用: 1 单片机的选用: 单片机芯片选用A T89C51。 2数码管的选用: 数码管选用共阳极数码管。 3晶振的选用: 晶振选用的是12MHZ。 1.2系统结构框图 框图如图1.2-1。 图1..2-1系统结构框图

二系统硬件设计 复位电路、晶振电路、数码管显示电路迪电路组成。 2.1晶振电路 图2.1-1晶振电路 内部方式时钟电路如图2.1-1所示。在XTAL2和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。

2.2复位电路 图2.2-1按键复位电路 按键手动复位有电平方式和脉冲方式。而此次选用的便是按键电平复位。按键电平复位是通过复位端经电阻与Vcc接通而实现的。电路如图2.2-1所示。

相关主题