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

📄 main.c

📁 串口程序源码
💻 C
字号:
#include<avr/io.h>
#include<avr/signal.h>
#include<avr/interrupt.h>
#include<avr/delay.h>
#include <compat/ina90.h> //定义_NOP(),_CLI(), _SEI() 

#define uint unsigned int
#define uchar unsigned char
#define rs_lcd 2
#define en_lcd 3

void usart_init(void);//串口初始化函数
void trans_uart(uchar dat);//串口传送函数
void init_lcd(void);
void byte_write(uchar rs,uchar dat);//写液晶函数
void dis_lcd(void);
void delay(uint x);

uint q=0,q_1=0,q_2=0;

uchar rec[50]={0};
uchar trs[50]={0X55,0X55,0X55,0X55,0X55,0X55,0X55,0X55,
				0X55,0X55,0X55,0X55,0X55,0X55,0X55,0X55,
				0X55,0X55,0X55,0X55,0X55,0X55,0X55,0X55};
uchar i=0;

int main(void)
{
	uchar n=0,pp=0;
	DDRB=0XFF;
	PORTB=0XFF;
	usart_init();
	_SEI();
	init_lcd();
	while(1)
	{
		for(n=0;n<100;n++)
		{	
			trans_uart(100+n);
			_delay_ms(100);
		//	pp++;
		//	dis_lcd();
		}
		//while(1);
	}
}

void usart_init(void)//串口初始化函数
{
	UCSRB|=((1<<RXCIE)|(1<<RXEN)|(1<<TXEN));//异步串口,开接受中断
	UCSRC|=((1<<URSEL)|(0<<UMSEL)|(1<<UPM1)|(0<<UPM0)
		|(0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0));//偶校验,1个停止位,8位
	UBRRH|=((0<<URSEL));
	UBRRL=51;//波特率:9600bps.//8M频率
}
void trans_uart(uchar dat)//串口传送函数
{
	while(!(UCSRA|(1<<UDRE)));//判断数据寄存器是否可用
			UDR=dat;
}
SIGNAL(SIG_UART_RECV)
{
	uchar temp=0;
	temp=UDR;
	PORTB=temp;
	trs[i]=temp;
	i++;
	if(i==10)
		i=0;
	//trans_uart(temp);
	while(!(UCSRA|(1<<UDRE)));//判断数据寄存器是否可用
		UDR=temp;
		q=temp;
	//UCSRB|=(1<<TXEN);
}
void delay(uint x)
{
	uint y=0,z=0;
	for(y=x;y>0;y--)
		for(z=124;z>0;z--);
}
//*********************液晶初始化函数(1602)**********************************//
void init_lcd(void)
{
	PORTB=0XFF;
	PORTC|=((1<<en_lcd)|(1<<rs_lcd));//设置为高
	DDRC|=((1<<en_lcd)|(1<<rs_lcd));//设置为输出
	DDRB=0xff;
	_delay_ms(15);
	byte_write(0,0x38);
	_delay_ms(5);
	byte_write(0,0x38);
	_delay_ms(5);
	byte_write(0,0x38);
	_delay_ms(5);

	byte_write(0,0x38);_delay_ms(5);
	byte_write(0,0x0c);_delay_ms(5);
	byte_write(0,0x06);_delay_ms(5);
	byte_write(0,0x01);_delay_ms(5);

	byte_write(0,0x80);_delay_ms(1);//地址取在0x80
	byte_write(1,'T');_delay_ms(1);
	byte_write(1,':');_delay_ms(1);

	byte_write(0,0xc0);_delay_ms(1);//地址取在0x80
	byte_write(1,'M');_delay_ms(1);//
	byte_write(1,':');_delay_ms(1);

	byte_write(0,0xc9);_delay_ms(1);//地址取在0x80
	byte_write(1,'S');_delay_ms(1);//
	byte_write(1,':');_delay_ms(1);
}


//*********************写液晶函数(1602)**********************************//
void byte_write(uchar rs,uchar dat)//写液晶函数
{
	if(rs==1)
		PORTC|=(1<<rs_lcd);
	else
		PORTC&=(~(1<<rs_lcd));
//	rw_lcd=0;
	PORTC&=(~(1<<en_lcd));
	PORTB=dat;
	PORTC|=(1<<en_lcd);
	PORTC&=(~(1<<en_lcd));
//	rw_lcd=1;
	PORTC|=(1<<rs_lcd);
}
void dis_lcd(void)
{
	byte_write(0,0x82);_delay_ms(1);
	byte_write(1,0x30+q/100000);_delay_ms(1);
	byte_write(1,0x30+q%100000/10000);_delay_ms(1);
	byte_write(1,0x30+q%10000/1000);_delay_ms(1);
	byte_write(1,0x30+q%1000/100);_delay_ms(1);
	byte_write(1,0x30+q%100/10);_delay_ms(1);
	byte_write(1,0x30+q%10);_delay_ms(1);

	byte_write(0,0xc2);_delay_ms(1);
	byte_write(1,0x30+q_1/100000);_delay_ms(1);
	byte_write(1,0x30+q_1%100000/10000);_delay_ms(1);
	byte_write(1,0x30+q_1%10000/1000);_delay_ms(1);
	byte_write(1,0x30+q_1%1000/100);_delay_ms(1);
	byte_write(1,0x30+q_1%100/10);_delay_ms(1);
	byte_write(1,0x30+q_1%10);_delay_ms(1);

	byte_write(0,0xcb);_delay_ms(1);
//	byte_write(1,0x30+q_2/100000);_delay_ms(1);
//	byte_write(1,0x30+q_2%100000/10000);_delay_ms(1);
	byte_write(1,0x30+q_2%10000/1000);_delay_ms(1);
	byte_write(1,0x30+q_2%1000/100);_delay_ms(1);
	byte_write(1,0x30+q_2%100/10);_delay_ms(1);
	byte_write(1,0x30+q_2%10);_delay_ms(1);

}

⌨️ 快捷键说明

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