main.c
来自「AVR 4*4键盘输入并通过USART进行通讯」· C语言 代码 · 共 134 行
C
134 行
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <string.h>
#include<avr/delay.h>
#include "type.h"
#include "uart.h"
void uart0_init(void) //串口初始化
{
DDRE &= 0xFE;
DDRE |= 0x02;
UCSR0A=0x00; // 使用异步正常模式
UCSR0B=0x98; // 1001 1000B
UCSR0C=0x06; // 0000 0110B 二者说明UCSZ[2~0]=011 则字符长度是8位 没有校验位
UBRR0H=0x00; // 设置波特率寄存器
UBRR0L=47; // UBRR=47 而外部晶振是7.3728MHZ 故波特率由表格知是9600b/s
}
void uart0_Send_uchar(uchar data) //串口发送数据
{
UDR0=data;//发送数据
while(!(UCSR0A&0x20));//等待发送完成
}
uchar value1,value2,value3,value4,value;
SIGNAL(SIG_INTERRUPT3)
{
_delay_ms(200);
value1=PINC;
if(value1==0x0F)//防抖动部分
{}
else
{
DDRC|=0XF0;
DDRD&=0X0F;
PORTC=value1;
value2=PIND;
value1=(value1>>4);
value2&=0XF0;
if((value1==0x00)||(value2==0x00))
{}
else
{
value3=value2^0XF0;
value=value1+value3;
switch(value)
{case 0x77:
value4=0x01;
break;
case 0x7B:
value4=0x02;
break;
case 0x7D:
value4=0x03;
break;
case 0x7E:
value4=0x04;
break;
case 0xB7:
value4=0x05;
break;
case 0xBB:
value4=0x06;
break;
case 0xBD:
value4=0x07;
break;
case 0xBE:
value4=0x08;
break;
case 0xD7:
value4=0x09;
break;
case 0xDB:
value4=0x00;
break;
case 0xDD:
value4=0x0A;
break;
case 0xDE:
value4=0x0B;
break;
case 0xE7:
value4=0x0C;
break;
case 0xEB:
value4=0x0D;
break;
case 0xED:
value4=0x0E;
break;
case 0xEE:
value4=0x0F;
break;
}
uart0_Send_uchar(value4);
_delay_ms(100);
}
}
DDRC&=0X0F;
DDRD|=0XF0;
DDRD&=0XF7;
PORTD=0X0F;
}
void key(void)
{
DDRC&=0X0F;
DDRD|=0XF0;
DDRD&=0XF7;
PORTD=0X0F;
EICRA=0X80;
EIMSK=0X08;
sei();
}
int main(void)
{ uart0_init();
key();
while(1);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?