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

使用Atmega48实现键控,附带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
找不到可以在我的页面找上传的资源

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值