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

📄 通用函数.c

📁 基于atmega16l的通用函数
💻 C
字号:
#include<iom16v.h>
#include<macros.h>

//-----------------------------------------------------------------------------------------------------
//蜂鸣器端口PORTD.5
#define on_spk PORTD&=~(1<<5)  //蜂鸣器开
#define off_spk PORTD|=1<<5  //蜂鸣器关
unsigned char command[10];
unsigned char tab[]="open";
//-----------------------------------------------------------------------------------------------------
// LED显示数据表,0-9数据以及开机自检显示的“- ”
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
//   延时2.5*i微秒程序
void delay_us(unsigned int i)
{
 for(;i;i--);
}

//-----------------------------------------------------------------------------------------------------
//   延时i毫秒程序
void delay_ms(unsigned int i)   
{
unsigned int a;
unsigned int b;
for(b=0;b<i;b++)
   {for(a=0;a<1135;a++);
   	}
}

//-----------------------------------------------------------------------------------------------------
//   延时i秒程序
void delay_s(unsigned int i)	
{
unsigned int a;
unsigned int b;
unsigned int c;
for(c=0;c<i;c++)
   {for(b=0;b<705;b++)
   	{for(a=0;a<1133;a++);
	asm("nop");
	}
   	}
}

//-----------------------------------------------------------------------------------------------------
//   LED数码管显示程序
void display(unsigned char i)
{DDRB=0xff;
 PORTB=table[i];
}

//-----------------------------------------------------------------------------------------------------
//  蜂鸣器发声 入口参数 i 响声长度  n 响声次数
void buzzer(unsigned char i,unsigned char n)
{
 for(;n;n--)
 {
 	for(;i;i--)
	{
	 on_spk;
	 delay_us(450);
	 off_spk;
	 delay_us(450);	
	}
	delay_ms(200);
 } 
}

//-----------------------------------------------------------------------------------------------------
//   AD转换函数,程序入口 i为通道号(0-7即porta.0-porta.7)
unsigned int getadc(unsigned char i)
{
 unsigned int adc;
 unsigned char temp;
 ADMUX=0x1f&i;
 ADCSR=0xc6;
 delay_ms(3);
 temp=ADCL;
 adc=ADCH;
 adc=(adc<<8)+temp;
 return adc;
}

//-----------------------------------------------------------------------------------------------------
//   串口初始化 9600波特率无奇偶校验位  8M晶振下
void uart_init(void)
{
 UCSRA=0x00;
 UCSRB=0x98;
 UCSRC=0x86;
 UBRRH=0x00;
 UBRRL=0x33;
}

//-----------------------------------------------------------------------------------------------------
//   串口发送一个字符
void putchar(unsigned char c)
{
 while(!(UCSRA&(1<<UDRE)));  //等待上次发送完成
 UDR=c;											 //发送字符
}

//-----------------------------------------------------------------------------------------------------
//   串口接收一个字符
unsigned char getchar(void)
{
 while(!(UCSRA&(1<<RXC)));
 return UDR;
}

//-----------------------------------------------------------------------------------------------------
//   串口发送字符串函数
void send(char *address)
{
 while(*address)
 {
 	putchar(*address);					//发送一个字符
 	address++;									//地址加1
 }
 putchar('\r');								//发送回车符
}

//-----------------------------------------------------------------------------------------------------
//    串口接收完成中断
#pragma interrupt_handler receive:12
void receive(void)
{
 unsigned char temp=0;
 unsigned char count=0;
 unsigned char i;
 while(temp!='\r')
 {
 	temp=getchar();
 	command[count]=temp;
	count++; 	
 }
 count--;
 command[count]='\0';
 i=judge(command,tab);
 if (i==1)
 	{
	 PORTC=~PORTC;
	 DDRC=0xff;
	}
 else{send("wrong command !");}
 return;
}

//-----------------------------------------------------------------------------------------------------
//    判断两个字符串是否相等
//    入口 *add0 字符串A  *add1 字符串B 
unsigned char judge(unsigned char *add0,unsigned char *add1)
{
 unsigned char i;
 while((*add0!='\0')||(*add1!='\0'))     //直到其中一个字符串读完时退出循环
 {
 	if(*add0!=*add1)                       //判断两个字符串某一个字符是否相等
	 {i=0;}																 //不相等返回 0
	else{i=1;}														 //相等返回 1
	add0++;																 //地址加 1
	add1++;
 }
 return i;
}

//-----------------------------------------------------------------------------------------------------
//    主程序开始
void main(void)
{
 unsigned int value;
 uart_init();	 	 	 //串口初始化
 SEI();						 //开全局中断
 send("http://ycavr.cn");
 while(1)
 {
 	value=getadc(0);
	
	asm("nop");
 }
}

⌨️ 快捷键说明

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