#include<reg52.h>
#include<stdio.h>
#include<absacc.h>
#include<intrins.h>
#include<string.H>
#define uint unsigned int
#define uchar unsigned char
//初始化指令
/****************字符显示命名,用于单个字符的显示*****************/
//在相应字符位处显示字符命令 命令格式:命令 行位置(0-7) 列位置(0-F)
#define CHAR 0xF0 //显示16*16点阵国标汉字
#define ASC2_8_8 0xF1 //显示8*8点阵标准ASC2字符
#define ASC2_8_16 0xF9 //显示8*16点阵半角标准ASC2字符
#define NUM_3_5 0xE1 //显示3*5点阵数字及大写字母
#define ASC2_5_7 0xE0 //显示5*7点阵标准ASC2字符
#define NUM_6_12 0xE2 //显示6*12双倍粗细数字
#define NUM_9_16 0xE3 //显示9*16三倍粗细数字
//在任意处显示字符命令 命令格式:命令 行点位置(0-63) 列点位置(0-127)
#define CHAR_lat 0xEA //显示16*16点阵国标汉字
#define ASC2_8_8_lat 0xC1 //显示8*8点阵标准ASC2字符
#define ASC2_8_16_lat 0xC9 //显示8*16点阵半角标准ASC2字符
#define NOM_3_5_lat 0xC4 //显示3*5点阵数字及大写字母
#define ASC2_5_7_lat 0xC0 //显示5*7点阵标准ASC2字符
#define NOM_6_12_lat 0xC2 //显示6*12双倍粗细数字
#define NOM_9_16_lat 0xC3 //显示9*16三倍粗细数字
//在光标处处显示字符命令 命令格式:命令 内容。使用前先定义光标位置
#define CHAR_cur 0xEC //显示16*16点阵国标汉字
#define ASC2_8_8_cur 0xD1 //显示8*8点阵标准ASC2字符
#define ASC2_8_16_cur 0xD9 //显示8*16点阵半角标准ASC2字符
#define NUM_3_5_cur 0xD4 //显示3*5点阵数字及大写字母
#define ASC2_5_7_cur 0xD0 //显示5*7点阵标准ASC2字符
#define NUM_6_12_cur 0xD2 //显示6*12双倍粗细数字
#define NUM_9_16_cur 0xD3 //显示9*16三倍粗细数字
/**************字符串显示命名,用于多个字符的显示*****************/
//命令格式:命令 行位置 列位置 内容 结束符号0x00
//命令格式:命令 行点位置 列点位置 内容 结束符号0x00
//命令格式:命令 内容 结束符号0x00。记得定义光标位置
#define STR_CHAR 0xE9 //混合显示16*16点阵和8*16点阵半角标准ASC2字符串,字符位处
#define STR_CHAR_lat 0xEB //混合显示16*16点阵和8*16点阵半角标准ASC2字符串,光标处
#define STR_ASC2_8_8 0xDF //显示8*8点阵标准ASC2字符串
#define STR_NUM_3_5 0xDE //显示3*5点阵数字及大写字母字符串
#define STR_ASC2_5_7 0xDB //显示5*7点阵ASC2字符串
#define STR_NUM_6_12 0xDC //显示6*12点阵双倍粗细数字串
#define STR_NUM_9_16 0xDD //显示9*16点阵三倍粗细数字串
#define STR_CHAR_cur 0xED //混合显示16*16点阵和8*16点阵半角标准ASC2字符串,光标处
#define STR_ASC2_8_8_cur 0xDA //显示8*8点阵标准ASC2字符串
#define STR_NUM_3_5_cur 0xD6 //显示3*5点阵数字及大写字母字符串
#define STR_ASC2_5_7_cur 0xD5 //显示5*7点阵ASC2字符串
#define STR_NUM_6_12_cur 0xD7 //显示6*12点阵双倍粗细数字串
#define STR_NUM_9_16_cur 0xD8 //显示9*16点阵三倍粗细数字串
#define STRCHAR_12_12 0xB9 //混合显示12*12点阵和8*12点阵半角标准ASC2字符串,光标处
/****************图形显示命名,用于图形的显示*****************/
//在相应字符位处显示字符命令 命令格式:命令 行位置(0-7) 列位置(0-F) 内容(2字节或1字节)
#define BIT_LAT 0xF2 //显示位点阵
#define CHAR_LAT 0xF3 //显示字节点阵
#define LINE 0xC5 //画线
#define BMP 0xFD //画图片
/****************屏幕控制命令,用于图形的控制*****************/
#define SCREEN_CLA 0xF4 //全屏幕清除
#define SCREEN_UP 0xF5 //全屏幕上移动
#define SCREEN_DOWN 0xF6 //全屏幕下移动
#define SCREEN_LEFT 0xF7 //全屏幕左移动
#define SCREEN_RIGHT 0xF8 //全屏幕右移动
#define INVERSE 0xFA //反白
#define CUR_SET 0xFB //光标显示设置
#define RATE_SET 0xFC //移动速度调整
#define SCREEN_ON 0xFE //屏幕开关及显示模式
#define CUR_LOC_SET 0xE4 //光标定位设置
#define LIGHT_SET 0xE5 //背光开关
#define CONTRAST_SET 0xE6 //对比度调节
/****************模块设置命令,用于模块的控制*****************/
#define POWER_DOWN 0xFF //省电模式
#define RESET 0xEF //复位命令
#define BAND_SET 0xE8 //UART波特率设置
/*********************块状图形操作命令************************/
#define BLOCK_MOVE 0xC6 //任意指定区域移位
#define BLOCK_OPRT 0xC7 //任意指定区域操作
#define BLOCK_RAY 0xC8 //任意指定区域闪烁
#define DELAY_TIME 10 //延时参数
sbit BUSY=P3^4;
sbit REQ =P3^5;
//延时函数1ms 100us
void Delay_1ms(uint j) //对于11.0592MHz时钟延时1ms
{
uchar i;
while(j--)
{
for(i=0;i<125;i++);
}
}
void Delay_100us(uint j) //对于11.0592MHz时钟延时100us
{
uchar i;
while(j--)
{
for(i=0;i<12;i++);
}
}
void send(uchar ch)
{
while(BUSY); //等待海比邻液晶空闲
P0=ch; //数据从P1口送出
REQ=0; //请求液晶读取数据
nop_();nop_();nop_();nop_(); //适当延时
nop_();nop_();nop_();nop_();
nop_();nop_();nop_();nop_();
REQ=1; //结束本次数据传送
}
void Display_Char(uchar command,uchar x,uchar y,uchar *p) //F0:相应字符位处显示字符命令 命令+x坐标+y坐标+多字节
{
send(command);
send(x);
send(y);
send(*p);
p++;
if(*p!='\0')
send(*p);
}
void Display_Byte(uchar command,uchar x,uchar y,uchar p) //0xF1:显示8*8ASCII字符 命令+x坐标+y坐标+单字节
{
send(command);
send(x);
send(y);
send(p);
}
void Display_Dot(uchar command,uchar x,uchar y) //F2:在屏幕上显示一个点 命令+x坐标+y坐标
{
send(command);
send(x);
send(y);
}
void Display_CharDot(uchar command,uchar x,uchar y,uchar num,uchar dat) //F3:显示字节点阵 命令+x坐标+y坐标+点数+数据
{
send(command);
send(x);
send(y);
send(num);
send(dat);
}
void Screen_Con(uchar command) //屏幕指令 命令(无内容)
{
send(command);
}
void Screen_Con2(uchar command,uchar dat) //屏幕指令 命令+单字节
{
send(command);
send(dat);
}
void Display_Bmp(uchar command,uchar x,uchar y,uchar len,uchar high,uchar *p) //显示图片命令 命令+x坐标+y坐标+字节长度+图片高度+图片数据
{
int tmp;
int i;
tmp=len*high;
send(command);
send(x);
send(y);
send(len);
send(high);
for(i=0;i<tmp;i++)
{
send(*p);
p++;
}
}
void Display_StrChar(uchar command,uchar x,uchar y,uchar *p) //显示混合字符串 命令+x坐标+y坐标+多字节
{
send(command);
send(x);
send(y);
while(*p!='\0')
{
send(*p);
p++;
}
send(0x00);
}
void Display_Cur(uchar command,uchar code *p)
{
send(command);
send(*p);
p++;
if(*p!='\0')
send(*p);
}
void Display_StrCur(uchar command,uchar code *p)
{
send(command);
while(*p!='\0')
{
send(*p);
p++;
}
send(0x00);
}
void Display_Lin(uchar command,uchar x,uchar y,uchar typ1,uchar typ2,uchar len) //画线
{
send(command);
send(x);
send(y);
send(typ1);
send(typ2);
send(len);
}
void Display_Mov(uchar command,uchar type,uchar x1,uchar y1,uchar x2,uchar y2) //移位
{
send(command);
send(type);
send(x1);
send(y1);
send(x2);
send(y2);
}
void Display_Con(uchar command,uchar type,uchar x,uchar y,uchar len1,uchar len2,uchar high)
{
send(command);
send(type);
send(x);
send(y);
send(len1);
send(len2);
send(high);
}
uchar * Num_to_Str(float x)
{
uchar t;
uint d=0;
uchar *p;
uchar str[5];
p = &str;
d = (uint)(x * 100); //浮点数转成整型
t = d / 100; //整数位转成ASCII码
str[0] = t + 0x30;
str[1] = 0x2e; //小数点
t = (d - t*100);
t = t / 10;
str[2] = t + 0x30; //小数点后第一位转成ASCII码
t = d % 10;
str[3] = t +0x30; //小数点后第二位转成ASCII码
str[4] = '\0'; //结束符
return p;
}
void main(void)
{
uchar *p;
float x=3.17;
Screen_Con(LIGHT_SET);Delay_1ms(DELAY_TIME);
Screen_Con(SCREEN_CLA);Delay_1ms(DELAY_TIME);
//画框
Display_Lin(0xc5,0,0,0,1,64); Delay_1ms(DELAY_TIME);
Display_Lin(0xc5,0,127,0,1,64); Delay_1ms(DELAY_TIME);
Display_Lin(0xc5,0,0,1,1,128); Delay_1ms(DELAY_TIME);
Display_Lin(0xc5,63,0,1,1,128); Delay_1ms(DELAY_TIME);
//显示汉字显示
Display_StrChar(STR_CHAR,0x01,0x01,"海比邻液晶测试");
Delay_1ms(DELAY_TIME);
Display_StrChar(STRC
评论0