单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1281|回复: 0
收起左侧

基于ATmega128单片机的红外控制电机系统源码

[复制链接]
Ricardo_w 发表于 2017-9-17 17:04 | 显示全部楼层 |阅读模式
给大家分享一种基于ATmega128的红外控制电机系统
0.png

单片机源程序如下:
  1. #include "Main.h"
  2. SIGNAL(SIG_OVERFLOW0) //中断每1秒发一个数
  3. {
  4.        
  5.         TCNT0 = 200;
  6.         TIMSK &= ~_BV(TOIE0);  //TIMSK中TOIE0置0
  7.         if(++g_bCount>1)
  8.         {
  9.                 g_bCount = 0;
  10.                
  11.                 TaskInTimer();
  12.         }
  13.         /*if(++g_aCount > 44)      //3s定时
  14.         {
  15.                 g_aCount = 0;
  16.                 Table_Locked();
  17.         }*/

  18.         TIMSK |= _BV(TOIE0);  //开中断
  19. }

  20. SIGNAL(SIG_OVERFLOW2)        //中断每1秒发一个数
  21. {
  22.         TCNT2 = 150;
  23.         TIMSK &= ~_BV(TOIE2);     //TIMSK中TOIE2置0 关闭中断
  24.         if(++Time_Count > 21)      //3s定时
  25.         {
  26.                 Time_Count = 0;
  27.                 //flag_3s = 1;
  28.                 Table_Locked();
  29.         }
  30.         TIMSK |= _BV(TOIE2);       //开中断
  31. }


  32. void Init()
  33. {
  34.         cli();                    //关闭所有中断
  35.         Key_Init();
  36.         PortInit();
  37.         Time_Init();
  38.        
  39.         sei();                    //打开所有中断
  40.         InitADC();
  41. }

  42. void Delay_1ms()
  43. {
  44.         uint i;
  45.         for(i = 0;i < 570;i--)
  46.                 ;
  47. }

  48. void Delay_1s()
  49. {
  50.         uint i;
  51.         for(i = 0;i < 2000;i++)
  52.         {
  53.                 Delay_1ms();
  54.         }
  55. }

  56. void Delay_xs(uint x)
  57. {
  58.         uint i;
  59.         for(i = 0;i < x;i++)
  60.         {
  61.                 Delay_1s();
  62.         }
  63. }

  64. void PortInit()
  65. {
  66.         DDRA = 0xff;
  67.         PORTA = 0xe2;       //LED 0xe2
  68.         DDRC = 0xff;
  69.         PORTC = 0xff;       //Motor
  70.         DDRE = 0x00;        
  71.         PORTE = 0xf8;       //Remote Control
  72.         DDRF =0x00;         //ADC
  73.         PORTF = 0x00;
  74. }



  75. void Time_Init()
  76. {
  77.         TCNT0 = 200;
  78.         g_bCount = 0;
  79.         TCCR0 = _BV(CS02)|_BV(CS00)|_BV(CS01);  //CS02置1,CS00,cs01置1 //1024分频
  80.         TIMSK |= _BV(TOIE0);
  81.         TCNT2 = 150;
  82.         Time_Count = 0;
  83.         TCCR2 = _BV(CS22)|_BV(CS20);  //CS02置1,|_BV(CS21)CS00,cs01置1 //1024分频
  84.         TIMSK |= _BV(TOIE2);
  85. }



  86. void main()
  87. {
  88.         Init();
  89.         while(1)
  90.         {
  91.                 Key_scan();
  92.         }
  93. }



  94. void TaskInTimer()
  95. {
  96.         DJ_Run();
  97.         TaskInADC();
  98. }

  99. /*void TestInTimer()
  100. {
  101.         if(flag_Time == 0 && flag_FTime == 0)
  102.         {
  103.                 //PORTA |= (1 << PA1);              //locked LED on进入锁定模式
  104.                 flag_Locked = 0;
  105.                 flag_Manual = 0;
  106.                 flag_Follow = 0;
  107.                 PORTC = 0xff;
  108.                 flag_clockrise = 0;
  109.                 flag_cclockrise = 0;
  110.                 PORTA &= ~(1 << PA3);             //auto LED off
  111.                 PORTA &= ~(1 << PA2);             //manual LED off
  112.                 PORTA &= ~(1 << PA0);             //motion LED off
  113.                 PORTA &= ~(1 << PA4);             //ADC off
  114.                 PORTA |= (1 << PA1);              //locked LED on进入锁定模式
  115.         }
  116. }*/

  117. ……………………

  118. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
Maiev.zip (5.96 KB, 下载次数: 8)
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 QQ 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表