单片机/MCUwilliam hill官网
直播中

yshe_11

11年用户 30经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术 测量仪表 模拟技术 连接器 存储技术 EDA/IC设计 接口/总线/驱动
私信 关注
[问答]

atmega128 icc程序

求atmega128 用icc编的程序  各模块都需要   越多越好   多模块配合使用最好
已退回10积分

回帖(3)

yts1213

2013-8-23 20:23:15
/**************************************************************
    File Name:        红外按键
    Editor:           Electricity Institute Of Hunan City University   朱家林
    Edite Time:       2013-07-15
    Modifier:          朱家林
    Modication Time:
    Compiler :        AVR Studio4.17
    Hardware Platform: Atmega128MCU,8MHZ crystals  
Hardware Conection:
    Description :               
    Attention:   
**************************************************************/
#include "comm.h"
//***********************************************************************
//   定义变量区
//***********************************************************************
#define delay_us(x)     _delay_us(x)         //AVR GCC延时函数 x(us)
#define delay_ms(x)     _delay_ms(x)         //AVR GCC延时函数 x(ms)
#define RED_IN         DDRE &= ~(1 << PE1)  //设置输入,红外接收头接单片机PE3口
#define RED_OUT         DDRE |= (1 << PE1)  //设置输出
#define RED_CLR         PORTE &= ~(1 << PE1) //置低电平
#define RED_SET         PORTE |= (1 << PE1)  //置高电平
#define RED_R         (PINE & (1 << PE1))  //读电平
#define FMQ_0           PORTD &= ~(1 << PD6)    //蜂鸣器所在IO口PD6
#define FMQ_1           PORTD |= (1 << PD6)

uchar IRKEY;
uint temp_value;
uchar code_value=0;
uchar key_code[4];
uchar key_value;

/*****************************************************/
void beep() //产生1KHZ频率声音的函数
{

    DDRD=0xff;//设置为输出
  FMQ_0;
_delay_us(500);
FMQ_1;
_delay_us(500);
}
void beep1()
{
uint k;
for(k=0;k<20;k++)
  {
   beep();
  }
FMQ_1;
_delay_ms(25);
}
//***********************************************************************
//   IO端口初始化
//***********************************************************************
void IRIO_init()
{
    DDRE |= 0x02;
    RED_SET;
RED_IN;
}
//*************************************************************************
//   遥控器键值赋功能值子程序
//*************************************************************************
void Key_Icode(void)
{
   switch(key_code[2])
   {
    case 0x0C: IRKEY = 1; break;
    case 0x18: IRKEY = 2; break;
    case 0x5E: IRKEY = 3; break;
    case 0x08: IRKEY = 4; break;
    case 0x1C: IRKEY = 5; break;
    case 0x5A: IRKEY = 6; break;
    case 0x42: IRKEY = 7; break;
    case 0x52: IRKEY = 8; break;
    case 0x4A: IRKEY = 9; break;
    case 0x16: IRKEY = '0'; break;
    case 0x45: IRKEY = POWER;break;
    case 0x47: IRKEY = MENU;break;
    case 0x44: IRKEY = TEST;break;
    case 0x40: IRKEY = ADD;break;
    case 0x43: IRKEY = HOME;break;
    case 0x07: IRKEY = BACK;break;
    case 0x15: IRKEY = PLAY;break;
    case 0x09: IRKEY = FORWARD;break;
    case 0x19: IRKEY = DECREASE;break;
    case 0x0d: IRKEY = CLEAR;break;   
    default: IRKEY = 0xFF; break;
   }
}
//*************************************************************************
//   遥控器解码子程序
//*************************************************************************
uchar Red_Code()
{
uchar i,j,k = 0;
  for(i = 0;i < 19;i++)
{
    delay_us(400);           //延时400us
    if(RED_R)                //9ms内有高电平,则判断为干扰,退出处理程序
      {
         return;
     }
}
while(!RED_R);            //等待9ms低电平过去

for(i=0;i<5;i++)          //是否连发码
{
    delay_us(500);
    if(!RED_R)
     {
       return;
     }
}

while(RED_R);               //等待4.5ms高电平过去
for(i = 0;i < 4;i++)        //接收4个字节的数据
{
    for(j = 0;j < 8;j++)      //每个字节的数据8位
    {
   
      while(!RED_R);         //等待变高电平
      while(RED_R)           //计算高电平时间
       {
       delay_us(100);
       k++;
       if(k >= 22)           //高电平时间过长,则退出处理程序
        {
          return;              //
        }
   
        }
      code_value>>=1;        //接受一位数据
      if(k >= 8)
      {
          code_value|=0x80;   //高电平时间大于0.56,则为数据1
       }
      k = 0;                  //计时清零
    }
    key_code[i]=code_value;  //四个字节的数据
}
   Key_Icode();             //调用赋值函数
  //Display_Key(key);        //显示按键值
  
   beep1();                  //按键声音指示
return IRKEY;
}
/*****************等待按键*****************************/
void waitkey()//waiting for the button press
{
    key_value = 0x00;
while(key_value==0x00)
{key_value = Red_Code();}//IRKEY
}


举报

yshe_11

2013-8-24 09:29:35
引用: yts1213 发表于 2013-8-23 20:23
/**************************************************************
    File Name:        红外按键
     ...

可以用文档的形式发过来吗?而且好像有点少
举报

yts1213

2013-8-25 21:43:19
atmega128 icc程序
PCB打样找华强 http://www.atmega128 icc程序
PCB打样找华强 http://www.hqpcb.com 样板2天出货
举报

更多回帖

发帖
×
20
完善资料,
赚取积分