📄 main.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 + -