📄 main.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 + -