AVR单片机(学习ing)—(一)、ATMEGA16的I\0端口的使用—01

发布者:少年不识愁滋味最新更新时间:2017-11-21 来源: eefocus关键字:AVR单片机  ATMEGA16  I0端口 手机看文章 扫描二维码
随时随地手机看文章

一、ATMEGA16的I\0端口的使用:(只有一个实验,下面的部分每个小节可能有几个实验验证,你懂得)

一—(01)、)—使用4*4行列式按键开关的使用

I/O端口介绍:

直接一个图就哦了,因为根本没什么,就是控制寄存器(这里一定要注意,后面的ATmega16的引脚的功能都是控制寄存器来实现引脚或者器件的功能的,说白了,知道了寄存器,会用了寄存器,再来点51的基础,那这些东西真的就没什么了,AVR单片机很简单的~~~)

AVR单片机(学习ing)—(一)、ATMEGA16的I\0端口的使用—01

我用的就是IAR和Proteus(我这还有AVRStudio和WinAVR,有要的Q我,哈哈

好了先给个图,这个是按照手机上的设计的~~你看了就懂了

AVR单片机(学习ing)—(一)、ATMEGA16的I\0端口的使用—01

别的就不费话了,一看图不就全明白了

然后就是今天的代码

看看吧~~~(其实相当的简单,和51的原理一样,然后就是控制引脚的输入输出,高低电平,这里用不到高阻态~~~~~所以~~~AVR单片机(学习ing)—(一)、ATMEGA16的I\0端口的使用—01)最让我上火的是调试了半天啊~~哎AVR单片机(学习ing)—(一)、ATMEGA16的I\0端口的使用—01,最后好好一看,竟然是对了一个n,擦擦,坑死我了~~~~害的我网上查了半天

#include"iom16.h"
typedef unsigned char uchar;
typedef unsigned int  uint;
//------------------------------------------------------------------------------
__flash uchar skey[16]={10,11,12,13,3,6,9,14,2,5,8,0,1,4,7,15};     //这里是根据键盘的设定来设定的,我这里设定的是手机键盘,方便使用
__flash uchar act[4]={0xfe,0xfd,0xfb,0xf7};
uchar   const seg[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
                        0x7c,0x39,0x5e,0x79,0x71};                  //共阴极数码管
//------------------------------------------------------------------------------
//延时函数
void  delay_ms(uint k)
{
  uint  i,j;
  for(i=0;i    for(j=0;j<1140;j++);
}
//------------------------------------------------------------------------------
//键盘检测函数
uchar key_scan()
{
  uchar i,j,in,ini,inj;
  uchar flag=0;
  for(i=0;i<4;i++)
  {
    PORTB=act[i];
    delay_ms(5);                   //延时消抖
    in=PINB;
    in=in>>4;
    in=in|0xf0;
    for(j=0;j<4;j++)
    {
      if(act[j]==in)
      {
        flag=1;
        inj=j;
        ini=i;
      }
    }

  }
  if(flag==0)
    return(16);
  return(ini*4+inj);
}
//------------------------------------------------------------------------------
//main
void  main()
{
  uchar c,key_value;
  DDRA=0XFF;
  DDRC=0XFF;
  DDRB=0X0F;
  PORTA=0X00;
  PORTC=0XFF;
  PORTB=0XFF;
  while(1)
  {
    c=key_scan();
    if(c!=16)
      key_value=skey[c];
    PORTA=seg[key_value];
    PORTC=0xfe;
    delay_ms(1);
  }      
}


关键字:AVR单片机  ATMEGA16  I0端口 引用地址:AVR单片机(学习ing)—(一)、ATMEGA16的I\0端口的使用—01

上一篇:AVR单片机(学习ing)—(二)、ATMEGA16的中断系统—01
下一篇:AVR单片机(学习ing)—(十一)、ATMEGA16驱动12864—01—①

推荐阅读最新更新时间:2024-03-16 15:46

嵌入式学习笔记19——AVR单片机之C51向ICCAVR的移植
1.头文件,把reg51.h,reg52.h替换成相应的AVR头文件,如iom16v.h等。 2.对C51中的bit,sbit的数据类型进行处理,因为ICCAVR不支持bit和sbit数据类型,可以用位运算和BIT来处理。分别定义置1和清零的宏,使用BIT需加 #include macros.h 。 3.IO的操作。 4.中断系统,定时器等与单片机结构密切相关的代码,需要重新修改。 5.和延时、定时相关的函数需要进行一些改变,因为AVR的运算速度比51单片机要快得多。 6.其余与CPU体系结构无关的代码,可以直接使用。
[单片机]
AVR单片机 ds18b20 gcc 源程序
//mega8 7.3728M Hz g CC 编译通过,_delay_us(us) _delay_ms(ms)调用库函数 //初始化把dq设置为输出 #define ds18b20_dq PC5 #define set_ds18b20_dq_ddr() DDRC|=1 ds18b20_dq #define set_ds18b20_dq() PORTC|=1 ds18b20_dq #define clr_ds18b20_dq() PORTC&=~(1 ds18b20_dq) #define clr_ds18b20_dq_ddr() DDRC&=~(1 ds18b20_dq) #define in_ds18b20_dq() PIN
[单片机]
AVR单片机SPI口读写AT45DB161D接口程序设计
本程序为AVR单片机SPI口访问AT45DB161D提供一组接口函数,通过这一组接口函数可非常容易的完成对AT45DB161D的读写操作 AT45DB161D按页组织和操作(读写擦等等)内部的FLASH存储器,每页为528字节(特殊用途时可通过命令配置成512字节),其内部共集成4096页, 即4096*528=2162688字节。本程序将为您提供读写这2162688字节存储区的线性操作方法。使用这些函数,用户可不必考虑AT45DB161D内部的存储 器组织结构,如同读写一个文件一样进行读写操作。 void df_init(void); 这是SPI口初始化函数,它必须在所有这些接口函数调用之前得到调用 void df_re
[单片机]
<font color='red'>AVR单片机</font>SPI口读写AT45DB161D接口程序设计
基于AVR单片机的ISP设计
0 引言 随着PDA、移动电话、数码相机、打印机等消费类产品的普及,用于这些设备与电脑、或设备与设备之间的高速数据传输技术越来越受到人们的关注。以往以计算机为核心的数据传输结构,非常不利于USB,总线在嵌入式行业的应用,也不适用于野外作业,而OTG技术的推出则可实现在没有PC的情况下,设备与设备之间的数据传输,它拓展了USB技术的应用范围。本文采用的设计方案是基于Philips公司的ISP1362 OTG控制芯片,参照最新的USB OTG技术规范,设计了一种遵循USB协议的主/从机系统。 1 ISP1362芯片的内部结构 Philips公司的ISP1362是一款符合USB 2.0总线协议的接口芯片,内部有3个USB控制
[单片机]
基于<font color='red'>AVR单片机</font>的ISP设计
AVR单片机教程——按键动作
上一篇教程中我们学习了如何读取按键状态。而按键的动作,比如单击,至少需要两个状态才能判定,长按、双击的判定更加复杂。今天我们来学习如何使用库函数判断按键单击,以及其实现原理。 我们要实现的是:当一个按键被单击时,一个LED的状态改变(即亮变暗,暗变亮);4个按键对应4个LED。利用库提供的 button_pressed 函数,很容易就能实现这个功能。 1 #include ee1/button.h 2 #include ee1/led.h 3 #include ee1/delay.h 4 5 int main() 6 { 7 led_init(); 8 button_init(PIN_0, PIN_1
[单片机]
AVR单片机中未用的I/O口设置
如果有引脚未被使用,建议给这些引脚赋予一个确定电平。虽然在深层休眠模式下大多数数字输入被禁用,但还是需要避免因引脚没有确定的电平而造成悬空引脚在其它数字输入使能模式( 复位、工作模式、空闲模式) 消耗电流。 最简单的保证未用引脚具有确定电平的方法是使能内部上拉电阻。但要注意的是复位时 上拉电阻将被禁用。如果复位时的功耗也有严格要求则建议使用外部上拉或下拉电阻。不推荐直接将未用引脚与VCC 或GND 连接,因为这样可能会在引脚偶然作为输出时出现冲击电流。
[单片机]
AVR单片机内部RC振荡器校正方法
简介:VR单片机具有内部RC振荡器,对于内部振荡器的校正一直是一个比较难的问题,由于这个问题的困扰,导致很多正常的程序无法正常工作,特此整理该文档供读者参考。 操作理论 – 内部 RC 振荡器 在产品中内部 RC 振荡器在 5V 或 3.3V 下校正。工厂校正的精度在 +/-3 或 +/-10% (参考数据手册)。如果一个设计需要比工厂标准校正更高的精度,就需要再次校正 RC 振荡器,这样可以得到大约 +/-1%(对于工厂校正精度是+/-10%的器件是 +/-2%)的精度。 时钟选择 AVR 熔丝的设置控制了系统使用的时钟源。为了使用内部 RC 振荡器,需要选择正确的熔丝。数据手册中说明了可以使用的熔丝设置。 晶体参数
[单片机]
基于AVR单片机的通用USB接口模块设计
   1 引言   USB接口以其数据传输快、连接简单、易于扩展、支持热插拔等特点已成为外设与PC通信的主要方式之一。随着嵌入式系统的发展,嵌入式微处理器需增加通用的USB接口,以便实现与PC等USB主机系统的通信。针对这样的需求,这里采用PHILIPS公司的USB接口器件PDIUSBD12和Atmel公司的AVR系列单片机ATmega8设计一种通用的USB接口模块。该模块可方便为各种嵌入式微处理器增加USB接口,从而实现与USB主机系统的高速通信。    2 系统硬件设计   该系统模块的控制核心是AVR高速单片机ATmega8。AVR单片机是新一代基于哈佛结构的高速RISC微控制器,具有速度快、价格低、可靠性高,I/O口
[模拟电子]
基于<font color='red'>AVR单片机</font>的通用USB接口模块设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved