历史上的今天
今天是:2025年02月28日(星期五)
2020年02月28日 | AVR单片机-- I/O口的使用
2020-02-28 来源:eefocus
简介:本文章主要通过程序控制实现按键控制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;
}
}
}
史海拾趣
|
高人指教下 用在8051 p0.1--p0.5口上的 光点隔离 和继电驱动 最好有99se编辑好的原理图 一般画的也行 我对单片机不太了解 所以各位高人见谅 谢谢了 &nbs ...… 查看全部问答> |
|
大侠快来救命阿,关于AM29LV320D的软件方法去除写保护问题?? 我试了很多AM29LV320D的flash,bottom boot的,都是前四个扇区写保护了?这是什么原因?手册中没有找到软件方法去除写保护的命令,那这些扇区怎么写保护的,怎么去除呢。现在其他扇区都可以正常读写… 查看全部问答> |
|
看到一种比较特殊的写法, \"0123456789abcdef\" [ i ],看起来挺神奇的,暂时理解成匿名的全局字符串变量指针吧,期待有一天能用上吧。 补充一下,还有这样写的: 5[\"hello world!\"] [ 本帖最后由 medky 于 2011-5-14 19:28 编辑 ]… 查看全部问答> |
|
在一个工程中做了些改动,其中一个函数分离出去测试,怎么测怎么通,,一点问题没有,放到大程序里就一点反应没有了,,崩溃了。。支持一下啊,希望能调通。。。 [ 本帖最后由 aahellaa 于 2011-8-16 10:29 编辑 ]… 查看全部问答> |




