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

📄 dac.c

📁 AVR单片机DAC范例程序
💻 C
字号:
#include <iom16v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
//#include "Skey.c"

void delay(uint ms)
{
        uint i,j;
	for(i=0;i<ms;i++)
	   {
	   for(j=0;j<1141;j++);
       }
}

uchar key_press()
{
    uchar j;
    DDRD|=0X0F;
	PORTD|=0X0F;
	
	DDRD&=0XF0;
	
	j=PIND;
	j=j&0X0F;//00001111
	if(j==0X0F)
	{
	  return 0;
	}
	else
	{
	 return 1;
	}
	
}

uchar key_scan()
{
    uchar key;
    delay(10);
	if(key_press())
	{
	key=PIND;
	key&=0X0F;
	switch(key)
	{
	   case 0X0E: 
	       key=0;
		   break;
	   case 0X0D:
	       key=1;
		   break;
	   	 case 0X0B: 
	       key=2;
		   break;
	   case 0X07:
	       key=3;
		   break; 
	   default:	
	       key=0;     	   
	}
	  while(key_press());
	}
	else
	{
	  key=0;
	}
	return key;
}

void spi_init()
{
     DDRB|=0XA0;
	 DDRA|=BIT(PA1);
	 SPCR=0X57;
}
void ad5300(uchar daword)
{
    uchar temp1=0,temp2=0,status;
    temp1|=daword<<4;//1101 1001
    temp2|=daword>>4;
	
	PORTA&=~BIT(PA1);
	SPSR=0;
	SPDR=temp2;
    do
	{
	  status=SPSR;
	}while(!(status&=0X80));
	
	delay(10);
	SPSR=0;
	SPDR=temp1;
	do
	{
	  status=SPSR;
	}while(!(status&=0X80));
	SPSR=0;
	delay(10);
	PORTA|=BIT(PA1);
} 
void main()
{
    uchar i,data=128;
    DDRB=0XFF;
	spi_init();
	ad5300(0);
	ad5300(data);
	
	while(1)
	{
	   if(key_press())
	   {
	      i=key_scan();
		  switch(i)
		  {
		    case 0:
			  data=data+16;
			  break;
			case 1:
			  data=data-16;
			  break;
			case 2:
			  data=0;
			  break;
			 case 3:
			  data=255;
			  break;      
		  }
		  ad5300(data);
	   }
	}
}

⌨️ 快捷键说明

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