⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 TI的2812控制交通灯
💻 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  tab0[]=

{   /*--  文字:百  --*/
/*--  宋体24;  此字体下对应的点阵为:宽x高=32x32   --*/
    0x00,0x00,0x00,0x04,0x04,0x0C,0x0C,0x0C,0x0C,0x0C,0x04,0x04,0x04,0x06,0x06,0x06,
    0x07,0x03,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x0C,0x0C,0x04,0x04,
    0xC4,0xE4,0x7C,0x0C,0x02,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x01,0x21,0x21,
    0x21,0x21,0x21,0x21,0x31,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x80,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

char  tab1[]=
{/*--  文字:  科 --*/
/*--  宋体24;  此字体下对应的点阵为:宽x高=32x32   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7F,0x60,0x00,0x01,0x01,0x01,0x01,0x00,
    0x00,0x18,0x1C,0x0C,0x05,0x07,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x00,0x00,0x8C,0x8C,0x08,0x08,0x00,
    0x20,0x31,0x33,0x13,0xFF,0xFF,0x1F,0x09,0x0C,0x0C,0x0C,0x04,0x06,0x04,0x00,0x00,
    0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xFF,0xFF,0x80,0x80,0xC0,0x40,0x40,0x40,0x40,
    0x40,0x00,0x00,0x00,0xE0,0xFF,0x00,0x80,0xC0,0x70,0x10,0x08,0x04,0x02,0x02,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };
char  tab2[]=
{/*--  文字:  融 --*/
/*--  宋体24;  此字体下对应的点阵为:宽x高=32x32   --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x1F,0x30,0x00,0x00,0x00,0x00,0x00,
    0x00,0x08,0x08,0x08,0x08,0x0C,0x0C,0x0C,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x18,0x3F,0x31,0x31,0x11,0x10,0xFF,0x10,0x08,0x08,0x0F,0x0C,0x00,
    0x01,0x03,0xC3,0xF1,0x99,0x89,0x89,0x49,0x7D,0x60,0x00,0x00,0x01,0x00,0x00,0x00,
    0x00,0x00,0x02,0x0F,0x1E,0x34,0x04,0x84,0x86,0xFE,0x82,0x83,0x83,0xC3,0x03,0x02,
    0xFE,0xFF,0x00,0x08,0x48,0xE8,0x1F,0x08,0x78,0xC4,0x84,0xFE,0xFF,0x00,0x00,0x00,
    0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0xE0,0x70,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
};
char  tab3[]=
{/*--  文字:  创 --*/
/*--  宋体24;  此字体下对应的点阵为:宽x高=32x32   --*/
    0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x01,0x01,0x1F,0x1E,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x7F,0xFF,0x80,0x00,0x20,0xE0,
    0xC0,0xC3,0x87,0x06,0x02,0x82,0xC2,0x72,0x3B,0x0E,0x06,0x03,0x01,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x01,0x07,
    0x00,0x80,0xF8,0x1C,0x10,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x80,0x40,0x00,
    0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0x38,0x30,0x20,0x40,0x00,0x00,0x00,0xC0,0xC0,
    0xC0,0x40,0x60 ,0x60,0x40,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };



void Test_Lcd(void);

void main(void)
{
	Init_F2812();
	
	Test_Lcd();
}


#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


void Test_Lcd(void)
{
     //init GPIO
     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;
    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();	

         
         //r16=0x3e;   //关液晶
         Lcd_Write(CS1,CMD,LCD_CMD_OFF);
         Lcd_Write(CS2,CMD,LCD_CMD_OFF);
         Delay(300);
         
         //r16=0x3f;   //开液晶
         Lcd_Write(CS1,CMD,LCD_CMD_ON);
         Lcd_Write(CS2,CMD,LCD_CMD_ON);
		 Delay(300);

        while(1)
       {
//l1:
         //r16=0x0c0;		//设置显示起始地址 =0
         //write_ins0();
         Lcd_Write(CS1,CMD,0xc0);
//long2:   
         //r16=0x0bf;		//设置 X=7
         //write_ins0();
         Lcd_Write(CS1,CMD,0xbf);
         //r16=0x040;		//设置 Y=0
         //write_ins0();
         Lcd_Write(CS1,CMD,0x40);
         Delay(300);
//long31:
         display_cs0();
         display_cs1();
         Disp_Sleep(DISP_SLEEP_TIMES);
         
         r22=0x20;//调用显示一次的列数//32
         r23=0xbd;//显示起始页//189
         r24=0x60;//显示起始列//96
         r25=0xb9;//显示结束页//186
         
         for(n=0,m=0;m<128;m++,n++)
         {
          lcddata[m]=tab0[n];
         
         }
         display4(); 
         Disp_Sleep(DISP_SLEEP_TIMES);
         
//long32:
         r22=0x20;
         r23=0xbd;
         r24=0x40;
         r25=0xb9;
         for(n=0,m=0;m<128;m++,n++)
         {
         
         lcddata[m]=tab1[n];
         }
         display4();
         Disp_Sleep(DISP_SLEEP_TIMES);
         
//long33:
         r22=0x20;
         r23=0xbd;
         r24=0x60;
         r25=0xb9;
         for(n=0,m=0;m<128;m++,n++)
         {
         lcddata1[m]=tab2[n];
         }
         
        display5();
         Disp_Sleep(DISP_SLEEP_TIMES);
        
//long34:
         r22=0x20;
         r23=0xbd;
         r24=0x40;
         r25=0xb9;
         for(n=0,m=0;m<128;m++,n++)
         {
         lcddata1[m]=tab3[n];
         }
         display5(); 
         Disp_Sleep(DISP_SLEEP_TIMES);
       }

}











⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -