通过这段时间的学习,终于是把智能小车的循迹、跟随、避障业务实现出来。那么通过写下这篇文章,将自己在这个过程的心得、组装智能小车以及通过代码的编写实现各种业务的心路历程记录下来。
首先,这是主函数段的代码:
#include "reg52.h"
#include "hc04.h"
#include "sg90.h"
#include "delay.h"
#include "motor.h"
#include "oled.h"
#define MIDDLE 0
#define LEFT 1
#define RIGHT 2
#define BZ 1
#define XJ 2
#define GS 3
sbit A25 = P1^5;
sbit A26 = P1^6;
sbit A27 = P1^7;
sbit leftsensorX = P2^7;
sbit rightsensorX = P2^6;
sbit leftsensorG = P2^5;
sbit rightsensorG = P2^4;
int mode = 0;
char dir;
double dis_middle;
double dis_left;
double dis_right;
void bizhang_task()
{
if(dir != MIDDLE)
{
sg90_middle();
dir = MIDDLE;
Delay450ms();
}
dis_middle = get_distance();
if(dis_middle >35 )
{
goforward();//Ç°½ø
}
else if(dis_middle < 10)
{
goback();
Delay100ms();
}
else
{
stop();
sg90_goright();
dis_right = get_distance();
dir = LEFT;
Delay450ms();
sg90_middle();
Delay450ms();
sg90_goleft();
dis_left = get_distance();
dir = RIGHT;
Delay450ms();
if(dis_right > dis_left)
{
goright();
Delay200ms();
stop();
}
if(dis_right < dis_left)
{
goleft();
Delay200ms();
stop();
}
}
}
void gensui_task()
{
if(leftsensorG == 0 && rightsensorG == 0)
{
goforward();
}
if(leftsensorG == 0 && rightsensorG == 1)
{
goleft();
}
if(leftsensorG == 1 && rightsensorG == 0)
{
goright();
}
if(leftsensorG == 1 && rightsensorG == 1)
{
stop();
}
}
void xunji_task()
{
if(leftsensorX == 0 && rightsensorX == 0)
{
goforward();
}
if(leftsensorX == 0 && rightsensorX == 1)
{
goleft();
}
if(leftsensorX == 1 && rightsensorX == 0)
{
goright();
}
if(leftsensorX == 1 && rightsensorX == 1)
{
stop();
}
}
void main()
{
Timer0_init();
Timer1_init();
sg90_middle();
dir = MIDDLE;
Delay2000ms();
oled_init();
oled_clear();
oled_show_str(2,2,"----ready----");
while(1)
{
if(A25 == 1 && A26 == 1 && A27 == 0)
{
if(mode != XJ)
{
oled_clear();
oled_show_str(2,2,"----xunji----");
//mode = XJ;
}
mode = XJ;
xunji_task();
}
if(A25 == 0 && A26 == 1 && A27 == 1)
{
if(mode != GS)
{
oled_clear();
oled_show_str(2,2,"----gensui----");
// mode = GS;
}
mode = GS;
gensui_task();
}
if(A25 == 1 && A26 == 0 && A27 == 1)
{
if(mode != BZ)
{
oled_clear();
oled_show_str(2,2,"----bizhang----");
}
mode = BZ;
bizhang_task();
}
}
}
将三个业务分别用pin脚进行控制,用SU-03语音模块。然后用SSD1306OLED屏来显示当前态。这个就是主函数段的代码。接下来我们就各模块的分文件进行讲解。SU-03语音模块买回后根据厂家给的网址去配置。
1.hc04模块
这是超声波测距模块,主要由trig和echo进行工作。trig置高电平并向echo发送脉冲,echo接受到脉冲后向置高电平并向外发送超声波,当超声波返还回来,echo置低电平。这是超声波的工作原理。基于此,我们通过手动计时。从而得到超声波往返的时间,用公式dis=time*340/2得到距离。
#include "reg52.h"
#include "delay.h"
sbit Trig = P2^3;
sbit Echo = P2^2;
void startHC()
{
Trig = 0;
Trig = 1;
Delay10us();
Trig = 0;
}
void Timer1_init()
{
TMOD &= 0x0F;
TMOD |= 0x10;
TH1 = 0x00;
TL1 = 0;
}
double get_distance()
{
double time;
TH1 = 0;
TL1 = 0;
while(1)
{
startHC();
while(Echo == 0);
TR1 = 1;
while(Echo == 1);
TR1 = 0;
time = (TH1*256+TL1)*1.085;
return 0.017*time;
}
}
2.sg90舵机
sg90舵机模块,通过占空比得到舵机转动的角度。设置一个0.5ms的定时器,PWM波的一个周期是20ms,设置占空比,得到舵机转动角度。
#include "reg52.h"
sbit sg90_con = P1^1;
int cnt = 0;
int angle;
void Timer0_init()
{
TMOD &= 0xF0;
TMOD |= 0x01;
TH0=0xFE;
TL0=0x33;
TR0 = 1;
TF0 = 0;
ET0 = 1;
EA = 1;
}
void sg90_goright()
{
angle = 1;
cnt = 0;
}
void sg90_middle()
{
angle = 3;
cnt = 0;
}
void sg90_goleft()
{
angle = 5;
cnt = 0;
}
void Timer0handle() interrupt 1
{
cnt++;
TH0=0xFE;
TL0=0x33;
if(cnt<angle)
{
sg90_con = 1;
}
else
{
sg90_con = 0;
}
if(cnt == 40)//20ms
{
cnt = 0;
sg90_con = 1;
}
}
3.motor电机驱动模块
电机驱动模块,顾名思义,驱动电机正转以及反转达到轮子向前或向后。
#include "reg52.h"
sbit right_con1A = P3^7;
sbit right_con1B = P3^3;
sbit left_con1A = P3^4;
sbit left_con1B = P3^5;
void goforward()
{
right_con1A = 0;
right_con1B = 1;
left_con1A = 0;
left_con1B = 1;
}
void goback()
{
right_con1A = 1;
right_con1B = 0;
left_con1A = 1;
left_con1B = 0;
}
void goleft()
{
right_con1A = 0;
right_con1B = 1;
left_con1A = 0;
left_con1B = 0;
}
void goright()
{
right_con1A = 0;
right_con1B = 0;
left_con1A = 0;
left_con1B = 1;
}
void stop()
{
right_con1A = 0;
right_con1B = 0;
left_con1A = 0;
left_con1B = 0;
}
4.SSD1306OLED显示屏
这是一个基于IIC协议下的外设,需要我们能看懂它的说明书。内容很复杂,这里只能简单说明一下。首先是开始信号、结束信号以及应答信号,这三个是IIC总线在数据传输过程中的三种信号。都是需要我们根据时序图,手动置“1”和“0”。应答信号表示数据有无接受成功。
然后,就是数据的发送。根据该时序图,我们进行数据发送。这里,我们需要注意避免传输的数据与上面开始或结束的时序相同。所以我们只能在scl=0时发送数据。数据是一位一位发送,发送八次,共一字节,高位先入。
接着,就是外设SSD1306的代码编写。SSD1306区别写入的位置以及写入该位置的内容。具体的内容在SSD1306的手册里有写,根据该手册我们进行编写。还有关于SSD1306的初始化也是在手册里有。
最后,SSD1306是一个128x64的点阵图。我们需要显示字或图就需要设置模式:页地址模式,水平模式、垂直模式。默认是页寻址模式。这里我们用的是页寻址。页模式分8页,每页8行。正好存放一个字节。记得每次用完后清零,不然会有雪花。当然,我们为了可以动态显示,我们就需要一个总的OLED库,以便在需要时提取。
设置页数:2的3次方等于8。从0-7页。
#include "reg52.h"
#include "delay.h"
#include "intrins.h"
#include "oledfront.h"
sbit scl = P0^1;
sbit sda = P0^3;
void IIC_start_condition()
{
scl = 0;
sda = 1;
scl = 1;
Delay5us();
Delay5us();
sda = 0;
Delay5us();
Delay5us();
}
void IIC_end_condition()
{
scl = 0;
sda = 0;
scl = 1;
Delay5us();
Delay5us();
sda = 1;
Delay5us();
Delay5us();
}
char IIC_ack_condition()
{
char flag;
sda = 1;
_nop_();
scl = 1;
_nop_();
flag = sda;
Delay5us();
Delay5us();
scl = 0;
Delay5us();
Delay5us();
return flag;
}
void IIC_sendbyte(char data_send)
{
int i;
for(i=0;i<8;i++)
{
scl = 0;
sda = data_send & 0x80;
Delay5us();
Delay5us();
scl = 1;
Delay5us();
Delay5us();
scl = 0;
_nop_();
data_send = data_send << 1;
}
}
void oled_write_cmd(char data_cmd)
{
IIC_start_condition();
IIC_sendbyte(0x78);
IIC_ack_condition();
IIC_sendbyte(0x00);
IIC_ack_condition();
IIC_sendbyte(data_cmd);
IIC_ack_condition();
IIC_end_condition();
}
void oled_write_data(char data_data)
{
IIC_start_condition();
IIC_sendbyte(0x78);
IIC_ack_condition();
IIC_sendbyte(0x40);
IIC_ack_condition();
IIC_sendbyte(data_data);
IIC_ack_condition();
IIC_end_condition();
}
void oled_init()
{
oled_write_cmd(0xAE);
oled_write_cmd(0x00);
oled_write_cmd(0x10);
oled_write_cmd(0x40);
oled_write_cmd(0xB0);
oled_write_cmd(0x81);
oled_write_cmd(0xFF);
oled_write_cmd(0xA1);
oled_write_cmd(0xA6);
oled_write_cmd(0xA8);
oled_write_cmd(0x3F);
oled_write_cmd(0xC8);
oled_write_cmd(0xD3);
oled_write_cmd(0x00);
oled_write_cmd(0xD5);
oled_write_cmd(0x80);
oled_write_cmd(0xD8);
oled_write_cmd(0x05);
oled_write_cmd(0xD9);
oled_write_cmd(0xF1);
oled_write_cmd(0xDA);
oled_write_cmd(0x12);
oled_write_cmd(0xDB);
oled_write_cmd(0x30);
oled_write_cmd(0x8D);
oled_write_cmd(0x14);
oled_write_cmd(0xAF);
}
void oled_clear()
{
int i,j;
for(i=0;i<8;i++)
{
oled_write_cmd(0xB0+i);
oled_write_cmd(0x00);
oled_write_cmd(0x10);
for(j=0;j<128;j++)
{
oled_write_data(0);
}
}
}
void oled_show_char(char row,char col,char oledchar)
{
unsigned int i;
oled_write_cmd(0xB0+(row*2-2));
oled_write_cmd(0x00+(col&0x0F));
oled_write_cmd(0x10+(col>>4));
for(i=((oledchar-32)*16);i<((oledchar-32)*16+8);i++)
{
oled_write_data(F8X16[i]);
}
oled_write_cmd(0xB0+(row*2-1));
oled_write_cmd(0x00+(col&0x0F));
oled_write_cmd(0x10+(col>>4));
for(i=((oledchar-32)*16+8);i<((oledchar-32)*16+8+8);i++)
{
oled_write_data(F8X16[i]);
}
}
void oled_show_str(char row,char col, char *str)
{
while(*str != '\0')
{
oled_show_char(row,col,*str);
str++;
col+=8;
}
}
OLED库:
const unsigned char code F8X16[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};
以上就是所有分文件的代码。还有一个延迟函数的分文件就没必要展示了。