/* 液晶显示模块(LCD) */
/* 控制器:SED1335 */
/* 显示屏:SHARP-LM32019T */
/* 点 阵:320X240 */
/* 类 型:字符/图形两用型 */
/* 色 彩:单色 */
#include <reg51.h>
#include <absacc.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <intrins.h>
#include <shuzi.h>
//#include <zimu16.h>
#include <hanzi.h>
//#include <anjian.h>
//#include <zimu.h>
#define uchar unsigned char
#define uint unsigned int
#define TH_M2 (256-1)
#define TL_M2 (256-1)
#define SYSTEM_SET 0x40
#define SCROLL 0X44
#define SLEEP_IN 0x53
#define DISP_ON 0x59
#define DISP_OFF 0x58
#define OVLAY 0x5b
#define HDOT_SCR 0x5a
#define CSRFORM 0x5d
#define CSRDIR_RG 0x4c
#define CSRDIR_LF 0x4d
#define CSRDIR_UP 0x4e
#define CSRDIR_DW 0x4f
#define CSRW 0x46
#define CSRR 0x47
#define MWRITE 0x42
#define MREAD 0x43
#define LCDAP 0x28
#define LCDP P0
#define PARA1 0x28
#define paraP9 0x28
sbit PEN=P3^2;
sbit wr=P3^6;
sbit rd=P3^7;
sbit AO=P1^0;
sbit cs=P1^1;
sbit clk=P1^2;
sbit ccs=P1^3;
sbit Din=P1^4;
sbit Dout=P1^5;
void LCD_order(unsigned char);
void LCD_write(unsigned char);
void Int_system(void);
void LCD_clear(void);
void clear(char O_X,char O_Y);
void LCD_clear_Jubu(void) ;
void delay(int x);
void delay1(uint);
void HZWB(char O_X,char O_Y,code_1);
void dis_HZWB(void);
void CGRAM(void);
void Graph_locate(uint , uint );
void Locate_cursor(unsigned char, unsigned char);
void Tuxing(unsigned int row,unsigned char column,
unsigned char code *picture_code, unsigned int width,
unsigned int high, unsigned char mode);
void start() ;
read_Dout();
void write_Din(unsigned char num);
void display1(uchar Ox,uchar Oy,uchar qian,uchar bai,uchar shi,uchar ge);
/*************/
char code TAB[]={ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
unsigned char code System_set[8] = {0x30,0x87,0x07,0x28,0x42,0xf0,0x28,0x00};/* SCROLL SET 初始化参数 P1-P10 */
uchar code scroll_set[10] = {0x00,0x00,0x70,0x00,0x28,0xf0,0xe1,0x01,0x00,0x00};
uchar code CGTAB[4][32]={0x00,0x40,0x37,0x10,0x83,0x60,0x2F,0x08, /* 清 */
0x13,0x22,0xE3,0x22,0x23,0x22,0x22,0x22,
0x40,0x48,0xFC,0x40,0xF8,0x40,0xFE,0x08,
0xFC,0x08,0xF8,0x08,0xF8,0x08,0x28,0x10,
0x04,0x04,0x08,0x08,0x18,0x29,0x4A,0x08, /* 华 */
0x09,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,
0x40,0x48,0x58,0x60,0xC0,0x40,0x44,0x44,
0x3C,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,
0x04,0xFF,0x05,0x41,0x33,0x14,0x01,0xF6, /* 蓬 */
0x1B,0x10,0x13,0x10,0x17,0x10,0x28,0x47,
0x44,0xFE,0x40,0xF8,0x10,0xE0,0x18,0x46,
0xF8,0x40,0xF8,0x40,0xFC,0x40,0x46,0xFC,
0x00,0x43,0x30,0x10,0x00,0x07,0xF1,0x11, /* 远 */
0x11,0x11,0x12,0x12,0x14,0x28,0x47,0x00,
0x10,0xF8,0x00,0x00,0x08,0xFC,0x20,0x20,
0x20,0x24,0x24,0x1C,0x00,0x06,0xFC,0x00};
/************/
void dis_HZWB(void)
{ uchar code_1;
uint O_X,O_Y;
CGRAM(); /* 调CGRAM子程序 */
code_1=0x80; /* 取字模 */
O_X=0x00;
O_Y=0x00;
HZWB(O_X,O_Y,code_1); /* 调中文显示函数(文本方式) */
code_1=0x84; /* 取字模 */
O_X=0x02;
O_Y=0x00;
HZWB(O_X,O_Y,code_1); /* 调中文显示函数(文本方式) */
code_1=0x88; /* 取字模 */
O_X=0x04;
O_Y=0x00;
HZWB(O_X,O_Y,code_1); /* 调中文显示函数(文本方式) */
code_1=0x8c; /* 取字模 */
O_X=0x06;
O_Y=0x02;
HZWB(O_X,O_Y,code_1); /* 调中文显示函数(文本方式) */
}
/**************************/
void CGRAM()
{
unsigned char i,j;
LCD_order(0x5c); /* CGRAMADR 代码 */
LCD_write(0x00); /* 设置SAG=03000H */
LCD_write(0x30);
LCD_order(0x46); /* CSRW 代码 */
LCD_write(0x00); /* 设置CSR=03400H(字符代码=80H) */
LCD_write(0x34);
LCD_order(0x4c); /* CSRDIR 代码 */
LCD_order(0x42); /* MWRITE 代码 */
for(j=0;j<4;j++)
{
for(i=0;i<32;i++)
{
LCD_write(CGTAB[j][i]); /* 写入字模数据 */
}
}
}
/***************/
void delay1(uint i)
{ while(i--);
}
/**********************/
void HZWB(uchar O_X,uchar O_Y,code_1)
{
uint i,j;
i=PARA1;
j=i*O_Y+O_X;
LCD_order(0x4f); /* CSRDIR 代码(下移) */
LCD_order(0x46); /* CSRW 代码 */
LCD_write(j%256); /* 设置光标地址 */
LCD_write(j/256);
LCD_order(0x42); /* MWRITE 代码 */
LCD_write(code_1); /* 写入汉字代码 */
LCD_write(code_1+1); /* 写入汉字代码 */
j++;
LCD_order(0x46); /* CSRW 代码 */
LCD_write(j%256); /* 设置光标地址 */
LCD_write(j/256);
LCD_order(0x42); /* MWRITE 代码 */
LCD_write(code_1+2); /* 写入汉字代码 */
LCD_write(code_1+3); /* 写入汉字代码 */
}
/*********/
void LCD_order(unsigned char Order_Code)
{
rd=1;
cs=0;
AO=1;
LCDP = Order_Code;
wr=0;
wr=1;
cs=1;
}
/************************/
void LCD_write(unsigned char Data_Code)
{ rd=1;
AO=0;
cs=0;
LCDP = Data_Code;
wr=0;
wr=1;
cs=1;
}
/*******************/
void Locate_cursor(unsigned char high_bit, unsigned char low_bit)
/* 锁定光标位置 */
{
LCD_order(0x46); /* CSRW */
LCD_write(low_bit);
LCD_write(high_bit);
}
/***************************/
/******************************/
void Graph_locate(unsigned int row, unsigned char column)
/* 图形模式下屏幕锁定光标 */
/* row-行(以像素为单位) column-列(以字节为单位) */
{
unsigned int address;
unsigned char high_bit,low_bit;
address =0x01e1 +((row - 1)*40 + (column - 1));
high_bit = (address >> 8) & 0xff;
low_bit = address & 0xff;
Locate_cursor(high_bit, low_bit);
}
/**************/
void Int_system(void)
/* 系统初始化 */
{
unsigned char i;
LCD_order(0x40);
for(i=0;i<8;i++)
{
LCD_write(System_set[i]);
}
LCD_order(0x44);
for(i=0;i<10;i++)
{
LCD_write(scroll_set[i]);
}
LCD_order(0x5a); /* HDOTSET */
LCD_write(0x00);
LCD_order(0x5b); /* OYLAY */
LCD_write(0x08);
LCD_clear();
LCD_order(0x59);
LCD_write(0x45);
}
/******************************/
void Tuxing(unsigned int row, unsigned char column,
unsigned char code *picture_code, unsigned int width,
unsigned int high, unsigned char mode)
/* 图形模式下在指定行指定列显示指定大小的图形 */
/* row-行(以像素为单位) column-列(以字节为单位) *picture_code-图形数组 */
/* width-图形宽度(以像素为单位) high-图形高度(以像素为单位) */
/* mode-显示模式:1-正常 2-反白 */
{
unsigned char i;
unsigned char j,k;
LCD_order(0x4c);
width = width / 8;
for(i=0;i<high;i++)
{
Graph_locate(row,column);
LCD_order(0x42);
for(j=0;j<width;j++)
{ k= *picture_code;
if(mode==0) k= ~k;
LCD_write(k);
picture_code++;
}
row++;
}
}
/*********************************/
void clear(char O_x,char O_y) /*x,y坐标都是以字节为单位*/
{
unsigned int i,j;
i=PARA1;
j=i*O_y+O_x;
LCD_order(0x4c); /* CSRDIR 代码 */
LCD_order(0x46); /* CSRW 代码 */
LCD_write(j%256); /* 设置参数光标指针低8位 */
LCD_write(j/256); /* 设置参数光标指针高8位 */
LCD_order(0x42); /* MWRITE 代码 */
for(j=0;j<1;j++) /*清64K的显示存储器*/
{
for(i=0;i<1;i++) /*写入一行*/
{
LCD_write(0x00); /* 写入数据 */
}
}
}
/***********************************/
void LCD_cle