📄 main__.c
字号:
#include <mega128.h>
#include <delay.h>
#include <string.h>
#include "Board_Driver.c"
//本文件为mega128板的底层驱动与定义文件
/*===========mega128开发板引脚定义======================================
1.-------公共引脚---------
WR: PG.0
RD: PG.1
ALE: PG.2
RST0: PG.4 //用于外设高电平复位
RST1: PG.3 //用于外设低电平复位
CD: PB.4 //用于选择外设的命令或数据端口
TBZ: PE.2 //用于判断触摸板是否转换完成
MCU_CS0: PD.4
MCU_CS1: PD.5
MCU_CS2: PD.6
CSEN: PD.7
SPI_MISO: PB.3
SPI_MOSI: PB.2
SPI_SCLK: PB.1
SPI_CS: PB.0
PWM0: PB.5 //单片机OC1A
PWM1: PB.6 //单片机OC1B
PWM2: PB.7 //单片机OC2/OC1C
INT0: PD.0 //单片机外部中断0
INT1: PD.1 //单片机外部中断1
INT2: PD.2 //单片机外部中断2
INT3: PD.3 //单片机外部中断3
INT4: PE.4 //单片机外部中断4
INT5: PE.5 //单片机外部中断5
INT6: PE.6 //单片机外部中断6
INT7: PE.7 //单片机外部中断7
2.-----------------------外设引脚-------------------------------------------------
1> 8位并行端口JP1
---------------------------------------------------------------------
1: +5V 2: DATA0 (PA.0)
3: WR (PG.0) 4: DATA1 (PA.1)
5: RD (PG.1) 6: DATA2 (PA.2)
7: CS1 8: DATA3 (PA.3)
9: CD (PB.4) 10: DATA4 (PA.4)
11: INT1 (PD.1) 12: DATA5 (PA.5)
13: RST1 (PG.3) 14: DATA6 (PA.6)
15: GND 16: DATA7 (PA.7)
-----------------------------------------------------------------------
2> 8位并行端口JP2
-----------------------------------------------------------------------
1: +5V 2: DATA0 (PA.0)
3: WR (PG.0) 4: DATA1 (PA.1)
5: RD (PG.1) 6: DATA2 (PA.2)
7: CS2 8: DATA3 (PA.3)
9: CD (PB.4) 10: DATA4 (PA.4)
11: INT2 (PD.2) 12: DATA5 (PA.5)
13: RST1 (PG.3) 14: DATA6 (PA.6)
15: GND 16: DATA7 (PA.7)
-----------------------------------------------------------------------
3> SPI串行端口JP14
-----------------------------------------------------------------------
1: +5V 2: MCU_ADC0 (PF.0)
3: INT6 (PF.6) 4: MISO (PB.3)
5: RST1 (PG.1) 6: MOSI (PB.2)
7: CS4 8: SCLK (PB.1)
9: GND 10: SPI_CS (PB.0)
-----------------------------------------------------------------------
4> nRF24L01接口JP13
-----------------------------------------------------------------------
1: GND 2: +3.3V
3: CE/MCU_ADC0(PF.0) 4: CS3
5: SCLK (PB.1) 6: MOSI (PB.2)
7: MISO (PB.3) 8: INT7 (PE.7)
------------------------------------------------------------------------
5> TFT液晶屏与触摸板接口
------------------------------------------------------------------------
***************液晶屏接口**************
1: +3.3V 2: GND
3: DATA0 (PA.0) 4: DATA1 (PA.1)
5: DATA2 (PA.2) 6: DATA3 (PA.3)
7: DATA4 (PA.4) 8: DATA5 (PA.5)
9: DATA6 (PA.6) 10: DATA7 (PA.7)
11: DATA8 (PC.0) 12: DATA9 (PC.1)
13: DATA10 (PC.2) 14: DATA11 (PC.3)
15: DATA12 (PC.4) 16: DATA13 (PC.5)
17: DATA14 (PC.6) 18: DATA15 (PC.7)
19: CS6 20: CD (PB.4)
21: WR (PG.0) 22: RD (PG.1)
23: PWM2 (PB.7) 24: RST1 (PG.1)
***************触摸板接口***************
25: DOUT/MISO (PB.3) 26: INT3 (PD.3)
27: DIN/MOSI (PB.2) 28: TBZ (PE.2)
29: SCLK (PB.1) 30: CS5
----------------------------------------------------------------------------
6> USB(375A)并行接口
------------------------------------------------------------------------
DTAT: PORTA CS: CS0
WR: PG.0 RD: PG.1
INT0: PD.0 RST0: PG.4
CD: PB.4
-------------------------------------------------------------------------
7> VS1003控制引脚
-------------------------------------------------------------------------
SI/MOSI: PB.2 SO/MISO: PB.3
SCLK: PB.1 DREQ/INT5: PE.5
xCS/SPI_CS: PB.0 xDCS/MCU_ADC1: PF.1
xRESET/RST1: PG.1
-------------------------------------------------------------------------
8> PS2接口
-------------------------------------------------------------------------
SCLK/PS2_SCLK: INT4 (PE.4)
SDAT/PS2_DATA: PE.3
--------------------------------------------------------------------------
=================================================================
*/
//============板级宏定义===========================================
//***********************引脚定义类***********************************
#define xDATA_IN PINA
#define xDATA_OUT PORTA
#define xADDR_LOW PORTA
#define xADDR_HIGH PORTC
#define xDATAH PORTC
#define xDATAL PORTA
#define CH375_INT PIND.0
//***********************引脚电平控制类*******************************
#define CLI_WR PORTG&=0xFE; //复位WR
#define SET_WR PORTG|=0x01; //置位WR
#define CLI_RD PORTG&=0xFD; //复位RD
#define SET_RD PORTG|=0x02; //置位RD
#define CLI_CD PORTB&=0xEF; //复位CD
#define SET_CD PORTB|=0x10; //置位CD
#define CLI_RST0 PORTG&=0xEF; //复位RST0
#define SET_RST0 PORTG|=0x10; //置位RST0
#define CLI_RST1 PORTG&=0xF7; //复位RST1
#define SET_RST1 PORTG|=0x08; //置位RST1
#define SET_xCS PORTB|=0x01; //置位xCS
#define CLI_xCS PORTB&=0xFE; //复位xCS
#define SET_xDCS PORTF|=0x02; //置位xDCS
#define CLI_xDCS PORTF&=0xFD; //复位xDCS
#define SET_CE PORTF|=0x01; //置位nRF24L01 CE引脚
#define CLI_CE PORTF&=0xFE; //复位nRF24L01 CE引脚
#define DATA_OUT DDRA=0xFF; //A口数据输出
#define DATA_IN DDRA=0x00; //A口数据输入
//***********************外部片选类************************************
#define SEL_CS0 PORTD=0x80; //选中外设0
#define SEL_CS1 PORTD=0x90; //选中外设1
#define SEL_CS2 PORTD=0xA0; //选中外设2
#define SEL_CS3 PORTD=0xB0; //选中外设3
#define SEL_CS4 PORTD=0xC0; //选中外设4
#define SEL_CS5 PORTD=0xD0; //选中外设5
#define SEL_CS6 PORTD=0xE0; //选中外设6
#define SEL_CS7 PORTD=0xF0; //选中外设7
#define SEL_NON PORTD=0x00; //选中空外设
#define SET_CSN PORTD&=0x7F; //暂时放弃外设
#define CLI_CSN PORTD|=0x80; //使能恢复外设
//***********************373数据锁存***********************************
#define ADDR_LOCK PORTG|=0x04;PORTG&=0xFB; //单次锁存数据
#define ADDR_ENOUT PORTG|=0x04; //使能数据输出,直通
#define ADDR_DISOUT PORTG&=0xFB; //禁止数据输出,隔断
//************************************************************************
//************************外部操作***************************************
#define WaitSpiReady while(!(SPSR&0x80)); //等待SPI接口完成本次传送
#define WaitDreqReady while(!(PINE&0x20)); //等待VS1003中断
//====================硬件SPI接口初始化===============================
void SPI_Init()
{
SPDR=0x00; //清空数据缓冲寄存器
SPCR=0x51; //B7:中断使能 B6:SPI使能 B5:首发极性L1H0 B4: M1S0
//B3:结束沿电平选择 B2:采样沿选择 B1-B0:Fsclk
SPSR=0x01; //B7:中断标志 B6:写冲突标志 B0:倍速Fsclk
}
//==================================================================
//====================SPI读操作======================================
void SPI_ReadBytes(unsigned char *Pstr,unsigned char Num)
{
while(Num--){
SPDR=*Pstr; //写数据至SPI发送寄存器
WaitSpiReady //等待发送结束
*Pstr++=SPDR; //取接收字符
}
}
//==================================================================
//====================SPI写操作======================================
void SPI_WriteBytes(unsigned char *Pstr,unsigned char Num)
{
while(Num--){
SPDR=*Pstr++; //写数据至SPI发送寄存器
WaitSpiReady //等待发送结束
}
}
//==================================================================
//============板初始化===============================================
void Board_Init(void)
{
PORTA=0x00; //初始化A口为输入状态
DDRA=0xFF;
PORTB=0x00; //B口初始化为输出
DDRB=0xFF;
PORTC=0x00; //C口初始化为输出
DDRC=0xFF;
PORTD=0x00; //D口初始化
DDRD=0xF0;
PORTE=0x00; //E口初始化 PS2_SCLK输入 PS2_DATA输入 MISO输入
DDRE=0x05;
PORTF=0x00; //F口初始化 MCU_ADC0输出 MCU_ADC1输出
DDRF=0x03;
PORTG=0x03; //G口初始化 WR=1 RD=1 ALE=0
DDRG=0xFF;
//**************初始化SPI接口*************
SPI_Init();
//**************初始化PWM波**************//用于TFT亮度控制
//**************外设复位*******************
SET_RST0
CLI_RST1
delay_ms(300);
CLI_RST0
SET_RST1
}
//===================================================================
#include "RAI8803.c"
#include <delay.h>
#include <math.h>
#define CLI_CS PORTD=0x90;
#define SET_CS PORTD=0x00;
//****************************************************
//送一帧数据
void Post_Msg(unsigned char Msg)
{
DATA_OUT
xDATA_OUT=Msg;
SET_CD
SEL_CS1
CLI_WR
SET_WR
SEL_NON
}
//*************************************
//送一帧命令
//*************************************
void Send_Com(unsigned char Addr,unsigned char Data)
{
DATA_OUT
xDATA_OUT=Addr;
CLI_CD
SEL_CS1
CLI_WR
SET_WR
SEL_NON
xDATA_OUT=Data;
CLI_CD
SEL_CS1
CLI_WR
SET_WR
SEL_NON
}
//*************************************************
void LCD_INIT()
{
Send_Com(0x00,0xCD); //WLCR: 电源正常模式,进入文本模式,屏幕开启,屏幕不闪烁,正向显示
Send_Com(0x01,0x03); //MISC: CLKOUT禁止,BUSY高电平触发,12MHz频率
Send_Com(0x02,0x00); //APSR: ROM/RAM30ns读取速度,禁止ROM直读,开机滚动复位禁止
Send_Com(0x03,0x80); //ADSR: 显示数据正序,水平,垂直卷动效显禁止
Send_Com(0x10,0x2F); //WCCR: 读DDRAM定地址,写自加,中英文对齐,正向存储,字体正常粗细,光标ON,闪烁
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -