原创 AVR单片机快速入门(原创)

2009-11-8 13:25 4398 5 5 分类: MCU/ 嵌入式

AVR单片机介绍:


         AVR单片机有着51没法比拟的速度,它废除了机器周期,抛弃复杂指令计算机(CISC)追求指令完备的做法;采用精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作码安排在一字之中(指令集中占大多数的单周期指令都是如此),取指周期短,又可预取指令,实现流水作业,可高速执行指令。当然这种速度上的升跃,是以高可靠性为其后盾的。


AVR单片机开发工具使用教程:


ICCAVR教程(适合于初学者):点击下载    


AVRstudio教程(可内联WINAVR,实现编辑、编译、仿真、下载功能):点击下载


下面以一个AVR的日历程序,介绍AVR的具体应用(使用ATmegal6):


该日历程序的PROTUES仿真电路图:85759578-8046-4661-b3ad-c982060210f4.jpg


main函数如下:


//实现了年月日时分秒以及温度的读取并显示在LCD1602


#include<iom16.h>
#include<macros.h>
#include"delay.h"
#define uint unsigned int    //宏定义
#define uchar unsigned char
//LCD1602端口位操作:
#define E_0  PORTB&=~BIT(2);     //使能低
#define E_1  PORTB|=BIT(2);     //使能高
#define RS0  PORTB&=~BIT(0);   //选命令?
#define RS1  PORTB|=BIT(0);   //选数据
#define RW0  PORTB&=~BIT(1); //读写低
#define RW1  PORTB|=BIT(1); //读写高


#include"18B20.h"
#include"1302.h"


const uchar table[]="0123456789:-.C";


void main()
{
  DDRC="0X0F";        //初始化端口
  DDRB|=BIT(0)|BIT(1)|BIT(2);
  DDRD="0XFF";
  PORTA="0X00";
  DDRA="0XFF";
  init_1602();      //LCD1602初始化
  Set_RTC(l_tmpdate1); //初始化时钟芯片
  while(1)
  {  
          time_date();  //时间处理函数
        temp="Read"_1820_temperature(  ); //读取温度
  
  write_com(0x80+2);           //写第一行数据
  write_date(table[l_tmpdisplay[0]]);//时
  write_date(table[l_tmpdisplay[1]]);
  write_date(table[10]); //“:”
  write_date(table[l_tmpdisplay[2]]);//分
  write_date(table[l_tmpdisplay[3]]);
  write_date(table[10]);//“:”
  write_date(table[l_tmpdisplay[4]]);//秒
  write_date(table[l_tmpdisplay[5]]);
  
  write_com(0xC0);   //写第二行数据 
  write_date(table[2]);              //年
  write_date(table[0]);  
  write_date(table[l_tmpdisplay[6]]);
  write_date(table[l_tmpdisplay[7]]);
  write_date(table[11]); //"-"
  write_date(table[l_tmpdisplay[8]]);//月
  write_date(table[l_tmpdisplay[9]]);
  write_date(table[11]);//"-"
  write_date(table[l_tmpdisplay[10]]);//日
  write_date(table[l_tmpdisplay[11]]);
   
  write_com(0x80+0x4b); //温度
  write_date(table[(temp%10000)/1000]);//十位 
  write_date(table[(temp%1000)/100]);//个位
  write_date(table[12]);
  write_date(table[0]);
  write_date(table[13]);
  }
}
void init_1602()       //初始化
{          
 E_0
 write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
 write_com(0x0c);//设置开显示,不显示光标
 write_com(0x06);//写一个字符后地址指针自动加1
 write_com(0x01);//显示清0,数据指针清0
}
void write_com(uchar com)    //写命令
{
 RS0
 RW0
 PORTD=com;
 delay_ms(1);
 E_1
 delay_ms(1);
 E_0
}
void write_date(uchar date)  //写数据
{
 RS1
 RW0
 PORTD=date;
 delay_ms(1);
 E_1
 delay_ms(1);
 E_0
}


该程序的源代码以及protues仿真下载(ICCAVR 6.31+PROTUES 6.9):https://static.assets-stash.eet-china.com/album/old-resources/2009/11/8/569a3898-ec4e-4b51-a8d7-c4fe6986a50c.rar


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条