基于89C51的闪烁LED小灯设计
来源:互联网 发布:大乐透缩水软件 编辑:程序博客网 时间:2024/06/05 23:53
C51的闪烁LED设计
本设计采用通俗易懂的语言组织,看好了,在进行以下主要内容之前,先话痨话痨,学习这些单片机设计啊,真的得有兴趣,所谓兴趣,就是你懂了它,理解了它,自然而然就对它产生了兴趣了,换句话说,你他么一点都不懂,你来跟我说兴趣,你个龟儿,鬼都不信,墙都不服舅扶你。话不多说,想玩这个,总得知道入口吧,你是通过什么方式知道玩这个单片机呢,有人专业课就是这个,有人网上知乎听水友唠唠知道,千奇百怪的方式,而我呢,确实是专业课所需的,没办法,写这篇博客,我正在读大三呢,哈哈,一起加油吧!
我写的这个LED闪烁小灯,是采用AT89C51的,是采用汇编语言来写程序的,主要使小灯轮流点亮,逐点点亮,间隔点亮。下图(1)是闪烁小灯电路原理图,其中P1口作LED灯控制输出端口,P3.0~P3.2分别为三个闪烁功能开关控制端口,P3.3端口做备用,限流电阻10k,采用12MHz晶振。
图(1)
系统程序设计
一.主要程序
扫描P3.0~P3.2口,看一看有没有按键按下,然后呢,在20内存单元中的低三位全部置1,进而确定所执行的闪烁功能,来看看,20H.0为1时,LED灯轮流点亮,20H.1为1时,LED灯逐点点亮;20H.2为1时,LED灯间隔点亮;然后呢,注意要先对20H低三位的位值判断是否为1,会转入相应的闪烁控制程序,上电要初始化的,要先对20H.0进行置1,系统首先进入轮流点亮功能。主程序流程图如图(2)
二.键扫描子程序
采用直接端口扫描键开关,要用软件延时消抖确认后呢,要对20H内存单元相应的位进行置1,其余位置零。
三.闪烁控制程序
这个程序用来控制P1口的发光变化方式的,其中如下:
功能程序0(FUN0)的P1口输出变化为:11111110 延时 11111101 延时 11111011 延时 11110111 延时 11101111 延时 11011111 延时 10111111 延时 01111111 延时 结束 转去执行主程序
功能程序1(FUN1)的P1口输出变化为:11111110 延时 11111100 延时 11111000 延时 11110000 延时 11100000 延时 11000000 延时1000000 延时 00000000 延时 结束转去执行主程序
功能程序2(FUN2) 的P1口输出变化为:10101010 延时 01010101 延时 结束转去执行主程序。
四.延时子程序
延时子程序有10ms和0.5s两个,用作键扫描消抖及LED闪烁延时,LED的闪烁快慢由R4寄存器内的初值进行改变。
汇编程序清单
RG 0000H ;程序执行开始地址LJMP START ;转去START执行ORG 0003H ;外中断0中断入口地址RETI ;中断返回(不开中断)ORG 000BH ;定时器T0中断入口地址RETI ;不开中断ORG 0013H ;外中断1中断入口地址RETI ;不开中断ORG 001BH ;定时器T1中断入口地址RETI ;不开中断ORG 0023H ;串行口中断入口地址RETI ;不开中断CLEAR:MOV 20H,#00H ;20H单元内容清零(闪烁标志清零) SETB 00H ;20H.0位置置1 RET ;子程序返回 START:ACALL CLEAR ;调用初始化子程序 MAIN:LCALL KEYWORK ;调用键扫描子程序 JB 00H,FUN0 ;20H.0位为1时转去执行FUN0 JB 01H,FUN1 ;20H.1位为1时转去执行FUN1 JB 02H,FUN2 ;20H.2位为1时转去执行FUN2 JB 03H,MAIN ;备用 AJMP MAIN ;返回主程序MAIN FUN0:MOV A,#0FEH ;累加器赋初值 FUN00:MOV P1,A ;累加器值送入P1口 LCALL DL05S ;调用延时05s子程序 JNB ACC.7,MAIN RL A AJMP FUN00 ;转去执行FUN00 FUN1:MOV A,#0FEH ;累加器赋初值 FUN11:MOV P1,A ;累加器值送入P1口 LCALL DL05S ;调用延时05s子程序 JZ MAIN ; 累加器为0转去执行主程序MAIN RL A ;累加器中数据循环左移1位 ANL A,P1 ;A中值与P1值相与 AJMP FUN11 ;转去执行FUN11 FUN2:MOV A,#0AAH ;累加器赋初值 FUN22:MOV P1,A ;累加器值送入P1口 LCALL DL05S ;调用延时05s子程序 CPL A ;A中各位取反 MOV P1,A ;再把累加器值送入P1口 LCALL DL05S ;调用05s子程序 AJMP MAIN ;转去执行主程序MAIN KEYWORK:MOV P3,#0FFH JNB P3.0,KEY0 JNB P3.1,KEY1 JNB P3.2,KEY2 JNB P3.3,KEY3 RET KEY0:LCALL DL10MS JB P3.0,OUT0 SETB 00H CLR 01H CLR 02H CLR 03H OUT0:RET KEY1:LCALL DL10MS JB P3.1,OUT1 SETB 01H CLR 00H CLR 02H CLR 03H OUT1:RET KEY2:LCALL DL10MS JB P3.2,OUT2 SETB 02H CLR 00H CLR 01H CLR 03H OUT2:RET KEY3:LCALL DL10MS JB P3.3,OUT3SETB 03HCLR 00HCLR 01HCLR 02HOUT3:RETDL512:MOV R2,#0FFHLOOP1:DJNZ R2,LOOP1 RETDL10MS:MOV R3,#14HLOOP2:LCALL DL512 DJNZ R3,LOOP2 RET DL05S:MOV R4,#0FH LOOP3:LCALL DL25MS DJNZ R4,LOOP3 RETDL25MS:MOV R5,#0FFHLOOP4:LCALL KEYWORK DJNZ R5,LOOP4 RETEND
阅读全文
1 0
- 基于89C51的闪烁LED小灯设计
- 制作esp8266+c51,点亮单片机上的led小灯
- 单片机设计流水灯和实现LED的闪烁
- fpga闪烁的led灯
- 基于 KEIL C51和 proteus的 C51汇编程序设计实例
- Arduino 闪烁板子上的LED灯
- 闪烁的 LED
- 闪烁的小灯
- 80C51单片机模仿实例100—1 LED闪烁
- 2.led灯闪烁
- LED 流水灯闪烁
- LED单灯闪烁
- 闪烁一位LED灯
- 一、Led灯闪烁
- LED闪烁灯
- 80C51学习 闪烁灯
- 基于proteus的51单片机仿真实例十七、用不同的数据类型控制LED灯的闪烁频率
- FPGA 降频实现led的闪烁,LED不闪烁
- 11.1
- C++内存管理
- Android profile-guided dex2oat
- 用Scheme解释器项目来了解Java(五)
- tf相关接口说明
- 基于89C51的闪烁LED小灯设计
- python之__new__方法与实例化
- 2017.11.1
- Http最常见的错误代码
- Android学习之通过SeekBar调节布局背景颜色(RGB)
- P
- 125. Valid Palindrome
- javascript之Object.assign()痛点
- 面试题