历史上的今天
今天是:2025年08月12日(星期二)
2021年08月12日 | 51单片机心形灯实现旋转呼吸灯流水编程
2021-08-12 来源:eefocus

心形灯原理图
编译软件:Keil uVision5
(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343174)
单片机程序下载软件:STC-ISP
(如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343157)
程序代码:
灯状态处于0亮1灭
#include #include #define uchar unsigned char #define uint unsigned int sbit led0 =P3^6; sbit led1 = P2^2; uint num, timenum=100, leddirction=0, ledpwm=0, ledpwm_temp, pwm_max=100, pwm_min=0; unsigned char code table[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; unsigned char code table1[]={0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe}; uint flag0=0; void init(){ TMOD=0x01; //定时器1模式 TH0 = (65536-10)/256; TL0 = (65536-10)%256; ET0=1; //开定时器0中断 EA=1; //开总中断 TR0=1; //启动定时器0 } void Delay(unsigned int i){ unsigned char j; for(;i>0;i--){ for(j=110;j>0;j--); } } void main(){ //init(); uint i=0; while(1){ while(flag0==0){ //先让心形灯做底部D17号灯呼吸闪烁,在这里利用flag来控制当前接口内灯的循环闪烁 if((timenum++)>=100){ timenum=0; if(leddirction==0){ ledpwm++; if(ledpwm>=pwm_max){ ledpwm=pwm_max; leddirction=1; } } if(leddirction==1){ ledpwm--; if(ledpwm<=pwm_min){ ledpwm=pwm_min; flag0=1; leddirction=0; } } ledpwm_temp=ledpwm; } if(ledpwm_temp>0){ led0 = 0; ledpwm_temp--; }else{ led0 = 1; } } P3=0xff; //D17号灯闪烁结束,让其位置变为1让其熄灭 flag0=0; for(i=0;i<8;i++){ //让心形灯右半部分呼吸闪烁 while(flag0==0){ if((timenum++)>=100){ timenum=0; if(leddirction==0){ ledpwm++; if(ledpwm>=pwm_max){ ledpwm=pwm_max; leddirction=1; } } if(leddirction==1){ ledpwm--; if(ledpwm<=pwm_min){ ledpwm=pwm_min; flag0=1; leddirction=0; } } ledpwm_temp=ledpwm; } if(ledpwm_temp>0){ P0 = table[i]; ledpwm_temp--; }else{ P0 = 0xff; } } P0=0xff; flag0=0; } for(i=0;i<8;i++){ //左半部分 P2 = table1[i]; while(flag0==0){ if((timenum++)>=100){ timenum=0; if(leddirction==0){ ledpwm++; if(ledpwm>=pwm_max){ ledpwm=pwm_max; leddirction=1; } } if(leddirction==1){ ledpwm--; if(ledpwm<=pwm_min){ ledpwm=pwm_min; flag0=1; leddirction=0; } } ledpwm_temp=ledpwm; } if(ledpwm_temp>0){ P2 = table1[i]; ledpwm_temp--; }else{ P2 = 0xff; } } P2=0xff; flag0=0; } } }
下一篇:51单片机心形灯实现串口通信编程
史海拾趣
|
我有一个图片压缩算法,想要移植到DSP+ARM(674x核+cortex a8)的平台上。ARM主要用来控制,DSP用来做 图片压缩处理。ARM上跑的是linux系统,DSP上是SYS/BIOS,开发环境是CCS。按我的想法,程序结构是: (1)DSP和ARM的程序是在同一个main函数里 ...… 查看全部问答> |
|
新型的按键扫描程序 不过我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉。我非常坚信这种按键处理办法的便捷和高效,你可以移植到任何一种嵌入式处理器上面,因为C语言强大的 ...… 查看全部问答> |
|
拿到ST Nucelo F091RC开发板有几天了,一直没有时间,今天先发个特别的东西给大家参考。利用普通LED实现LED显示和测光强。这个程序在其它Nucleo开发板上也可以运行。 程序很简单,如下所示,直接在mbed中创建一个项目,然后就可以改变光强(比如用 ...… 查看全部问答> |
|
本帖最后由 freebsder 于 2015-3-8 02:32 编辑 freebsder发于www.eeworld.com.cn,如需转载或转发请保留此行声明。 板子还没有拿到,以下文字是基于人肉计算机虚拟跑出来的,所以很可能会在板子拿到之后进行修正。 本来只想看看lpc54xxx的低功 ...… 查看全部问答> |




