资源描述
[信息与通信]课程设计说明书_机油压力检测系统(完整版)
(文档可以直接使用,也可根据实际需要修改使用,可编辑 欢迎下载)
课程设计说明书
课 程 名 称: 微机检测系统设计
课 程 代 码: 8416671
题 目: 机油压力检测系统
学院(直属系) : 交通与汽车工程学院
年级/专业/班: 2021级车辆工程汽电1班
学 生 姓 名: 卢汉
学 号: 332021030606004
指 导 教 师: 唐岚 彭忆强 赵玲
开 题 时 间: 2021年 11 月 1 日
完 成 时 间: 2021 年 11 月 15日
目 录
摘要 ……………………………………………………………………………………………3
1 引言 …………………………………………………………………………………………4
1.1 问题提出 …………………………………………………………………………………4
1.2 任务与分析 ………………………………………………………………………………4
2 方案设计 ……………………………………………………………………………………5
2.1系统方案设计论证……………………………………………………………………5
系统的控制方案设计……………………………………………………………………5
2.2 最终设计方案总体设计框图 ……………………………………………………………5
3 系统硬件设计 ………………………………………………………………………………6
3.1 AT89C51单片机 …………………………………………………………………………6
AT89C51单片机介绍 ……………………………………………………………………6
选用AT89C51单片机原因………………………………………………………………7
3.2 时钟电路 …………………………………………………………………………………7
3.3 复位电路 …………………………………………………………………………………7
3.4 PG160128A显示电路………………………………………………………………………8
3.5 光电报警电路……………………………………………………………………………8
3.6 A/D转换电路……………………………………………………………………………9
4系统软件设计 ………………………………………………………………………………10
4.1主程序框图………………………………………………………………………………10
4.2 蜂鸣器子程序框图…………………………………………………………………13
4.2 显示子程序框图 ……………………………………………………………11
5 系统调试过程 ………………………………………………………………………………12
5.1原理图和印制板图绘制和检查 …………………………………………………………12
在protel99se绘制原理图并进行相应的ERC检查……………………………15
在protel99se生成PCB图………………………………………………………16
5.2 Keil程序调试 …………………………………………………………………………17
5.3 Proteus仿真调试 ………………………………………………………………………14
结论……………………………………………………………………………………………18
致谢 ……………………………………………………………………………………………19
参考文献 ………………………………………………………………………………………20
附录一 程序源代码 …………………………………………………………………………21
附录二 电路原理图和PCB图…………………………………………………………………38
附录三 Proteus仿真截图……………………………………………………………………39
摘 要
本课程设计是基于8051单片机为控制核心的机油压力检测系统。在硬件电路部分,此设计的采用8051单片机,ADC0832转换器,报警电路。本设计先测量出机油压力的电信号,然后通过单片机对所测出的油压值是否在规定范围内进行判断,进而达到报警的目的,并通过LCD显示压力数值。
关键词:8051单片机、机油压力检测、LCD显示、报警
1 引 言
1.1 问题的提出
随着汽车电子化程度越来越高,通过增加更多的电子装置,使汽车工作在更好的状态,充分发挥汽车的性能,保证汽车的安全性,减少汽车故障率,增加汽车寿命等。由于发动机机油压力与发动机工作状况的好坏直接相关,所以如何监测机油压力对发动机有很大的意义。
1.2任务与分析
本设计的主要任务就是利用单片机实现汽车机油压力的检测功能。检测压力检测系统所具有的功能如下:
汽车机油压力检测系统是通过声音和文字信息让驾驶员了解机油压力的状态。该系统利用8051单片机作为微控制器,通过压变式压力传感器对机油压力进行信号检测,传感器输出信号经数字滤波及A/D转换后输入ECU,经计算后在LED屏幕上显示机油压力,同时将信号与设定的信号范围进行比较,当不正常区间时报警电路则输出语音报警信号,并通过报警线点亮报警指示灯。
2方案设计
2.1 系统方案设计论证
系统的控制方案设计
检测压力传感器MPX4250检测到压力信号后,通过ADC0832转换后送入AT89C51单片机,单片机对数据进行处理,显示等。
2.2最终设计方案总体设计框图
机油压力
传感器
A/D转换器
8051
单片机
LCD显示机油压力值
压力超过预定值,系统报警
图2.1 系统总体设计框图
本方案是由压力传感器、A/D模数转换器、AT89C51单片机、LED显示电路以及相应的报警设备所组成。机油压力传感器采集汽车机油的压力信号,将其转换为相对应的电压信号,将电压信号输送到A/D模数转换器转换为数字信号,并送入到AT89C51单片机中,经过单片的数字滤波处理后,在通过PG160128的驱动程序,将其显示在LED显示器上。如果机油压力超过预设范围时,单片机会输出控制信号用以驱动相应的声光报警电路,以提示用户机油压力不在正常范围之内。
3 系统硬件设计
3.1 AT89C51单片机
3.1.1 AT89C51单片机介绍
(1)8051单片机
在此单片机上集成了微处理器(CPU),内部数据存储器(RAM),以及输入输出端口。8051单片机采用40只引脚的双列直插封装方式,各引脚的功能如下:
①时钟引脚X1及 X2:用于接晶体振荡器,此次设计用的晶振频率为6MHZ。
②RESET脚:是复位信号输入端,高电平有效。
③ALE脚:地址锁存允许信号,用于锁存单片机输出的地址信号,高电平有效
④PSEN脚:程序存储器输出控制端,在单片机访问外部程序存储器时,此引脚输出的负脉冲作为读外部程序存储器的选通信号,接至程序存储器的OE端。低电平有效。
⑤EA脚:其功能为内外程序存储器选择控制端。当EA为高电平时,单片机访问内部程序存储器,当EA为低电平时,单片机直接访问片外程序存储器。本设计用的是8031,由于8031内部无程序存储器,所以此引脚应接地。低电平有效。
图3-1 8951单片机
⑥I/O口引脚:共4个,分别是P0、P1、P2、P3,均
为8位口。这4个I/O口可分别作为基本的Input、Output端口。其中P0口可作为数据总线和地址总线(低8位)分时复用的端口,P2口可作为地址总线的高8位,即P0口和P2口地起构成16位地址总线,可供寻址的地址范围是:64KB。P3口具有第二功能,即可以产生中断,定时计数等功能。
⑦RD、WR引脚:为读和写选通信号,RD用于将单片机的数据写入外设中,WR用于从外设中读取数据。低电平有效
AT89C51系列单片机都是以8031为核心发展起来的,具有和51系列单片机及基本结构和软件特征,其内部结构如图3-2所示:
振荡器及
定时电路
AT89C51CPU
4K字节
ROM
128字节
RAM
2个16位定时器/计数器
64K总线扩展控制
可编程I/O
可编程
串行口
图3-2 AT89C51单片机框图
3.1.2 选用AT89C51单片机原因
在课程设计里所需外围电路简单,在设计里面使用的引脚较少,占用的资源也比较少。而且该芯片是以AT89C51为核心,性能价格比高,应用成熟,且对其内部结构较为熟悉,芯片功能够用而且适用,从而选用AT89C51单片机作为主控芯片。
3.2 时钟电路
本设计采用内部时钟方式的电路。 AT89C51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成了一个稳定的自激振荡器。电路中的电容C1和C2典型值通常选择为33pF左右。晶体的振荡频率的范围通常是在1.2MHZ~12MHZ之间。晶体的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。.
图3-3 时钟电路
3.3 复位电路
复位电路通常采用上电自动复位和按钮复位两种方式。本次设计采用上电复位电路。上电复位电路是在上电瞬间来实现的,其电路如图3-4所示。上电时, RESET端维持两个机器周期的高电平实现复位。
图3-4 复位电路
3.4 PG160128A显示电路
PG160128A是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及格160×128全点阵液晶显示器组成。可完成图形显示,也可以显示10×8个(16×16点阵)汉字。
主要技术参数和性能:模块内自带-15负压,用于LCD的驱动电压
1. 电源VDD:+5V;
2.显示内容:160(列)×128(行)点
3.全屏幕点阵
4.十三种指令
5.与CPU接口采用8位数据总线并行输入输出
6.占空比1/128
7.工作温度:-10℃∽+55℃,存储温度:-20℃∽+70℃
这里通过PG160128A来显示相关信息。
图3-5 显示电路
3.5 光电报警电路
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛用于计算机、打印机、复印机、报警器、电子玩具、 机、定时器等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器也分为有源蜂鸣器和无源蜂鸣器。
通过三极管放大电流驱动蜂鸣器发出报警声。通过LED发光二极管作为灯光报警。
图3-6 光电报警电路
3.6 A/D转换电路
ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832 可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。
这里通过ADC0832将压力传感器输出的电压信号转换为数字信号,并送入到单片机中进行处理。
图3-7 A/D转换电路
4 系统软件设计
4.1主程序框图
(1)主程序流程框图如下: (2)信号采集子程序框图如下:
开始
置数据区首地址
A/D转换开始
等待转换
储存,返回
图4-2 信号采集程序
设置采集个数
否
是
开始
信号采集
数字滤波开始
求出机油压力值
LCD显示数值
图4-1主程序流程框图
是否超出
预设范围?
报警提示
结束
(3) 数字滤波流程框图如下: (4) 报警、显示流程框图如下:
中断开始
设置数据存储区首址
设置采集数据个数
对数据进行处理
恢复现场
返回
图4-3 数字滤
波流程框图
开始
是否达到一次持续报警声的周期个数
蜂鸣器连接的IO口电平取反
返回
重装定时器初值
延时一次
重装持续周期数
NO
YES
图4-4报警流程框图
说明:
程序首先采集输入信号,然后通过数字滤波消除干扰,经过程序的计算求出压力的值,并送入显示设备,驱动显示设备显示压力值,并判断压力值是否为正常范围内,如果是则驱动光电报警电路,否则继续采集信号。
通过定时器中断,以达到一定的延时时间,每次对蜂鸣器连接的IO口取相反电平,以形成方波电路,并在达到一定的次数后延时一次,以达到嘀、嘀的效果的报警声。
4.2显示子程序框图
开始
初始化
调用显示函数
返回
图4-5 显示子程序流程图
5 系统调试过程
通过上面的设计,设计已经基本完成。下面主要实现Altium Designer的原理图、印制板图的绘制和做相关检测,对Keil进行相应的检查和调试,并用Proteus对所设计系统进行仿真。
5.1原理图和印制板图绘制和检查
在protel99se绘制原理图并进行相应的ERC检查
打开protel99ser,绘制系统的原理图。原理图包括能输出时钟电路,驱动电路以及复位电路。绘制完成的原理图如图5-1:
图5-1 原理图的绘制
绘制完原理图之后,对原理图进行编译检测。
ERC检测结果如图5-2,无错误:
图5-2 编译检查
5.1.2 在PROTEL99SE生成PCB图
在创建完原理图后,对各元器件的引脚进行封装,在原理图中创建网络表(NET),然后再PROTEL99S中新建PCB ,对于生成的PCB图中各器件进行调整,并布线,最终生成PCB图。结果如图5-3所示:
图5-3 生成PCB图
5.2 Keil程序调试
程序调试结果如图5-4所示:
creating hex file from "机油压力检测系统"...
"机油压力检测系统" - 0 Error(s), 0 Warning(s).
图5-4 程序调试结果
5.3 Proteus仿真调试
在Proteus中建立仿真图。按下开始仿真按钮,开始进行仿真实验,结果如图5-5,图5-6,图5-7所示:
图5-5 Proteus仿真图(正常运行)
图5-6 Proteus仿真图(压力过高)
图5-7 Proteus仿真图(压力过低)
仿真电路图中实现对压力检测的控制,输出到PG160128A显示。当输入信号大于130或者输入信号小于100时,报警灯会被点亮,同时蜂鸣器就会报警。仿真虽然能运行,但在实际电路中,还需要加入其它的一些电路才能保证单片机能正常工作,实现其功能。
结 论
通过MPX4250检测到发动机机油压力信号,转换为电压值,然后通过ADC0832转换后产生一个数字信号输入到AT89C51单片机中进行处理,再通过单片机驱动PG160128A显示压力的相关信息。并在超过安全阈值时通过通过单片机P1.0和P1.1实现声光报警。由于显示程序的复杂性,所以选用了C语言作为开放程序加快了开发进度。本次设计由于时间较为仓促,难免考虑不周全,还有许多功能需要完善,这需要下来再去深究。在本次课程设计里面,我把电路和单片机必备的一些基本操作技能再次熟悉了一遍。
对于机油压力检测,我只进行了最简单的程序编写和仿真,而往往在实际中是作为一个系统中的很小子环节来进行应用的,所以还需要我进一步学习更多的单片机及相关测试传感器知识。
致 谢
在本课程设计资料搜集期间,他人的研究资料对我提供了莫大的帮助,这里表示感谢。值此即将完成课程之际,我要衷心地感谢唐岚老师。在课程设计过程中,得到了她的精心指导和热情帮助,她的一些建议和意见给我很深的启发。在此由衷感谢。
参考文献
[1]谭浩强.C程序设计(第三版)[M].北京.清华大学出版社.2005(2007重印)
[2] 张毅刚,彭喜元等. MCS-51单片机应用设计(第3版)[M].哈尔滨.哈尔滨工业大学出版社.2001.
[3]徐琤颖.Protel99SE EDA技术及应用.[M].北京.机械工业出版社.2021.1重印
[4]古辉,刘均等.微型计算机接口及控制技术.[M].北京.机械工业出版社.2021.1
附录一 程序源代码
/*机油压力检测系统.c*/
#include <showfun.h>
#include <stdio.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
extern char fnLCMInit(); // LCM 初始化
extern void fnSetPos(unsigned char urow, unsigned char ucol); // 设置当前地
extern uchar dprintf(uchar x,uchar y,char *fmt);// ASCII(8*16) 及 汉字(16*16) 显示函数
//ADC0832相关sbit CS = P3^4;sbit CLK = P3^2;sbit DIO = P3^3;//
sbit alarm = P1^0;//报警sbit ledAlarm = P1^1; //报警灯
uint theLastTime; //一次鸣响持续次数
uchar Get_AD_Result()
{uchar i,dat1=0,dat2=0;
//起始控制位
CS = 0;CLK = 0;
DIO = 1; _nop_(); _nop_();CS = 0; _nop_(); _nop_();CLK = 1; _nop_(); _nop_();//第一个下降沿之前,设DI = 1 / 0
//选择单端/差分(SGL/DIF)模式中的单端输入模式
CLK = 0;DIO = 1; _nop_(); _nop_();CLK = 1; _nop_(); _nop_();
//第二个下降沿之前,设DI = 0 / 1,选择CH0/CH1 CLK = 0;DIO = 0; _nop_(); _nop_();CLK = 1;DIO = 1; _nop_(); _nop_();
//第三个下降沿之前,设DI = 1
CLK = 0;DIO = 1; _nop_(); _nop_();
//第4-11个下降沿读数据(MSB->LSB)
for(i=0;i<8;i++)
{ CLK = 1; _nop_(); _nop_();CLK = 0; _nop_(); _nop_();
dat1 = dat1 << 1 | DIO; }
//第11-18个下降沿读数据(LSB->MSB)
for(i=0;i<8;i++)
{dat2 = dat2 | ((uchar)(DIO)<<i);
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
}
CS = 1;return (dat1 == dat2) ? dat1:0;
}
unsigned char dsp[4]; //作为压力存储传入函数显示
void delay() //蜂鸣器鸣响间隔延时
{ uint i, j = 200;
while(j--)
{ for (i = 0; i <= 500; i++);}}
void main()
{ uchar AD_Result; //获取的AD值
float ad = 0; //当前压力值
bit bAlarm = 0; //蜂鸣器鸣响标记,0为没响,1正在响
float Y1, Y2, dY; //限幅滤波
dY = 2;//定时器初始化
TMOD = 0x01;ET0 = 1;EA = 1;TH0 = 0xFC;TL0 = 0x18;//PG160128A初始化
fnLCMInit();fnSetPos(0,0); dprintf(30,12,"机油压力检测系统");
dprintf(20, 58, "当前压力: ");dprintf(110, 58, "千帕");
AD_Result = Get_AD_Result();
Y1 = (AD_Result * 5.0 / 255.0 / 5.1 - 0.04) / 0.00369 - 3.45;)
while(1)
{ AD_Result = Get_AD_Result();
Y2 = (AD_Result * 5.0 / 255.0 / 5.1 - 0.04) / 0.00369 - 3.45;
if (abs(Y2 - Y1) <= dY) //变化不能太快,否则会失效
{ ad = Y2;
Y1 = Y2;
}
else
{ ad = Y1;
}
sprintf(dsp,"%-3.0f",ad);
dprintf(82,58,dsp);
if (ad < 100 && bAlarm == 0)
{ TR0 = 1;
theLastTime = 200;bAlarm = 1;dprintf(30, 88, "警告: 压力");
dprintf(98, 88, "过");dprintf(110, 88, "低");ledAlarm = 0;
}
else if (ad > 130 && bAlarm == 0)
{ TR0 = 1;
theLastTime = 300;
bAlarm = 1;
dprintf(30, 88, "警告: 压力");
dprintf(98, 88, "过");
dprintf(110, 88, "高");
ledAlarm = 0;
}
else if (ad >= 100 && ad <= 130)
{ TR0 = 0;
bAlarm = 0;dprintf(30, 88, " ");ledAlarm = 1;
}
}
}
void TM_INT0() interrupt 1 //定时中断,产生方波,驱动蜂鸣器
{ TH0 = 0xFC;TL0 = 0x18;alarm = !alarm;
if (0 == --theLastTime)
{ delay();theLastTime = 200;}
/*ShowFun.h*
#include <At89x52.h>
#include <intrins.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
sbit ce=P2^7;sbit reset=P3^3;
//以8*8字符计算,显示屏横向、纵向可以显示的字符个数
//以240*128为例:
#define LineChar 30 //一行16个字符(8*8)
#define ColumnChar 16 //总共16列
#define STX 0x02
#define ETX 0x03
#define EOT 0x04
#define ENQ 0x05
#define BS 0x08
#define CR 0x0D
#define LF 0x0A
#define DLE 0x10
#define ETB 0x17
#define SPACE 0x20
#define COMMA 0x2C
#define TRUE 1
#define FALSE 0
#define HIGH 1
#define LOW 0
// T6963C 端口定义
#define LCMDW XBYTE[0x8000] // 数据口
#define LCMCW XBYTE[0x8100] // 命令口
//显示内存分配
//0000h-67ffh 文本区
//6800h-77ffh 4K 图形区
//7800h-7fffh 2k CGRAM区
#define DISRAM_SIZE 0X7FFF //设置显示ram的大小
#define TXTSTART 0x0000 //设置文本区的起始地址
#define GRSTART 0x6800 //设置图形区的起始地址
#define CGRAMSTART 0x7800 //设置CGRAM的起始地址
// T6963C 命令定义
#define LC_CUR_POS 0x21 // 光标位置设置
#define LC_CGR_POS 0x22 // CGRAM偏置地址设置
#define LC_ADD_POS 0x24 // 地址指针位置
#define LC_TXT_STP 0x40 // 文本区首址
#define LC_TXT_WID 0x41 // 文本区宽度
#define LC_GRH_STP 0x42 // 图形区首址
#define LC_GRH_WID 0x43 // 图形区宽度
#define LC_MOD_OR 0x80 // 显示方式:逻辑“或”
#define LC_MOD_XOR 0x81 // 显示方式:逻辑“异或”
#define LC_MOD_AND 0x82 // 显示方式:逻辑“与”
#define LC_MOD_TCH 0x83 // 显示方式:文本特征
#define LC_DIS_SW 0x90 // 显示开关 // D0=1/0:光标闪烁启用/禁用;
// D1=1/0:光标显示启用/禁用;// D2=1/0:文本显示启用/禁用// D3=1/0:图形显示启用/禁用;
#define LC_CUR_SHP 0xA0 // 光标形状选择:0xA0-0xA7表示光标占的行数
#define LC_AUT_WR 0xB0 // 自动写设置
#define LC_AUT_RD 0xB1 // 自动读设置
#define LC_AUT_OVR 0xB2 // 自动读/写结束
#define LC_INC_WR 0xC0 // 数据一次写,地址加1
#define LC_INC_RD 0xC1 // 数据一次读,地址加1
#define LC_DEC_WR 0xC2 // 数据一次写,地址减1
#define LC_DEC_RD 0xC3 // 数据一次读,地址减1
#define LC_NOC_WR 0xC4 // 数据一次写,地址不变
#define LC_NOC_RD 0xC5 // 数据一次读,地址不变
#define LC_SCN_RD 0xE0 // 屏读
#define LC_SCN_CP 0xE8 // 屏拷贝
#define LC_BIT_OP 0xF0 // 位操作:D0-D2:定义D0-D7位;D3:1置位;0:清除
/***************************************************************************/
/* LCM 240128 显示程序 */
/* MCU 型号: Winbond W78E58-24 */
/* 时钟频率: 22.1184 MHz */
/* 接口方式: 直接接口(挂总线) */
/* 开发环境: Keil C51 V6.14 */
/* 开发日期: 2001.06.12- */
/* 程序编写: Youth */
/***************************************************************************/
#include <stdarg.h>
#include <stdio.h>
#include <math.h>
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include <showfun.h>
code uchar const uPowArr[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}
// ASCII 字模宽度及高度定义
#define ASC_CHR_WIDTH 8
#define ASC_CHR_HEIGHT 12
#define HZ_CHR_HEIGHT 12
#define HZ_CHR_WIDTH 12
char code MSK1[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
char code MSK2[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
char code ASC_MSK[58 * 10] = {
// Terminal9; 此字体下对应的点阵为:宽x高=8x12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff, // < 0x20时,打印此字
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// ' '
0x00,0x30,0x78,0x78,0x78,0x30,0x30,0x00,0x30,0x30,0x00,0x00,// '!'
0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// '"'
0x00,0x6c,0x6c,0xfe,0x6c,0x6c,0x6c,0xfe,0x6c,0x6c,0x00,0x00,// '#'
0x30,0x30,0x7c,0xc0,0xc0,0x78,0x0c,0x0c,0xf8,0x30,0x30,0x00,// '$'
0x00,0x00,0x00,0xc4,0xcc,0x18,0x30,0x60,0xcc,0x8c,0x00,0x00,// '%'
0x00,0x70,0xd8,0xd8,0x70,0xfa,0xde,0xcc,0xdc,0x76,0x00,0x00,// '&'
0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// '''
0x00,0x0c,0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x0c,0x00,0x00,// '('
0x00,0x60,0x30,0x18,0x0c,0x0c,0x0c,0x18,0x30,0x60,0x00,0x00,// ')'
0x00,0x00,0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00,0x00,0x00,// '*'
0x00,0x00,0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00,0x00,0x00,// '+'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x60,0x00,// ','
0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,// '-'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,// '.'
0x00,0x00,0x02,0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00,0x00,// '/'
0x00,0x7c,0xc6,0xce,0xde,0xd6,0xf6,0xe6,0xc6,0x7c,0x00,0x00,// '0'
0x00,0x10,0x30,0xf0,0x30,0x30,0x30,0x30,0x30,0xfc,0x00,0x00,// '1'
0x00,0x78,0xcc,0xcc,0x0c,0x18,0x30,0x60,0xcc,0xfc,0x00,0x00,// '2'
0x00,0x78,0xcc,0x0c,0x0c,0x38,0x0c,0x0c,0xcc,0x78,0x00,0x00,// '3'
0x00,0x0c,0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,0x1e,0x00,0x00,// '4'
0x00,0xfc,0xc0,0xc0,0xc0,0xf8,0x0c,0x0c,0xcc,0x78,0x00,0x00,// '5'
0x00,0x38,0x60,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc,0x78,0x00,0x00,// '6'
0x00,0xfe,0xc6,0xc6,0x06,0x0c,0x18,0x30,0x30,0x30,0x00,0x00,// '7'
0x00,0x78,0xcc,0xcc,0xec,0x78,0xdc,0xcc,0xcc,0x78,0x00,0x00,// '8'
0x00,0x78,0xcc,0xcc,0xcc,0x7c,0x18,0x18,0x30,0x70,0x00,0x00,// '9'
0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x38,0x38,0x00,0x00,0x00,// ':'
};
typedef struct typFNT_GB16 // 汉字字模显示数据结构
{ char Index[2];
char Msk[24];
};
struct typFNT_GB16 code GB_16[] = { // 显示为12*12
/*-- 文字: 机 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=16x12 --*/
"机",0x20,0x00,0x27,0x80,0x24,0x80,0xF4,0x80,0x24,0x80,0x74,0x80,0x6C,
展开阅读全文