简介:本文章主要通过程序控制实现按键控制LED 灯的亮灭,按一下亮,再按一下灭,如此循环往复,并学习AVR 单片机的I/O口如何配置为输入和输出。
//文件名:delay_rest.c
//文件描述:实现按键控制LED 灯的亮灭,按一下亮,再按一
//下灭,如此循环往复。
//实验目的:学习AVR 单片机的I/O口如何配置为输入和输出
//当前版本号:V1.0
//---------------------------------------------------------------------
//----------------------------start------------------------------------
#include"iom88v.h"
#define uint16 unsigned int
#define uchar unsigned char
void delay (uint16 i);
void key_scnf(void);
uchar count_key=0;
void main(void)
{
// DDRC &= 0XFE; //PC0 input
DDRC |= 0x02; //PC1 output
while(1)
{
key_scnf( );
if(count_key)
{
PORTC |= 0x02; //PC1 = 1;
}
else
{
PORTC &= 0xfd; //PC1 = 0;
}
}
}
//-------------------------------------------------------------------
//函数原型:void delay (uint16 i);
//入口参数:uint16 i:延时变量
//出口参数:无
//功能:实现延时功能
//-------------------------------------------------------------------
void delay (uint16 i)
{
uchar j;
while(i--)
{
for(j=125;j>0;--j)
{
;
}
}
//-------------------------------------------------------------------
//函数原型:void key_scnf(void);
//入口参数:无
//出口参数:无
//功能:实现读键值功能
//-------------------------------------------------------------------
void key_scnf(void)
{
uchar c_pinb;
DDRB |= 0x20; //RB5设置为输出
PORTB |= 0x20; //RB5输出1
//delay(1); //延时一段时间
DDRB &= 0xdf; //RB5 设置位输入 =0
c_pinb = PINB;
if((c_pinb&0x20)!=0x20) //判断portb5的键有无按下
{
delay(1);//延时消抖
//DDRB |= 0x20; //RB5设置为输出//注释掉的部分,不必须
//PORTB |= 0x20; //RB5输出1
//delay(1); //延时一段时间
// DDRB &= 0xdf; //RB5 设置位输入 =0
c_pinb = PINB;
if((c_pinb&0x20)!=0x20) //真的按下
{
//DDRB |= 0x20; //RB5设置为输出
//PORTB |= 0x20; //RB5输出1
//delay(1); //延时一段时间
// DDRB &= 0xdf; //RB5 设置位输入 =0
//c_pinb = PINB;
while((c_pinb&0x20)!=0x20) //按键没弹起,等键释放;关键,开始时写成!=0出错
{
//DDRB |= 0x20; //RB5设置为输出
//PORTB |= 0x20; //RB5输出1
//delay(1); //延时一段时间
// DDRB &= 0xdf; //RB5 设置位输入 =0
c_pinb = PINB;
}
count_key += 1;
if(count_key==2)
count_key = 0;
}
}
}
上一篇:AVR单片机用于车载空调控制器的实用电路
下一篇:基于时间触发嵌入式系统的设计与应用(3)
推荐阅读最新更新时间:2024-11-18 16:08
设计资源 培训 开发板 精华推荐
- FOC电机控制板
- 具有 3.3V、±5V 输出的 LT1940L 降压型稳压器的典型应用电路
- WRL-14597,SparkFun AST-CAN485 WiFi 屏蔽
- MC78M15CTG 15V可调输出稳压器的典型应用
- LT6654BHLS8-2.5 具有升压输出电流和电流限制的电压基准的典型应用
- LT3024EDE 演示板,双路输出 LDO 线性稳压器,Vin = 2.3V - 20V,用户选择 = Vout1/Vout2,2.5V 或 3.3V 或 5V,Vout1 = 500mA,Vout2 = 100mA
- 使用 LTC3637IDHC 4V 至 76V 输入至 15V 输出钳位、1A 高效浪涌抑制器的典型应用
- 基于STM32H7的开源EEG脑电图设计
- ip6559方案验证
- REF43 +2.5V 低功耗精密电压基准的典型应用