单片机花灯开关控制器C语言代码,以51单片机为核心的LED彩灯控制器设计
1 引言
随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。 LED 彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰已经成为一种时尚。但目前市场上各式样的 LED 彩灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态参数。这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。因此有必要对现有的彩灯控制器进行改进。
2 设计原理
2.1 MCS51
引脚说明
MCS单片机都采用40引脚的双列直插封装方式。图1为引脚排列图, 40条引脚说明如下:
(1)主电源引脚Vss和Vcc
① Vss接地
② Vcc正常操作时为+5伏电源
(2)外接晶振引脚XTAL1和XTAL2
① XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。
② XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。
图1 8051引脚排列图
(3)控制或与其它电源复用引脚RST/VPD,ALE/PROG,EA和/Vpp
① RST/VPD 当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位
在Vcc掉电期间,此引脚可接上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。
② ALE/PROG正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE 引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE 端可以驱动(吸收或输出电流)八个LSTTL电路。 对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉P冲(PROG功能)
③PSEN外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效。同样可以驱动八LSTTL输入。
④ EA/Vpp 、EA/Vpp为内部程序存储器和外部程序存储器选择端。当EA/Vpp为高电平时,访问内部程序存储器,当/Vpp 为低电平时,则访问外部程序存储器。
对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(Vpp)。
(4)输入/输出引脚P0.0 - P0.7,P1.0 - P1.7,P2.0 - P2.7,P3.0 - P3.7。
① P0口(P0.0 - P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。
② P1口(P1.0 - P1.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载……
③ P2口(P2.0 - P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。P2口可以驱动(吸收或输出电流)四个LSTTL负载。
④ P3口(P3.0 - P3.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。
2.2 LED显示数码管
LED有共阴极和共阳极两种。如图所示。二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电。
LED数码管结构原理图
AT89C2051芯片的20个引脚功能为:
VCC 电源电压。
GND 接地。
RST 复位输入。当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。
XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2 来自反向振荡放大器的输出。
P1口 8位双向I/O口。引脚P1.2~P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1” 后,可用作输入。在闪速编程与编程校验期间,P1口也可接收编码数据。
P3口 引脚P3.0~P3.5与P3.7为7个带内部上拉的双向I/0引脚。P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。P3口也可用作特殊功能口。
2.3 中断指令
在CPU和外设交换信息时,存在着快速CPU和慢速外设间的矛盾,机器内部有时也可能出现突发事件,为此,计算机中通常采用中断技术。
CPU和外设并行工作,当外设数据准备好( 或有某种突发事件发生)时向CPU提出请求,CPU暂停正在执行的程序转而为该外设服务(或处 理紧急事件),处理完毕再回到原断点继续执行原程序。
中断优先级:当有多个中断源同时 向CPU申请中断时,CPU优先响应最需紧急处理的中断请求,处理完毕再响应优先级别较低的 ,这种预先安排的响应次序。
中断的嵌套:在中断系统中,高优先级的 中断请求能中断正在进行的较低级的中断源处理,
(1)中断技术是实时控制中的常用技术,51系列单片机有三个内部中断,二个外部中断。所谓 外部中断就是在外部引脚上有产生中断所需要的信号。
每个中断源有固定的中断服务程序的入口地址(称矢量地址或向量地址)。当CPU响应中断以 后单片机内部硬件保证它能自动的跳转到该地址。因此,此地址是应该熟记的,在汇编程序 中,中断服务程序应存放在正确的向量地址内。
(或存放一条转移指令);而在C语言中是靠Interrupt n的关键字n自动设置的。
(2)单片机的中断是靠内部的寄存器管理的,这就是中断允许寄存器IE,中断优先权寄存器IP ,必须在CPU开中断即开全局中断开关EA,开各中断源的中断开关,CPU才能响应该中断源的 中断请求,其中缺一不可。
(3)从程序表面看来,主程序和中断服务程序好象是没有关连的,只有掌握中断响应的过程, 才能理解中断的发生和返回,看得懂中断程序,并能编写高质量中断程序。
表2.1 常用中断
符号名 称中 断 引 起 原 因中断服务程序入口
INT0外部中断0P3.2引脚的低电平或下降沿信号0003H
INT1外部中断1
P3.3引脚的低电平或下降沿信号0013H
T0定时器0中断定时计数器0计数回零溢出000BH
T1定时器1中断定时计数器1计数回零溢出001BH
T2定时器2中断定时计数器2中断(TF2或T2EX信号)002BH
TI/RI串行口中断串行通信完成一帧数据发送或接收引起中断0023H
3 硬件原理图
晶振(12MHz)定时1秒,对于12MHz的晶振而言,其时钟周期T=1/f=1/12us,而89C51的一个机器周期包括12个时钟周期,所以一个机器周期为1us,对于T0而言,使之工作于16-bit,最大计时为65536*1=65536us,需要多次定时才能实现一秒定时。
4 软件设计
4.1 流程图
4.2 源程序
ORG 0000H ;中断入口程序;
LJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
CLEAR: RET; ; 初始化程序
;START:ACALL CLEAR ; 主 程 序
STAR1:MOV P3,#0FFH
JNB P3.2,FUN2
JNB P3.3,FUN3 ;关闭按纽
JNB P3.4,FUN0
JNB P3.5,FUN1
JNB F0,STAR1 ;曾经有键按下F0置1
RET;
FUN0:LCALL DL10MS ;消除抖动
JB P3.4,STAR1
WAITL0:JNB P3.4,WAITL0 ;等待键释放
SETB F0
FUN01:LCALL FUN00
LCALL STAR1
LJMP FUN01;
FUN1:LCALL DL10MS ;消除抖动
JB P3.5,STAR1
WAITL1:JNB P3.5,WAITL1 ;等待键释放
SETB F0
FUN10:LCALL FUN11
LCALL STAR1
LJMP FUN10;
FUN2:LCALL DL10MS ;消除抖动
JB P3.2,STAR1
WAITL2:JNB P3.2,WAITL2 ;等待键释放
SETB F0
FUN20:LCALL FUN22
LCALL STAR1
LJMP FUN20;
FUN3:LCALL DL10MS ;消除抖动
JB P3.3,STAR1
WAITL3:JNB P3.3,WAITL3 ;等待键释放
CLR F0
MOV P1,#0FFH ;关显示
LJMP STAR1;
FUN00:MOV A,#0FEH ;从P1.0到P1.7移动点亮
FUN000:MOV P0,A
LCALL DL05S
JNB ACC.7,OUT
RL A
AJMP FUN000
OUT: RET;
FUN11:MOV A,#0FEH ;从P1.0到P1.7依次点亮
FUN111:MOV P1,A
LCALL DL05S
JZ OUT
RL A
ANL A,P1
AJMP FUN111;
FUN22:MOV A,#0FEH ;间隔点亮
FUN222:MOV P1,A
LCALL DL01S
CPL A
RL A
MOV P1,A
LCALL DL01S
RET;
FUN33: MOV A,#01H ;逐点熄灭
FUN333: MOV P1,A
LCALL DL01S
JNZ OUT
RL A
ORL A,P1
AJMP FUN333
DL01S:MOV R2,#0FFH ; 延时程序
MOV R7,#02H
LOOP1: DJNZ R2,LOOP1
LOOP5:DJNZ R7,DL512
RET
DL10MS:MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
DL05S:MOV R4,#0AH
LOOP3: LCALL DL10MS
DJNZ R4,LOOP3
RET
DL30S:MOV R5,#03H
LOOP4:LCALL DL05S
DJNZ R5,LOOP4
RET
END
4.2一秒钟定时程序
MOV B,#0AH ;允许中断
MOV TMOD,#01H ;工作方式1
MOV TH0,#0B0H
MOV TL0,#3CH
SETB TR0 ;启动计数
SETB EA ;开中断
BU:JBC TF0,SHI
SJMP BU
SHI:MOV TH0,#3CH
MOV TL0,#0B0H
RET
单片机花灯开关控制器C语言代码,以51单片机为核心的LED彩灯控制器设计相关推荐
- 51单片机风扇转动c语言代码,基于51单片机的智能风扇控制系统设计.doc
完美.WORD格式.整理 范文.范例.指导 基于51单片机智能风扇控制系统的设计与实现 摘要:随着气温的逐渐上升,风扇的需求量也逐渐扩大.传统风扇不能根据外界温度的变化对风扇转速快慢进行调整,也不能对 ...
- 单片机独立式按键c语言程序,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询)...
(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询) /************************************************************ ...
- 基于51单片机的光照强度检测c语言程序,基于51单片机光照强度检测报告.doc
基于51单片机光照强度检测报告 课程设计报告 课程名称: 智能仪器课程设计 题 目: 基于51单片机的光照强度 摘要 光敏电阻测光强度系统,该系统可以自动检测光照强度的强弱并显示让人们知道此时光照强度 ...
- 单片机控制直流电机c语言代码,用51单片机控制直流电机
系统主函数流程如图三: ①PWM脉宽控制:本设计中采用软件延时方式对脉冲宽度进行控制,延时程序函数如下: void delay(unsigned char dlylevel){ int i=50*dl ...
- 51单片机抢答器c语言代码,使用51单片机实现抢答器的设计资料和代码说明
在知识比赛中, 特别是做抢答题目的时候, 在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务.如果在抢答中,靠视觉是很难判断出哪组先答题.利用单片机系统来设计抢答器,使以 ...
- 单片机三角波c语言代码,使用51单片机实现三角波输出系统的设计资料说明
单片机(SCM)是单片机微型计算机(Single Chip Microcomputer) 的简称. 它是把组成微型计算机的各个功能部件:中央处理器CPU.随机存取存储器RAM .只读存储器ROM.I/ ...
- 51单片机风扇转动c语言代码,基于51单片机的c语言程序 电机转速测量与PWM控制...
[实例简介] 部分源程序如下: //=================测速计数处理=================================== void timer1()interrupt ...
- 单片机红外接收c语言代码,基于51单片机+0038红外发射与接收C程序
#define uchar unsigned char #define uint unsigned int sbit key1=P3^3; sbit key2=P3^4; sbit key3=P3^5 ...
- 51单片机蜂鸣器播放音乐C语言程序实例,51单片机蜂鸣器音乐之八月桂花播放源程序...
/************************************************************************ [文件名] C51音乐程序(八月桂花) [功能] ...
- 51单片机数码管小数点c语言,求助一个51单片机控制的数码管计算器带小数点功能的...
#include #define FOSC 12000000 //--- 宏定义时钟频率 --- //=================== ...
最新文章
- Spring 系列,第 2 部分: 当 Hibernate 遇上 Spring
- Java除法不精确引入BigDecimal
- [JLOI2016]成绩比较
- 你的企业离DevOps转型成功,就差这“七步法”路线图
- python import numpy_python numpy详解
- RBF(径向基)神经网络
- (转)sqoop常用命令http://www.cnblogs.com/cenyuhai/p/3306037.html
- node.js 事件循环
- mysql on 子句_ON子句中的MySQL未知列
- Android的数据库(SQLite)学习
- cocos2d 屏幕適配_cocos2dx 3.2 屏幕适配的理解
- 入门masm32编写简单汇编程序并做具体分析
- 基于32×32点阵LED模块的书写显示屏
- 软件测试工程师必备技能
- Java将String型字符串转换成int型(或int型数组)
- ajax hack,Ajax Hacks-hack9 深入了解HTTP Respon_jquery
- lms语音降噪matlab实现_ANC主动降噪理论及Matlab代码实现
- windows服务器系统发展史,从1.0到Win10:Windows操作系统进化史
- C#运控框架 雷赛运动控制 DMC系列 运动控制项目 C#源码
- 百度飞桨:给出关键词,AI自动生成元宵节祝福~
热门文章
- Leader安排的三小时工作量,我如何用python十秒完成
- 国外经济学期刊分类汇总(经济学、统计学、精算学和金融计量方面)
- 专升本C语言知识点笔记
- 软件测试岗完美面试攻略
- RTC唤醒低功耗(standby)模式
- flashfxp连接centos7失败原因之一
- 计算机网络知识点汇总
- 相关常用单位转换 mil 英里 英尺 .......
- 大创和互联网加_大创?科研立项?互联网+大赛?创业大赛?……你还在纠结吗?...
- android x86 4.3 root,安装好x86安卓后(凤凰系统1.04版本),出现ANDROID root@x86:/#,进不了系统...