📄 main.c
字号:
#include "F2812_DataType.h"
#include "F2812_Reg.h"
#include "F2812_Init.h"
Uint16 var1 = 0;
Uint16 var2 = 0;
Uint16 var3 = 0;
Uint16 test_count = 0;
Uint16 Test_flag = 0;
Uint16 Test_var = 0;
Uint16 Test_status[32];
Uint16 PASS_flag = 0;
int r16,r17,r18,r21,r22,r23,r24,r25;
int m,n;
unsigned int lcdtab,uWork;
char lcddata[128];
char lcddata1[128];
//显示所需字模
char hz18[]=
{
/*-- 文字: 空白 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
char hza[]=
{
/*-- 文字: A --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x07,0x1C,0x03,0x00,0x00,0x04,0x1C,0xE4,0x40,0x40,0xC4,0x3C,0x04,
};
char hzb[]=
{
/*-- 文字: B --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x0E,0x11,0x11,0x11,0x1F,0x10,0x00,0x70,0x88,0x04,0x04,0x04,0xFC,0x04,
};
char hzc[]=
{
/*-- 文字: C --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x1C,0x10,0x10,0x10,0x10,0x0C,0x03,0x00,0x10,0x08,0x04,0x04,0x04,0x18,0xE0,
};
char hzd[]=
{
/*-- 文字: D --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x07,0x08,0x10,0x10,0x10,0x1F,0x10,0x00,0xF0,0x08,0x04,0x04,0x04,0xFC,0x04,
};
char hze[]=
{
/*-- 文字: E --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x10,0x17,0x11,0x11,0x1F,0x10,0x00,0x18,0x04,0xC4,0x04,0x04,0xFC,0x04,
};
char hzf[]=
{
/*-- 文字: F --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x10,0x17,0x11,0x11,0x1F,0x10,0x00,0x00,0x00,0xC0,0x00,0x04,0xFC,0x04,
};
//数字显示字模二维数组
char dig[10][16]=
{
/*-- 文字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,
/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,
/*-- 文字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x0E,0x11,0x10,0x10,0x10,0x0E,0x00,0x00,0x0C,0x84,0x44,0x24,0x14,0x0C,0x00,
/*-- 文字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x0C,0x12,0x11,0x11,0x10,0x0C,0x00,0x00,0x70,0x88,0x04,0x04,0x04,0x18,0x00,
/*-- 文字: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x1F,0x08,0x04,0x03,0x00,0x00,0x00,0x24,0xFC,0x24,0x24,0x20,0xE0,0x00,
/*-- 文字: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x10,0x11,0x11,0x10,0x1F,0x00,0x00,0x70,0x88,0x04,0x04,0x84,0x98,0x00,
/*-- 文字: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x18,0x11,0x11,0x08,0x07,0x00,0x00,0x70,0x88,0x04,0x04,0x88,0xF0,0x00,
/*-- 文字: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x1C,0x13,0x10,0x10,0x1C,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00,
/*-- 文字: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x88,0x44,0x44,0x8C,0x00,0x00,
};
void Test_Key(void);
void main(void)
{
Init_F2812();
Test_Key();
}
#define LCD_E_SET() GpioDataRegs->GPFSET.all=BIT4
#define LCD_E_RESET() GpioDataRegs->GPFCLEAR.all=BIT4
#define LCD_RW_SET() GpioDataRegs->GPFSET.all=BIT5
#define LCD_RW_RESET() GpioDataRegs->GPFCLEAR.all=BIT5
#define LCD_DI_SET() GpioDataRegs->GPFSET.all=BIT2
#define LCD_DI_RESET() GpioDataRegs->GPFCLEAR.all=BIT2
#define LCD_CS1_SET() GpioDataRegs->GPFSET.all=BIT0
#define LCD_CS1_RESET() GpioDataRegs->GPFCLEAR.all=BIT0
#define LCD_CS2_SET() GpioDataRegs->GPFSET.all=BIT1
#define LCD_CS2_RESET() GpioDataRegs->GPFCLEAR.all=BIT1
void LCD_DATA(unsigned char datas)
{
Uint16 tempF,tempB;
tempF=GpioDataRegs->GPFDAT.all;
tempB=GpioDataRegs->GPBDAT.all;
tempF&=0xbfff;//~(((Uint16)1)<<14);
tempF|=(((Uint16)datas)&0x0001)<<14;
tempB&=~((Uint16)0x013f);
tempB|=(((Uint16)datas&(0x003f<<1))>>1)|(((Uint16)datas&0x80)<<1);
GpioDataRegs->GPFDAT.all=tempF;
GpioDataRegs->GPBDAT.all=tempB;
}
#define IODELAY() Delay(5) //asm (" RPT #200 || NOP")
Uint16 Delay_cnt;
void Delay(unsigned int nDelay)
{
int i,j;
for(i=0;i<nDelay;i++)
for(j=0;j<2;j++)
Delay_cnt++;
}
void Lcd_Write(unsigned char CSx,unsigned char Type,unsigned char datas)
{
LCD_E_RESET();
LCD_RW_RESET();
if(Type==0)
LCD_DI_RESET();
else
LCD_DI_SET();
if(CSx==1)
LCD_CS1_RESET();
else if(CSx==2)
LCD_CS2_RESET();
IODELAY();
LCD_E_SET();
IODELAY();
LCD_DATA(datas);
IODELAY();
LCD_E_RESET();
IODELAY();
if(CSx==1)
LCD_CS1_SET();
else if(CSx==2)
LCD_CS2_SET();
LCD_RW_SET();
IODELAY();
}
#define CS1 1
#define CS2 2
#define CMD 0
#define DATAS 1
#define LCD_CMD_OFF 0x3e
#define LCD_CMD_ON 0x3f
void display_cs0(void)
{
unsigned int i;
unsigned int j;
Lcd_Write(CS2,CMD,0xc0);
for(i=184;i<192;i++)
{
for(j=0;j<64;j++)
Lcd_Write(CS2,DATAS,0);
Lcd_Write(CS2,CMD,i);
Lcd_Write(CS2,CMD,130);
}
}
void display_cs1(void)
{
unsigned int i;
unsigned int j;
Lcd_Write(CS1,CMD,0xc0);
for(i=184;i<192;i++)
{
for(j=0;j<64;j++)
Lcd_Write(CS1,DATAS,0);
Lcd_Write(CS1,CMD,i);
Lcd_Write(CS1,CMD,130);
}
}
void display4(void)
{
int i=0,j;
for(;r23!=r25;r23--)
{
Lcd_Write(CS2,CMD,r24);
Lcd_Write(CS2,CMD,r23);
Lcd_Write(CS2,CMD,0xc0);
for(j=0;j<r22;j++)
Lcd_Write(CS2,DATAS,lcddata[i++]);
}
}
void display5(void)
{
int i=0,j;
for(;r23!=r25;r23--)
{
Lcd_Write(CS1,CMD,r24);
Lcd_Write(CS1,CMD,r23);
Lcd_Write(CS1,CMD,0xc0);
for(j=0;j<r22;j++)
Lcd_Write(CS1,DATAS,lcddata1[i++]);
}
}
void Disp_Sleep(unsigned int c)
{
while(c--)
Delay(10000);
}
#define DISP_SLEEP_TIMES 100
#define KEY_IODELAY() Delay(5)
Uint8 Scankey_InOut(Uint8 Row)
{
Uint16 Temp;
KEY_IODELAY();
Temp=GpioDataRegs->GPBDAT.all;
KEY_IODELAY();
Temp&=~(BIT9|BIT10|BIT6|BIT7);
Temp|= ((Row&0x01)<<9)|((Row&0x02)<<(10-1))|((Row&0x04)<<(6-2))|((Row&0x08)<<(7-3));
GpioDataRegs->GPBDAT.all=Temp;
KEY_IODELAY();
Temp=GpioDataRegs->GPFDAT.all&0x7fff;
Temp|=P_cpld[0]&0x8000;
//Temp|=0x8000;
return (Uint8)((Temp&0x8000)? 1:0)|((Temp&BIT3)? 2:0)|((Temp&BIT6)? 4:0)|((Temp&BIT7)? 8:0);
}
Uint8 Key_Tab[4]={0xfe,0xfd,0xfb,0xf7};
Uint16 Scankey(void)
{
Uint16 i,Key,Datas;
if((Scankey_InOut(0)&0x0f)==0x0f)
return 0;
for(i=0;i<4;i++)
{
Key=Scankey_InOut(Key_Tab[i])&0x0f;
if(Key==0x0f)
continue;
switch(Key)
{
case 0x0e: Datas=(i*4)+1; break;
case 0x0d: Datas=(i*4)+2; break;
case 0x0b: Datas=(i*4)+3; break;
case 0x07: Datas=(i*4)+4; break;
default: Datas=0;
}
break;
}
if(Key==0x0f)
Datas=0;
return Datas;
}
void Test_Key(void)
{
Uint16 dbScanCode;
EALLOW();
GpioMuxRegs->GPAMUX.all=0x0000; // Configure MUXs as digital I/Os or
GpioMuxRegs->GPBMUX.all=0x0000; // peripheral I/Os
GpioMuxRegs->GPDMUX.all=0x0000;
GpioMuxRegs->GPFMUX.all=0x0000;
GpioMuxRegs->GPEMUX.all=0x0000;
GpioMuxRegs->GPGMUX.all=0x0000;
GpioMuxRegs->GPADIR.all=0x0000; // GPIO PORTs as output // GPIO DIR select GPIOs as output
GpioMuxRegs->GPBDIR.all=0x0000|BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT8|BIT6|BIT7|BIT9|BIT10;
GpioMuxRegs->GPDDIR.all=0x0000;
GpioMuxRegs->GPEDIR.all=0x0000;
GpioMuxRegs->GPFDIR.all=0x0000|BIT0|BIT1|BIT2|BIT5|BIT4|BIT14;
GpioMuxRegs->GPGDIR.all=0x0000;
GpioMuxRegs->GPAQUAL.all=0x0001; // Set GPIO input qualifier values
GpioMuxRegs->GPBQUAL.all=0x0001;
GpioMuxRegs->GPDQUAL.all=0x0001;
GpioMuxRegs->GPEQUAL.all=0x0001;
EDIS();
P_cpld[0]=0x17fc;
//显示LCD页面
r16=0x3e; //关液晶
//write_ins0();
Lcd_Write(CS1,CMD,LCD_CMD_OFF);
Lcd_Write(CS2,CMD,LCD_CMD_OFF);
r16=0x3f; //开液晶
//write_ins0();
//write_ins1();
Delay(100);
Lcd_Write(CS1,CMD,LCD_CMD_ON);
Lcd_Write(CS2,CMD,LCD_CMD_ON);
Delay(100);
//Delay(100);
//l1:
//r16=0x0c0; //设置显示起始地址 =0
//write_ins0();
Lcd_Write(CS1,CMD,0xc0);
//long2:
//r16=0x0bf; //设置 X=7
//write_ins0();
Lcd_Write(CS1,CMD,0xbf);
//Delay(100);
//r16=0x040; //设置 Y=0
//write_ins0();
Lcd_Write(CS1,CMD,0x40);
Delay(100);
display_cs0();
display_cs1();
Delay(1000);
//Test_Row_Out();
while(1)
{
Delay(10);
dbScanCode=Scankey();
if((dbScanCode<1)||(dbScanCode>0x10))
continue;
switch(dbScanCode)
{
case 0x0001:
memcpy(lcddata1,dig[1],16);
break;
case 0x0002:
memcpy(lcddata1,dig[2],16);
break;
case 0x0003:
memcpy(lcddata1,dig[3],16);
break;
case 0x0004: //A:
memcpy(lcddata1,hza,16);
break;
case 0x0005:
memcpy(lcddata1,dig[4],16);
break;
case 0x0006:
memcpy(lcddata1,dig[5],16);
break;
case 0x0007:
memcpy(lcddata1,dig[6],16);
break;
case 0x0008://B
memcpy(lcddata1,hzb,16);
break;
case 0x0009:
memcpy(lcddata1,dig[7],16);
break;
case 0x000a:
memcpy(lcddata1,dig[8],16);
break;
case 0x000b:
memcpy(lcddata1,dig[9],16);
break;
case 0x000c: //C
memcpy(lcddata1,hzc,16);
break;
case 0x000d://E
memcpy(lcddata1,hze,16);
break;
case 0x000e://0
memcpy(lcddata1,dig[0],16);
break;
case 0x000f://F
memcpy(lcddata1,hzf,16);
break;
case 0x0010: //D
memcpy(lcddata1,hzd,16);
break;
}
r22=0x08;
r23=0xbd;
r24=0x78;
r25=0xbb;
display5();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -