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 + -
显示快捷键?