mega16 入门

来源:互联网 发布:淘宝退货运费谁出运费 编辑:程序博客网 时间:2024/06/08 16:41

个人认为单片机学习最主要的就是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矩阵的程序。


<pre name="code" class="cpp">/*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 <avr/io.h>#include <util/delay.h>#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<<i; //将对应的IO口设置成自己需要的电平,由于当时使用了一个ULN 2803,所以是设置成高电平        PORTB = 0xff - p->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     }}





0 0
原创粉丝点击