搜索
bottom↓
12
返回列表 发新帖
楼主: doujiang

这是一个非常短的呼吸灯程序

  [复制链接]

出0入0汤圆

发表于 2014-6-4 12:40:34 | 显示全部楼层
MARK 记号一下

出0入0汤圆

发表于 2014-6-4 15:36:45 | 显示全部楼层
看看,感谢分享

出0入0汤圆

发表于 2014-6-4 16:03:47 | 显示全部楼层
呼吸灯程序 mark

出0入0汤圆

发表于 2014-6-5 12:02:25 | 显示全部楼层
mark!                     

出0入0汤圆

发表于 2014-6-5 12:31:09 | 显示全部楼层
doujiang 发表于 2013-3-25 23:40
这个程序,没有考虑执行的效率,只考虑代码的简洁。

思路非常好!但估计不是太实用!

出0入0汤圆

发表于 2014-6-6 11:59:29 | 显示全部楼层
不管怎样,都值得我们新手学习。楼主能够拿出来分享就非常不错了。

出0入8汤圆

发表于 2014-10-16 11:26:49 | 显示全部楼层
好像试过了,再顶~

出0入0汤圆

发表于 2014-10-16 11:34:32 | 显示全部楼层
這裏有一箇更短的呼吸燈程序啊哈哈。
  1. #include <STC12C5A.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define limit 100
  5. sbit LED=P0^4;
  6. void delay(uint ms){        uint i=0,j=0;        for(i=ms;i>0;i--)                for(j=123;j>0;j--);}
  7. void main(){        uint t=50;        char d=1;        while(t+=d)        {                LED=t%2;                delay(t*(LED==1)+(limit-t)*(LED==0));//这条代码很巧妙的实现了两个状态的切换                if(t>=95||t<=5) d=-d;        }}
复制代码

出0入0汤圆

发表于 2014-10-16 11:47:49 | 显示全部楼层
呼吸灯程序

出0入0汤圆

发表于 2014-10-16 17:58:02 | 显示全部楼层
记号一下

出0入0汤圆

发表于 2014-10-16 21:39:19 | 显示全部楼层
MARK! 多谢分享!

出0入0汤圆

发表于 2014-10-16 22:26:28 | 显示全部楼层
不是很懂

出0入0汤圆

发表于 2014-10-16 22:30:57 | 显示全部楼层
真巧妙!

出0入0汤圆

发表于 2014-10-28 15:34:59 | 显示全部楼层
看了很多看不懂

出0入0汤圆

发表于 2014-10-31 14:20:46 | 显示全部楼层
记号,mark

出0入0汤圆

发表于 2014-10-31 15:00:58 | 显示全部楼层
MARK 记号一下

出145入215汤圆

发表于 2014-11-2 01:10:42 | 显示全部楼层
本帖最后由 dz20062008 于 2014-11-2 01:19 编辑

我用6T的单片机24MHZ的晶体做实验还是一眨一眨的,太慢了吗???谁有1T的单片机试试?楼主晶振是多少?于是示波器看,是PWM波,但没注意是否调频了,在百毫秒的脉冲宽度啊,郁闷。


这是我做的玩艺,心型LED火红呼吸灯。自我感觉过度很好,发给大家看看。而且代码的精简也不错的。Program Size: data=8.0 xdata=0 code=168楼主位的是Program Size: data=11.0 xdata=0 code=183而且没有进过优化过的。
楼主的代码的思路的却很不错/
/* 目的:心型矩阵PWM定频呼吸灯,PWM口是P3.7
   材料:AT89S52,12M晶振
*/


   PWM_OUT EQU P3.7

   TEMP_N  EQU 20H                                   ;存PWM负半周中间变量
   TEMP_P  EQU 21H                                   ;存PWM正半周中间变量
   TEMP_NN EQU 22H                                   ;存PWM负半周最终波形变量
   TEMP_PP EQU 23H                                   ;存PWM正半周最终波形变量



   ORG 0000H
   SJMP START

   ORG 000BH
   LJMP INT
   RETI

   ORG 0030H
   START:
  /* LCALL DELAY300MS
   LCALL DELAY300MS
   LCALL DELAY300MS
   LCALL DELAY300MS
   LCALL DELAY300MS
   LCALL DELAY300MS
   LCALL DELAY300MS
   LCALL DELAY300MS
   LCALL DELAY300MS
   LCALL DELAY300MS                                   ;运行等待

   MOV P0,#00H                               ;初始化心型矩阵花型为全亮
   MOV P1,#00H

   CLR P2.0
   CLR P2.1
   CLR P2.2
   CLR P2.3
   CLR P2.4

   CLR P2.5
   CLR P2.6

   CLR p3.0         
   CLR p3.1
   CLR p3.2
   CLR p3.3
   CLR P3.4          */

   CLR PWM_OUT                               ;初始化PWM输出为关

   SETB F0                                                   ;初始化明暗调节方向控制位,1为变量,0为变暗

   MOV TEMP_N,#1D                               ;初始化PWM中间变量,最暗
   MOV TEMP_P,#129D

   MOV TMOD,#01H                                   ;初始化定时器0工作在模式1,50毫秒一次中断
   MOV TH0,#0B1H
   MOV TL0,#0E0H
   SETB EA
   SETB ET0
   SETB TR0

   MAIN:
   MOV TEMP_NN,TEMP_N                           ;把PWM中间变量的值传递给最终变量
   MOV TEMP_PP,TEMP_P
   
   CLR  PWM_OUT                                       ;输出低电平,小灯点亮
   M_LOOP1:                                                   ;通过最终变量的值控制输出低电平时间
   LCALL DELAY100US
   DJNZ TEMP_NN,M_LOOP1

   SETB PWM_OUT                                           ;输出高电平,小灯熄灭
   M_LOOP2:                                                   ;通过最终变量的值控制输出高电平时间
   LCALL DELAY100US
   DJNZ TEMP_PP,M_LOOP2

   LJMP MAIN                                           ;进入大循环

   INT:                                                           ;中断子程序
   CLR EA                                                   ;关中断
   MOV TH0,#0B1H                                   ;重新装入定时初值
   MOV TL0,#0E0H

   JNB F0,BA                                           ;判断调节方向
   MOV A,TEMP_N
   CJNE A,#129D,L                                   ;最亮了吗?
   CLR F0                                                   ;切换为由亮变暗
   ;LCALL DELAY300MS                                   ;决定由亮变暗的等待时间
   ;LCALL DELAY300MS
   ;LCALL DELAY300MS
   ;LCALL DELAY300MS
   ;LCALL DELAY300MS
   SETB EA                                                   ;开中断                                          
   RETI
   L:
   INC TEMP_N                                           ;由暗变量的过度
   DEC TEMP_P
   SETB EA
   RETI

   BA:                                                           ;开始变暗
   MOV A,TEMP_P
   CJNE A,#129D,LL                                   ;判断是不是最暗了
   SETB F0                                                   ;最暗了切换调节方向
   LCALL DELAY300MS                                   ;设定由暗变量的等待时间 ////////////
   SETB EA                                                   ;开中断
   RETI
   LL:
   DEC TEMP_N                                           ;由亮变暗的过程
   INC TEMP_P
   SETB EA
   RETI

   DELAY100US:                                      ;pwm最小长度因子   
   MOV R6,#01H
   DL0:
   MOV R5,#2FH
   DJNZ R5,$
   DJNZ R6,DL0
   RET

   DELAY300MS:                                     ;亮暗切换等待延时函数
   MOV R7,#7BH
   DL11:
   MOV R6,#74H
   DL00:
   MOV R5,#09H
   DJNZ R5,$
   DJNZ R6,DL00
   DJNZ R7,DL11
   RET

   END                                                           ;程序结束

出0入0汤圆

发表于 2014-11-2 04:36:47 | 显示全部楼层
mark mark

出0入0汤圆

发表于 2014-12-6 18:45:28 | 显示全部楼层
如果要延长渐变的过程,该如何修改参数?

出0入0汤圆

发表于 2014-12-6 20:13:00 | 显示全部楼层
挺巧妙的

出0入0汤圆

发表于 2014-12-6 20:18:01 | 显示全部楼层
mark,现在很多产品呼吸灯很常见

出0入0汤圆

发表于 2014-12-6 20:24:46 | 显示全部楼层
反应慢,得好好消化下。

出0入0汤圆

发表于 2014-12-6 21:06:05 | 显示全部楼层
  刚看下载紧单片机试了下,比笔记本电源按钮带的呼吸灯效果还是差很多,闪得眼花。

出5入42汤圆

发表于 2014-12-6 21:12:16 来自手机 | 显示全部楼层
我也说一句回头试试

出0入0汤圆

发表于 2014-12-6 21:54:13 | 显示全部楼层
语法太不规范了,有点接受不了

出0入0汤圆

发表于 2014-12-6 22:27:59 | 显示全部楼层
一听说呼吸灯还是要MARK一下地。

出0入0汤圆

发表于 2014-12-6 23:38:38 | 显示全部楼层
学习了,有空实际试一试

出0入0汤圆

发表于 2014-12-8 16:33:00 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2014-12-9 08:37:06 | 显示全部楼层
mark 试一下

出0入0汤圆

发表于 2014-12-9 08:44:44 | 显示全部楼层
还有这种写法,值得学习一下

出0入0汤圆

发表于 2014-12-9 08:50:26 | 显示全部楼层
还没使用过呼吸灯呢……谢谢

出0入0汤圆

发表于 2014-12-9 08:51:19 | 显示全部楼层
确实够简洁,可是貌似运行效率一般啊!

出0入42汤圆

发表于 2014-12-9 09:23:08 | 显示全部楼层
挺厉害的,打开思路,值得借鉴。

出0入0汤圆

发表于 2014-12-9 14:41:13 | 显示全部楼层
不错,好久有空试试

出0入0汤圆

发表于 2014-12-9 15:00:07 | 显示全部楼层
够短, 不错, mark

出0入0汤圆

发表于 2014-12-9 21:19:36 | 显示全部楼层
我也要试试 挺有意思的      

出0入0汤圆

发表于 2014-12-9 22:39:15 | 显示全部楼层
思想才是最重要的、、、、

出0入0汤圆

发表于 2014-12-9 22:45:11 | 显示全部楼层
发一个我正在用的呼吸灯,效率高
static void breath_led(void)
{
        static uint32_t s_chCnt = 0;
        s_chCnt++;
        const uint16_t freq_ctrl = 9;
        uint32_t bits = (1 << 8) - 1;
        bits <<= freq_ctrl;
        uint8_t pwm_ctrl = (s_chCnt & bits) >> freq_ctrl;
        uint8_t current = s_chCnt & 0x7f;
        if (pwm_ctrl > 128){
                pwm_ctrl = 255 - pwm_ctrl;
        }
        if (pwm_ctrl > current){
                LED1_ON();
        }else{
                LED1_OFF();
        }
}

出0入0汤圆

发表于 2014-12-9 23:08:38 | 显示全部楼层
好贴 mark之

出0入4汤圆

发表于 2014-12-11 14:31:35 | 显示全部楼层
玩玩还可以  不适用于还有其它功能的系统

出0入0汤圆

发表于 2014-12-12 21:06:56 | 显示全部楼层
呼吸灯程序

出0入0汤圆

发表于 2014-12-12 21:58:18 | 显示全部楼层
把很多集在一块,汇编看起来也不短了

出0入0汤圆

发表于 2014-12-19 14:17:59 | 显示全部楼层
mark,思路不错,移植到stm32研究一下,不知与指数的效果相比如何·~

出140入158汤圆

发表于 2014-12-19 14:32:36 | 显示全部楼层
有点搞笑

出0入0汤圆

发表于 2014-12-19 14:34:26 | 显示全部楼层
MARK-巧妙实现呼吸灯

出0入0汤圆

发表于 2014-12-20 10:24:32 | 显示全部楼层
在F100C8T6上移植过可行,闪烁较厉害~,减延时,效果会好很多。编译占好大的~
Program Size: Code=4480 RO-data=336 RW-data=56 ZI-data=1832  

出0入0汤圆

发表于 2015-1-27 12:08:32 | 显示全部楼层
MARKMARKMARK

出0入0汤圆

发表于 2015-1-27 21:49:52 | 显示全部楼层
学习了,不同思路,效果相同,虽然效率不同,但要求可能也不同哦

出0入0汤圆

发表于 2015-1-28 12:12:11 | 显示全部楼层
很棒                       

出0入0汤圆

发表于 2015-1-28 12:38:50 | 显示全部楼层
很有意思,程序不长,但比较巧妙

出0入0汤圆

发表于 2015-2-5 11:17:08 | 显示全部楼层
给人耳目一新的感觉。

出0入0汤圆

发表于 2015-2-5 13:11:09 | 显示全部楼层
收藏,后期学习一下。

出0入0汤圆

发表于 2015-7-21 17:02:06 | 显示全部楼层
为什么说这个代码的效率不高?因为整个程序只有一个循环吗?

出0入0汤圆

发表于 2017-7-19 21:27:51 | 显示全部楼层
路过咯,顺便手下!有么有试过的啊

出0入0汤圆

发表于 2017-7-20 11:15:04 | 显示全部楼层
思路不错,应用时要改一下。

出0入0汤圆

发表于 2017-7-22 19:22:23 来自手机 | 显示全部楼层
收下,留作参考,谢谢

出0入8汤圆

发表于 2017-7-23 08:04:48 | 显示全部楼层
谢谢,楼主,学习了!

出0入0汤圆

发表于 2017-7-23 11:36:07 | 显示全部楼层
MARK.测试下效果怎样先。

出0入0汤圆

发表于 2017-7-24 19:31:26 | 显示全部楼层
Mark,谢谢

出0入0汤圆

发表于 2018-4-8 05:26:44 | 显示全部楼层
程序尽量少用除法。

出0入0汤圆

发表于 2018-4-8 07:57:11 来自手机 | 显示全部楼层
收 下,多谢分享了!!!

出50入10汤圆

发表于 2018-4-8 10:40:23 | 显示全部楼层
非常短的呼吸灯程序,玩一下。谢谢楼主!

出0入0汤圆

发表于 2018-4-8 11:41:18 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2018-4-8 12:26:49 | 显示全部楼层
有机会可以试试
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 22:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表