AVR单片机-- I/O口的使用

发布者:缘到泉最新更新时间:2020-02-28 来源: eefocus关键字:AVR  单片机  I  O口 手机看文章 扫描二维码
随时随地手机看文章

简介:本文章主要通过程序控制实现按键控制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  单片机  I  O口 引用地址:AVR单片机-- I/O口的使用

上一篇:AVR单片机用于车载空调控制器的实用电路
下一篇:基于时间触发嵌入式系统的设计与应用(3)

推荐阅读最新更新时间:2024-11-12 13:33

51单片机的几种精确延时
51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,
[单片机]
单片机与DSP简单比较
自从2000MCU和DSP完全分家,大家对DSP的认识多为 将部分程序固化从而实现更快处理速度的MCU ,但这个解释总是有点牵强人意。再加上目前流传着这样的一种说法:DSP取代单片机的技术和价格的市场条件已经成熟,大规模推广指日可待。真的是这样的吗?笔者不敢苟同。单片机和DSP各有所长,AVR90单片机是125纳秒一个周期(也是哈弗结构),其内部有SPI、UART等,如果用来作控制、数据采集,只要速度要求不是太高,那么都可以用它,而且用它比用DSP方便。但是如果你的工程中有比较多的算法,特别是信号处理算法,那么用DSP就对了,此时单片机是不能胜任的。 自从2000年MCU和DSP完全分家,大家对DSP的认识多为 将部分程序固化从而实
[单片机]
矩阵键盘扫描原理详解——单片机
键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P
[单片机]
基于MSP430F133单片机的改进型浮子式液位计
  在对传统浮子式液位计优缺点进行分析的基础上,介绍了采用TI公司MSP430F133单片机改进传统浮子式液位计液位测量的方法,给出了具体电路的设计方法和软件设计注意事项。   引言   为了用较低的成本完成大量程液位的长期可靠测量,笔者利用MSP430单片机的低功耗特性结合光电液位的绝对位置测量功能设计了一种新型液位计—磁光液位计,现简要介绍如下。   1 机械工作原理   本液位计同普通光电液位计一样有一个光电码盘(如图1所示),码盘白色部分反射光线,而黑色部分吸收光线,图2所示的光耦和图1所示的码盘间距约2mm,并采用圆心安装。光耦随电路板固定在液位计外壳上,液位变化时浮子牵引水位轮转动,安装在同一轴上的码盘也随水位
[单片机]
基于MSP430F133<font color='red'>单片机</font>的改进型浮子式液位计
单片机实验——4X4矩阵键盘识别技术
用AT89S51 的并行口P1 接4×4 矩阵键盘,以P3.0-P3.3 作输入线,以P3.4-P3.7 作输出线;在数码管上显示数字按键的“0-9”序号,其它按键显示0。 原理分析:4X4矩阵键盘每个按键都有它的行值和列值,当每个按键的行值为低电平,列值为高电平时,按键为未按下状态。判断是否有按钮按下时,先让这一行通低电平,再通过扫描每一列来判断是否被按下(逐列使列值通高电平),如果被按下,那么这一列的电平此时会成为低电平;如果这一列在扫描时为低电平,说明这一列有按键被按下,而行值是每次在判断列值前就确定的,这样就能知道到底是哪一个按键被按下了。 基本流程: 设置第一行为低电平—— 扫描每一列(设置为高电平),判断是否为
[单片机]
<font color='red'>单片机</font>实验——4X4矩阵键盘识别技术
智能防盗防火及照明控制系统的实现
  随着经济的快速发展及社会的进步, 人们出差及在外工作的时间逐渐增长,当家里、商场、机房或实验室等公共场所空无一人时,最令人担心的可能是安全问题,比如是否会有小偷破门而入, 是否因为各种电源线路由于长时间使用而引起火灾等等; 并且现在绝大多数电灯在使用时都是由人手动操作,尤其当我们半夜回家时摸不到开关,当灯光不足或在上楼梯时手动开启电灯,这都会给我们带来诸多的不便。另外,常常会由于工作人员的疏忽在人离开之后忘记关闭设备而导致用电的浪费。为了解决以上问题,在本系统设计中,考虑采用单片机为主控制器,用热释人体红外模块、温度传感系统及光敏二极管来分别来检测室内有无人员以及室内温度, 从而控制室内灯光开启的明暗程度,且当温度超准及时报警
[单片机]
智能防盗防火及照明控制系统的实现
面向对象思想编写单片机程序其实很简单!
摘要:在看别人单片机程序时,你也许是崩溃的,因为全局变量满天飞,不知道哪个在哪用了,哪个表示什么,而且编写极其不规范。自己写单片机程序时,也许你也是崩溃的。总感觉重新开启一个项目,之前的写过相似的代码也无法使用,得重新敲,代码重用度不高,编程效率低下,代码无法积累。而且感觉写这个代码没有思想,没有灵魂,没有框架,只是一个一个功能代码的堆砌,很空泛。 那么这个时候,你也许应该在单片机中引入面向对象的思想了,使代码更规范。 一、单片机程序框架 1、轮流执行 int main (void) { while(1) { sing(); dance(); play(); } } 函数sing执行的时间比较长的话,函数dance就不能
[单片机]
什么是GD32 MCU读保护?
如今电子产品市场风云变幻,暗流汹涌,有没有小伙伴遇到自己费了大力气写出来的代码,很容易就被别人“借鉴”了,真的是让闻者伤心,听着落泪啊。 那有没有什么方法可以防止别人将你的代码从MCU读出来呢?答案当然是肯定的,GD32 MCU全系列都有“读保护”功能,我们以GD32F30x系列为例,来看下用户手册中的选项字节的介绍: 我们可以看到,地址0x1fff f800存储的是安全保护值,也就是我们所说的读保护。当该值为0xA5的时候,MCU处于无保护状态,此时可以通过Jlink、GDlink配合一些上位机比如Jflash、GDlink Programmer就可以读出,当然,通过串口ISP也可以读出代码;当读保护值为非0xA5时,
[单片机]
什么是GD32 <font color='red'>MCU</font>读保护?
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved