欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-09 10:50:00
...

使用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
找不到可以在我的页面找上传的资源

相关标签: avr c++