📄 -ͦ
字号:
#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 + -