查看: 965|回复: 0
打印 上一主题 下一主题

ATMEGA16单片机精简开发板01、按键输入输出检测

[复制链接]
跳转到指定楼层
沙发
发表于 2015-4-7 19:09:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char //宏定义字符型
#define uint unsigned int   //宏定义字整行
uchar KEY;
/********************************************************************
                     N ms延时函数
*********************************************************************/
void delay_nms(uint n)
  {
   uint j,k;
   for (j=0;j<n;j++)
   {
    for (k=0;k<1140;k++);//1ms延时
   }   
  }
/********************************************************************
                     初始化I/O
*********************************************************************/
void Init_IO(void)
{
//设置A口为输出
DDRA=0xFF;
PORTA=0xFF;
//设置B口为输出
DDRB=0xFF;
PORTB=0xFF;
//设置C口为输出
DDRC=0xFF;
PORTC=0xFF;
//设置D口为输出
DDRD=0XFF;
PORTD=0xFF;
}
/********************************************************************
                     按键输入函数
*********************************************************************/
void Key_Process()
{
while((PIND&0X04)==0){KEY=1;}
while((PIND&0X08)==0){KEY=2;}
while((PIND&0X10)==0){KEY=3;}
while((PIND&0X20)==0){KEY=4;}
if(KEY==1){PORTB=0x55;KEY=0;}
if(KEY==2){PORTB=0xaa;KEY=0;}
if(KEY==3){PORTB=0xf0;KEY=0;}
if(KEY==4){PORTB=0x0f;KEY=0;}
}
/********************************************************************
                            主函数
*********************************************************************/
void main(void)
{
   Init_IO();//初始化IO口
   /**********所有IO口闪烁两次***********/
   PORTA=0x00;
   PORTB=0x00;
   PORTC=0x00;
   PORTD=0x00;
   delay_nms(1000);//延时1秒
   PORTA=0xFF;
   PORTB=0xFF;
   PORTC=0xFF;
   PORTD=0xFF;
   delay_nms(1000);//延时1秒
   PORTA=0x00;
   PORTB=0x00;
   PORTC=0x00;
   PORTD=0x00;
   delay_nms(1000);//延时1秒
   PORTA=0xFF;
   PORTB=0xFF;
   PORTC=0xFF;
   PORTD=0xFF;
    /**********闪烁结束***********/
  DDRD=0X03;//设置PD口为输入
  PORTD=0xFF;
   while(1)
   {
   Key_Process();
   }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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