0

关于投票
avr单片机 LCD12864实验 实验(十四)

点击下载

这是我们avr转接板的最后一个例程代码,总共十几个实验,旨在引导大家跨入avr的大门,当然我们板上还有部分的资源没有配avr的源代码例程,但是avr和51使用其实差不多,只要有心,稍微改动就可以从51移植到avr上.这部分留给读者.

这个实验是利用avr控制lcd12864的一个显示实验.详情见附件.

平台:FDRAVR开发板.

主程序代码:

#include
#include
#include"tg12864p.h"

void main()

    PORTB="0xFF";//b口输出高电平
DDRB=0XFF;//portb输出

 LcmInit();
 delay_ms(100);
 PutStr(1,2,"loading...");
 delay_ms(5000);
 LcmClearTXT();
 LcmClearBMP();
 PutBMP(bmp8) ;
 delay_ms(10000);
 LcmClearBMP();
 PutStr(0,1,"FDR 工作室");
 PutStr(1,1,"QQ群:");
 PutStr(2,3,"49865954");
 while(1);
}

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 LCD12864使用
来源: 原创
发表评论 阅读全文(197) | 回复(0)

0

关于投票
avr单片机 lcd1602加ds1302时钟实验 实验(十三b)

点击下载

这个实验结合lcd1602和ds1302实现实时时钟.详情见附件.

平台:FDRAVR开发板

主程序代码:

#include <mega16.h>  

#asm
   .equ __ds1302_port=0x12 ;PORTD
   .equ __ds1302_io=3
   .equ __ds1302_sclk=2
   .equ __ds1302_rst=4
#endasm
#include <ds1302.h>
#include "lcd1602.h"

unsigned char date,year,month,hour,minute,second;

void display_dat()   //显示时间和温度的函数
{
 CLEARSCREEN;
 LCD_write_flash(0,0,"DAT:");
 LCD_write_int(5,0,2000+year); //显示年份
 LCD_en_dat('-');

 LCD_write_int(10,0,month/10);    //显示月份
 LCD_write_int(11,0,month%10);
 LCD_en_dat('-');

 LCD_write_int(13,0,date/10);   //显示日期
 LCD_write_int(14,0,date%10);
                                               
 LCD_write_flash(0,1,"TIME:");    //显示时间
 LCD_write_int(5,1,hour/10);  //显示小时
 LCD_write_int(6,1,hour%10); 

 LCD_en_dat(':');
 LCD_write_int(8,1,minute/10);  //显示分钟
 LCD_write_int(9,1,minute%10); 

 LCD_en_dat(':');
 LCD_write_int(11,1,second/10);  //显示秒
 LCD_write_int(12,1,second%10);
}

void main(void)
{
LCD_init();//初时化液晶
LCD_write_flash(0,0,"Ready");

rtc_init(0,0,0);//初时化时钟

rtc_set_date(29,3,7);
rtc_set_time(17,2,30);

while (1)
      {
      delay_ms(100);
      rtc_get_date(&date,&month,&year);
      rtc_get_time(&hour,&minute,&second);
      display_dat();//显示时间
      };
}

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 lcd1602使用 ds1302使用 实时时钟
来源: 原创
发表评论 阅读全文(237) | 回复(0)

0

关于投票
avr单片机 LCD1602显示实验 实验(十三a)

点击下载

这个实验,通过avr来控制lcd1602,显示简单信息.详情见附件

平台:FDRAVR开发板

主程序代码:

#include <mega16.h>     

#include <lcd1602_4.h>

void main(void)

while (1)
      {
       LCD_init();//初始化lcd
       LCD_write_flash(0,0,"My QQ:710026108"); //测试LCD_write_string()
      LCD_write_flash(0,1,"QQgroup:49865954");    //测试LCD_write_string()
      while(1);

      };
}

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 LCD1602使用
来源: 原创
发表评论 阅读全文(159) | 回复(0)

0

关于投票
avr单片机 实时时钟实验 实验(十二)

点击下载

这个实验利用ds1302,实现一个实时时钟功能.详情见附件

平台:FDRAVR开发板

主程序代码:

#include "ds1302.h" 
//顺序: 秒,分,时,日,月,周,年
uchar datatemp[7]={0,0,0,0,0,0,0};//时间寄存器
void display(uchar num,uchar pos)
{  
    DDRA="0XFF";//定义PORTA输出
    PORTA="0XFF";//输出高电平
    switch(pos)
    {
        case 3:PORTA=0X01;break;
        case 2:PORTA=0X02;break;
        case 1:PORTA=0X04;break;
        case 0:PORTA=0X08;break;
        default:PORTA=0X00;
    }
    num<<=4;//输出到CD4511
    PORTA|=num;
}
void main()     
{
    uchar sec="0";
    uchar min="0";
    initialize_1302();
    while(1)
    { 
        display(sec%10,0);delay_ms(5);
        display((sec/10)%10,1);delay_ms(5); //显示秒钟
        display(min%10,2);delay_ms(5);
        display((min/10)%10,3);delay_ms(5); //显示分钟 
        v_Get1302(datatemp);
        sec="datatemp"[0];  //获得秒钟
        min="datatemp"[1];  //获得分钟
    }
}   

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 ds1302使用 实时时钟
来源: 原创
发表评论 阅读全文(168) | 回复(0)

0

关于投票
avr单片机 定时器实验 实验(十一)

点击下载

这个实验利用avr内部定时器一,通过定时器中断控制led的闪烁.详情见附件

平台:FDRAVR开发板

代码:

#include
 
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
    PORTB=~PORTB;//输出取反
    TCNT1H=0X80;//重新设定初时值
    TCNT1L=0X00;
}

// Declare your global variables here

void main(void)
{  
    DDRB="0XFF"; //PORTB设置为输出
    PORTB="0XFF";
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 62.500 kHz
// Mode: Normal top="FFFFh"
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x03;//设置时钟分频
    TCNT1H=0x00;
    TCNT1L=0x00;
               

// Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK="0x04"; //开启定时器1中断

// Global enable interrupts
    #asm("sei")  //开全局中断

while (1)
      {
      // Place your code here

      };
}

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 定时器
来源: 原创
发表评论 阅读全文(156) | 回复(0)

0

关于投票
avr单片机 内部eeprom使用实验 实验(十)

点击下载

这个实验实现对avr内部eeprom的读写,实现记录开机次数的功能.详情见附件.

平台:FDRAVR开发板

代码:

#include <mega16.h>
#include <delay.h>
eeprom uchar times;  //记录开机次数  
//num,要显示的数据(0~9);pos,要显示的位置(从右到左)
void display(uchar num,uchar pos)
{  
    DDRA="0XFF";//定义PORTA口输出
    PORTA="0XFF";//输出高电平
    switch(pos)
    {
        case 3:PORTA=0X01;break;
        case 2:PORTA=0X02;break;
        case 1:PORTA=0X04;break;
        case 0:PORTA=0X08;break;
        default:PORTA=0X00;
    }
    num<<=4;//取数字,送CD4511
    PORTA|=num;
}
void main()     
{
    uchar t="0";
    if(times==255)times=0;//如果溢出,或者没有初始化,则清零
    else times++;//开机加一
    t="times";
    while(1)
    { 
        display(t%10,0);delay_ms(5);//显示
        display((t/10)%10,1);delay_ms(5);
        display((t/100)%10,2);delay_ms(5);
    }
}   

 

 

 

 

 

 

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 内部eeprom使用 数码管显示
来源: 原创
发表评论 阅读全文(127) | 回复(0)

0

关于投票
avr单片机 time0的PWM实验 实验(九)

点击下载

#include <mega16.h>
#include <delay.h>
void main(void)
{      
    uchar t="0";
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
    PORTB="0x00";
    DDRB="0x08";//PORTB.3输出
    
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 500.000 kHz
// Mode: Fast PWM top="FFh"
// OC0 output: Inverted PWM
    TCCR0=0x6A;//不匹配输出高电平
    TCNT0=0x00;//初始值
    OCR0=0x12;//匹配值
    while (1)
      {
        delay_ms(20);
        t++;
        OCR0=t;
        if(t==255)
        {           
            t="0";
            if(TCCR0==0x6A)TCCR0=0x7A;//不匹配输出低电平
            else TCCR0=0x6A;//不匹配输出高电平   
        }
      };
}

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 time0使用 pwm输出
来源: 原创
发表评论 阅读全文(109) | 回复(0)

0

关于投票
avr单片机 ADC采集实验 实验(八)

点击下载

这个实验利用avr的adc读取外部电压的值,实现数据采集功能.详情见附件.

平台:FDRAVR开发板

代码:

#include <mega16.h> 
#include <delay.h>

#define ADC_VREF_TYPE 0xC0 //2.5V 内部参考电压

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
    ADMUX="adc"_input | (ADC_VREF_TYPE & 0xff);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;//十位数据
}
//num,要显示的数据(0~9);pos,要显示的位置(从右到左)
void display(uchar num,uchar pos)
{  
    DDRA="0XFF";//定义PORTA口输出
    PORTA="0XFF";//输出高电平
    switch(pos)
    {
        case 3:PORTA=0X01;break;
        case 2:PORTA=0X02;break;
        case 1:PORTA=0X04;break;
        case 0:PORTA=0X08;break;
        default:PORTA=0X00;
    }
    num<<=4;//取数字,送CD4511
    PORTA|=num;
}
// Declare your global variables here

void main(void)
{  
    uint adcin="0";
    uchar t;
    // ADC initialization
    // ADC Clock frequency: 250.000 kHz
    // ADC Voltage Reference: Int., cap. on AREF
    // ADC Auto Trigger Source: None
    ADMUX="ADC"_VREF_TYPE & 0xff;
    ADCSRA="0x84";

    while (1)
    {
        display(adcin%10,0);delay_ms(5);
        display((adcin/10)%10,1);delay_ms(5);
        display((adcin/100)%10,2);delay_ms(5);
        display((adcin/1000),3);delay_ms(5);
        if(t==50){adcin=read_adc(0);t=0;} //读AD0,十位模式
        t++;
    };
}

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 adc采集 数码管显示
来源: 原创
发表评论 阅读全文(139) | 回复(0)

0

关于投票
avr单片机 红外遥控解码实验 实验(七)

点击下载

这个实验了解红外解码,avr外部中断(捕获)的使用.详情见附件

平台:FDRAVR开发板

主程序代码:

#include <mega16.h>
#include"led.h"
#include"delay.h"
#define FRE 2
// Timer 1 overflow interrupt service routine 


unsigned char keycode="0";
unsigned int key_temp=0;
unsigned char key_flag=0;   //解码成功
bit nosignal="0";     //无信号标志位
bit key_start=0;
bit dat_start=0;
bit key_end=0;
unsigned char counter="0";


interrupt [TIM1_OVF] void timer1_ovf_isr(void)

  if(!nosignal)
  {
   key_start=0;
   dat_start=0;
   counter="0";
   key_temp=0;
   key_end=0;
   TCNT1H=0x00;
   TCNT1L=0x00;
   nosignal="1";
   }
}

// Timer 1 input capture interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{

         unsigned char joint="0",A,B;
          A= TCNT1L ;
          B="TCNT1H"; 
   if(key_start)  //开始位
   { 
                         nosignal="0";
    if(!dat_start)
    {
     if(TCNT1H)
     {
     counter++;
     
     }
      else
     {
     joint=1;
     
     }
     if(counter==26) //越过前导码
     {
     dat_start=1;
     counter=0;
  
     }        //数据开始 
       }
  else
  {
            //数据开始接收
        
   if(TCNT1H&&TCNT1H<24)
   { 
       key_temp>>=1;
    if(TCNT1H>2)
    key_temp+=32768;
    counter++;
    if(counter==16)
    {
    keycode=key_temp&0xff;
    key_temp&=0xff00;
    key_temp>>=8;
    key_temp=~(unsigned char)(key_temp);
    if(key_temp==keycode)key_flag=1; 
    key_temp=0; 
                                  //检测 到按键
   
    }
   }
   else
   {
   
    joint="1";
   }
  
  }      
   }
   else
   {
   if(TCNT1H>10&&TCNT1H<31)
   {
    if(!key_end)
  {
                key_start=1;     //清数据开始标志
     counter=0;
     dat_start=0;    //请开始标志          
     key_temp=0;   
  }
  else
  {
   key_start=0;
   dat_start=0;
   key_temp=0;
   counter="0";
   key_end=0;
  
  }
 
    }
  
  }
      
  if(!joint)
  {
   TCNT1H=0;
   TCNT1L=0;

   } 
 
  /*if(B>1)
   {  
 counter++;
        
     
   }*/
   TCNT1H=0;
   TCNT1L=0;

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
unsigned char temp="0";
 

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 500.000 kHz
// Mode: Normal top="FFFFh"
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: On
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: On
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x82;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
    

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x24;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      if(key_flag){key_flag=0;temp=keycode;}   
      showcounter(temp );

      };
}

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 输入捕获 定时器 红外遥控解码
来源: 原创
发表评论 阅读全文(164) | 回复(0)

0

关于投票
avr单片机 DS18B20温度计 实验(六)

点击下载

这个实验利用avr来读取ds18b20,实现温度计的功能.详情见附件.

平台:FDRAVR开发板

主代码:

#include "ds18b20.h"   
//num,要显示的数据(0~9);pos,要显示的位置(从右到左)
void display(uchar num,uchar pos)
{  
    DDRA="0XFF";//定义PORTA口输出
    PORTA="0XFF";//输出高电平
    switch(pos)
    {
        case 3:PORTA=0X01;break;
        case 2:PORTA=0X02;break;
        case 1:PORTA=0X04;break;
        case 0:PORTA=0X08;break;
        default:PORTA=0X00;
    }
    num<<=4;//取数字,送CD4511
    PORTA|=num;
}
void main()     
{
    uint tem="0"; 
    uchar t="0";
    while(1)
    { 
        //display(tem%10,0);delay_ms(5);
        //display((tem/10)%10,1);delay_ms(5);
        display((tem/10)%10,2);delay_ms(5);//显示温度(摄氏度)
        display((tem/100),3);delay_ms(5);
        t++; 
        if(t==100){tem=get1820data();t=0;}//大概两秒钟读一次
    }

系统分类: 单片机
用户分类: avr单片机专区
标签: avr单片机 DS18B20读写 温度计
来源: 原创
发表评论 阅读全文(140) | 回复(0)
总共 , 当前 /,234下一页