📄 新建 文本文档 (2).txt
字号:
//***************************************************************************
// Create by :ZXD
// 12864 SSD1815 (串口) 16x16 字体
//***************************************************************************
// Create by :ZXD
//***************************************************************************
//80时序连线表:CPU=89C52
//CS=P2.1 RS=P2.0 SDA=P2^7 SCK=P2^6
//FOSC=11.?592MHz
//***************************************************************************
// 一行最多显示八个汉字
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define writedeviceaddress 0xa0
#define readdeviceaddress 0xa1
sbit SDA=P2^7;
sbit SCK=P2^6;
sbit sda=P2^4;
sbit scl=P2^5;
sbit RS=P2^0;
sbit CS=P2^1;
sbit BELL=P3^3;
sbit cp=P3^0;
sbit J2=P3^4;
sbit J3=P3^6;
sbit qg=P3^1;
uchar temp,key,cdbz,qian,shi,bai,ge,sdbz,qian1,bai1,shi1,ge1;
uint counter0, c1,cr4,i,g,counter1;
uchar cr0,cr1,cr2,cr3,qian2,bai2,shi2,ge2;
uchar code cd[]={/*-- 文字: 长 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x01,0x01,0x01,0xFF,0x05,0x05,0x09,0x09,0x11,0x21,0x41,0x01,0x01,0x01,0x00,
0x00,0x00,0x00,0x00,0xFF,0x02,0x84,0x48,0x20,0x10,0x08,0x0C,0x06,0x04,0x00,0x00,
/*-- 文字: 度 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x3F,0x20,0x24,0x24,0x3F,0xA5,0x65,0x25,0x3F,0x24,0x24,0x24,0x20,0x00,
0x01,0x06,0xF8,0x01,0x01,0x42,0x62,0x54,0x48,0x48,0x54,0x64,0x42,0x03,0x02,0x00,
/*-- 文字: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
uchar code zs[]={
/*-- 文字: 转 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x13,0x15,0x39,0xD7,0x11,0x11,0x11,0x02,0x12,0x1F,0xF2,0x12,0x12,0x12,0x02,0x00,
0x10,0x10,0x20,0xFF,0x20,0x20,0x00,0x40,0xD0,0x48,0x44,0x4B,0x70,0x40,0x00,0x00,
/*-- 文字: 速 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0x42,0x33,0x00,0x20,0x27,0x24,0x24,0xFF,0x24,0x24,0x24,0x27,0x20,0x00,0x00,
0x02,0x04,0xF8,0x04,0x12,0x92,0xA2,0xC2,0xFE,0x82,0xC2,0xA2,0xB2,0x02,0x02,0x00,
/*-- 文字: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
uchar code sz[]={
/*-- 文字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00,
/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
/*-- 文字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,
/*-- 文字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00,
/*-- 文字: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00,
/*-- 文字: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00,
/*-- 文字: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00,
/*-- 文字: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00,
/*-- 文字: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00,
/*-- 文字: C --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x03,0x0C,0x10,0x10,0x10,0x10,0x1C,0x00,0xE0,0x18,0x04,0x04,0x04,0x08,0x10,0x00,
/*-- 文字: M --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0x1F,0x1F,0x00,0x1F,0x1F,0x10,0x00,0x04,0xFC,0x00,0xFC,0x00,0xFC,0x04,0x00,
/*-- 文字: R --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0x1F,0x11,0x11,0x11,0x11,0x0E,0x00,0x04,0xFC,0x04,0x00,0xC0,0x30,0x0C,0x04,
/*-- 文字: / --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x01,0x06,0x18,0x20,0x00,0x06,0x18,0x60,0x80,0x00,0x00,0x00,
};
uchar code gs[]=
{/*-- 文字: 总 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x1F,0x91,0x71,0x11,0x11,0x11,0x31,0xD1,0x1F,0x00,0x00,0x00,0x00,
0x00,0x04,0x1C,0x00,0x3C,0x02,0x02,0x42,0x32,0x02,0x02,0x0E,0x20,0x18,0x0C,0x00,
/*-- 文字: 根 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x10,0x13,0xFF,0x12,0x11,0x00,0x7F,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00,
0x20,0xC0,0x00,0xFF,0x00,0x00,0x00,0xFE,0x84,0x48,0x20,0x30,0x4C,0xC6,0x04,0x00,
/*-- 文字: 数 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x49,0x2A,0x1C,0xFF,0x1C,0x2A,0x4A,0x01,0x0F,0xF8,0x48,0x08,0x0F,0x08,0x00,
0x42,0x42,0x54,0x74,0xC8,0x58,0x64,0x40,0x02,0x04,0xC8,0x30,0xCC,0x06,0x04,0x00,
};
uchar code bd[]=
{/*-- 文字: 标 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x08,0x0B,0xFF,0x0A,0x09,0x04,0x44,0x44,0x44,0x47,0x44,0x44,0x44,0x04,0x00,
0x20,0xC0,0x00,0xFF,0x00,0x90,0x20,0xC0,0x02,0x01,0xFE,0x00,0x80,0x60,0x38,0x00,
/*-- 文字: 定 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x08,0x30,0x25,0x24,0x24,0xA4,0x67,0x24,0x24,0x24,0x24,0x28,0x30,0x20,0x00,
0x02,0x04,0x18,0xE0,0x10,0x08,0x04,0xFE,0x42,0x42,0x42,0x42,0x02,0x02,0x00,0x00,
/*-- 文字: 中 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x3F,0x10,0x00,0x00,
0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0xE0,0x00,0x00,0x00,
};
uchar code kb[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
uchar code zz[]={25,50,75,100};
void delay(xms)
uint xms;
{
uint i,j;
for(i=0;i<xms;i++)
for(j=110;j>0;j--);
}
//////*========24C02读写驱动程序==============*/
void flash()
{ ; ; }
void x24c02_init() /*24c08初始化子程序*/
{scl=1;
flash();
sda=1;
flash();}
void start() /*启动I2C总线*/
{ sda=1;
flash();
scl=1;
flash();
sda=0;
flash();
scl=0;
flash();}
void stop() /*停止I2C总线*/
{sda=0;
flash();
scl=1;
flash();
sda=1;
flash();}
void writex(unsigned char j) /*写一个字节*/
{ unsigned char i,temp;
temp=j;
for (i=0;i<8;i++)
{temp=temp<<1;
scl=0;
flash();
sda=CY;
flash();
scl=1;
flash();
}
scl=0;
flash();
sda=1;
flash();
}
unsigned char readx() /*读一个字节*/
{
unsigned char i,j,k=0;
scl=0;
flash();
sda=1;
for (i=0;i<8;i++)
{ flash();
scl=1;
flash();
if (sda==1)
j=1;
else j=0;
k=(k<<1)|j;
scl=0;
}
flash();
return(k);
}
void clock() /*I2C总线时钟*/
{
unsigned char i=0;
scl=1;
flash();
while ((sda==1)&&(i<255))
i++;
scl=0;
flash();
}
/*========从24c02的地址address中读取一个字节数据==============*/
unsigned char x24c02_read(unsigned char address)
{
unsigned char i;
start();
writex(0xa0);
clock();
writex(address);
clock();
start();
writex(0xa1);
clock();
i=readx();
stop();
delay(1);
return(i);
}
/*========向24c02的address地址中写入一字节数据info==============*/
void x24c02_write(unsigned char address,unsigned char info)
{
start();
writex(0xa0);
clock();
writex(address);
clock();
writex(info);
clock();
stop();
delay(1);
}
/*========写一个字节的命令或数据==============*/
write_lcd(cmd_dat,shu)
uchar cmd_dat;
{ uint i;
RS=cmd_dat;
SCK=0;
CS=0;
for(i=0;i<8;i++)
{
SCK=0;
_nop_();
_nop_();
SDA=shu&0x80;
shu=shu<<1;
_nop_();
_nop_();
SCK=1;
_nop_();
_nop_();
}
}
/*========初始化12864==============*/
void init_1815(void)
{/* set power control register */
uchar command;
command=0x2f;
write_lcd(0,command);
/* set display on */
command=0xaf;
write_lcd(0,command);
/*CONTRAST*/
command=0xf0;
write_lcd(0,command);
/*COM OUTPUT SCAN DIRECTION*/
command=0xC8;
write_lcd(0,command);
/*SET SEG RE-MAP*/
command=0xA1;
write_lcd(0,command);
}
/*========写显示的汉字==============*/
void disp(uchar zhi ,uchar x ,uchar yl, uchar yh, uchar code *disp_buff)//x不能为4 zhi不超过8个
{
uchar page, column,disp_data; /*page address*/
uint n,i;
page=x+0xb0;
write_lcd(0,page);
column=yl; /*set column lower address*/
write_lcd(0,column);
column=yh; /*set column higher address*/
write_lcd(0,column);
for(n=0;n<zhi+1;n++)
{
for(i=0;i<16;i++) /*write 16 bytes of one character to ssd1815bt*/
{disp_data=disp_buff[n*32+i];
write_lcd(1,disp_data);
}
}
_nop_();
x--;
if(x==-1)
x=7;
page=x+0xb0;
write_lcd(0,page);
column=yl; /*set column lower address*/
write_lcd(0,column);
column=yh; /*set column higher address*/
write_lcd(0,column);
for(n=0;n<zhi+1;n++) /*one page need to write 8 charater*/
{
for(i=0;i<16;i++) /*write 16 bytes of one character to ssd1815bt*/
{disp_data=disp_buff[16+n*32+i];
write_lcd(1,disp_data);
}
}
_nop_();
_nop_();
}
/*========写数字==============*/
void dispdata(uchar x ,uchar yl, uchar yh, uchar shuzi)
{
uchar page, column,disp_data; /*page address*/
uint i;
page=x+0xb0;
write_lcd(0,page);
column=yl; /*set column lower address*/
write_lcd(0,column);
column=yh; /*set column higher address*/
write_lcd(0,column);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -