📄 plcd_bus.c
字号:
/*************** 812 Bus LCD Program *************/
#include "intrins.h"
#include "math.h"
#include "ascii.h"
//--------CSA----A10------//
//--------CSB----A11------//
//--------R/S----A8-------//--1-data,0-command//
//--------R/W----A9-------//--1-read,0-write//
//--------EN-----A15&R&W--//
#define lcd_on 0x3f
#define lcd_off 0x3e
#define lcd_xrow 0xc0
#define lcd_page 0xb8
#define lcd_y 0x40
#define left_command_add 0x40800 // left command write address//
#define left_data_add 0x40900 // left data write address//
#define left_zt_read_add 0x40a00 // left zhuangtai read address//
#define left_data_read_add 0x40b00 // left data read address//
#define right_command_add 0x40400 // right command write address//
#define right_data_add 0x40500 // right data write address//
#define right_zt_read_add 0x40600 // right zhuangtai read address//
#define right_data_read_add 0x40700 // right data read address//
//************* Delay *********//
/* void delay(int n)
{
int i;
for(i=0;i<=n;i++)
{
_nop_();
}
}
/*********write left command ************/
void left_command(char cmd)
{
unsigned char flag;
flag=FVAR(char, left_zt_read_add);
while((flag&0x80)==0x80)
{
flag=FVAR(unsigned char,left_zt_read_add);
}
FVAR(unsigned char,left_command_add)=cmd;
}
/***********write right command ********/
void right_command(char cmd)
{
char flag;
flag=FVAR(unsigned char,right_zt_read_add);
while((flag&0x80)==0x80)
{
flag=FVAR(unsigned char,right_zt_read_add);
}
FVAR(unsigned char,right_command_add)=cmd;
}
/***************write left data********/
void left_data(char lcd_data)
{
char flag;
flag=FVAR(unsigned char,left_zt_read_add);
while((flag&0x80)==0x80)
{
flag=FVAR(unsigned char,left_zt_read_add);
}
FVAR(unsigned char,left_data_add)=lcd_data;
}
/***************write right data********/
void right_data(char lcd_data)
{
char flag;
flag=FVAR(unsigned char,right_zt_read_add);
while((flag&0x80)==0x80)
{
flag=FVAR(unsigned char,right_zt_read_add);
}
FVAR(unsigned char,right_data_add)=lcd_data;
}
/*********read left data*********/
unsigned char left_read()
{
char flag,reddd;
flag=FVAR(unsigned char,left_zt_read_add);
while((flag&0x80)==0x80)
{
flag=FVAR(unsigned char,left_zt_read_add);
}
FVAR(unsigned char,left_data_add)=0xff;
reddd=FVAR(unsigned char,left_data_read_add);
return reddd;
}
/*********read right data*********/
unsigned char right_read()
{
char flag,reddd;
flag=FVAR(unsigned char,right_zt_read_add);
while((flag&0x80)==0x80)
{
flag=FVAR(unsigned char,right_zt_read_add);
}
FVAR(unsigned char,right_data_add)=0xff;
reddd=FVAR(unsigned char,right_data_read_add);
return reddd;
}
//******************* clear left lcd ***************************//
void lcd_left_clear()
{
char i;
int j;
left_command(lcd_xrow);
for(i=0;i<=7;i++)
{
left_command(lcd_page|i);
left_command(lcd_y);
for(j=0;j<=63;j++)
{
left_data(0x00);
}
}
}
//********************** clear right lcd **********************//
void lcd_right_clear()
{
char i;
int j;
right_command(lcd_xrow);
for(i=0;i<=7;i++)
{
right_command(lcd_page|i);
right_command(lcd_y);
for(j=0;j<=63;j++)
{
right_data(0x00);
}
}
}
//************************ display ascii at x,y *********************//
void display_ascii(unsigned char xrow,unsigned char yrow, unsigned char *tata)
{
int i;
left_command(lcd_xrow|0x00);
right_command(lcd_xrow|0x00);
while(*tata!='\0')
{
if(xrow>15)
{
xrow=xrow-16;
yrow=yrow+2;
}
else
{
if(xrow<8)
{
left_command(lcd_page|yrow);
left_command(lcd_y|xrow*8);
for(i=0;i<8;i++)
{
left_data(reg[(*tata-32)*16+i]);
}
left_command(lcd_page|yrow+1);
left_command(lcd_y|xrow*8);
for(i=8;i<16;i++)
{
left_data(reg[(*tata-32)*16+i]);
}
tata++;
xrow=xrow+1;
}
else
{
right_command(lcd_page|yrow);
right_command(lcd_y|xrow*8);
for(i=0;i<8;i++)
{
right_data(reg[(*tata-32)*16+i]);
}
right_command(lcd_page|yrow+1);
right_command(lcd_y|xrow*8);
for(i=8;i<16;i++)
{
right_data(reg[(*tata-32)*16+i]);
}
tata++;
xrow=xrow+1;
}
}
}
}
//******************************display 00-99 **********************************//
void display_data(unsigned int xrow,unsigned char yrow, unsigned char dada)
{
unsigned int i,j;
unsigned char a[2];
a[0] = (dada>>4)&0x0f;
a[1] = dada&0x0f;
left_command(lcd_xrow|0x00);
right_command(lcd_xrow|0x00);
for(j=0;j<2;j++)
{
if(xrow>15)
{
xrow=xrow-16;
yrow=yrow+2;
}
else
{
if(xrow<8)
{
left_command(lcd_page|yrow);
left_command(lcd_y|xrow*8);
for(i=0;i<8;i++)
{
left_data(reg[(a[j]+16)*16+i]);
}
left_command(lcd_page|yrow+1);
left_command(lcd_y|xrow*8);
for(i=8;i<16;i++)
{
left_data(reg[(a[j]+16)*16+i]);
}
}
else
{
right_command(lcd_page|yrow);
right_command(lcd_y|xrow*8);
for(i=0;i<8;i++)
{
right_data(reg[(a[j]+16)*16+i]);
}
right_command(lcd_page|yrow+1);
right_command(lcd_y|xrow*8);
for(i=8;i<16;i++)
{
right_data(reg[(a[j]+16)*16+i]);
}
}
}
xrow++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -