天天看点

使用Atmega48实现键控LED,实现一亮一灭,附带c文件以及仿真文件

使用Atmega48实现键控,附带c文件以及仿真文件

使用Atmega48实现键控LED,实现一亮一灭,附带c文件以及仿真文件
/***这里是一些头文件以及声明***/
#include"iom48v.h"
#include"macros.h"
#define uchar unsigned char
#define uint unsigned int
           
/**********************
作用:初始化IO口
**********************/
void init()
{
  	 PORTC=0XFF;
  	 DDRC=0XF0;
  	 PORTB=0XFF;
  	 DDRB=0XFF;
}

           

以上是所需要用到的IO口的配置:

  1. PB口配置为输出,并且配置为高电平,使得LED初始状态为灭
  2. PC口为键控,配置为输出,并且置高
void main()
{
 	uchar temp=0XFF;
 	init();
 	while(1)
	{		
	if((PINC&0X1)!=0X1)//按键一按下就走这部
	{
	    temp=temp^0x1;//temp的第一位的数值只和按键一有关,temp第一次变为0xf1110,第二次变为0xff
	    while((PINC&0X1)!=0X1);//按键一松开就跳出,此时PINB=0xff
	}
	
	if((PINC&0X2)!=0X2)//按键二按下就走这部
	{
	    temp=temp^0X2;//temp的第二位的数值只和按键二有关,temp第二次变为0xf1101,第二次变为0xff
	    while((PINC&0X2)!=0X2);//按键二松开就跳出,此时PINB=0xff
	}
	
	if((PINC&0X8)!=0X8)//按键三按下就走这部
	{
	    temp=temp^0x8;//temp的第三位的数值只和按键三有关,temp第一次变为0xf1011,第二次变为0xff
	    while((PINC&0X8)!=0X8);//按键三松开就跳出,此时PINB=0xff
	}

	if((PINC&0X4)!=0X4)//按键四按下就走这部
	{
	    temp=temp^0x4;//temp的第四位的数值只和按键四有关,temp第一次变为0xf0111,第二次变为0xff
	    while((PINC&0X4)!=0X4);//按键四松开就跳出,此时PINB=0xff
	}
	PORTB=PINC&temp;
	}
}
           

注:0x4就是0x00000100,至于怎么实现的选择一种可能去算就可以了

这里有C文件以及仿真:https://download.csdn.net/download/qq_45834106/12686842

找不到可以在我的页面找上传的资源

继续阅读