HGSC128643 I2C串口测试程序如下:
#include<reg51.h>
#include<intrins.h>
#include<string.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define I2C //I2C通信
#ifdef I2C
sbit SCL = P3^1;
sbit SDA = P3^3;
sbit BUSY = P3^4;
sbit REST = P3^5;
#endif
#define WD 128 /* 显示区宽度 */
#define HD 64 /* 显示区高度 */
#define clear 0x00 /* Clear Display */
#define time 1000 /* 1000延时 1.03895500 s */
#define c_time 50
uchar code CHHZ1[]={"清达光电技术公司"};
uchar code CHHZ2[]={"一二三四五六七八"};
uchar code CHHZ3[]={"01234567"};
uchar code CHHZ4[]={"abcd,。+-"};
uchar code CHHZ21[]={" ! #$%&'()*=,-./"};
uchar code CHHZ22[]={"0123456789:;<=>?"};
uchar code CHHZ23[]={"@ABCDEFGHIJKLMNO"};
uchar code CHHZ24[]={"PQRSTUVWXYZ[ ]^_"};
uchar code CHHZ25[]={"`abcdefghijklmno"};
uchar code CHHZ26[]={"pqrstuvwxyz{|}~ "};
uchar code CHHZ27[]={0x5b,0x5c,0x5d,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e};
/******** 西文字符库 *******/
/*--
提取点阵方向:横向(先左->右, 再上->下)
--*/
uchar code CTAB[][16]={
/*-- 文字: H --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0x42,0x00,0x00,
/*-- 文字: G --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x80,0x8E,0x82,0x82,0x82,0x46,0x3A,0x00,0x00,
/*-- 文字: S --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x38,0x44,0x82,0x80,0x60,0x18,0x04,0x82,0x82,0x44,0x38,0x00,0x00,
/*-- 文字: D --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0xF8,0x84,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x84,0xF8,0x00,0x00,
/*-- 文字: O --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
/*-- 文字: T --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
/*-- 文字: 1 --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x10,0x30,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
/*-- 文字: 2 --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x02,0x04,0x08,0x10,0x20,0x40,0x7E,0x00,0x00,
/*-- 文字: 8 --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x22,0x1C,0x22,0x41,0x41,0x22,0x1C,0x00,0x00,
/*-- 文字: 6 --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x1C,0x22,0x42,0x40,0x5C,0x62,0x42,0x42,0x42,0x22,0x1C,0x00,0x00,
/*-- 文字: 4 --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x02,0x06,0x0A,0x12,0x12,0x22,0x42,0x7F,0x02,0x02,0x02,0x00,0x00,
/*-- 文字: 6 --*/
/*-- 黑体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x1C,0x22,0x42,0x40,0x5C,0x62,0x42,0x42,0x42,0x22,0x1C,0x00,0x00,
};
/******** 中文字符库 *******/
/*--
提取点阵方向:横向(先左->右, 再上->下)
--*/
uchar code CCTAB[][32]={
/*-- 文字: 清 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x00,0xE0,0x33,0x80,0x10,0xE0,0x03,0x80,0x40,0xFC,0x2F,0x00,0x01,0xE0,
0x12,0x20,0x13,0xA0,0x22,0x20,0x63,0xA0,0x42,0x20,0x02,0x60,0x00,0x20,0x00,0x00,
/*-- 文字: 达 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x40,0x00,0x40,0x20,0x40,0x10,0x40,0x00,0x78,0x03,0xC0,0x70,0x40,0x10,0xA0,
0x21,0x10,0x12,0x08,0x10,0x00,0x7C,0x00,0x03,0xFE,0x00,0x38,0x00,0x00,0x00,0x00,
/*-- 文字: 光 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0x20,0x09,0x60,0x05,0x80,0x01,0x00,0x03,0xF0,0x3C,0x80,
0x04,0x80,0x04,0x80,0x08,0x82,0x10,0x82,0x20,0x82,0x40,0x7C,0x00,0x00,0x00,0x00,
/*-- 文字: 电 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xE0,0x3E,0x20,0x22,0x20,0x23,0x20,0x2E,0x20,
0x13,0xC0,0x1E,0x00,0x02,0x04,0x02,0x04,0x02,0x04,0x01,0xF8,0x00,0x00,0x00,0x00,
/*-- 文字: 技 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x70,0x1D,0xC0,0x70,0x40,0x10,0x70,0x19,0x90,
0x30,0x20,0xD1,0x20,0x10,0xC0,0x11,0x20,0x36,0x18,0x10,0x0E,0x00,0x00,0x00,0x00,
/*-- 文字: 术 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0x00,0x02,0x20,0x02,0x10,0x02,0x00,0x03,0xE0,0x3E,0x00,0x03,0x00,0x06,0x80,
0x0A,0x40,0x12,0x20,0x22,0x18,0x42,0x0E,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
/*-- 文字: 公 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x03,0x00,0x00,0x80,0x08,0x80,0x08,0x40,0x10,0x20,0x10,0x18,0x22,0x0E,
0x42,0x00,0x84,0x80,0x08,0x40,0x11,0xE0,0x1E,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 司 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x01,0xF0,0x0E,0x10,0x00,0x10,0x07,0x10,0x18,0x10,0x03,0x10,0x3D,0x10,
0x21,0x10,0x23,0x10,0x1C,0x10,0x00,0x10,0x00,0x50,0x00,0x20,0x00,0x00,0x00,0x00,
/*-- 文字: 液 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x00,0x40,0x30,0x00,0x10,0xF0,0x07,0x00,0x62,0x40,0x22,0x70,0x04,0x90,
0x2D,0x50,0x34,0xA0,0x24,0x40,0x44,0xB0,0x47,0x1E,0x04,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 晶 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0xC0,0x06,0x40,0x04,0x40,0x07,0x40,0x04,0x40,0x07,0xC0,0x00,0x00,0x00,0x78,
0x3C,0x88,0x24,0x88,0x34,0xE8,0x24,0x88,0x3C,0xF8,0x24,0x88,0x00,0x00,0x00,0x00,
/*-- 文字: 显 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x01,0xE0,0x1E,0x20,0x11,0xA0,0x0E,0x20,0x09,0xC0,0x0E,0x00,0x04,0x90,
0x04,0x90,0x24,0xA0,0x14,0xC0,0x04,0x80,0x07,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 示 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x60,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0xFC,0x7F,0x00,0x01,0x00,
0x11,0x20,0x11,0x18,0x31,0x08,0x21,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 模 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x10,0x90,0x10,0xFE,0x11,0x90,0x1C,0x78,0x71,0x88,0x11,0x68,0x19,0x08,
0x34,0xF0,0x50,0x4E,0x93,0xF0,0x10,0x60,0x10,0x90,0x11,0x08,0x16,0x06,0x00,0x00,
/*-- 文字: 块 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0xF0,0x1B,0x90,0x70,0xA0,0x10,0xFC,
0x1B,0x80,0x30,0x80,0xC1,0x40,0x02,0x20,0x04,0x18,0x18,0x0E,0x00,0x00,0x00,0x00,
};
/********* 时间延时程序 *********/
void delay(uint t) /* 1.02500 ms */
{ uint i,j;
for(i=t;i>0;i--)
for(j=125;j>0;j--);
}
#ifdef I2C
/***** start ******/
void start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
/***** stop ******/
void stop()
{
SDA=0;
SCL=1;
SDA=1;
SCL=0;
}
/***** ack ******/
void ack()
{
SDA=1;
SCL=1;
// while(SDA);
SCL=0;;
}
/******** 8bits写程序 ********/
void write_8bits(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
if(dat&0x80)
SDA=1;
else
SDA=0;
SCL=1;
SCL=0;
dat<<=1;
}
}
/******** 向I2C口发送一个字符 ********/
void write(uchar dat)
{
while(BUSY==1);
start();
write_8bits(0xa0); //Slave Address:a0
ack();
write_8bits(dat);
ack();
stop();
}
#endif
/******** 清屏显示程序 ********/
void clr(void)
{
write(0x58);
}
/******** 字符显示程序 ********/
void chhzes(uchar x,uchar y,uchar m,uchar n,uchar k,uchar rev,uchar *s)
{
uchar i;
uint j;
write(0x5A);
write(x); //垂直地址
write(y); //水平地址
write(m); //字符垂直点行数
write(n); //字符水平点列数
write(k); //字符个数
write(rev); //rev=0:正常显示;rev=1:反白显示
for(i=0;i<k;i++)
for(j=0;j<(n+7)/8*m;j++)
write(*s++);
}//*/
/******** 自带字符显示程序 ********/
void INTER_chhzes(uchar x,uchar y,uchar m,uchar n,uchar k,uchar rev,uchar *s)
{
uchar i;
write(0x5B);
write(x); //垂直地址
write(y); //水平地址
write(m); //字符垂直点行数
write(n); //字符水平点列数
write(k); //字符个数
write(rev); //rev=0:正常显示;rev=1:反白显示
while(*s!='\0')
write(*s++);
}//*/
/******** 图片显示程序 ********/
void graph(uchar x,uchar y,uchar m,uchar n,uchar *s)
{
uint i;
write(0x5D);
write(x); //垂直地址
write(y); //水平地址
write(m); //图片垂直点行数
write(n); //图片水平点列数
for(i=0;i<n/8*m;i++)
write(*s++);
}
/******** 绘点显示程序 ********/
void point(uchar x,uchar y,uchar z)
{
write(0x60);
write(x); //垂直地址
write(y); //水平地址
write(z); //绘点或消点
}
/******** 画任意直线显示程序 ********/
void show_line(uchar x1,uchar y1,uchar x2,uchar y2,uchar z)
{
write(0x61);
write(x1); //垂直起始地址
write(y1); //水平起始地址
write(x2); //垂直结束地址
write(y2); //水平结束地址
write(z); //绘点或消点
}
/******** 画矩形方框显示程序 ********/
void block(uchar x1,uchar y1,uchar x2,uchar y2,uchar z)
{
write(0x62);
write(x1); //垂直起始地址
write(y1); //水平起始地址
write(x2); //垂直结束地址
write(y2); //水平结束地址
write(z); //绘点或消点
}
/******** 画矩形方块显示程序 ********/
void matrix(uchar x1,uchar y1,uchar x2,uchar y2,uchar z)
{
write(0x63);
write(x1); //垂直起始地址
write(y1); //水平起始地址
write(x2); //垂直结束地址
write(y2); //水平结束地址
write(z); //绘点或消点
}
/******** 画圆显示程序 ********/
void draw_circle(uchar x,uchar y,uchar r,uchar fil,uchar z)
{
write(0x64);
write(x); //垂直圆心地址
write(y); //水平圆心地址
write(r); //半径
write(fil); //fil=0:空心圆;fil=1:实心圆
write(z); //绘点或消点
}
/******** 光标显示程序 ********/
void cursor(uchar x,uchar y,uchar n,uchar z)
{
write(0x70);
write(x); //垂直地址
write(y); //水平地址
write(n); //光标水平点列数
write(z); //绘点或消点
}
/******** 初始化程序 ********/
void set()
{
delay(100);
REST=0;
delay(5);
REST=1;
delay(100);
write(0x50); //Display OFF
write(0x52); //Set Contrast Current
write(0x40);
write(0x51); //Display ON
// clr(); //清屏
// clr(); //清屏
// delay(1); //*/
}
/********* 主函数 *********/
void main()
{
uchar i,j;
set(); //液晶屏初始化
while(1)
{
clr(); //清屏
point(2,2,1);point(2,125,1);point(61,2,1);point(61,125,1); //绘点
matrix(16,16,16,64,1); //直线
matrix(32,40,56,40,1);
matrix(24,90,40,106,1); //方块
block(0,0,63,127,1); //方框
delay(time); //*/
clr(); //清屏
draw_circle(32,100,25,0,1); //空心圆
draw_circle(32,100,20,1,1); //实心圆
matrix(8,8,55,55,1); //方块
delay(time); //*/
clr(); //清屏
show_line(0,0,63,127,1);
show_line(0,127,64,0,1);
block(0,0,63,127,1); //方框
delay(time); //*/
clr(); //清屏
chhzes(0,0,16,16,8,0,CCTAB); //清达光电技术公司
chhzes(16,32,16,16,4,0,CCTAB+10); //显示模块
chhzes(32,0,16,8,8,1,CTAB+3); //DOT12864
chhzes(48,1,16,8,8,0,CTAB+3); //DOT12864
delay(time); //*/
for(i=0;i<64;i+=16) //光标显示
for(j=0;j<128;j+=16)
{
cursor(i+15,j,16,1);
delay(c_time);
cursor(i+15,j,16,0);
} //*/
block(0,0,63,127,1); //方框
delay(time); //*/
clr(); //清屏
INTER_chhzes(0,0,16,16,8,0,CHHZ1);
INTER_chhzes(16,0,16,16,8,0,CHHZ2);
INTER_chhzes(32,0,16,16,8,0,CHHZ3);
INTER_chhzes(48,0,16,16,8,1,CHHZ4);
delay(time); //*/
clr(); //清屏
INTER_chhzes(0,0,16,8,16,0,CHHZ21);
INTER_chhzes(16,0,16,8,16,0,CHHZ22);
INTER_chhzes(32,0,16,8,16,0,CHHZ23);
INTER_chhzes(48,0,16,8,16,0,CHHZ24);
delay(time);
clr(); //清屏
INTER_chhzes(0,0,16,8,16,0,CHHZ25);
INTER_chhzes(16,0,16,8,16,0,CHHZ26);
INTER_chhzes(48,0,16,8,16,0,CHHZ27);
delay(time); //*/
clr(); //清屏
INTER_chhzes(0,0,8,8,16,0,CHHZ21);
INTER_chhzes(8,0,8,8,16,0,CHHZ22);
INTER_chhzes(16,0,8,8,16,0,CHHZ23);
INTER_chhzes(24,0,8,8,16,0,CHHZ24);
INTER_chhzes(32,0,8,8,16,0,CHHZ25);
INTER_chhzes(40,0,8,8,16,0,CHHZ26);
INTER_chhzes(56,0,8,8,16,0,CHHZ27);
delay(time); //*/
}
// delay(time);*/
}