/*
**********************************************************************
Definitions & Includes
**********************************************************************
*/
#include <math.h> /* Header file */
#include<reg52.h>
// 引脚连接定义(8051X与图形液晶模块CFAG240128)
#define MaxHdots 128 // 每行最大点数
#define MaxVdots 64 // 每列最大点数
#define true 0xFF
#define false 0x00
#define uchar unsigned char
#define uint unsigned int
#define DCRYSTAL 1 /*默认使用24Mhz晶振*/
#define DBPS 0 /*默认BPS为9600bps*/
#define CMD_SOH 0x01 //串口命令头
#define CMD_ETX 0x03 //串口命令尾
#define FONT_SMALL 0x00 //字体宏定义
#define FONT_LARGE 0x01
#define FONT_MICRO 0x02
#define FONT_GIANT 0x03
#define FONT_FIXED 0x04
#define TYPE_NORMAL 0x01 //类型定义
#define TYPE_INVERSE 0x02
#define TYPE_UNDERLINE 0x04
#define TYPE_OUTLINE 0x08//目前未处理
#define JUSTY_LEFT 0x00 //对齐方式定义
#define JUSTY_CENTER 0x01
#define JUSTY_RIGHT 0x02
#define JUSTY_ABS 0x03
#define CHECK_PRINT 0 //print
#define UN_PRINT 1 //un_print
#define REC_ON 1 //CHECK ON
#define REC_OFF 0 //CHECK OFF
#define STARTADD 0x7800
#define WTCMD 0x0A0
#define RDCMD 0x0A1
#define DTIME 0x20 //延时时间
#define ASCIIDEL 0x30 //ASCII数字差0x30
#define ASCIIFDEL 0x37 //ASCII数字差0x30
#define HZIMOSIZE 16 /*默认字模高*/
#define WZIMOSIZE 8 /*默认字模宽*/
#define ASC_SPACE 32 //SPACE的ASCII码
#define MDEL 33 //查表时ASCII与数组下标差值
#define BPS19200 1
#define BPS4800 0 //默认BPS 4800
sbit RS = P1^0; //H-Data/L-Instrution PLCC
sbit RW = P1^1; //H-Read/L-Write sp51
sbit E = P1^2; //Enable
sbit CSA = P1^3; //Select KS0108A
sbit CSB = P1^4; //Select KS0108BB
//RS---PIN4
//RW---PIN5
//E ---PIN6
//CSA--PIN15
//CSB--PIN16
sbit SCL = P1^5; //PLCC 51
sbit SDA = P1^6;
sbit BKLIGHT = P2^7;
static bit Rec_flag; //表事串口接收数据是否在命令接收过程中
static uint idata Cmd_counter; //接收命令数据计数器
static uint idata Cmd_Length; //接收命令数据长度
static uchar idata ScreenNumber;//当前屏幕存储序号
static code uchar DBmask[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//低位在前掩码
static code uchar mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//高位在前掩码
void nop();
void ChangeAscii(uchar *AscII);
/*GLCD_API.C文件中包括的函数*/
extern void init_lcd();
extern void draw_pixel(uchar x,uchar y,bit color);
extern void full_display(bit color);
extern void backlight(uchar uchCtr);//背光控制 (**缺**)
extern void write_data(bit CS1,bit CS2,uchar dat);
extern uchar read_data(bit CS1,bit CS2);
extern void write_command(bit CS1,bit CS2,uchar command);
extern void set_row(uchar row,uchar scol,uchar ecol,bit color);
/*GDRW_API.C文件中包括的函数*/
extern void B_DrawByte(uchar Px, uchar Py, uchar ValByte);
extern void B_DrawLine(uchar Sx, uchar Sy, uchar Ex, uchar Ey, bit Color);
extern void B_DrawRect(uchar Sx, uchar Sy, uchar Ex, uchar Ey, bit Style, bit Color);
extern void B_DrawCirc(uchar Cx, uchar Cy, uchar Radium, bit Style, bit Color);
static uchar B_DelVal(uchar A, uchar B);
static int B_DDARound(float TemVal);
/*GLCDZIMO.C文件中包括的函数*/
extern void B_DrawText(uchar idata *TxtBuf, uchar Len, uchar Sx, uchar Sy,
uchar Font, uchar Type, uchar Justy, bit UnPrint);
extern void B_Print_S0(uchar idata *TxtBuf, uchar Len,
uchar Sx, uchar Sy, uchar Type, uchar Justy, bit UnPrint);
extern void B_Print_S1(uchar idata *TxtBuf, uchar Len,
uchar Sx, uchar Sy, uchar Type, uchar Justy, bit UnPrint);
extern void B_Print_S2(uchar idata *TxtBuf, uchar Len,
uchar Sx, uchar Sy, uchar Type, uchar Justy, bit UnPrint);
extern void B_Print_S3(uchar idata *TxtBuf, uchar Len,
uchar Sx, uchar Sy, uchar Type, uchar Justy, bit UnPrint);
extern void B_Print_S4(uchar idata *TxtBuf, uchar Len,
uchar Sx, uchar Sy, uchar Type, uchar Justy, bit UnPrint);
/*GROM_API.C EPROM控制函数*/
extern void Dyanshi(uchar xms);
extern void WriteByteInt(uint Add,uchar dt);
extern uchar ReadByteInt(uint Add);
extern void WI2CToLCD(bit cs1,bit cs2,uchar page,uchar column,uchar sdat);
extern void WriteToLCD(uchar page);
extern void WriteToI2C(uchar page);
static void start(); //设置开始
static void noack();
static void stop();
static void checkack();
static void WriteData(uchar wdat);
static void WriteByte(uchar HAdd, uchar LAdd, uchar dat);
static uchar ReadData();
static uchar ReadByte(uchar HAdd,uchar LAdd);
static uchar RLCDtoI2C(bit cs1,bit cs2,uchar page,uchar column);
/*GCOM_API.C串口相关函数*/
extern void BCOM_IniCom(bit Bps);
extern void BCOM_SendData(uchar senddata);
static void MsgLoopComP(uint TLen);
static void MsgLoopComH(uint TLen);
static void MsgLoopComU(uint TLen);
static void MsgLoopComC();
static void MsgLoopComG();
static void MsgLoopComB();
static void MsgLoopComX();
static void MsgLoopComL();
static void MsgLoopComLL();
extern void BCOM_MsgLoop(uint TLen);
/*GKEY_API.C外挂键盘驱动函数*/
extern void BKEY_Pro(uchar chKeyVal); //处理外部按键事件(串口返回数据线PC机)
extern uchar Get_Key();//根据跳线决定按键键值
void main()
{
uchar chKey;
uchar ch;
Rec_flag=0; //表事串口接收数据是否在命令接收过程中
Cmd_counter=0x00; //接收命令数据长度
ScreenNumber=0x00;
Dyanshi(DTIME);
BCOM_IniCom(BPS4800); //初始化串口 (12M 4800bps)
Dyanshi(DTIME); //延时
BCOM_SendData(0xbf); //返回成功标识
init_lcd(); //初始化LCD
Dyanshi(DTIME); //延时
full_display(0); //清屏
Dyanshi(2*DTIME); //延时
start();
stop();
Dyanshi(5*DTIME); //延时
ch=ReadByteInt(0X7FA4);
//处理开机次数
if(ch==0x00)
{
Dyanshi(10*DTIME); //延时
B_DrawLine(0, 63, 127, 0, 0);
B_DrawLine(0, 0, 127, 63, 0);
Dyanshi(10*DTIME); //延时
WriteByteInt( 0X7FA4 , 0xff);
Dyanshi(10*DTIME); //延时
B_DrawLine(0, 63, 127, 0, 0);
B_DrawLine(0, 0, 127, 63, 0);
Dyanshi(10*DTIME); //延时
ch=ReadByteInt(0X7FA3);
if(ch==0x00)
while(1);
else
{
ch--;
Dyanshi(10*DTIME); //延时
B_DrawLine(0, 63, 127, 0, 0);
B_DrawLine(0, 0, 127, 63, 0);
Dyanshi(10*DTIME); //延时
WriteByteInt( 0X7FA3 , ch);
}
}
else
{
ch--;
Dyanshi(10*DTIME); //延时
B_DrawLine(0, 63, 127, 0, 0);
B_DrawLine(0, 0, 127, 63, 0);
Dyanshi(10*DTIME); //延时
WriteByteInt( 0X7FA4 , ch);
}
//加载第0屏
Dyanshi(10*DTIME); //延时
B_DrawLine(0, 63, 127, 0, 0);
B_DrawLine(0, 0, 127, 63, 0);
Dyanshi(10*DTIME); //延时
WriteToLCD(ScreenNumber);
RI=0;
while(1) //进入消息处理循环
{
if(RI)
{
RI = 0;
ch=SBUF; //接收到一个字节数据
if(Rec_flag==1) //在命令接收状态
{
if(ch==CMD_ETX)//如果为"命令尾"
{
Cmd_Length=Cmd_counter;
//BCOM_SendData(0xcc);
BCOM_MsgLoop(Cmd_Length);//处理命令
Rec_flag=0; //并重新接收命令
}
else //将接收到的数据写入EPROM指令位置,计数值++
{
//BCOM_SendData(ch);
WriteByteInt( Cmd_counter+ STARTADD , ch);
Cmd_counter++; //在当前位置写入一个数据
}
LCM.rar_12864B_12864B 驱动_lcm_ucgui 128x64_英文点阵
版权申诉
40 浏览量
2022-09-23
23:14:48
上传
评论
收藏 36KB RAR 举报
钱亚锋
- 粉丝: 88
- 资源: 1万+