📄 ym12864.c
字号:
/************************************************************************
程序主功能:
本程序主要实现通过IO口控制YM12864显示瓶显示字符菜单及简单的128*64的图形
并且通过HC452读取键盘值.
主要端口连接关系如下:
单片机 显示屏 HC452
PB0 CS1 --
PB1 CS2 --
PB2 RS --
PB3 R/W --
PB4 E --
PB5 -- DCLK
PB6 -- DLOAD
PC0 -- DIN
PC1 -- DOUT
PD0~7 D0~D7 --
宏定义内容简介:
choosepage(t) 选择显示页
chooseline(t) 选择开始显示行对应页上的行
chooselei(t) 选择显示列
编写日期:2007-08-14
编写人:黄金伟
***********************************************************************/
#include "iom8v.h"
#include <macros.h>
/**********************************************************************
宏定义端口操作
***********************************************************************/
#define CS1_1 PORTB|=0x01
#define CS1_0 PORTB&=(~0x01)
#define CS2_1 PORTB|=0x02
#define CS2_0 PORTB&=(~0x02)
#define RS_1 PORTB|=(0x04)
#define RS_0 PORTB&=(~0x04)
#define RW_1 PORTB|=(0x08)
#define RW_0 PORTB&=(~0x08)
#define E_1 PORTB|=(0x10)
#define E_0 PORTB&=(~0x10)
#define DCLK_1 PORTB|=0x20
#define DCLK_0 PORTB&=(~0x20)
#define DLOAD_1 PORTB|=0x40
#define DLOAD_0 PORTB&=(~0x40)
#define DIN_1 PORTC|=0x01
#define DIN_0 PORTC&=(~0x01)
#define choosepage(t) (0xb8|(t&0x07))
#define chooseline(t) (0xc0|t)
#define chooselei(t) (0x40|t)
int key=-1;
int MenuSelect;
char IsBusy;
/******************************************************************
显示屏显示图形数据
将数据定义成常量主要是让数据写进FLASH里
******************************************************************/
const char menu[128*2]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x07,
0x90,0x04,0x90,0x04,0x90,0x04,0xFC,0x1F,
0x90,0x24,0x90,0x24,0x90,0x24,0xF8,0x27,
0x10,0x20,0x00,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x0C,
0xF8,0x23,0x08,0x20,0x88,0x20,0x88,0x20,
0xE8,0x3F,0x88,0x20,0x88,0x22,0xC8,0x24,
0x8C,0x28,0x08,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x40,0x24,0x78,0x23,
0x40,0x10,0xFC,0x0F,0x50,0x04,0x50,0x23,
0xE8,0x17,0x28,0x08,0xB8,0x07,0x28,0x08,
0xEC,0x17,0x08,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x08,0x0A,0x28,0x09,
0x48,0x09,0x88,0x08,0x68,0x09,0xD8,0x09,
0x4C,0x3F,0xA8,0x09,0x48,0x09,0xA8,0x08,
0x18,0x09,0x08,0x0A,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x20,0x0C,0x20,0x03,
0x20,0x00,0xFC,0x3F,0x20,0x01,0x20,0x02,
0xF8,0x3F,0x48,0x12,0x48,0x12,0x48,0x12,
0xFC,0x3F,0x08,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x00,0x40,0x00,
0xF0,0x3F,0x0C,0x00,0x10,0x20,0xD0,0x20,
0x14,0x2F,0x18,0x20,0x10,0x3C,0xD8,0x23,
0x10,0x20,0x10,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x20,0x10,0x10,0x08,
0x08,0x24,0xFC,0x22,0xA8,0x27,0xA8,0x1A,
0xA8,0x12,0xA8,0x1A,0xA8,0x26,0xF8,0x20,
0x0C,0x20,0x08,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x10,
0x20,0x08,0xF0,0x07,0xAC,0x04,0xA8,0x04,
0xE8,0x3F,0xB8,0x04,0xA8,0x14,0xA0,0x24,
0xF0,0x1F,0x20,0x00,0x00,0x00,0x00,0x00
};
const char picture[128*8]=
{
0x00,0xE0,0xE0,0xE0,0xE0,0xE1,0xFC,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,
0x3F,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0xF9,0xFD,0xFF,0xFF,0xFF,0xFF,0x7F,0xF1,0xFF,
0xFF,0xFF,0xE0,0xE0,0xE0,0xE0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x7F,0xFF,0x80,0x00,0xEF,0xFF,0xFC,0xFF,
0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x07,0x0F,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0xFF,0xFF,0xFF,0x00,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xC0,
0xC0,0xF3,0x79,0x3E,0x9F,0x9F,0xDF,0xEF,0xE7,0x47,0x07,0x07,0x07,0x9F,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1F,0x07,0xCF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,
0x00,0xF0,0xFF,0xE1,0xC3,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xE3,0xFF,0x3F,0x1F,0x00,0x00,
0x80,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x7F,0x3F,0x8F,0xC3,0xF0,0xF8,0x3C,0x1E,0x0F,0x87,0x87,0xC3,0xE1,0xF1,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,
0xFF,0xF1,0x00,0x00,0xC0,0xDF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xF0,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xF0,0x00,0xC0,0xF1,0xFF,0xFF,0xFF,0x00,0x3F,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,
0x00,0xFE,0xFF,0xFF,0xFC,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x07,0x00,0x00,0x00,0xC0,0xE0,
0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x87,0xE1,0xFC,0xFE,0xFF,0xFF,0xFF,0xFC,0xF8,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,
0x7F,0x7F,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0x00,0x07,0xC7,0xF9,0xFC,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xF1,0x00,0xE1,0xE1,
0xF0,0xF0,0x01,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x3F,0x3F,0x0F,0x87,0x01,0xC0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3E,0x00,0xF8,0xFF,0xFF,0x3F,0xFB,0xC0,0x20,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xF8,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x00,0x00,0x07,0x07,
0x07,0x07,0x0F,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0xFF,0xFF,0xFF,0x0F,0x0F,0x83,0xF0,0x00,0x0F,0x3F,0xFF,0xFF,0x01,0xC0,0xFE,0xFF,0xFF,0xFF,0xFF,
0x3F,0x0F,0x00,0xE1,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xF0,0x7C,0x0F,0xC0,0x00,0xFC,0xFC,0xF8,0xFE,0xFF,0x00,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1F,0x83,0x00,0x00,0xE7,0xFF,0xFF,0xF8,0x03,0x07,0x40,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x1F,0x01,0x00,0x80,0xE0,0x83,0x03,0x07,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,
0x01,0x00,0x80,0xE0,0xE0,0x00,0x08,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFE,0x00,0xFF,0xF7,0xF0,0xF8,0xDE,0x07,
0x80,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x0E,0xC0,0xF8,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x83,0xE1,0xF0,0xF0,0xC3,0x00,0x00,0xFF,0xFF,0xF1,0xE0,0xE0,0xF8,
0xF0,0xC1,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0xC0,0xE0,0xF8,0xFE,0x1F,0xFF,0xFF,0xF8,0xF0,0xF0,0xF8,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xC0,0x00,0x07,0x0F,0x07,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x1F,0x1F,0x1F,
0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xF8,0xFF,0xFF,0xFF,0xF3,0xE1,0xE0,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x1F,
0x1C,0x1E,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0xF8,0xF0,0xF0,0xF8,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,
0x1F,0x1F,0x1F,0x1F
};
const char num1[10][32]=
{
{0x00,0x00,0xF0,0x07,0xF8,0x0F,0x88,0x09,
0xC8,0x08,0x68,0x08,0xF8,0x0F,0xF0,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x20,0x08,0x30,0x08,
0xF8,0x0F,0xF8,0x0F,0x00,0x08,0x00,0x08,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x10,0x0C,0x18,0x0E,0x08,0x0B,
0x88,0x09,0xC8,0x08,0x78,0x0C,0x30,0x0C,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x10,0x04,0x18,0x0C,0x88,0x08,
0x88,0x08,0x88,0x08,0xF8,0x0F,0x70,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x80,0x01,0xC0,0x01,0x60,0x01,
0x30,0x09,0xF8,0x0F,0xF8,0x0F,0x00,0x09,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0xF8,0x04,0xF8,0x0C,0x88,0x08,
0x88,0x08,0x88,0x08,0x88,0x0F,0x08,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0xE0,0x07,0xF0,0x0F,0x98,0x08,
0x88,0x08,0x88,0x08,0x80,0x0F,0x00,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x18,0x00,0x18,0x00,0x08,0x0F,
0x88,0x0F,0xC8,0x00,0x78,0x00,0x38,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x70,0x07,0xF8,0x0F,0x88,0x08,
0x88,0x08,0x88,0x08,0xF8,0x0F,0x70,0x07,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x70,0x00,0xF8,0x08,0x88,0x08,
0x88,0x08,0x88,0x0C,0xF8,0x07,0xF0,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
const char fuhao[3][32]=
{
{0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x08,
0x60,0x0C,0x00,0x06,0x00,0x03,0x80,0x01,
0xC0,0x0C,0x60,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,
0xF8,0x03,0x00,0x06,0x00,0x0C,0x00,0x06,
0xF8,0x03,0xF8,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x12,
0x00,0x12,0x00,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
/******************************************************************
延时程序段:
变量: i,t
延时值: 200*t 个指令周期
******************************************************************/
void delay( int t)
{
int i;
for(;t>0;t--)
for(i=0;i<200;i++)
;
}
/*******************************************************************
读取显示屏状态字:
变量:data 接收状态字
操作:data&0x08 读取显示屏是否处于数据处理状态
具体时序操作参考YM12864数据手册
*******************************************************************/
int readstate()
{
int data;
RS_0;
RW_1;
DDRD=0x00;
data=PIND;
if(data&0x80)
IsBusy=1;
else IsBusy=0;
E_1;
E_0;
return IsBusy;
}
/**********************************************************************
向屏幕发送命令:
变量:data 命令内容
操作:PORTD=data 对显示器写入命令
具体命令内容及时序参考YM12864数据手册
**********************************************************************/
void sendcommnd( int data)
{
for(;IsBusy;)
{
readstate();
delay(1);
}
RS_0;
RW_0;
DDRD=0xff;
PORTD=data;
E_1;
E_0;
}
/*************************************************************
写单个显示数据:
变量:data 显示数据
具体命令内容及时序参考YM12864数据手册
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -