Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92967
  • 博文数量: 25
  • 博客积分: 300
  • 博客等级: 二等列兵
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-05 13:42
文章分类
文章存档

2013年(1)

2012年(1)

2011年(23)

分类: 嵌入式

2011-05-13 22:08:57

  1. /*****************************************************************
  2. *程序名称:LED C语言控制程序        
  3. *程序功能: 流水灯演示
  4. *开发板:     micro2440        
  5. *端口定义: BEEP=GPB0
  6.              LED1=GPB5                    
  7. *         LED2=GPB6                
  8. *         LED3=GPB7
  9. *     LED4=GPB8
  10.                              
  11. *创建者 :     workman    
  12. ** 日 期: 2011年 05月 13日    
  13. ****************************************************************/
  14. #include "s3c2440.h"
  15. #define BEEP_ON (1<<0)         //    高电平蜂鸣器响
  16. #define LED1_ON ~(1<<5)        
  17. #define LED2_ON ~(1<<6)        
  18. #define LED3_ON ~(1<<7)    
  19. #define LED4_ON ~(1<<8)
  20.                                   // 想要某位置1 就用该位与1或
  21.                                  // 想要某位置0 就用该位与0与
  22. #define BEEP_OFF ~(1<<0)     // 低电平蜂鸣器不响
  23. #define LED1_OFF (1<<5)    
  24. #define LED2_OFF (1<<6)
  25. #define LED3_OFF (1<<7)
  26. #define LED4_OFF (1<<8)

  27. void Gpio_Init(void);
  28. void Display_Led1(void);
  29. void Display_Led2(void);
  30. void Display_Led3(unsigned int date);

  31. /*********************************************************
  32. ** 函数名称:void delay(int times)
  33. ** 功能描述: 普通延时函数
  34. ** 说明: 延时作用
  35. ** 注意:     无
  36. ********************************************************/
  37. void delay(int times)
  38. {
  39.     int i;
  40.      for(;times>0;times--)
  41.      for(i=0;i<400;i++);
  42. }
  43. /*********************************************************
  44. ** 函数名称: int main(void)
  45. ** 功能描述: 主函数
  46. ** 说明: 无
  47. ** 注意:     无
  48. ********************************************************/
  49. int main(void)
  50. {    // unsigned int i;
  51.       Gpio_Init();
  52.    while(1)
  53.     {
  54.         Display_Led1();
  55.     //    Display_Led2();    
  56.         /*for(i=1;i<7;i++)
  57.          {
  58.              Display_Led3(i);
  59.              delay(1000);
  60.             }*/    
  61.      GPBDAT=BEEP_ON;
  62.             delay(1000);
  63.          GPBDAT=BEEP_OFF;                                  
  64.      }
  65. }
  66. /*********************************************************
  67. ** 函数名称: void Gpio_Init(void)
  68. ** 功能描述: I/O设置
  69. ** 说明: 00=输入 01=输出 01=第二功能 11=保留
  70. ** 注意:     无
  71. ********************************************************/
  72. void Gpio_Init(void)
  73. {
  74. GPBCON = (1<<0)|(1<<10)|(1<<12)|(1<<14)|(1<<16);    // 01 01 01 01 000000000 设置GPBCON为5,6,7,8 为输出口 00=输入 01=输出 01=第二功能 11=保留
  75.  //GPBCON =0x15400;        // 00 01 01 01 01 00 0000 0000
  76.      //    GPB8 GPB7 GPB6     GPB5 设置GPBCON为5,6,7,8 为输出口 00=输入 01=输出 01=第二功能 11=保留
  77.       GPBUP =0x3fE;         // 总共10位 设置上拉电阻     0为上拉电阻使能。 1为禁止上拉电阻

  78. }
  79.                 
  80. /*********************************************************
  81. ** 函数名称: void Display_Led1(void)
  82. ** 功能描述: 点亮发光二极管
  83. ** 说明: LED1 LED2 LED3 LED4 所接的管脚为GPB5 GPB6 GPB7 GPB8
  84.               0为亮 1为灭
  85. ** 注意:     无
  86. ********************************************************/
  87. void Display_Led1(void)
  88.   {
  89.       GPBDAT =0x000;
  90.      delay(8000);    
  91.      GPBDAT =0xfff;
  92.      delay(8000);
  93.        GPBDAT=0x1c0;     //0001 1100 0000
  94.      delay(8000);
  95.      GPBDAT=0x1a0;     //0001 1010 0000
  96.      delay(8000);
  97.      GPBDAT=0x160;     //0001 0110 0000
  98.      delay(8000);
  99.      GPBDAT=0x0e0;     //0000 1110 0000
  100.      delay(8000);
  101.   
  102.   }
  103. /*********************************************************
  104. ** 函数名称: void Display_Led2(void)
  105. ** 功能描述: 点亮发光二极管
  106. ** 说明: LED1 LED2 LED3 LED4 所接的管脚为GPB5 GPB6 GPB7 GPB8
  107.               0为亮 1为灭
  108. ** 注意:     1:想要某位置1 就用该位与1或
  109.               2:想要某位置0 就用该位与0与
  110. ********************************************************/
  111. void Display_Led2(void)
  112.  {
  113.      GPBDAT = GPBDAT&((LED1_ON)&(LED2_ON)&(LED3_ON)&(LED4_ON));
  114.       delay(1000);
  115.      GPBDAT = GPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
  116.       delay(1000);
  117.      GPBDAT = GPBDAT&(LED1_ON);
  118.      delay(1000);
  119.      GPBDAT = GPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
  120.      delay(1000);
  121.      GPBDAT = GPBDAT&(LED2_ON);
  122.      delay(1000);
  123.      GPBDAT = GPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
  124.      delay(1000);
  125.      GPBDAT = GPBDAT&(LED3_ON);
  126.      delay(1000);
  127.      GPBDAT = GPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
  128.      delay(1000);
  129.      GPBDAT = GPBDAT&(LED4_ON);
  130.      delay(1000);
  131.      GPBDAT = GPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);
  132.      delay(1000);
  133.  }
  134. /*********************************************************
  135. ** 函数名称: void Display_Led3(unsigned int date)
  136. ** 功能描述: 点亮发光二极管 可以由date取值。确定怎么亮
  137. ** 说明: LED1 LED2 LED3 LED4 所接的管脚为GPB5 GPB6 GPB7 GPB8
  138.               0为亮 1为灭
  139. ** 注意:     1:想要某位置1 就用该位与1或
  140.               2:想要某位置0 就用该位与0与
  141.              此程序在while容易出问题。
  142. ********************************************************/
  143.  void Display_Led3(unsigned int date)
  144.  {
  145.    switch(date)
  146.            {        
  147.              case 1:    GPBDAT = GPBDAT&(LED1_ON); break;
  148.             case 2: GPBDAT = GPBDAT&(LED2_ON); break;
  149.             case 3:    GPBDAT = GPBDAT&(LED3_ON); break;
  150.             case 4:    GPBDAT = GPBDAT&(LED4_ON); break;
  151.             case 5: GPBDAT = GPBDAT&((LED1_ON)&(LED2_ON)&(LED3_ON)&(LED4_ON))&(BEEP_ON); break;    
  152.             case 6: GPBDAT = GPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF)|(BEEP_OFF); break;
  153.          }
  154.  }
阅读(1442) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~