joecongmin的笔记 https://bbs.21ic.com/?473596 [收藏] [复制] [RSS]

日志

AVR单片机笔记一(I/O口的使用)

已有 880 次阅读2010-4-7 08:23 |系统分类:单片机

//---------------------------------------------------------------------
//Copyright(c) 博控设计 joecongmin  2010 All righr reserved
//文件名:delay_rest.c
//文件描述:实现按键控制LED 灯的亮灭,按一下亮,再按一
//     下灭,如此循环往复。
//实验目的:学习AVR 单片机的I/O口如何配置为输入和输出
//当前版本号:V1.0
//完成时间:2010-4-6 9:48:19
//修改记录:
//修改时间:
//起草时间:



//---------------------------------------------------------------------
//----------------------------start------------------------------------
#include"iom88v.h"
#define uint16 unsigned int
#define uchar unsigned char
void delay (uint16 i);
void key_scnf(void);
uchar count_key=0;
void main(void)
{
// DDRC &= 0XFE; //PC0 input


 DDRC |= 0x02; //PC1 output
 while(1)
 {
  key_scnf( );
  if(count_key)
  {
   PORTC |= 0x02; //PC1 = 1;
  }
  else
  {
   PORTC &= 0xfd; //PC1 = 0; 
  }
 }
 
}


//-------------------------------------------------------------------
//函数原型:void delay (uint16 i);
//入口参数:uint16 i:延时变量
//出口参数:无
//功能:实现延时功能
//-------------------------------------------------------------------
void delay (uint16 i)
{
 uchar j;
 while(i--)
 {
  for(j=125;j>0;--j)
  {
  ;
  }
 }
 
}


//-------------------------------------------------------------------
//函数原型:void key_scnf(void);
//入口参数:无
//出口参数:无
//功能:实现读键值功能
//-------------------------------------------------------------------
void key_scnf(void)
{
 uchar c_pinb;
 DDRB |= 0x20; //RB5设置为输出
 PORTB |= 0x20; //RB5输出1
// delay(1);      //延时一段时间
 DDRB &= 0xdf; //RB5 设置位输入 =0
 c_pinb = PINB;
 if((c_pinb&0x20)!=0x20) //判断portb5的键有无按下
 {
  delay(1);  //延时消抖
//  DDRB |= 0x20; //RB5设置为输出  //注释掉的部分,不必须
//  PORTB |= 0x20; //RB5输出1
//  delay(1);      //延时一段时间
//   DDRB &= 0xdf; //RB5 设置位输入 =0
   c_pinb = PINB;
   if((c_pinb&0x20)!=0x20) //真的按下
   {
//   DDRB |= 0x20; //RB5设置为输出
//   PORTB |= 0x20; //RB5输出1
//   delay(1);      //延时一段时间
//    DDRB &= 0xdf; //RB5 设置位输入 =0
//   c_pinb = PINB;
     while((c_pinb&0x20)!=0x20) //按键没弹起,等键释放;关键,开始时写成!=0出错
     {
//    DDRB |= 0x20; //RB5设置为输出
//    PORTB |= 0x20; //RB5输出1
//    delay(1);      //延时一段时间
//     DDRB &= 0xdf; //RB5 设置位输入 =0
      c_pinb = PINB;
     }
     count_key += 1;
     if(count_key==2)
     count_key = 0;
 
   }
 
 }
 
}


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)