📄 main.c
字号:
#include <stdio.h>
#include "710defs.h"
#include "HB_it.h"
#include "main.h"
#include "lcd_pattern.h"
double sinc[128]={
0.000000,0.098017,0.195090,0.290285,0.382683,
0.471397,0.555570,0.634393,0.707107,0.773010,
0.831470,0.881921,0.923880,0.956940,0.980785,
0.995185,1.00000,0.995185,0.980785,0.956940,
0.923880,0.881921,0.831470,0.773010,0.707107,
0.634393,0.555570,0.471397,0.382683,0.290285,
0.195090,0.098017,0.000000,-0.098017,-0.195090,
-0.290285,-0.382683,-0.471397,-0.555570,-0.634393,
-0.707107,-0.773010,-0.831470,-0.881921,-0.923880,
-0.956940,-0.980785,-0.995185,-1.00000,-0.995185,
-0.980785,-0.956940,-0.923880,-0.881921,-0.831470,
-0.773011,-0.707107,-0.634393,-0.555570,-0.471397,
-0.382684,-0.290285,-0.195090,-0.098017,-0.000000,
0.098017,0.195090,0.290285,0.382683,0.471397,
0.555570,0.634393,0.707107,0.773010,0.831470,
0.881921,0.923879,0.956940,0.980785,0.995185,
1.00000,0.995185,0.980785,0.956940,0.923880,
0.881921,0.831470,0.773011,0.707107,0.634393,
0.555570,0.471397,0.382684,0.290285,0.195090,
0.098017,0.000000,-0.098017,-0.195090,-0.290285,
-0.382683,-0.471397,-0.555570,-0.634393,-0.707107,
-0.773010,-0.831470,-0.881921,-0.923879,-0.956940,
-0.980785,-0.995185,-1.00000,-0.995185,-0.980785,
-0.956940,-0.923880,-0.881921,-0.831470,-0.773011,
-0.707107,-0.634393,-0.555570,-0.471397,-0.382684,
-0.290285,-0.195091,-0.098017,
};
U32 key=0;
U32 temp = 0;
U32 i = 0x3c0;
int main(void)
{
LCD_IMAGE_T LCD_Size;
LCD_LOCATION_T LCD_Location;
LCD_Size.width = 480;
LCD_Size.height = 240;
LCD_Location.StartX = 0;
LCD_Location.StartY = 0;
LCD_Location.EndX = 960;
LCD_Location.EndY = 240;
KPIInit();
LCDInit();
LCDShow(LCD_Size, LCD_Location);
LCDDisplayOn();
Timer0Init();
Timer0On();
while(1)
{
}
return 0;
}
/*******************************************************************************
* Function Name : LCDInit
* Description : LCD初始化
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDInit(void)
{
REG_GPIO_CFG6 = 0x555555;
REG_LCD_LCDCON = 0x30c05;
REG_LCD_FIFO1PRM = 0xa;
REG_LCD_F1DREQCNT = 0x1e000f0;
REG_LCD_FIFO1RELACOLCNT = 0x1e0;
//LCD CLK
REG_LCD_LCDTCON1 = 0x3b166;
REG_LCD_LCDTCON2 = 0x3bf00f1;
REG_LCD_LCDTCON3 = 0x105401;
REG_LCD_LCDTCON4 = 0x20101;
REG_LCD_LCDTCON5 = 0xe;
}
/*******************************************************************************
* Function Name : LCDShow
* Description : 设置LCD显示位置
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDShow(LCD_IMAGE_T Size, LCD_LOCATION_T Location)
{
REG_LCD_F1DREQCNT = (Size.width <<15 ) + Size.height;
REG_LCD_FIFO1RELACOLCNT = (Size.width >> 1);
REG_LCD_DISPWINS = (Location.StartY << 16) + Location.StartX;
REG_LCD_DISPWINE = (Location.EndY << 16) + Location.EndX;
}
/*******************************************************************************
* Function Name : LCDShow
* Description : 设置LCD显示位置
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDFIFOBufferSet(PUINT8 Buffer)
{
REG_LCD_F1SADDR = (U32) Buffer;
}
/*******************************************************************************
* Function Name : LCDDisplayOn
* Description : 打开LCD
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDDisplayOn(void)
{
lcdIoctl(1, 1, 0);
}
/*******************************************************************************
* Function Name : LCDDisplayOff
* Description : 关闭LCD
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCDDisplayOff(void)
{
lcdIoctl(1, 2, 0);
}
/*******************************************************************************
* Function Name : Delay
* Description : 用于不精确延时
* Input : 延时时间
* Output : None
* Return : None
*******************************************************************************/
void Delay(U32 t)
{
do
{
t--;
}while(t);
}
/*******************************************************************************
* Function Name : KPIInit
* Description :
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void KPIInit(void)
{
REG_GPIO_CFG2 |= 0x000aaaaa; //将GPIO设置为KPI模式
REG_GPIO_CFG2 &= 0xfffaaaaa;
REG_AIC_SCR29 = 0x00000045; //将KPI中断设置为高电平有效,优先级为5
REG_AIC_MECR = 0x20000000;
REG_KPICONF = 0x00142fff;
}
/*******************************************************************************
* Function Name : Timer0Init
* Description : Timer0初始化
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void Timer0Init(void)
{
/*关闭看门狗定时控制寄存器*/
REG_WTCR = 0;
/*初始化定时器控制寄存器,设置定时器模式为循环模式*/
REG_TCR0 = 0x88000000;
/*定时器初始计数值*/
REG_TICR0 =0x0000f0;
/*中断控制寄存器设置,正边沿触发,优先级为1*/
REG_AIC_SCR13 = 0x41;
/*使能相应的中断源*/
REG_AIC_MECR = 0x00002000;
/*开定时器中断*/
REG_TCR0 |= 0x20000000;
}
/*******************************************************************************
* Function Name : Timer0On
* Description : 打开Timer0
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void Timer0On(void)
{
/*定时器启动*/
REG_TCR0 |= 0x40000000;
}
/*******************************************************************************
* Function Name : Timer0Off
* Description : 打开Timer0
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void Timer0Off(void)
{
/*定时器启动*/
REG_TCR0 &= ~0x40000000;
}
/*******************************************************************************
* Function Name : StringShow
* Description : 显示单个字符
* Input : LCD显示字符相关信息
* Output : None
* Return : None
*******************************************************************************/
void StringShow(LCDShowParameter LCDShowPara)
{
//用于取汉字点阵图
U32 Offset = 0, Length = 0;
U8 PBuffer[32] = {0};
//用于将汉字点阵图转化为LCD显示图
U32 BitCounter = 8; //8
U32 ByteCounter = 0; //32
U32 temp;
U8 ColorHigh, ColorLow;
//用于在LCD上显示汉字
U32 X = 0, Y = 0, Line = 0, Row = 0;
U8 LBuffer[512] = {0};
Offset = ((LCDShowPara.LetterChar[0]-0xa1) * 0x5e + (LCDShowPara.LetterChar[1] - 0xa1)) << 5;
for(Length = 0; Length < 32; Length++)
{
PBuffer[Length] = (* (unsigned int volatile *)(LCDShowPara.LibPlace + Offset + Length));
}
ColorLow = (U8)(0x00ff & LCDShowPara.Color);
ColorHigh = (U8)(0xff00 & LCDShowPara.Color >> 8);
for(ByteCounter = 0; ByteCounter < 32; ByteCounter++)
{
BitCounter = 8;
temp = PBuffer[ByteCounter];
for(BitCounter = 0; BitCounter < 8; BitCounter++)
{
if((temp & 0x80) == 0x80)
{
LBuffer[(ByteCounter << 4) + (BitCounter << 1)] = ColorHigh;
LBuffer[(ByteCounter << 4) + (BitCounter << 1) + 1] = ColorLow;
}
else
{
LBuffer[(ByteCounter << 4) + (BitCounter << 1)] = 0x00;
LBuffer[(ByteCounter << 4) + (BitCounter << 1) + 1] = 0x00;
}
temp <<= 1;
}
}
for(Row = 0; Row < 16; Row++)
{
for(Line = 0; Line < 32; Line++)
{
X = (LCDShowPara.StartX << 5) + Line;
Y = (LCDShowPara.StartY << 4)+ Row;
LCDShowPara.LCDBuffer[X + 960 * Y] = LBuffer[Line + (Row << 5)];
}
}
}
/*******************************************************************************
* Function Name : LCDOutputShow
* Description : 显示多字符并自动换行
* Input : LCD显示字符相关信息及字数
* Output : None
* Return : None
*******************************************************************************/
void LCDOutputShow(LCDShowParameter LCDShowPara, U32 NUM)
{
U32 temp;
StringShow(LCDShowPara);
for(temp=1; temp < NUM; temp++)
{
LCDShowPara.StartX = LCDShowPara.StartX + 1;
if(LCDShowPara.StartX > 29)
{
LCDShowPara.StartY = LCDShowPara.StartY + 1;
LCDShowPara.StartX = 0;
}
LCDShowPara.LetterChar = &LCDShowPara.LetterChar[2];
StringShow(LCDShowPara);
}
}
/*******************************************************************************
* Function Name : LCDDotOne
* Description : 画任意点函数
* Input : x:横坐标(0-480)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -