mega16 入门

个人认为单片机学习最主要的就是IO口的控制与中断的操作。其它东西都仅仅是作为方便开发使用的,并且都可以通过IO与中断或者外部扩展实现。

MEGA系列的IO口操作及其简单,现在介绍下IO口的操作

IO口主要有两个作用,输入与输出。下面是从用户手册里抄的一张表,当然,只需每次要用的时候看看就好了,不用背。

端口引脚配置 

  DDxn   PORTxn  PUD(in SFIOR)   I/O上拉电阻说明

        0              0                     X        输入No 高阻态 (Hi-Z)

        0              1                     0        输入Yes 被外部电路拉低时将输出电流

        0              1                     1        输入No 高阻态(Hi-Z)

        1              0                     X        输出No 输出低电平 ( 漏电流)

        1              1                     X        输出No 输出高电平 ( 源电流)


从上表可以很明显的看出,DDxn 负责控制 IO口的输入输出模式,PORTxn负责控制IO口的电平,PUD是IO特殊寄存器中的一个位,表示是否禁用上拉电阻。

通过设置DDxn与PORTxn就可以设置IO口的输入输出操作了。

下面贴出一个点亮LED矩阵的程序。


/*datatyp.h*/
#ifndef DATATYP_H_ 
#define DATATYP_H_

//根据个人喜好,定义一些变量
typedef unsigned char uchar; 
typedef unsigned char int8;
typedef int int16;

//定义我要点亮的LED矩阵的数据类型 点亮的是8*8的矩阵
typedef struct {
    int8 graph[8];
    int16 light_time;
}PHOTO;

#endif /* DATATYP_H_ */

/*data.h*/
//存储一些我要显示的图片
#ifndef DATA_H_
#define DATA_H_
#include "datatyp.h"

const int16 dynamicN = 1; 

PHOTO photo[1] = {
    /*把所有的灯都点亮,前八个数据的二进制形式表示哪些灯要点亮,最后一个数据表示图片显示多久*/
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,10
};

#endif /* DATA_H_ */

/*Led.c*/
#include 
#include 
#include "datatyp.h"
#include "data.h"

//负责点亮每幅图
void static_photo(PHOTO * p){
    int8 re; 
    int16 t; 
    for (re = 0; re < 10; re++)//仅仅是为了提供亮度
    for (t = 0; t < p->light_time; t++){//类似于计时
    int8 i; 
    for (i = 0; i < 8; i++) {
        PORTA = 1<graph[i];//将图片赋给B口
        _delay_ms(2); //延时 2 ms
        PORTA = 0x00; //基本是句废话
        PORTB = 0xff; //这句话可以避免重影的感觉,可以不写感受一下
        }
    }
}


void dynamic_photo(){
    int8 i;
    //显示每幅图片
    for (i = 0; i < dynamicN; i++){
        static_photo(&photo[i]);
    }
}


int main(void)
{
    //将所有口都设置为输出口,当然如果没有ULN 2803之类的IC,需要将IO根据需要设置成相应的模式,可以从表里面查得自己的需求
    DDRA = 0xff;
    DDRB = 0xff;
    while(1)
    {
        dynamic_photo();
        //TODO:: Please write your application code 
    }
}



 
  



你可能感兴趣的:(AVR单片机)