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

📄 -ͦ

📁 手把手教你学AVR单片机C程序设计实验程序
💻
字号:
#include <iom16.h>
#include<intrinsics.h>
#include "lcd1602_8bit.c"
#define uchar unsigned char
#define uint unsigned int
#define UDRE 5
#define RXC 7
#define xtal 8
uchar __flash str1[]="RS232 & PWM TEST";
uchar ReceverFlag;
uchar Flag;
uchar ReceverCnt;
uchar temp; 
uchar wide;
uint voltage;
uchar a[3]={0,0,0};
/*************************************************/
void timer2_init(void)
{
 TCCR2 = 0x00;
 ASSR  = 0x00; 
 TCNT2 = 0x01; 
 OCR2  = 0xFF;
 TCCR2 = 0x61; 
}
/*************************************************/
void port_init(void) 
{
 PORTA = 0xFF; 
 DDRA  = 0x00; 
 PORTB = 0xFF; 
 DDRB  = 0xFF; 
 PORTC = 0xFF; 
 DDRC  = 0x00; 
 PORTD = 0x7F; 
 DDRD  = 0x82; 
}
/**************************************************/
void uart0_init(void) 
{
 UCSRB = 0x00; 
 UCSRA = 0x82;
 UCSRC = 0x06;
 UBRRL = 0x67; 
 UBRRH = 0x00; 
 UCSRB = 0x98;
}
/********************************************************/
void init_devices(void) 
{
 port_init();
 uart0_init();
 timer2_init();
 }
//**********************************************
void uart0_send(unsigned char i)
{
while(!(UCSRA&(1<<UDRE)));
UDR=i;
}
/*******************************************/
void str_send(char *s) 
{
 while(*s)
 {
 uart0_send(*s); 
 s++;
 }
}
/********************************************/
void main(void) 
{
uint x;  
init_devices();
Delay_nms(400);
InitLcd();
ePutstr(0,0,str1);
SREG=0x80;
 while(1) 
 {
   if(Flag==1)
   {  
      SREG=0x00;
      uart0_send(temp); 
      switch(ReceverCnt)
	{
	case 0:if(temp=='(')ReceverCnt=1;else ReceverFlag=0;break;
	case 1:if((temp>=0x30)&&(temp<=0x39)){a[2]=temp-0x30;ReceverCnt=2;}else ReceverFlag=0;break;
        case 2:if(temp=='.')ReceverCnt=3;else ReceverFlag=0;break;
        case 3:if((temp>=0x30)&&(temp<=0x39)){a[1]=temp-0x30;ReceverCnt=4;}else ReceverFlag=0;break;
        case 4:if((temp>=0x30)&&(temp<=0x39)){a[0]=temp-0x30;ReceverCnt=5;}else ReceverFlag=0;break;
	case 5:if(temp==')'){ReceverCnt=0;ReceverFlag=1;}else ReceverFlag=0;break;
	default:ReceverCnt=0;break;
	}
      Flag=0;
      SREG=0x80;
   }
   if(ReceverFlag==1)
   { 
     x=(uint)a[2];  voltage=x*100;
     x=(uint)a[1];  x=x*10; voltage=voltage+x;
     x=(uint)a[0];  voltage=voltage+x;
     voltage=(voltage*100)/196;
     wide=(uchar)voltage;
     OCR2=wide;
     DisplayOneChar(0,1,'O'); 
     DisplayOneChar(1,1,'C');
     DisplayOneChar(2,1,'R');
     DisplayOneChar(3,1,'2');
     DisplayOneChar(4,1,':');
     DisplayOneChar(5,1,(wide/100)+0x30); 
     DisplayOneChar(6,1,(wide/10)%10+0x30); 
     DisplayOneChar(7,1,(wide%10)+0x30); 
     DisplayOneChar(11,1,a[2]+0x30); 
     DisplayOneChar(12,1,'.'); 
     DisplayOneChar(13,1,a[1]+0x30); 
     DisplayOneChar(14,1,a[0]+0x30);
     DisplayOneChar(15,1,'V');
     ReceverFlag=0;
   }
 }
}
/****************************************/
#pragma vector=USART_RXC_vect
__interrupt void uart0_rx_isr(void)
{
 temp=UDR;//uart has received a character in UDR
 Flag=1;
}

⌨️ 快捷键说明

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