原创 EDN_51助学板交差作业 之一——渐明渐暗动态流水灯效果(C源程序)

2008-5-23 17:36 3910 13 16 分类: MCU/ 嵌入式

EDN_51助学板交差作业 之一——渐明渐暗动态流水灯效果(C源程序)


//--------------------------------------------------------
//项目: 灯闪控制
//设计: 程序匠人
//--------------------------------------------------------
/*
匠人按:一般的流水灯,LED都是固定亮度的。本程序在此基础上,实现渐明渐暗的效果。原理就是采用软件实现PWM,通过调节每个LED的亮灭时间比(占空比)来调节LED的亮度。本程序在EDN提供的51助学板上测试通过。
*/
//--------------------------------------------------------
/*
版本说明:
程序01_P0口灯闪_V01: 2008-5-21 22:53
 8个LED一起闪烁
   
程序01_P0口灯闪_V02: 2008-5-21 22:53
 8个LED流水灯


程序01_P0口灯闪_V03: 2008-5-22 21:36
 仍旧是8个LED流水灯,规范程序


程序01_P0口灯闪_V04: 2008-5-22 21:52
 优化程序


程序01_P0口灯闪_V05: 2008-5-22 23:19
 渐明渐暗动态流水灯效果


*/
//--------------------------------------------------------
//插入文件包
//--------------------------------------------------------
#include   //加入头文件;


//--------------------------------------------------------
//重新命名数据类型
//--------------------------------------------------------
typedef unsigned char tU08;   //unsigned 8 bit definition
typedef unsigned char tU8;   //unsigned 8 bit definition
typedef unsigned int tU16;   //unsigned 16 bit definition
typedef unsigned long tU32;   //unsigned 32 bit definition


typedef signed char tS08;   //signed 8 bit definition
typedef signed char tS8;   //signed 8 bit definition
typedef signed int tS16;   //signed 16 bit definition
typedef signed long tS32;   //signed 32 bit definition


typedef float tF32;


//--------------------------------------------------------
//--------------------------------------------------------


#define LED_ON 0  //LED点亮
#define LED_OFF 1  //LED熄灭


/*
//--------------------------------------------------------
//延时子程序
//--------------------------------------------------------
void delay(tU16 a)    
{
 tU16 b;    
 for(b=0;b}
*/


//--------------------------------------------------------
//主函数
//--------------------------------------------------------
void main()     
{
 tU08 i,j ;


 tU08 t_jsq ;  //周期计数器(范围0~199)
 
 tU08 duty_led0 ; //LED0的占空(范围0~200;数值越大,LED越亮;下同)
 tU08 duty_led1 ; //LED1的占空
 tU08 duty_led2 ; //LED2的占空
 tU08 duty_led3 ; //LED3的占空
 tU08 duty_led4 ; //LED4的占空
 tU08 duty_led5 ; //LED5的占空
 tU08 duty_led6 ; //LED6的占空
 tU08 duty_led7 ; //LED7的占空


 tU08 duty_led_buf0 ; //缓冲
 tU08 duty_led_buf1 ; //缓冲
 tU08 duty_led_buf2 ; //缓冲
 tU08 duty_led_buf3 ; //缓冲
 tU08 duty_led_buf4 ; //缓冲
 tU08 duty_led_buf5 ; //缓冲
 tU08 duty_led_buf6 ; //缓冲
 tU08 duty_led_buf7 ; //缓冲



 while(1)     //无限循环
 {
  duty_led0 = 0 ;
  duty_led1 = 0 ;
  duty_led2 = 0 ;
  duty_led3 = 0 ;
  duty_led4 = 0 ;
  duty_led5 = 0 ;
  duty_led6 = 0 ;
  duty_led7 = 0 ;


  duty_led_buf0 = 1 ;
  duty_led_buf1 = 2 ;
  duty_led_buf2 = 4 ;
  duty_led_buf3 = 200 ;
  duty_led_buf4 = 4 ;
  duty_led_buf5 = 2 ;
  duty_led_buf6 = 1 ;
  duty_led_buf7 = 0 ;



  //P1_0 = LED_ON ;
  //P1_1 = LED_ON ;
  //P1_2 = LED_ON ;
  //P1_3 = LED_ON ;


  for ( j = 0 ; j<50 ; j++ )  //调节流水灯间隔时间
  {



   for ( i = 0 ; i<5 ; i++ )  //调节流水灯速度
   {
    
    //根据占空比,控制每个LED的亮度
    for ( t_jsq = 0 ; t_jsq <200  ; t_jsq ++ )
    {
     if ( t_jsq < duty_led0 ) P0_0 = LED_ON ; else P0_0 = LED_OFF ;
     if ( t_jsq < duty_led1 ) P0_1 = LED_ON ; else P0_1 = LED_OFF ;
     if ( t_jsq < duty_led2 ) P0_2 = LED_ON ; else P0_2 = LED_OFF ;
     if ( t_jsq < duty_led3 ) P0_3 = LED_ON ; else P0_3 = LED_OFF ;
     if ( t_jsq < duty_led4 ) P0_4 = LED_ON ; else P0_4 = LED_OFF ;
     if ( t_jsq < duty_led5 ) P0_5 = LED_ON ; else P0_5 = LED_OFF ;
     if ( t_jsq < duty_led6 ) P0_6 = LED_ON ; else P0_6 = LED_OFF ;
     if ( t_jsq < duty_led7 ) P0_7 = LED_ON ; else P0_7 = LED_OFF ;
  
    } 
   }
   
   //占空队列移动
   duty_led0 = duty_led1 ;
   duty_led1 = duty_led2 ;
   duty_led2 = duty_led3 ;
   duty_led3 = duty_led4 ;
   duty_led4 = duty_led5 ;
   duty_led5 = duty_led6 ;
   duty_led6 = duty_led7 ;
   duty_led7 = duty_led_buf0 ;
   duty_led_buf0 = duty_led_buf1 ;
   duty_led_buf1 = duty_led_buf2 ;
   duty_led_buf2 = duty_led_buf3 ;
   duty_led_buf3 = duty_led_buf4 ;
   duty_led_buf4 = duty_led_buf5 ;
   duty_led_buf5 = duty_led_buf6 ;
   duty_led_buf6 = duty_led_buf7 ;
   duty_led_buf7 = 0 ;
  }


  //delay(65535);   //延时


 }
}


 


 


//--------------------------------------------------------
//
// THE END
//
// 版权所有:程序匠人(引用者请保留原作者姓名)
//
//--------------------------------------------------------

文章评论3条评论)

登录后参与讨论

用户124183 2008-6-3 21:43

能用啊!不错,学习了~

程序匠人 2008-5-27 23:44

回复cyber211:本程序在EDN提供的51助学板上测试通过。

Cybershu 2008-5-24 14:33

51的片子不能用这个程序吧吧
相关推荐阅读
程序匠人 2011-08-19 16:42
串口调试利器——《串口猎人》V31 免费发布!
匠人按:《串口猎人》V31是继之前的V26、V29版本之后的最新升级版本。诸多细节改进不一一道来了。免费发布。 下载:串口猎人 ( Serial Hunter ) V31 setup.rar (2.7...
程序匠人 2011-06-24 11:25
匠人开发的一款串口调试工具——串口猎人 ( Serial Hunter ) V26
《串口猎人》十大功能简介: 1、基本功能,支持基本的 收、发、查看、保存、清除等功能。2、基本功能,自动/手动搜索串口,串口参数的设置和查看。3、基本功能,支持HEX/ASCII/中文汉字收发。4、高...
程序匠人 2010-07-10 20:49
招聘会花絮
招聘会花絮招聘会上常常会遇到一些让人啼笑皆非的趣闻和花絮:花絮1:应聘者:“偶是来应聘某某职位的,这是偶的简历。”匠人:“您好!请坐……”(一边接过简历一边随口问道)“哪年毕业的?”应聘者(脸不红心不...
程序匠人 2010-07-08 10:40
给我64只章鱼,我也可以通吃世界杯了
昨天谁赢了?西班牙?德国?——还是保罗?忘记那些足球专家和名宿们吧,甚至被认为是乌鸦嘴的贝利。他们的预测在章鱼保罗的面前,简直就是小儿科。经过90分钟的恶战,西班牙队1比0淘汰了章鱼保罗的祖国德国队。...
程序匠人 2010-06-28 14:11
周末,在佘山钓鱼(有图有真相)
昨天和木华去佘山钓鱼俺的个人战绩:钓出水面3条小鱼,收杆不及时脱钩1条,从水桶中又蹦出去1条……大家肯定很好奇,最后一条,匠人怎么处理的呀?呵呵 放生?or回家烧鱼汤? 鱼头烧汤鱼肚清蒸鱼尾红烧可怜,...
程序匠人 2010-05-05 20:02
通过两张趣图,看工程师的自我反省
很久没有关注其他网友的博客了,那天机缘巧合,看到两位网友分别转载的图片,很有意思。第一张图片来源国外,是一个关于程序员面试时的简历,被人事部门和程序员本身评审的角度不同的图片。当然,这是一个从国外面试...
我要评论
3
13
关闭 站长推荐上一条 /3 下一条