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

📄 main.c

📁 使用点阵式液晶屏
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"

#define DIS_DIR  (1<<21)
#define DIS_DI  (1<<25)
#define DIS_RW  (1<<27)
#define DIS_E   (1<<28)
#define DIS_CS1 (1<<29)
#define DIS_CS2 (1<<30)
#define dlya  1 
void DelayNS(uint32 dly)
{  uint32 i;
   
  ; for(;dly>0;dly--)
      for(i=0;i<2;i++); 
}
/*void  d_nops(uint32 number)
{
   uint32 i;
   for(i=0;i<number;i++)
   
   {
   asm {" nop"};
    
   }

   
}*/


void read_status(void)
{
  uint32 busy;
  uint32 temp1;
  uint8 temp;
  IO1DIR=IO1DIR&0xFF00FFFF;//设置为输入
  IO0CLR=DIS_DI;//DI=0指令方式
  IO0SET=DIS_RW;//RW=1读方式
  IO0SET=DIS_DIR;//245为输入方式
  DelayNS(200);//140NS
  
  do
  {
     
     IO1PIN=(IO1PIN&0xFF00FFFF)|0x00FF0000;
     IO0SET=DIS_E;
     DelayNS(200);
     busy=((IO1PIN&0x00FF0000)>>16);
     IO0CLR=DIS_E;

     DelayNS(200);
     temp=busy&0x80;
     
  }
  while(temp!=0);
   IO0CLR=DIS_DIR;
   DelayNS(200);
  IO1DIR= 0x00FF0000;
}



void wr_command1(uint8 com)
{
  
   //IO0CLR=DIS_CS2;
   IO0SET=DIS_CS1;//高有效
   IO0CLR=DIS_DI;   
    read_status();//读状态字
    DelayNS(2000);//500ms

   IO0CLR=DIS_RW;
   DelayNS(25);//590ns
   IO1PIN=(IO1PIN&0xFF00FFFF)|(com<<16);
   IO0SET=DIS_E;
   DelayNS(200);//500ns
   IO0CLR=DIS_E;
   DelayNS(200);
}
void wr_command2(uint8 com)
{
   
   IO0CLR=DIS_CS1;
   IO0SET=DIS_CS2;
   read_status();
   DelayNS(2000);
   
   IO0CLR=DIS_DI;
   IO0CLR=DIS_RW;
   DelayNS(25);//590ns
   IO1PIN=(IO1PIN&0xFF00FFFF)|(com<<16);
   IO0SET=DIS_E;
   DelayNS(200);//500ns
   IO0CLR=DIS_E;
   DelayNS(200);//500ns
}



void wr_data1(uint8 dat)
{
   
  // IO0CLR=DIS_CS2;
   IO0SET=DIS_CS1;
   read_status();
   DelayNS(2000);
   
   IO0SET=DIS_DI;
   IO0CLR=DIS_RW;
   DelayNS(25);
   IO1PIN=(IO1PIN&0xFF00FFFF)|(dat<<16);
   IO0SET=DIS_E;
   DelayNS(200);//500ns
   IO0CLR=DIS_E;
   DelayNS(200);//500ns
}
void wr_data2(uint8 dat)
{
   
   IO0CLR=DIS_CS1;
   IO0SET=DIS_CS2;
   read_status();
   DelayNS(2000);
 
   IO0SET=DIS_DI;
   IO0CLR=DIS_RW;DelayNS(25);
   IO1PIN=(IO1PIN&0xFF00FFFF)|(dat<<16);
   IO0SET=DIS_E;DelayNS(200);//500ns
   IO0CLR=DIS_E;DelayNS(200);//500ns
}


void init_OLED()
{
   //uint8 com;
   //com=0xC0;
   wr_command1(0xC0);
   
   //wr_command2();
  // com=0x3F;
   wr_command1(0x3F);
   
   //wr_command2();
   
}


void clear_prog1(void)
{
   uint8 com;
   uint8 dat;
   uint8 i; 
   uint8 j;
   for(i=0;i<8;i++)
   {
     // com=(0xB8+i);
      wr_command1(0xB8+i);
      DelayNS(dlya);
      //wr_command2();
     // com=0x40;
      wr_command1(0x40);
      DelayNS(dlya);
     // wr_command2();
     
      for(j=0;j<64;j++)
      {
        // dat=0x0F;
         wr_data1(0x00);
         
        // wr_data2();
      }
   
   
   }
}
void clear_prog2(void)
{
   uint8 com;
   uint8 dat;
   uint8 i; 
   uint8 j;
   for(i=0;i<8;i++)
   {
     // com=(0xB8+i);
     // wr_command1();
     wr_command2(0xB8+i);
     // com=0x40;
     // wr_command1();
     wr_command2(0x40);
     
      for(j=0;j<64;j++)
      {
        // dat=0x00;
        // wr_data1();
         wr_data2(00);
      }
   
   
   }
}



void display(uint8 hang,uint8 lie,volatile uint8 *p_dis_data)
{
   uint8 page;
   for(page=hang*2;page<2*hang+2;page++)
   {
      uint8 m;
       uint8 com;
      uint8 dat;
      com=(0xB8+page);
       wr_command1(com);
      com=0x40+lie;
       wr_command1(com);
      for(m=0;m<16;m++)
      {
          dat=*p_dis_data;
          wr_data1(dat); 
          p_dis_data++;
       }
   }
}



int main(void)
{  




   uint8 p_dis_data[32]={
    0x30,0x50,0xd0,0x90,0xf0,0x30,0x80,0x60,0x3c,0xe8,0x20,0xa0,0xe0,0x70,0x00,0x00,
	0x04,0x06,0x03,0x11,0x13,0x12,0x18,0x0c,0x07,0x01,0x03,0x06,0x0c,0x1c,0x18,0x18
    };
   PINSEL0=0x00000000;
   PINSEL1=0x00000000;
  // PINSEL2=0<<3;
   IO0DIR=DIS_DI |  DIS_RW |DIS_E  | DIS_CS1 | DIS_CS2|DIS_DIR ;
   DelayNS(70);
   
   IO0SET=DIS_CS2;
   IO0SET=DIS_CS1;//高有效
   init_OLED();
   DelayNS(70);
   clear_prog1();
  // DelayNS(70);
  // clear_prog2();
   DelayNS(dlya);
  display(1,1,p_dis_data);
  /* PINSEL0=0x00000000;
   PINSEL1=0x00000000;
   PINSEL2=(0<<3);
    IO0DIR=DIS_DI |  DIS_RW |DIS_E  | DIS_CS1 | DIS_CS2 ;
   IO1DIR=0x00FF0000;
   IO1SET=0x00FE0000;
   IO1CLR=1<<16;
   IO0SET=DIS_DI|  DIS_RW|DIS_E| DIS_CS1 | DIS_CS2 ;
   IO0CLR=DIS_DI|  DIS_RW|DIS_E| DIS_CS1 | DIS_CS2 ;
      PINSEL0=0x00000000;
      PINSEL1=0x00000000;
   
   // IO0DIR=(1<<29);
   // IO0SET=(1<<29);
      IO0DIR= 1<<10 ;
  
   IO0SET=1<<10;
   IO0CLR=1<<10;*/
   return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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