使用Atmega48实现键控LED,实现一亮一灭,附带c文件以及仿真文件
程序员文章站
2022-06-09 10:50:00
...
使用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口的配置:
- PB口配置为输出,并且配置为高电平,使得LED初始状态为灭
- 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
找不到可以在我的页面找上传的资源