文档库 最新最全的文档下载
当前位置:文档库 › 单片机实现发光二极管的循环点亮控制讲解

单片机实现发光二极管的循环点亮控制讲解

单片机实现发光二极管的循环点亮控制讲解
单片机实现发光二极管的循环点亮控制讲解

桂林电子科技大学单片机最小应用系统

指导老师:吴兆华

学生:钟静茹

学号:09210202

机电工程学院

2010年6月

单片机最小应用系统设计报告

目录

一、设计题目 (3)

二、设计内容与要求 (3)

三、设计目的意义 (3)

四、系统硬件电路图 (4)

五、程序流程图与源程序 (6)

5.1流程图 (6)

5.2源程序 (7)

5.2.1程序设计思想 (7)

5.2.2源程序清单 (7)

六、系统功能分析与说明 (9)

6.1系统主要组成部分 (9)

6.2指示灯显示部分 (10)

6.3 电路板的制作 (10)

6.3.1 PCB图的制作 (11)

6.3.2 电路板的腐蚀、钻孔和元器件的焊接 (13)

七、设计体会 (11)

八、参考文献 (12)

一、设计题目

用8031单片机实现发光二极管的循环点亮控制。采用3个按键分别控制发光二极管的启动、停止及每个灯点亮的时间的更换,定时时间有软件控制。

二、设计内容与要求

用8031单片机控制8个发光二极管循环点亮。要求用按键控制点亮时间(如每个灯点亮0.5秒或者1秒等,各灯点亮时间相同)。按启动键开始循环点亮;按停止键后停止。

三、设计目的意义

1、掌握单片机系统中扩展简单I/O接口的方法。

2、掌握单片机的硬件接口电路、8031单片机的内部结构及其编程方法。

3、掌握单片机的最小系统的设计。

4、掌握电路板的设计与制作。。

5、了解程序编写与调试的方法和技巧。

6、综合掌握所学的单片机指令系统和硬件接口电路知识,进行简单的最小系统开

发。

四、系统硬件电路图

系统硬件图(图1)包括单片机最小系统(复位电路、晶振电路和相关的控制信号)、外电路接通显示部分、及电源显示部分。

设计硬件电路图时,其基本思想:先通过万能板搭建试验平台,将编好的程序下载到51中,等可以达到预期要求后,最后在PROTEL中设计原理图与PCB,做出电路板。

图1 系统硬件图

五、程序流程图与源程序

5.1流程图

5.2源程序

5.2.1程序设计思想

单片机通入电源后,一直让单片机对8031的P1和P3口进行采集,将8031的P3口开关信号送入8031,以控制流水灯的亮灭及时间。

5.2.2源程序清单

#include

#define uchar unsigned char

#define uint unsigned int

sbit KEY1 = P3^2;

sbit KEY2 = P3^3;

sbit KEY3 = P3^4;

uchar Count = 0,i,k;

uchar code table[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void Delay(uint del)

{

uint i,j;

for(i=0; i

for(j=0; j<1827; j++)

;

}

void Time0_Init()

{

TMOD = 0x01;

TH0 = 0x4c;

TL0 = 0x00;

TR0 = 1;

IE=0x82;

}

void Time0_Int() interrupt 1

{

TH0 = 0x4c;

TL0 = 0x00;

Count++;

}

void Outside1_Init(void)

{

IT0 = 1;

EX0=1;

EA=1;

}

void Outside1_Int(void) interrupt 0 {

EX0 = 0;

Delay(3);

if(KEY1 == 0)

{

while(1)

{

P0 = table[k];

if(KEY2==0)

{

break;

}

}

}

Delay(30);

EX0 = 1;

}

void Main(void)

{

uint i = 0,j=0;

Time0_Init();

Outside1_Init();

while(1)

{ for(i=0;i<8;i++)

{

P0 = table[i];

k=i;

if(KEY3 == 0)

{

Delay(1);

if(KEY3== 0) {

j++;

}

Delay(50);

}

if(j%2==1)

{

while(1)

{

if(Count == 20)

{

Count = 0;

break;

}

}

}

else

{

while(1)

{

if(Count == 10)

{

Count = 0;

break;

}

}

}

}

}

}

六、系统功能分析与说明

6.1系统主要组成部分

(1)单片机的最小系统部分包括晶振电路、复位电路、主电源引脚Vss和Vcc、控制引脚/EA。

(2)晶振电路为单片机正常工作时提供的时钟信号,由两个30pf的无极性电容和晶体压电瓷片组成外部振荡电路,把单片机的XTAL1和XTAL2分别接到外晶体的两端,使电容的另外一端接地就完成了单片机的晶振电路部分的设计。

(3)复位电路,当振荡器正常工作时,在单片机的复位引脚连续保持出现两个机器周期以上的高电平时,就会使单片机复位。AT89S51单片机复位电路主要有上电复手动复位和自动复位两种,在本次试验中我采用手动复位。按键手动复位的工作原理是:当按下按键时,电源对外接电容进行充电,使RST端为高电平,复位键松开后,电容通过内部下拉电阻放电,逐渐使RST端恢复低电平。具体电路见图2复位电路。

图2 手动复位电路

6.2指示灯显示部分

输入信号由3个开关提供,信号的输出采用8个发光二极管显示,相应的信号灯对应相应的开关,用共阴极的连接方法,输入低电平导通。

电源上电显示部分用一个1K的电阻串联一个发光二极管来显示,灯亮表示有电,反之,则电路板没电。

6.3电路板的制作

6.3.1 PCB图的制作

采用了PROTEL DXP 电路绘图软件进行原理图和PCB图的制作,首先,安装此软件,安装完成后,打开该软件,新建工程(DOCUMENT)文件,而以后所建立的原理图文件(*.SCH)、PCB文件(*.PCB)及生成的网路文件(*.NET)都在此工程内。建立原理图文件时,首先,调用库文件中常用的元器件库文件(MISCELLANEOUS DEVICES.LIB)可以调入常用的电阻、电容、开关、晶振、继电器等常用的电器元件,通过ADD/REMOVE 按钮可以调入库文件(以INTEL为开头的库文件),从而调入80S51芯片以及其它电子元件。

原理图建立后,再生成网路图,这一步骤只要通过DESIGN---CREATE NETLISTS 即可生成网络图。

建立PCB图,首先应按照原理图的要求认真准确地填好每一个电器元件的封装,系统没有封装的,必须根据实物画出特别元件的封装,而且,注意元器件的管脚号必须与封装的管脚号相同(比如说,三极管发元器件的管脚是B、E、C,而封装库中的管脚却是1、2、3,必须改变其中之一,使两者一致),否则出错,生成的PCB图不正确。通过检查PCB图,如果没有元器件丢失、管脚丢失和网络连接正确便可以合理地布线,最终生成和覆铜板尺寸一致的PCB图。最终生成的PCB图如下图所示。

图3 PCB电路图

6.3.2 电路板的腐蚀、钻孔和元器件的焊接

将生成好的PCB 图,用电熨斗印刷在基板上,再用FECL3 进行腐蚀、钻孔、焊接相对应的元器件。便完成了电路板的制作。

七、设计体会

1、通过此次单片机最小系统的应用开发,增加了我对电路控制专业的兴趣,尤其是通过单片机进行自动控制方面,在设计及单片机最小系统中,加深了对所学过的知识认识(主要是编程指令的灵活应用、单片机最小系统的理解和PROTEL DXP 软件的灵活使用),还提高了自己的分析问题和解决问题的能力和方法(主要是在调试程序),最后提高了动手能力(主要是在电路板的制作上面),尤为可贵的是学会了查阅相关的资料,并进行独立的原理图设计,电路板的制作和程序的独立调整,以及出现问题时候,独立思考分析解决问题的能力。虽然很辛苦,但是最终能够达到设计课题的要求。

2、初步学会了独立设计电路图的能力。我首先在图书馆查找并综合与课题相关的资料,在头脑中形成一个感性的认识,并渐渐地用所学过的单片机指令(主要是汇编语言)编程,然后再借助试验台,将自己编好的程序一步一步地调试出来,用能够成功程序所需要的硬件电路来返回来设计自己的电路板。初步养成了自己独立解决问题的方法

与能力。

八、参考文献

[1] 张毅刚彭喜元姜守达乔立岩新编MCS-51单片机应用设计.哈尔滨工业大学出版

社,2003.

[2] 黄海萍汇编语言与微机接口技术实验教程.国防工业出版社,2007.

[3] 何光明童爱红王国全 C语言实用培训教程.人民邮电出版社,2003.

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

1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。 2.硬件组成 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATM EL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz 工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。其具体硬件组成如图1所示。 图1 流水灯硬件原理图 从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要

基于单片机的声光控制灯

基于单片机的声光控制模拟路灯 (程序部分) 前言:单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。本次我们采用at89c51单片机设计一种基于单片机控制的声光控制模拟路灯。该灯有声控,光控,声光同时控制楼道灯三种模式,经过调查,现在绝大多数小区的楼道灯都是纯电路形式实现声光控制的,这较之智能控制缺乏功能多样性,稳定性,而未来肯定是智能化的天下,所以我们用单片机模拟这一个多功能灯的系统。 关键字:单片机,at89c51,智能社区,楼道灯 目录: 一、设计目的 (2) 二、总体设计 (2) 方案选择: (2) 三、硬件设计 (3) 原理说明: (3) 四、软件设计 (3) 主要程序清单: (3) 程序框图: (5) 五、实验结果 (6) 六、总结 (6)

通过此次设计,主要是为了巩固我们的单片机相关知识及对单片机的相关应用,培养电子系统设计与实践的能力,学会设计使用简易的声、光传感器,并能用这些传感器设计一个声光控制的路灯(楼道灯)。 完成功能: 1)、声控灯模式。当传感器接收到声音信号时,单片机控制灯亮,并在5秒后灯自动熄灭。 2)、光控等模式。当光电传感器接收到为暗光时,灯自动点亮,接收到为亮光时,等自动熄灭。 3)、楼道灯模式。声光控制结合,即模拟当天暗并且楼道里有人走过的时候灯自动点亮5秒后熄灭。 二、总体设计 此次设计的声光控制灯包括三个基本模块,即声音处理模块、光处理模块、单片机小系统。总体设计框图如下: 图1、总体设计框图 方案选择: 1)、单片机部分。由于此次设计对单片机的要求较低,所以我们选择最为常用的at89c51单片机作控制部分。 2)、声控部分 一:选择专用的声音传感器模块来完成,能得到正确的波形、电压、频率等参数,且设计电路简单省事,但成本较高。 二:用驻极体话筒通过相应的信号处理电路对声音信号进行处理,成本较低,但电路设计麻烦。 综上所述:我们选择方案二,因为此次设计对声音信号的波形等参数要求较小,只要单片机接收到并能判断为高电平即可。 3)、光控部分 一:用光敏二极管作光电元件,光敏二极管对光转换为相应的电流。 二:用光敏电阻作光电元件,光敏电阻对光转换为相应的电阻。 综上所述:我们选用光敏电阻作光控部分的核心元件,因为光敏二极管转换成的是电流,而我们需要判断的是电压信号,将电流转换为电压信号的电路较复杂。

基于89c51单片机控制的LED音乐彩灯控制器的设计说明

基于89c51单片机控制的LED音乐彩灯控制器的设计 随着人们对房屋的装饰需要彩灯,在许多城市可以看到彩色霓虹灯。LED彩灯由于其丰富的灯光色彩,便宜的造价以及简单等特点而得到了广泛的应用,用彩灯来装饰街道和城市建础物已经成为一种时尚。但目前市场上各种各样的LED彩灯控制器大多数用全硬件电路实现,电路结构复杂、电路复杂、功率损耗大等缺点。此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性…… 本方案提出一种基于8951单片机的彩灯控制方案,实现对LED 彩灯的控制。本方案以8951单片机作为主控核心,在主控模块上设有3个按键和8个LED显示灯,根据需要可以编写若干种亮灯模式,利用其部定时器T0实现一个基本单位时间为1ms的定时中断,根据各种亮灯时间的不同需要,在不同时刻输出灯亮或灯灭的控制信号,然后驱动各种颜色的灯亮或灭。与普通LED彩灯相比,具有体积小、价格低、功耗低等优点。 2系统功能 LED彩灯用软件控制硬件的方式来控制彩灯闪烁,即彩灯控制器和管LED模块。彩灯采用8951提供+5V电压工作,经过电源变换,输出直流工作电压,一方面为管LED模块提供+5V工作电源,另一方面为主控模块单片机系统彩灯控制器提供5V工作电源。整个系统工作由软件程序控制运行,根据需要用户可以在LED彩灯工作时通过主控模块上的按键来设定亮灯时间和灯光闪动频率。 上电后系统经过初始化,查询是否有功能切换键按下:有,则进入设定模式状态;无,则进入默认工作状态。在设定模式状态下,可以根据个人爱好及不同场合的需要来指定调用哪种模式,并且可以改变每种模式的时间T1、频率F1参数,在工作状态下,LED彩灯控制器按照程序设定好的若干亮灯花样模式程序顺序调用往下走,开始工作,依次8个等亮完为一个亮灯周期,然后再回主循环继续工作,同样如果想进入其它设定模式状态,只需按下功能切换键即可。整个3种亮灯模式时间可以看作一个大周期T,对于每一个模式编写一个独立工作子程序,其中设定了从左到右点亮LED,从右到左点亮LED,还有自己定义的LED点亮方式。 因此在LED彩灯上电工作后,可以方便地通过主控模块上的显示器指定LED彩灯当前工作模块,工作时间Ti,频率Fi等实时参数。若实际应用需要根据不同场合和时间来改变彩灯闪亮效果,可以通过主控模块上的按键来设定LED不同的闪烁频率Fi和亮灯时间Ti,以便符合实际需要。此外如果对某一种模式感兴趣需要仔细观看该种亮灯模式,可以让程序循环。 硬件设计 LED彩灯系统包括,即LED彩灯控制器(8951主控模块),LED彩灯在8951外部接一个震荡时钟频率。用8951的控制器,具有按键、显示等功能,并利用8951的P0口的8个输出端上面焊有8个LED彩灯,使用彩灯在软件的控制下工作。 主控模块电路设计 主控模块电路如图1所示。主控模块主要设计器件有89C51,8个LED显示器,3个开关按键,1个稳压器(5V电压),1个外部晶振振荡器信号输出驱动,4个电阻。通过软件设计,使单片机P0口作为三色LED驱动信号输出口及移位时钟CLOCK信号,8951的P0为LED 的输出口。 软件设计 LED彩灯控制器最大特点在于所有亮灯模式均由软件控制完成。系统中软件可以分为主程序和中断服务子程序。上电后在按键控制灯的闪烁方式,通过软件来控制循环,以一个单位实际1ms的T0定时为中断服务子程序。在这个1ms的T0定时基础上,可以根据需要来确定各种模式工作时间Ti,以及确定在各种亮灯点亮和熄灭各种状态LED灯等。整个系统软

基于单片机控制LED灯亮度调节 邓宇锋

基于单片机控制LED灯智能亮度调节 系部:机电工程系 学生姓名:邓宇锋 专业班级:电气 11C3 班 学号: 6 指导教师:茅阳 2014年3月10日

声明 本人所呈交的基于单片机控制LED灯亮度调节,是我在指导教师的指导和查阅相关著作下独立进行分析研究所取得的成果。除文中已经注明引用的内容外,本论文不包含其他个人已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。 作者签名: 日期: 2014年3月10日

摘要 本文介绍LED灯智能亮度调节驱动电路设计,智能照明控制系统在确保灯具能够正常工作的条件下,给灯具输出一个最佳的照明功率,既可减少由于过压所造成的照明眩光,使灯光所发出的光线更加柔和,照明分布更加均匀,又可大幅度节省电能,智能照明控制系统节电率可达20%-40%。智能照明控制系统它可在照明及混合电路中使用,适应性强,能在各种恶劣的电网环境和复杂的负载情况下连续稳定地工作,同时还将有效地延长灯具寿命和减少维护成本。 【关键词】:智能控制;LED;智能光补

目录 引言 (1) 一、智能的概述 (2) (一)智能的定义 (2) (二)智能的分类 (2) 二、LED发光二极管的认识 (2) (一)LED的构造 (2) (二) LED的发光原理 (3) (三)LED的优势 (3) 三、LED亮度控制系统 (3) (一)脉冲宽度调制 (3) (二)调制LED的驱动电流 (3) (三)线性调光法 (3) 四、单片机及程序设计 (3) (一)概述 (4) (二)单片机STC89C51芯片简介 (4) (三)程序 (7) 此套控制分主程序与子程序,截取主程序代码在附件中。 (7) 五、控制系统电路设计 (7) (一)LED驱动电路 (7) (二)光电传感器的选择 (8) (三)电气原理图 (9) 六、实物调试 (9) 总结 (1) 参考文献 (2) 谢辞 (3) 附件 (4)

51单片机控制LED灯程序设计

51单片机:LED灯亮灯灭程序设计 1.功能说明:控制单片机P1端口输出,使P1.0位所接的LED点亮,其他7只灯熄灭。 程序: 01: MOV A , #11111110B ; 存入欲显示灯的位置数据 02: MOV P1,A ; 点亮第一只灯 03: JMP $ ; 保持当前的输出状态 04: END ; 程序结束 2.功能说明:单片机P1端口接8只LED,点亮第1、3、4、6、7、8只灯。 程序:

01:START: MOV A , #00010010B ; 存入欲显示灯的位置数据 02:MOV P1,A ; 点亮灯 03:JMP START ; 重新设定显示值 04:END ; 程序结束 3.功能说明:单片机P1端口接8只LED,每次点亮一只,向左移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设左移8次 02:MOV A, #11111110B ;存入开始点亮灯位置

03:LOOP: MOV P1, A ;传送到P1并输出 04:RL A ;左移一位 05:DJNZ R0, LOOP ;判断移动次数 06:JMP START ;重新设定显示值 07:END ;程序结束 4.功能说明:单片机P1端口接8只LED,每次点亮一只,向右移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设右移8次

02:MOV A, #01111111B ;存入开始点亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出 04: ACALL DELAY ;调延时子程序05: RR A ;右移一位 06: DJNZ R0, LOOP ;判断移动次数07: JMP START ;重新设定显示值08: DELAY: MOV R5,#50 ; 09:DLY1: MOV R6,#100 ; 10: DLY2: MOV R7,#100 ;

汇编语言发光二极管的点亮

【例8-2】图中外设是简单的发光二极管.此外设的接口是用锁存器来实现的.锁存器在打入脉冲CP上升沿将输入端D的数据锁存在它的输出Q端。编写点亮二极管的程序。 mov al,81h 状态是10000001 mov dx,0000h 外设地址 out dx, al 输出 mx: mov al,01h mov dx,0000h out dx,al mov cx,2DH mov dx,c6c0h mov ah.86h int 15h rol al,1 jmp mx 重点【例8-3】类似于例1中,让接在Q0~Q7上的二极管自上而下轮流点亮3s,编写程序实现。 程序如下: mov al,01h ;使Q0为1,LED0先亮 lop: out 0000h,al ; mov cx,2DH

mov dx,c6c0h mov ah.86h int 15h rol al,1 jmp lop 下面一段程序可判断按钮的状态。当K 闭合时,显示3,当K 断开时显示6。 【例8-4】 Start: mov dx,00F1H ; in al,dx test al,01h jnz kopen mov dx,00F0H mov al,4FH ; (3) out dx,al jmp start kopen: mov dx,00F0H mov al,7DH ;(6) out dx,al jmp start 1111 1 111~ Q 0 Q 1 Q 2 Q 3Q 4Q 5Q 6Q 7 Cp a b c d e f g DP +5V D 0D 774LS2738 510?Ω1≥1≥& 74LS138A G 2B G 2G C B A 1≥K +ΩK 10D 00 Y 1Y D 0 D 7 ~ IOW A 0A 1A 2A 4A 6A 3A 7A 9A 8A 5A 11A 13A 10A 12A 14A 15IOR

单片机C语言LED灯点亮程序完全版

单片机C语言L E D灯点亮 程序完全版 Prepared on 24 November 2020

1例子1第二个灯亮 #include<> voidmain() { P1=0xfd; } #include<> SbitD1=P1^0; Voidmain() { D1=0 } 注意:稍微改程序时需重新hex化 例子2第一个灯亮 #include<>include<>//52单片机头文件 sbitled1=P1^0;//单片机管脚位声明 voidmain() //主函数 { unsignedinti;//定义一个int型变量 while(1) { i=50000;//变量赋初值为50000 led1=0; //点亮灯 while(i--);//延时 i=50000; led1=1;//熄灭灯 while(i--); } } 3例子1357灯同时亮

#include<>//52单片机头文件 sbitled1=P1^0;//单片机管脚位声明 sbitled3=P1^2;//单片机管脚位声明 sbitled5=P1^4;//单片机管脚位声明 sbitled7=P1^6;//单片机管脚位声明 voidmain() //主函数 { led1=0; //将单片机口清零 led3=0; //将单片机口清零 led5=0; //将单片机口清零 led7=0; //将单片机口清零 while(1);//程序停止在这里,在后面会讲到为什么这样写。} 例子21357同时亮 #include<>//52单片机头文件 voidmain() //主函数 { P1=0xaa; while(1);//程序停止在这里,在后面会讲到为什么这样写。} 例子3流水灯一个一个接着亮不循环 #include<>//52单片机头文件 voidmain() //主函数 { unsignedinti;//定义一个int型变量

stm32点亮第一个发光二极管库函数版

#include "stm32f10x.h" u8 dt=0; void RCC_Configuration(void); void GPIO_Configuration(void); int main(void) { RCC_Configuration();//系统时钟初始化 GPIO_Configuration();//端口初始化 while(1) { GPIO_SetBits(GPIOB,GPIO_Pin_8); delay(1000000);//0.5s GPIO_ResetBits(GPIOB,GPIO_Pin_8); delay(1000000);//0.5s GPIO_SetBits(GPIOB,GPIO_Pin_5); delay(1000000);//0.5s GPIO_ResetBits(GPIOB,GPIO_Pin_5); delay(1000000);//0.5s } } void RCC_Configuration(void) { SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); } void delay(u32 nCount) { for(;nCount!=0;nCount--); }

用单片机控制LED亮灭

用单片机控制LED亮灭 1.实验任务如图所示,监视开关K1(接在P3.0端口上),用发光二极管 L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打 开,L1熄灭。2.电路原理图3.系统板上硬件连线(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.程序框图 ? ? ?6.汇编源程序ORG 00HSTART: JB P3.0,LIG CLR P1.0 SJMP STARTLIG: SETB P1.0 SJMP START END7.C语言源程序#includesbit K1=P3;sbit L1=P1;void main(void){ while(1) { if(K1==0) { L1=0; //灯 亮} else { L1=1; //灯灭} }}

单片机中断控制LED灯(精)

/* TCNT0定时中断,TCNT1定时输出,LED灯闪烁并逐渐变亮 */ #include #include int main(void { DDRD |= 0xff;//LED灯端口,按位或运算 TCNT0 = 55;//计数器0初值 TIMSK |= (1< 使能 T/C0 溢出中断 sei(;//开全局中断 TCCR0 |= 0B00000010; //64分频 TCCR1A |= 0B10100000;/*OC1A、OC1B端口设为输出,比较匹配时清零,TOP时置位,OC1A__PD5,OC1B__PD4*/ TCCR1A |= 0B00000000;//相位与频率修正PWM模式 TCCR1B |= 0B00010000; TCCR1B |= 0B00000010;//8分频 ICR1H = 0XFF;//TOP值 ICR1L = 0XFF; OCR1AH = 0X00;//输出比较寄存器A OCR1AL = 0X7f; OCR1BH = 0X00;//输出比较寄存器B OCR1BL = 0X7f; TCNT1H = 0X00;//计数器1初值

while(1; } /*中断服务程序,LED灯逐渐变亮*/ volatile unsigned int cnt = 0; SIGNAL(SIG_OVERFLOW0 { TCNT0 = 55; cnt ++; if(cnt == 10000//延时约1秒=1/(16000000/8*200*10000 { OCR1AH = 0X00;//输出比较寄存器A OCR1AL = 0XFF; OCR1BH = 0X00;//输出比较寄存器B OCR1BL = 0XFF; } if(cnt == 20000//延时约1秒 { OCR1AH = 0X08; OCR1AL = 0XFF; OCR1BH = 0X08; OCR1BL = 0XFF; } if(cnt == 30000//延时约1秒 {

基于单片机控制发光二极管课程设计

单片机原理及应用 题目基于单片机控制发光二极管 院(系)信息工程学院 专业班级 学生姓名 学号 设计地点 指导教师

目录 1 综述 (4) 1.1基于单片机控制发光二极管的过去发展。 (4) 1.2基于单片机控制发光二极管的现在发展。 (4) 1.3基于单片机控制发光二极管的未来发展。 (4) 1.4基于单片机控制发光二极管的国内发展 (7) 1.5基于单片机控制发光二极管的国外发展 (8) 2 搭建平台 (10) 2.1概述 (10) 2.2 Proteus (11) 2.3 Keil (12) 2.4 STC_ISP (13) 3 硬件技术介绍 (14) 3.1系统总体设计 (14) 3.2最小系统电路图设计 (15) 3.3按键电路设计 (15) 3.4 LCD电路设计 (17) 4 功能实现 (18) 4.1整体仿真电路图 (18) 4.2 流程图 (18) 4.3 源程序 (19) 5 测试结果及分析 (26)

5.1硬件测试 (26) 5.2软件测试 (26) 5.3实验截图 (27) 5.4焊接中的问题 (27) *致谢 (28) *参考文献 (28)

1 综述 1.1基于单片机控制发光二极管的过去发展。 1971年intel公司研制出世界上第一个4位微处理器;Intel公司的霍夫研制成功世界上第一块4位微处理芯片Intel4004,标志着第一代微处理器问世,微处理器和微机时代从此开始。由此单片机器件的发展过程:1976年,Intel推出MCS-48系类单片机,1980年Intel公司推出了性能较完善的MCS-51系列单片机,直到1982年Intel推出了微控制器化阶段的MCS-96系类单片机。 1.2基于单片机控制发光二极管的现在发展。 处于对低功耗的普遍需求,目前各大厂商推出的各类单片机产品都采用了CHMOS工艺,随着集成电路技术的快速发展,很多单片机生产厂家充分考虑到用户的需求,将一些常用的功能部件,如A/D、D/A、PWM以及LCD驱动器等集成到芯片内部,尽量做到单片化。同时单片机的种类越来越多,Intel、Motorola、Philip、EMC等公司设计和开发了多种功能不同的产品。 1.3基于单片机控制发光二极管的未来发展。 单片机作为一个完整的数字处理系统具备了构成计算机的几乎全部主要单元部件,在这个意义上称之为单片微机毫不过份,正所谓“麻雀虽小,五脏俱全”。通过学习和应用单片机入计算机

用单片机控制的LED流水灯

用单片机控制的LED流水灯 设计报告 专业:电子信息工程(自动化方向) 班级:09级 姓名:

1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文用A T89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法。 2.硬件组成 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。A T89C51单片机是美国A TMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz 工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。 其具体硬件组成如图1所示。 图1 流水灯硬件原理图

从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED 灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。 3.软件编程 单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。下面我们以最简单的流水灯控制功能即实现8个LED灯的循环点亮,来介绍实现流水灯控制的几种软件编程方法。 3.1位控法 这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,从而来控制相应LED灯的亮灭。程序如下: ORG 0000H ;单片机上电后从0000H地址执行 AJMP START ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开始地址 START:MOV SP,#60H ;设置堆栈起始地址为60H CLR P1.0 ;P1.0输出低电平,使LED1点亮 ACALL DELAY ;调用延时子程序 SETB P1.0 ;P1.0输出高电平,使LED1熄灭 CLR P1.1 ;P1.1输出低电平,使LED2点亮 ACALL DELAY ;调用延时子程序 SETB P1.1 ;P1.1输出高电平,使LED2熄灭 CLR P1.2 ;P1.2输出低电平,使LED3点亮 ACALL DELAY ;调用延时子程序

《让发光二极管亮起来》公开课教案

《让发光二极管亮起来》教学设计 天台小学许彩珍 教学目标: 1、初步认识发光二极管,了解发光二极管的结构特点。 2、认识二极管电路符号,能设计简单的小夜灯电路图,合理使用电阻原件 保护发光二极管。 3、继续了解简单电路,认识串联电路,能正确连接串联电路,点亮发光二极管。 4、通过点亮发光二极管,使学生喜爱电子技术,乐于探究。 教学重点和难点: 重点:认识发光二极管的特性,能正确连接发光二极管。 难点:能合理使用电阻元件保护发光二极管,能连接多个发光二极管。 教学准备: 材料:红、绿、黄等发光二极管若干,接插件若干,100欧姆电阻若干,不同类型导线若干,电池盒,5号电池4节,黑胶带等。 工具:剪刀。 教学过程: 课前谈话: 同学们请坐好。各小组组长请起立。课前我们来做个小游戏,看黑板上的符号猜元件名称。(电池、开关、灯泡)。让小灯泡亮起来,得用导线将它们连接起来,师画。 电流从电源的正极出发,依次经过开关、灯泡,最后接到电源的负极,形成了电路。这是我们在《让灯泡亮起来》这课中学过的知识,我们先回顾到这里。 一、创设情境,激趣导入 今天老师为大家准备了一些图片,请同学们欣赏。师边播放边介绍,这些屏幕叫LED屏幕,是由一个个发光二极管组成的,它还有一个名字叫“LED”。 LED被誉为21世纪的绿色光源。它色彩鲜艳,使用寿命长达10万个小时,电压一般为 1.5V----2.3V,它高效节能,安全系数高,已被广泛应用于生产和生活中。 这些屏幕中的发光二极管是如何亮起来的呢?这就是这节课我们要探究的内容。 二、认识发光二极管的构造和电路符号 (一)观察发光二极管

1、我们先来认识一下发光二极管。(出示发光二极管)请小组长拿起工具箱里的小塑料袋。组内同学一起看看塑料袋里的发光二极管,研究一下它的结构特点。 2、学生观察,组内交流。 3、汇报。你发现了什么?(发光二极管有一个半透明的草帽状外壳,两根引脚线。引脚线长的是正极,短的是负极。)(观察的很仔细) (二)了解发光二极管与小灯泡的区别 1、上课前我们已经回忆了点亮灯泡的方法,我们可以用两根导线、一节电池让灯泡亮起来,哪位同学愿意上来演示一下。 2、小灯泡已经亮起来了,用这样的方法连接也能让发光二极管也亮起来吗?请这位同学再来试试。 3、你发现什么了?(发光二极管不会亮。)为什么不会亮?电压不够。怎样才会使它亮起来呢?(预设:再加一节电池试试。) (三) 认识电路符号和电阻特点 1、在动手试验前先来看老师画发光二极管的电路图,师画。跟灯泡电路图比较一下,你发现了什么? 2、这是100欧姆的电阻符号。请同学们看书本30面图4---2,这就是电阻。那么为什么要在发光二极管电路中加100欧姆的电阻呢?小组内讨论一下,看哪一组同学最聪明。 3、汇报。(预设:一个发光二极管的能承受电压是1.5—2.3V, 两节电池的电压是3V,电压太大,需要接上100欧姆的电阻限流,保护发光二极管。) 三、合作尝试点亮一个发光二极管 1、按照这个电路图,能不能点亮发光二极管呢?同学们想不想尝试一下?(想) 2、下面我们先来点亮一个发光二极管。先看老师来示范一遍。坐得最端正,听得最认真这一小组,等一下肯定也能最快地点亮发光二极管。师边示范边讲解注意点:试验前先检查电池盒的开关是否处于断开状态。将电阻与电池盒的正极(红色导线)连接,用胶布绝缘,尽量将胶布贴得平整一些,不要露出铁丝。再将电阻的另一头与带有接插件的红色导线连接。装上发光二极管,接着将黑色导

单片机控制LED灯闪烁原理

一、电路图 二、原理 对于较长时间的定时,应采用复合定时的方法。这里使T/C0工作在定时器方式1,定时100ms,定时时间到后P1.0反相,即P1.0端输出周期200ms的方波脉冲。另设T/C1共作的计数器方式2,对T1输出的脉冲计数,当计数满5次时,定时1时间到,将P1.7端反相,改变灯的状态! 三、源程序 #include /*头文件的定义*/ sbit P1_0=P1^0; /* 定义p1.0端口*/ sbit P1_7=P1^7; timer0() interrupt 1 using 1 { /* 定时器0的中断服务程序*/ P1_0=!P1_0; /* P1.0取反*/ TH0=(65536-50000)/256; /* 赋高八位初值*/ TL0=(65536-50000)%256; /* 赋低八位初值*/ } timer1() interrupt 3 using 2 { /*定时器1中断服务程序*/ P1_7=!P1_7; /*p1.7取反*/ } main() { /*主函数*/ P1_7=0; /* 置灯初始灭*/ P1_0=1; /* 保证第一次反相便开始计数*/ TMOD=0x61; /* 定时器定时和计数*/ TH0=(65536-50000)/256; /* 赋初值*/ TL0=(65536-50000)%256; /* */ TH1=256-5; TL1=256-5; IP=0x08; /* 设置寄存器优先级*/ EA=1; /* CPU开中断*/ ET0=1; /* 开T/C0中断*/ ET1=1; /* 开T/C1中断*/ TR0=1; /* 启动T/C0 */ TR1=1; /* 启动T/C1 */ for(;;)/* */ { } } 四、Keil调试程序过程与结果: 1.新建一个项目

点亮一个LED程序

如何点亮一个LED #include sbit D=P0^0; void main() { D=0; } 使LED闪烁 #include sbit D=P0^0; void delay(int z); void main() { D=0; delay(110); D=1; delay(110); } void delay(int z) { int x,y;

for(x=z;x>0;x--) for(y=200;y>0;y--); } #include sbit D=p1^3; void main(void) { int j; while(1) { D=0; for(j=0;j<30000;j++); D=1; for(j=0;j<30000;j++); } } 手把手教您编写第一个单片机程序

来源:21ic作者: 关键字:手把手编写单片机程序 51单片机的开发环境是Keil 软件。Keil 软件虽然是一个收费软件,但从uVision2到目前的uVison4版本都有破解版,在网上都可以找到下载。笔者推荐大家使用uVisong4破解版本,好处不用多说。Keil uVision4软件的压缩包里附有安装和破解说明,本文不再赘述。 开发一个单片机程序,一般都要经过这几个步骤:建立工程->建立C文件->添加C文件到工程->编写C代码->设置目标工程的选项->编译工程产生HEX文件->将HEX文件下载到单片机。本文将一步一步手把手教您开发一个LED闪烁的简单且实用的C51程序。让您从0基础起步学习开发51单片机。 安装Keil uVison4之后,第一次运行出现如图1的界面,从上往下数,依次是菜单栏、第一条工具栏、第二条工具栏,接下来左边白色部分为工程文件区(显示文件、函数、语言模板和相关书籍),右边灰色部分为文本区(编写源文件),最下边为编译信息栏(显示编译时产生的相关信息)。

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

单片机控制L E D流水灯从中间向两边 WEIHUA system office room 【WEIHUA 16H-WEIHUA WEIHUA8Q8-

单片机控制LED流水灯从中间向两边,从两边向中间 这个就是把先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的应该是这样的先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动; #include< > #include< > #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种方法:下面是单片机12群里的朋友木信大侠提出的,实现单片机led流水灯从中间向两边,从两边向中间的效果,下面的程序就是实现思路,这个是直接调用,应该明白吧,数组那其实也可以改一下,如采用一维数组,在多次调用;也可以采用二维数组。主要看个人喜好. ----------------------------------------------------- #include< > unsigned char code TABLE[]={ 0xFF,0xE7,0xC3,0x81,0x00, 果要显示1~8数值,最好多加前后两位数0跟9, 因为后面++移位时就能按我们常规顺序亮下去,至于如何显示对应数值请先看数码显示电路图*/ uchar code tablew[]={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; 如果要显示,也会因为++而在第二轮中显示出*/ duan=1; //开启段显端 P0=tabled[numd];//附段显P0值对应段显值对码表 duan=0; //锁存 wei=1; //开启位显端 P0=tablew[numw];//附位显P0值对应位显值对码表 wei=0; //锁存 numw++; //相当于位显移位 if(numw==8) //如果位显值到对应位显对码表第八位则转下执行 numw=0; //重新附值位显值对应对码表第0位起 /* 下面是简单的单个数码管显示例证第一骤, 修改后在第三步骤内 #include"" #include"" sbit duan=P2^6; //段显端口 sbit wei=P2^7; //位显端口 void main() {

单片机实现发光二极管的循环点亮控制讲解

桂林电子科技大学单片机最小应用系统 设 计 报 告 指导老师:吴兆华

学生:钟静茹 学号:09210202 机电工程学院 2010年6月 单片机最小应用系统设计报告 目录 一、设计题目 (3) 二、设计内容与要求 (3) 三、设计目的意义 (3) 四、系统硬件电路图 (4) 五、程序流程图与源程序 (6) 5.1流程图 (6) 5.2源程序 (7) 5.2.1程序设计思想 (7) 5.2.2源程序清单 (7) 六、系统功能分析与说明 (9) 6.1系统主要组成部分 (9) 6.2指示灯显示部分 (10) 6.3 电路板的制作 (10) 6.3.1 PCB图的制作 (11) 6.3.2 电路板的腐蚀、钻孔和元器件的焊接 (13)

七、设计体会 (11) 八、参考文献 (12) 一、设计题目 用8031单片机实现发光二极管的循环点亮控制。采用3个按键分别控制发光二极管的启动、停止及每个灯点亮的时间的更换,定时时间有软件控制。 二、设计内容与要求 用8031单片机控制8个发光二极管循环点亮。要求用按键控制点亮时间(如每个灯点亮0.5秒或者1秒等,各灯点亮时间相同)。按启动键开始循环点亮;按停止键后停止。 三、设计目的意义 1、掌握单片机系统中扩展简单I/O接口的方法。 2、掌握单片机的硬件接口电路、8031单片机的内部结构及其编程方法。 3、掌握单片机的最小系统的设计。 4、掌握电路板的设计与制作。。 5、了解程序编写与调试的方法和技巧。 6、综合掌握所学的单片机指令系统和硬件接口电路知识,进行简单的最小系统开

发。 四、系统硬件电路图 系统硬件图(图1)包括单片机最小系统(复位电路、晶振电路和相关的控制信号)、外电路接通显示部分、及电源显示部分。 设计硬件电路图时,其基本思想:先通过万能板搭建试验平台,将编好的程序下载到51中,等可以达到预期要求后,最后在PROTEL中设计原理图与PCB,做出电路板。

单片机控制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.wendangku.net/doc/7c11298073.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

相关文档
相关文档 最新文档