⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11位的lcd带ad与中断.txt

📁 基于ATMEGA16和DDS的信号发生器的代码
💻 TXT
字号:


#include <intrinsics.h> 
#include <iom16.h>
#include <iomacro.h>

#define uint unsigned int
#define uchar unsigned char
//===================定义MCU与LCD的接口===================
#define set_lcd_en PORTB|=0x80;
#define clr_lcd_en PORTB&=0x70;
#define set_lcd_rw PORTB|=0x40;  
#define clr_lcd_rw PORTB&=0xb0;
#define set_lcd_rs PORTB|=0x20;
#define clr_lcd_rs PORTB&=0xd0;



uint addate0;  //AD转换数据
uint addate1;
uchar flag=0;    //转换标志位
float date;    //转换结果
uchar t[];


void LCD_init         (void);
void avr_io_int       (void);
void LCD_wait_Ready(void); 
void writecommend(unsigned char c);
void writedata(unsigned char c);
void showchar(unsigned char pos,unsigned char c);
void showstring(unsigned char line, unsigned char *ptr);



//----------------------------------------------------------------------
void delay(void)
{uint i,j,k;
 for(i=0;i<5000;i++)
 {for(j=0;j<5000;j++)
 {for(k=0;k<5000;k++);}
 }
}

void avr_io_int(void)
{
  DDRC=0xff;
  PORTC=0x00;
  DDRB=0xff;
  PORTB=0x00;
  DDRA=0;      //设置PA口为输入,无上拉
  PORTA=0; 
}

//========================================================
void LCD_init(void)
  {
  
   writecommend(0x38);
   writecommend(0x38);
   writecommend(0x06);
   writecommend(0x0c);
   writecommend(0x01);
   writecommend(0x80);
  }



void writecommend(unsigned char c)//写指令
{
LCD_wait_Ready();
PORTC&=0x00;
PORTC=c;
clr_lcd_rs;
clr_lcd_rw;
clr_lcd_en;
set_lcd_en;
 __delay_cycles(5);
clr_lcd_en;
 

 }

void LCD_wait_Ready(void)                  //等待LCD空闲
  {
    DDRC&=0x00;                 //PC7 I/O口方向设置为输入
    set_lcd_rw;                 //RW=1
    clr_lcd_rs;                //RS=0
    set_lcd_en;                 //EN=1
    while(PINC&0x80);   //RW=1,读PC7,为0表示空闲;
    clr_lcd_en;                //EN=0
    DDRC|=0xff;
  }
void writedata(unsigned char c)	  //写数据
{LCD_wait_Ready();
PORTC&=0x00;
PORTC=c;
set_lcd_rs; 
clr_lcd_rw;
clr_lcd_en;
set_lcd_en;
 __delay_cycles(5);
 clr_lcd_en;
} 
void showchar(unsigned char pos,unsigned char c)
{unsigned char p;
  if(pos<0x10) p=pos+0x80;
  else p=pos+0xb0;
  writecommend(p);
  writedata(c);
 }
 void showstring(unsigned char line,unsigned char*prt)
 {unsigned char l,i;
   l=line*0x10;
    for(i=0;i<16;i++)
	 showchar(l++,*(prt+i));
 }

 

void main()
{  uchar i,a=0;  
  avr_io_int(); //IO口初始化
  LCD_init();   //液晶初始化
 
  ADMUX=0Xc0;   //内部基准电压,通道0
  ADCSRA=0X8f;   //模数转换使能,开中断,单触发,64分频
  SREG=0X80;     //开中断
  ADCSRA|=0X40;
  while(1)
  { if(flag==1)
    { addate1=addate1*25;
     t[0]=addate1/10000%10;
     t[1]=10;
     t[2]=addate1/1000%10;
     t[3]=addate1/100%10;
     t[4]=addate1/10%10;
     t[5]=addate1%10;
       for(i=0;i<6;i++)
          {switch (t[i])
                  {case 0:{ showchar(a,0x30);a++;} break;
                   case 1: {showchar(a,0x31);a++;} break;
	           case 2: {showchar(a,0x32);a++;} break;
		   case 3: {showchar(a,0x33);a++;} break;
		   case 4: {showchar(a,0x34);a++;} break;
		   case 5: {showchar(a,0x35);a++;} break;
		   case 6: {showchar(a,0x36);a++;} break;
		   case 7: {showchar(a,0x37);a++;} break;
		   case 8: {showchar(a,0x38);a++;} break;
		   case 9: {showchar(a,0x39);a++;} break; 
                   default:{showchar(a,'.');a++;}  break;
	          }         
          }
       flag=0; a=0; 
       ADCSRA|=0X40;
       delay();
    }
  }
}


 #pragma vector =ADC_vect  
__interrupt void ADC_isr(void)
{addate0=ADCL;
 addate1=ADCH;
 addate1=(addate1<<8)+addate0;
 flag=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -