[Atmel] 用AtmelStudio6.2跑mega16例程(46)键控频率输出

[复制链接]
 楼主| ddllxxrr 发表于 2014-11-4 21:19 | 显示全部楼层 |阅读模式
本例中T/C1与 OC1A引角连接,所生成的率频由该引角输出。

本例通过4个按键分别调节频率值的千位、百位、十位、个位,通过示波可观察不同的频率。

Proteus截图:

Studio6.2编译通过截图:

程序清单:
  1. /*
  2. * GccApplication9.c
  3. *
  4. * Created: 2014-11-4 20:37:39
  5. *  Author: Administrator
  6. */

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

  11. #define  K1 (uint8_t)(~_BV(PC0))
  12. #define  K2 (uint8_t)(~_BV(PC2))
  13. #define  K3 (uint8_t)(~_BV(PC4))
  14. #define  K4 (uint8_t)(~_BV(PC6))

  15. const uint8_t SEG_CODE[] = {0x3f,0x06,0x58,0x4f,0x66,0x6d,0x7d,0x7d,0x07,0x7f,0x6f};
  16. uint8_t FRQ_DATA[] = {0,1,0,0};
  17. uint8_t Key_State;

  18. void Show_FRQ_ON_DSY()
  19. {
  20.         uint8_t i = 0;
  21.         for(i=0;i<4;i++)
  22.         {
  23.                 PORTB = ~_BV(i);
  24.                 PORTA = SEG_CODE[FRQ_DATA[i]];
  25.                 if(i==0) PORTA |= 0x80;
  26.                 _delay_ms(2);
  27.         }
  28. }

  29. void Set_Frequency()
  30. {
  31.         uint16_t f;
  32.         f=FRQ_DATA[0]*1000+FRQ_DATA[1]*100+FRQ_DATA[2]*10+FRQ_DATA[3];
  33.         OCR1A = F_CPU/2.0/f;
  34. }
  35. int main(void)
  36. {
  37.     uint8_t i=0;Key_State = 0xFF;
  38.         DDRA = 0xFF; PORTA = 0xFF;
  39.         DDRB = 0xFF; PORTB = 0xFF;
  40.         DDRD = 0xFF; PORTD = 0xFF;
  41.         DDRC = 0x00; PORTC = 0xFF;
  42.         TCCR1A = 0x40;
  43.         TCCR1B = 0x09;
  44.         TCNT1 = 0;
  45.         Set_Frequency();
  46.        
  47.         while(1)
  48.     {
  49.         if(PINC^Key_State)
  50.                 {
  51.                     Key_State = PINC;
  52.                         if(Key_State != 0xFF)
  53.                         {
  54.                                 switch(Key_State)
  55.                                 {
  56.                                         case K1:i=0;break;
  57.                                         case K2:i=1;break;
  58.                                         case K3:i=2;break;
  59.                                         case K4:i=3;break;
  60.                                 }
  61.                                 FRQ_DATA[i] = (FRQ_DATA[i]+1)%10;
  62.                                 Set_Frequency();
  63.                         }
  64.                 }
  65.                 Show_FRQ_ON_DSY();
  66.     }
  67. }




本帖子中包含更多资源

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

×
yklstudent 发表于 2014-11-5 07:25 | 显示全部楼层
楼主在默默的推广AVR,可惜感兴趣的人很少啊
楼主能推广ATMEL的ARM芯片使用资料啊
coody 发表于 2014-11-5 09:55 | 显示全部楼层
对的,楼主很执着。
 楼主| ddllxxrr 发表于 2014-11-5 14:54 | 显示全部楼层
yklstudent 发表于 2014-11-5 07:25
楼主在默默的推广AVR,可惜感兴趣的人很少啊
楼主能推广ATMEL的ARM芯片使用资料啊 ...

楼上,对Atmel ARM 感兴趣?????:)
 楼主| ddllxxrr 发表于 2014-11-5 14:54 | 显示全部楼层
yklstudent 发表于 2014-11-5 07:25
楼主在默默的推广AVR,可惜感兴趣的人很少啊
楼主能推广ATMEL的ARM芯片使用资料啊 ...

楼上,对Atmel ARM 感兴趣?????:)
yklstudent 发表于 2014-11-5 16:50 | 显示全部楼层
ddllxxrr 发表于 2014-11-5 14:54
楼上,对Atmel ARM 感兴趣?????

有兴趣学着玩玩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2403

主题

6994

帖子

68

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

2403

主题

6994

帖子

68

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