[Atmel] 用AtmelStudio6.2跑mega16例程(38)T1交通灯

[复制链接]
 楼主| ddllxxrr 发表于 2014-10-23 19:46 | 显示全部楼层 |阅读模式
本程序是利用T1定时器,来控制交通灯的闪烁。

Proteus的截图:



Studio6.2的截图:



程序:
  1. /*
  2. * GccApplication1.c
  3. *
  4. * Created: 2014-10-23 18:57:04
  5. *  Author: Administrator
  6. */

  7. #define F_CPU 4000000UL
  8. #include <avr/io.h>
  9. #include <avr/interrupt.h>
  10. #include <stdint.h>
  11. #include <util/delay.h>

  12. #define RED_EW_ON() PORTC |= (1<<0)
  13. #define YELLOW_EW_ON() PORTC |= (1<<1)
  14. #define GREEN_EW_ON() PORTC |= (1<<2)

  15. #define RED_EW_OFF() PORTC &= ~(1<<0)
  16. #define YELLOW_EW_OFF() PORTC &= ~(1<<1)
  17. #define GREEN_EW_OFF() PORTC &= ~(1<<2)

  18. #define RED_SN_ON() PORTC |= (1<<3)
  19. #define YELLOE_SN_ON() PORTC |= (1<<4)
  20. #define GREEN_SN_ON() PORTC |= (1<<5)

  21. #define RED_SN_OFF() PORTC &=~(1<<3)
  22. #define YELLOW_SN_OFF() PORTC |=~(1<<4)
  23. #define GREEN_SN_OFF() PORTC &= ~(1<<5)

  24. #define YELLOW_EW_BLINK() PORTC^=0x02
  25. #define YELLOW_SN_BLINK() PORTC^=0x10

  26. #define BEEP() (PORTB ^=0x01)

  27. uint8_t Time_Count = 0,Flash_Count = 0,Operation_Type = 1;


  28. int main(void)
  29. {
  30.     DDRB = 0xFF; PORTC = 0xFF;
  31.         DDRC = 0xFF; PORTC = 0x00;
  32.         TCCR1B = 0x03;        //T1 分频 64
  33.         TCNT1 = 65536 - F_CPU/64.0 *0.5;
  34.         sei();
  35.        
  36.        
  37.         while(1)
  38.     {
  39.         //TODO:: Please write your application code
  40.     }
  41. }


  42. void Yellow_Light_Alarm()
  43. {
  44.        
  45.     uint8_t i;
  46.         for(i=0;i<100;i++)
  47.         {
  48.                 BEEP();_delay_us(380);
  49.        
  50.         }
  51. }

  52. ISR(TIMER1_OVF_vect)
  53. {
  54.         TCNT1 = 65536 - F_CPU/64.0*0.5;  //重装定时值
  55.         switch(Operation_Type)
  56.         {
  57.                 case 1:
  58.                          RED_EW_OFF(); YELLOW_EW_OFF(); GREEN_EW_ON();
  59.                                  RED_SN_ON(); YELLOW_SN_OFF(); GREEN_SN_OFF();
  60.                                  if(++Time_Count != 10) return;
  61.                                  Time_Count = 0;
  62.                                  Operation_Type = 2;
  63.                                  break;
  64.                 case 2:
  65.                          Yellow_Light_Alarm();
  66.                                  GREEN_EW_OFF();
  67.                                  YELLOW_EW_BLINK();
  68.                                  if(++Flash_Count != 10) return;
  69.                                  Flash_Count = 0;
  70.                                  Operation_Type = 3;
  71.                                  break;
  72.                 case 3:
  73.                          RED_EW_ON(); YELLOW_EW_OFF();GREEN_EW_OFF();
  74.                                  RED_SN_OFF(); YELLOW_SN_OFF();GREEN_SN_ON();
  75.                                  if(++Time_Count != 10)return;
  76.                                  Time_Count = 0;
  77.                                  Operation_Type = 4;
  78.                                  break;
  79.                 case 4:
  80.                          Yellow_Light_Alarm();
  81.                                  GREEN_SN_OFF();
  82.                                  YELLOW_SN_BLINK();
  83.                                  if(++Flash_Count != 10)return;
  84.                                  Flash_Count = 0;
  85.                                  Operation_Type = 1;                                  
  86.                                                   
  87.         }
  88. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部