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

📄 main.c

📁 单片机控制122x32液晶。液晶内部芯片包含RAM(类似于显存)
💻 C
字号:
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules

#include "logo.h"


BYTE rl;

BYTE x,y,bitnum,bitmask,yByte;

unsigned int  str;

const unsigned char l_mask_array[8] =
	{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; 



INT  i,j;


#define bit0 0x01
#define bit1 0x02
#define bit2 0x04
#define bit3 0x08
#define bit4 0x10
#define bit5 0x20
#define bit6 0x40
#define bit7 0x80


//    sed1520
//                            76543210        
#define Display_ON          0b10101111 
#define Display_OFF         0b10101110 

#define DisplayStartLine    0b11000000 
#define PageAddressSet      0b10111000 
#define ColumnAdressSet     0b00000000

#define StatusBUSY          0b10000000
#define StatusADC_R         0b01000000
#define StatusOFF           0b00100000
#define StatusRESET         0b00010000
 
#define ADC_Select_R        0b10100000
#define ADC_Select_L        0b10100001
#define StaticDriveOFF      0b10100100
#define StaticDriveON       0b10100101 

#define DutySelect16        0b10101000
#define DutySelect32        0b10101001
#define ReadModifyWrite     0b11100000
#define OffReadModifyWrite  0b11101110
#define DisplayEnd          0b11101110
#define DisplayReset        0b11100010


//
#define    Ctrl     PRT1DR
#define    Data     PRT2DR
#define    A0       bit2
#define    CS1      bit3 
#define    CS2      bit4
//CL  bit5

#define    E       bit6
#define    WR      bit7

#define LCDDisable  Ctrl |=  E
#define LCDEnable   Ctrl &= ~E


void main()
{
ports_init ();
                
PWM8_1_Start();
PWM8_2_Start();

ResetDisplay ();  //reset LCD
InitDisplay ();   //Initialize LCD

test_PSoC();      // save logo in LCD
display();        // LCD show                                                             


}

void ResetDisplay ()
{
PRT0DR |= bit0;
delay(239);  //1ms cpu 24MHz
PRT0DR &= ~bit0;
}



void InitDisplay ()
{
Data = Display_OFF;
write_instruction ();
Data = DisplayStartLine;
write_instruction ();
Data = StaticDriveOFF;
write_instruction ();
Data = ColumnAdressSet;
write_instruction ();
Data = DutySelect32;
write_instruction ();
Data = ADC_Select_R; 
write_instruction ();
Data = OffReadModifyWrite; //Off
write_instruction ();
}



// Read data from a driver
BYTE read_data ()
{
BYTE dat;
Data=5;

Ctrl |= A0;

LCDEnable;

Ctrl &= ~WR;
Ctrl |=  WR;

 PRT2_HZ ();
  dat=Data;
 PRT2_PD (); 
  
LCDDisable;

return dat;

}


// Write data to a driver
void write_data ()
{
LCD_Ready ();
Ctrl &= ~A0;
Ctrl |= A0;
Ctrl |=  WR;
Ctrl &= ~WR;
LCDEnable;
LCDDisable;

}

// Write an instruction to a driver
void write_instruction ()
{
LCD_Ready ();
Ctrl |=  A0;
Ctrl &= ~A0;
Ctrl |=  WR;
Ctrl &= ~WR;
LCDEnable;
LCDDisable;
}


// Read the current status of a driver
void LCD_Ready ()
{
do {

Ctrl &= ~A0;

LCDEnable;
       Ctrl |=  WR;    
   PRT2_HZ (); 
    rl=Data;
   PRT2_PD (); 
       Ctrl &= ~WR;
LCDDisable;
} while (rl & StatusBUSY);

}

// Controller #1
void CS1_select ()
{
Ctrl &= ~CS2;
Ctrl |=  CS1;
}

// Controller #2
void CS2_select ()
{
Ctrl &= ~CS1;
Ctrl |=  CS2;
}

//duplicate
void cs_l () {               
CS1_select ();
             }
             
void cs_r () {               
CS2_select ();
             }   

// read write A0_instruction A0_Data

void Write ()
{
Ctrl |=  WR;
Ctrl &= ~WR;
}

void Read ()
{
Ctrl &= ~WR;
Ctrl |=  WR;
}

void A0_Instruction ()
{
Ctrl |= A0;
Ctrl &= ~A0;
}

void A0_Data ()
{
Ctrl &= ~A0;
Ctrl |= A0;
}


// ports operate

// DM2 DM1 DM0 Mode
// 0   0   0   Resistive Pull Down
// 0   0   1   Strong Drive
// 0   1   0   High Impedence
// 0   1   1   Resistive Pull Up
// 1   0   0   Open Drain, Drives High
// 1   0   1   Slow Strong Drive
// 1   1   0   High Impedence Analog
// 1   1   1   Open Drain, Drives Low


               void PRT2_HZ () {
                        M8C_SetBank1;   
                        PRT2DM0 &= 0b00000000;                        
                        PRT2DM1 |= 0b11111111;    
                        M8C_SetBank0; 
                        PRT2DM2 &= 0b00000000;
                              }

               void PRT2_PD () {
                        M8C_SetBank1;   
                        PRT2DM0 &= 0b00000000;                        
                        PRT2DM1 &= 0b00000000;   
                        M8C_SetBank0; 
                        PRT2DM2 &= 0b00000000;
                              }


void test_logo(){
BYTE a22;

  if (x<= 60){
cs_l();
      a22 = x;
             }
     else    {
cs_r();
      a22=(x-61);
             }


	yByte   = y ;//>> 3; 
	bitnum  = y & 0x07;
	bitmask = l_mask_array[bitnum]; 
    

Data = ColumnAdressSet | a22;
write_instruction ();

Data = PageAddressSet | yByte;
write_instruction ();

Data = DisplayStartLine;
write_instruction ();

Data = psoc_bmp[str];

write_data ();


}

void test_PSoC(){
BYTE st;
str=0;
for (x=0;x<122;x++){

for (st=0;st<4;st++)  {
y=st;

test_logo();
str++;
                      }

                   }
                   
                    
                }
 

//enable lcd

void display() {
Data = Display_OFF;
write_instruction ();              
Ctrl &= ~CS1;
Ctrl &= ~CS2;
Data = Display_ON;
write_instruction ();  
}




  void delay (INT delay_input)
  {
INT  i;
  for (i=0; i<delay_input; i++) ;
  } 
 

void ports_init () {
// configure reset pin PD
                        M8C_SetBank1;   
                        PRT0DM0 &= ~bit0;                 
                        PRT0DM1 &= ~bit0;    
                        M8C_SetBank0; 
                        PRT0DM2 &= ~bit0;

// configure P1 pins PD
                        M8C_SetBank1;   
                        PRT1DM0 &= 0b00000000;                        
                        PRT1DM1 &= 0b00000000;   
                        M8C_SetBank0; 
                        PRT1DM2 &= 0b00000000;

// configure P2 pins PD
                        M8C_SetBank1;   
                        PRT2DM0 &= 0b00000000;                        
                        PRT2DM1 &= 0b00000000;   
                        M8C_SetBank0; 
                        PRT2DM2 &= 0b00000000;
}

⌨️ 快捷键说明

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