Nokia5110 液晶 C51 源代码 源程序
- 格式:docx
- 大小:15.37 KB
- 文档页数:7
ESP8266点亮nokia5110,打造⾃⼰的⼩电视
材料清单:
esp8266
nokia5110
⾯包板
跳线
ARDUINO IDE下载
Arduino IDE离线安装esp8266 SDK (8266_package_2.6.3)
双击运⾏即可解压,解压完成后,再打开Arduino IDE,即可在菜单栏>⼯具>开发板中找到你使⽤的esp8266开发板**ESP8266-NodeMCU开发板驱动 (CP210X) **
可以上传个blink测试⼀下板⼦
点亮 nokia5110
安装这两个库
测试代码
点击查看代码
显⽰图案
因为使⽤的nokia屏幕,致敬⼀下经典握⼿开机logo
点击查看代码
ESP8266⾃动配⽹ – WiFiManager库(强烈推荐,⾮常好⽤)
点击查看代码
ESP8266获取时间
点击查看代码
ESP8266获取并解析⼼知天⽓数据
点击查看代码
ESP8266获取并解析哔哩哔哩API数据(获取粉丝数量)
点击查看代码
将以上代码综合⼀下
点击查看代码。
单片机之路—诺基亚5110LCD显示屏驱动电子产品在很多场合都需要提供和用户交互的人机界面,具备人机交互界面的电子产品可以给用户更好的使用,让电子产品更加直观。
今天给大家讲一个性价比很高的LCD显示器——诺基亚5110LCD。
可能很多人奇怪,为什么这个LCD显示屏被叫做诺基亚5110,那是因为这个显示屏诺基亚经典机型5110手机上使用的现实屏。
就是下图这部手机,曾经的经典。
记得第一部手机就是诺基亚的,那会还在读初中,宿舍的同学总是抢着来打贪吃蛇,打到满屏。
电子产品的更新换代实在太快了,现在已经很难找到这个手机的踪影了。
诺基亚5110手机5110LCD是一个84X48的点阵LCD,可以显示4行汉字。
和单片机的接口不是很复杂,是一个没有MISO只有MOSI的SPI协议。
用于通信的数据线是4根,其中有一根是用于设定传入的数据是命令还是数据的选择端口。
下图是在马云家买的一个诺基亚5110LCD模块,总共有8个引脚。
用于通信的引脚为4个,1个复位引脚,2个电源引脚,1个是背光灯控制引脚。
因为诺基亚LCD本身是不会发光的,为了能够在晚上也能够看到液晶显示屏显示的内容,需要增加背光灯。
诺基亚5110实物图和引脚描述我们把LCD需要单片机控制的5个引脚连接到单片机的P1口,背光灯通过一个电阻接到VCC5V,让背光灯保持常亮的状态,也可以接到单片机的引脚上去,通过单片机控制背光灯的亮灭。
5110LCD与单片机接口图我们来看一下怎么写程序驱动诺基亚5110,实现在5110上显示出字符。
由于接通电源后,LCD内部的RAM数据状态是不确定的,所以我们需要给LCD复位一下。
5110LCD复位时序//产生一个复位脉冲Lcd_res=0;delay_us();Lcd_res=1;我们需要往LCD写数据,SPI的写时序如下,这里实现的是通过单片机IO口模拟SPI时序,如果单片机有硬件的SPI接口是可以用来驱动的5110LCD的。
电气信息学院基于Nokia5110的液晶屏模块设计摘要:本设计是以单片机STC89C52RC为核心器件的基于Nokia5110液晶屏的电子指南针。
整个系统主要由单片机最小系统,电源输入模块,LCD液晶显示模块,磁阻传感器模块和串口电路部分构成。
通过用C语言编程使单片机处理磁阻传感器接收到的X轴和Y轴上的磁场分量,转换为距南方的角度后,通过Nokia5110动态显示。
Nokia5110是一块84×48 的LCD点阵型液晶显示屏,如果字模是12×16 大小的字符,则能显示3 行,每行显示7个汉字。
每个字符都分为上下两部分进行扫描,在每行扫描时以一列8位为单位进行扫描。
通过原理图设计、软件仿真、制作硬质板电路,硬件调试,证明了本设计的可行性。
关键词:Nokia5110,STC89C52RC,磁阻传感器HMC5883L,电子指南针Abstract: This design is a digital compass based on Nokia5110, with the MCU STC89C52RC as its core. The system mainly consists of a MCU minimum system, a power input module, a LCD module, a magnetic sensor module and a serial port module. Through C language programming, the MCU processes the data on the X and Y axes, which is collected by the magnetic sensor. Then it is transformed into an angle indicating its relative direction to the south pole in degrees. Finally, it is shown on the Nokia5110 dynamically. The Nokia5110 is an LCD with 84×48 dots, if a character is displayed with 12×16 dots, then it can display 3 lines, with each line comprising 7 characters. The characters are scanned in two halves, the upper half and the lower half. For each half, 8 bits( a byte)are scanned as a unit at a time. Through schematic design, software simulation, making the printed circuit board and hardware debugging, the feasibility of this design has been proved.Keywords:Nokia5110, STC89C52RC, magnetic sensor, digital compass目录1 前言 .............................................................................................. 错误!未定义书签。
#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */#define uchar unsigned char#define uint unsigned int#define lcd12864_date PORTB //数据口#define lcd12864_rs PTT_PTT5// PTT_PTT5; //寄存器选择输入#define lcd12864_rw PTT_PTT3 //液晶读/写控制#define lcd12864_e PTT_PTT2 //液晶使能控制#define DQ PORTA_PA0 // 定义DQ引脚为P3.3 #define DQ_HIGH() DDRA=0 //设置数据口为输入#define DQ_LOW() DDRA=1;DQ=0; //设置数据口为输出//uint temp; //温度值variable of temperature uchar A1,A2,A3;void delay2(uint i);void Init_Ds18b20(void);uchar Read_One_Byte();void Write_One_Byte(uchar dat);uint Get_Tmp();void DisplayTemp(uint temp) ;void delay(unsigned int t){uint i,j;for(i=t;i>0;i--)for(j=1000;j>0;j--);}void lcd12864_write_cmd(unsigned char command) //写指令{lcd12864_rs=0;lcd12864_rw=0;lcd12864_e=0;lcd12864_date=command;delay(5);lcd12864_e=1;lcd12864_e=0;delay(5);}void lcd12864_write_data(unsigned char data) // 写数据写入一个字符{lcd12864_rs=1;lcd12864_rw=0;lcd12864_e=0;lcd12864_date=data;delay(5);lcd12864_e=1;lcd12864_e=0;delay(5);}void lcd12864_pos(unsigned char x,unsigned char y) //确定位置{unsigned char pos;if (x==1){x=0x80;}else if (x==2){x=0x90;}else if (x==3){x=0x88;}else{x=0x98;}pos=x+y-1;lcd12864_write_cmd(pos); //显示地址}void io_init(){lcd12864_write_cmd(0x30); //基本指令操作lcd12864_write_cmd(0x0C); //显示开,关光标lcd12864_write_cmd(0x01); //清除LCD的显示内容位置计数器调整为0x00 }void lcd12864_wrtie_string( char *str) //写字符串{while(*str!='\0') //未结束{lcd12864_write_data(*str++);}}void init_LCD(){delay(20);lcd12864_write_cmd(0x30);delay(20);lcd12864_write_cmd(0x30);delay(20);lcd12864_write_cmd(0x0c);//开显示,不显示光标,且不闪烁delay(20);lcd12864_write_cmd(0x01); //清屏delay(20);lcd12864_write_cmd(0x06); //每次写入数据后地址指针加1delay(20);}/**/void Display1(){lcd12864_pos(1,2);lcd12864_wrtie_string("温度调节系统");lcd12864_pos(2,1);lcd12864_wrtie_string("菜单1:当前温度");lcd12864_pos(3,1);lcd12864_wrtie_string("菜单2:目标温度");lcd12864_pos(4,1);lcd12864_wrtie_string("菜单3:温度曲线");}void Display2(){lcd12864_pos(1,2);lcd12864_wrtie_string("温度调节系统");lcd12864_pos(2,1);lcd12864_wrtie_string("当前温度:**度");lcd12864_pos(3,1);lcd12864_wrtie_string("目标温度:**度");lcd12864_pos(4,2);lcd12864_wrtie_string(" Welcome ! ");}void main(void){delay(5);DDRB=0xff;DDRT=0xff;// io_init();init_LCD();lcd12864_pos(2,2);lcd12864_wrtie_string(" Welcome To ! ");lcd12864_pos(3,2);lcd12864_wrtie_string("温度调节系统");delay(2000);lcd12864_write_cmd(0x01); //清屏delay(20);while(1){DisplayTemp(Get_Tmp());lcd12864_pos(2,3);lcd12864_write_data(0x30+A1);lcd12864_pos(2,4);lcd12864_write_data(0x30+A2);lcd12864_pos(2,5);lcd12864_write_data(0x2e);lcd12864_pos(2,6);lcd12864_write_data(0x30+A3);/*Display1() ; */}}/*************精确延时函数*****************/ void delay2(unsigned int i){i=10*i;while(--i);}/****************************************** 此延时函数针对的是12Mhz的晶振delay(0):延时518us 误差:518-2*256=6delay(1):延时7us (原帖写"5us"是错的)delay(10):延时25us 误差:25-20=5delay(20):延时45us 误差:45-40=5delay(100):延时205us 误差:205-200=5delay(200):延时405us 误差:405-400=5*******************************************//*****************DS18B20******************/void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command{char presence=1;while(presence){//DQ = 1; //DQ复位,不要也可行。
//================================================================== //工程名称://工程功能://作者://审核://版本: 0001.02.03//日期:2007.04.12//================================================================== #include "reg51.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned int//==================液晶12864 端口定义sbit E=P1^0;sbit RW=P1^1;sbit RS=P1^2;//====================================//==================IIC 24c04 端口定义sbit SDA=P1^0;sbit SCL=P1^0;//====================================uchar code table1[]={"B :密码锁系统"};uchar code table2[]={"作者:潘素琴"};uchar code table3[]={"日期:2007.05.16"};/*****************************//*延时子程序*//****************************/void delayms (uchar k){uchar j;while((k--)!=0){for(j=0;j<115;j++){;}}}//=============================================================//函数名称:void check_busy(void)//函数功能:检测LCM是不是处于忙状态,并等待忙结束//作者://日期:2007.03.31//============================================================= void check_busy(void){uchar i;RS=0;RW=1;E=1;P0=0xff;while(P0&0x01);i=6;while(i--);E=0;}//=====================================================//======================================================//函数名称:void sendorder(uchar order)//函数功能:给LCM发送指令//作者://日期:2007.03.31//======================================================void sendorder(uchar order){uchar i,temp1=0,temp2=0;check_busy();RS=0;RW=0;for(i=0;i<8;i++){temp1=order&0x01;temp2|=temp1;order>>=1;temp2<<=1;}P0=temp2;i=7;while(i--);E=1;E=0;}//=====================================================//===================================================== //函数名称:void sendbyte(uchar byte)//函数功能:给LCM发送数据//作者://日期:2007.03.31//=====================================================void sendbyte(uchar byte){uchar i,temp1=0,temp2=0;check_busy();for(i=0;i<8;i++){temp1=byte&0x01;temp2|=temp1;byte>>=1;temp2<<=1;}RS=1;RW=0;P0=temp2;i=7;while(i--);E=1;E=0;}//=======================================================/*----------------------------------------------------------------------调用方式:void start_bit(void)函数说明:开始位------------------------------------------------------------------------*/void start_bit(void){SCL=1;_nop_();SDA=1;_nop_();SDA=0;_nop_();_nop_();}/*------------------------------------------------------------------- 调用方式:void stop_bit(void)函数说明:停止位--------------------------------------------------------------------*/ void stop_bit(void){SDA=0;_nop_();SCL=1;_nop_();SDA=1;_nop_();}/*----------------------------------------------------------------- 调用方式:void mast_ack(void)-函数说明:主答函数-----------------------------------------------------------------*/ void mast_ack(void){SCL=0;_nop_();SDA=0;_nop_();SCL=1;_nop_();SCL=0;_nop_();SDA=1;_nop_();}/*-----------------------------------------------调用方式:void ack(void)函数说明:应答函数-----------------------------------------------*/void ack(void){SDA=1;SCL=0;_nop_();SCL=1;while(SDA){;}SCL=0;_nop_();}/*-----------------------------------------------调用方式:void no_ack(void)函数说明:无需应答位,在读程序中用到-----------------------------------------------*/void no_ack(void){SDA=1;_nop_();SCL=1;_nop_();SCL=0;_nop_();}/*-----------------------------------------------调用方式:write_8bit(unsigned char ch)函数说明:写一个字节(8位)数据-----------------------------------------------*/write_8bit(unsigned char ch){unsigned char i=8;SCL=0;_nop_();while(i--){SDA=(bit)(ch&0x80);_nop_();ch<<=1;SCL=1;_nop_();SCL=0;_nop_();}}/*----------------------------------------------调用方式:unsigned char read24c16(unsigned int address) 函数说明:读24c16指定地址数据(字节读)-----------------------------------------------*/unsigned char read24c16(uchar addh){unsigned char data rdata;unsigned char i=8;start_bit();write_8bit(0xa0);ack();write_8bit(addh);ack(); //伪写start_bit();write_8bit(0xa1);ack();while(i--){rdata<<=1;SCL=0;_nop_();SCL=1;_nop_();if(SDA) rdata|=0x01;}no_ack();stop_bit();return(rdata);}/*-----------------------------------------------调用方式:void write24c16(unsigned int address,unsigned char ddata)函数说明:写数据到24c16的指定地址(字节写)-----------------------------------------------*/void write24c16(unsigned int addr_h,unsigned char ddata){start_bit();write_8bit(0xa0);ack();write_8bit(addr_h);ack();write_8bit(ddata);ack();stop_bit();delayms(4);}//===================================================================== ==//===================================================================== ==//函数名:void LCD_init()//函数功能://参数://作者://日期://===================================================================== ==void LCD_init(){uchar i;sendorder(0x30); ///功能设置8位控制界面基本指令sendorder(0x0c); ///显示打开光标关反白显示关sendorder(0x01); ///清除屏幕显示将DDRAM的地址计数器清零sendorder(0x80); ///设置DDRAM地址为0000000for(i=0;i<14;i++){sendbyte(table1[i]);}sendorder(0x88);for(i=0;i<12;i++){sendbyte(table2[i]);}sendorder(0x98);for(i=0;i<16;i++){sendbyte(table3[i]);}}//===================================================================== ==//===================================================================== ==//函数名://函数功能://参数://作者://日期://===================================================================== ==void main(){LCD_init();while(1);}//===================================================================== ==。
诺基亚5110显示屏51单片机驱动程序#include <stc.h>#include "intrins.h" //_nop_();延时函数用#include <dmb.h> //字符代码表#define uchar unsigned char#define uint unsigned intsbit sce = P3^4; //片选sbit res = P0^0; //复位,0复位sbit dc = P3^5; //1写数据,0写指令sbit sdin = P3^7; //数据sbit sclk = P3^6; //时钟uint data temp_data[2]={0x00,0x00}; //读出温度暂放//================18b20数据口定义===============sbit DQ=P0^0; //温度输入口uint h;uint temp;unsigned char presence,flash=0;/*****************延时函数*************************/void delay(uint t){for (;t>0;t--);}//================延时函数=====================void delay_1ms(void)//1ms延时函数{unsigned int i;for (i=0;i<500;i++);}/*---------------lcd显示函数开始----------------LCD_write_byte: 使用SPI接口写数据到LCD输入参数:dt:写入的数据;command :写数据/命令选择;编写日期:20080918----------------------------------------------*/void LCD_write_byte(unsigned char dt, unsigned char command){unsigned char i;sce=0;dc=command;for(i=0;i<8;i++){if(dt&0x80)sdin=1;elsesdin=0;dt=dt<<1;sclk=0;sclk=1;}dc=1;sce=1;sdin=1;}/*---------------------------------------LCD_init: 5110LCD初始化编写日期:20080918----------------------------------------- */void LCD_init(void){res=0;delay_1ms();res=1;LCD_write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令LCD_write_byte(0xd0,0);//设定液晶偏置电压LCD_write_byte(0x20,0);//使用基本指令LCD_write_byte(0x0C,0);//设定显示模式,正常显示}/*-------------------------------------------LCD_set_XY: 设置LCD坐标函数输入参数:X:0-83 Y:0-5编写日期:20080918---------------------------------------------*/void LCD_set_XY(unsigned char X, unsigned char Y){LCD_write_byte(0x40 | Y, 0);// columnLCD_write_byte(0x80 | X, 0);// row}/*------------------------------------------LCD_clear: LCD清屏函数编写日期:20080918--------------------------------------------*/void LCD_c lear(void){unsigned char t;unsigned char k;LCD_set_XY(0,0);for(t=0;t<6;t++){for(k=0;k<84;k++){LCD_write_byte(0x00,1);}}}/*---------------------------------------------LCD_write_shu: 显示8(宽)*16(高)点阵列数字字母符号等半角类输入参数:c:显示的字符;编写日期:20080918-----------------------------------------------*/void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列page:页dd:字符{unsigned char i;LCD_set_XY(row*8, page);// 列,页for(i=0; i<8;i++){LCD_write_byte(shuzi[c*16+i],1);}LCD_set_XY(row*8, page+1);// 列,页for(i=8; i<16;i++){LCD_write_byte(shuzi[c*16+i],1);}}/*---------------------------------------------LCD_write_hanzi: 显示16(宽)*16(高)点阵列汉字等半角类输入参数:c:显示的字符;编写日期:20080918-----------------------------------------------*/void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列page:页dd:字符{unsigned char i;LCD_set_XY(row*8, page);// 列,页for(i=0; i<16;i++){LCD_write_byte(hanzi[c*32+i],1);}LCD_set_XY(row*8, page+1);// 列,页for(i=16; i<32;i++){LCD_write_byte(hanzi[c*32+i],1);}}//=================lcd显示函数结束================//=================18b20相关函数开始==============/****************DS18B20复位函数************************/ow_reset(void){char presence=1;while(presence){while(presence){DQ=1;_nop_();_nop_(); //从高拉倒低DQ=0;delay(50); //550 usDQ=1;delay(6); //66 uspresence=DQ; //presence=0 复位成功,继续下一步}delay(45); //延时500 uspresence=~DQ;}DQ=1; //拉高电平}/////****************DS18B20写命令函数************************/ void write_byte(uchar val) //向1-WIRE 总线上写1个字节{uchar i;for(i=8;i>0;i--){DQ=1;_nop_();_nop_(); //从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 usDQ=val&0x01; //最低位移出delay(6); //66 usval=val/2; //右移1位}DQ=1;delay(1);}/****************DS18B20读1字节函数************************/ uchar read_byte(void) //从总线上取1个字节{uchar i;uchar value=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 usDQ=1;_nop_();_nop_();_nop_();_nop_(); //4 usif(DQ)value|=0x80;delay(6); //66 us}DQ=1;return(value);}///****************读出温度函数************************/read_temp(){ow_reset(); //总线复位if(presence==1){flash=1;} //DS18B20不正常,蜂鸣器报警delay(200);write_byte(0xcc); //发命令write_byte(0x44); //发转换命令ow_reset();delay(1);write_byte(0xcc); //发命令write_byte(0xbe);temp_data[0]=read_byte(); //读温度值的第字节temp_data[1]=read_byte(); //读温度值的高字节temp=temp_data[1];temp<<=8;temp=temp|temp_data[0]; // 两字节合成一个整型变量。
单片机原理及应用课程设计电气工程学院一、课程设计任务书1.课程设计项目诺基亚5110液晶显示器应用。
2.设计内容1)设计诺基亚5110液晶显示器应用的总体设计方案;2)以MCS-51系列单片机为核心器件和诺基亚5110液晶显示器组成液晶显示硬件系统;3)系统程序编制与调试;4)电路系统的综合调试;5)撰写课程设计论文;6)完成课程设计论文答辩。
3.设计要求1)以STC89C51单片机为控制核心,对诺基亚5110液晶显示器进行控制。
编程使得在LCD显示器上显示字符,如多行滚动显示:“吉林工程技术师范学院”“电气工程学院”。
等字符,还可以显示别的文字;2)单片机课程设计题目的硬件电路、程序由学生自行设计完成。
3)液晶显示器上要显示出设计人的班级,组长的学号等信息。
4.设计进度(2011年6月13日至2011年6月24日)时间设计内容第1-2天查阅资料,方案比较、设计与论证,理论分析与计算第3-5天硬件电路调试第6-8天系统调试第9-10天书写报告、答辩5.设计地点新实验楼323微机实验室二.参考资料[1]李广弟,朱月秀,王秀山编著.单片机基础. 北京:北京航空航天大学出版社,2001[2] 何立民编著.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:北京航空航天大学出版社,1999[3] 蔡美琴等编著.MCS-51 单片机系统及应用.北京:高等教育出版社.1992二、评语及成绩成绩:指导教师:单片机原理及应用课程设计班级:自动化0845 姓名:刘旭阳学号: 11 号指导教师:方健撰写日期: 2011年6月23日Nokia LCD多功能显示摘要液晶显示器件[1](LCD)是一种高新技术的基础元器件。
它利用液晶的各种电光效应,把液晶对电场、磁场、光线和温度等外界条件的变化在一定条件下转换为可视信号而制成的显示器。
液晶显示器具有低电压、低功耗的特点,与CMOS集成电路相匹配.电池作为电源,适合于便携式显示。
NOKIA5110--- 51C语言代码,头文件与对应C代码已分离开,直接可用(自己写,绝对可用。
) ///////////////////////////////////////////////////////////////NOKIA5110头文件:5110.H#ifndef _5110_H_#define _5110_H_#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit sclk = P2^0;sbit sdin = P2^1;sbit dc = P2^2;sbit sce = P2^3;sbit rst = P2^4;void write_byte(uchar byte, uchar command);void shezhi_lcd();void delay(unsigned int aa);void SET_XY(unsigned char x, unsigned char y);void LCD_CLEAR();void LCD_CLEAR_X(uchar x); //清由x开始的右半屏幕void LCD_CLEAR_Y(uchar y); //清由y开始的下半屏幕void write_hanzi(uchar x, uchar y, uchar code *dat);void write_shuzi(uchar x, uchar y, uchar c);#endif////////////////////////////////////////////////5110.C#include <reg52.h>#include <5110.H>#include <TAB.H>void write_byte(uchar byte, uchar command){unsigned char i;sce = 0;dc = command;for(i = 0; i < 8; i++){if(byte & 0x80)sdin = 1;elsesdin = 0;byte = byte << 1;sclk = 0;sclk = 1;}sce = 1;sdin = 1;dc = 1;}void shezhi_lcd(){rst = 0;delay(1000);rst = 1;write_byte(0x20, 0);write_byte(0xd0, 0);write_byte(0x0c, 0);write_byte(0x04, 0);}void delay(unsigned int aa){while(aa--);}void SET_XY(unsigned char x, unsigned char y) {write_byte(0x80 | x, 0);write_byte(0x40 | y, 0);}void LCD_CLEAR(){unsigned char i, j;SET_XY(0, 0);for(j = 0; j < 6; j++){for(i = 0; i < 84; i++){write_byte(0x00, 1);}}}void LCD_CLEAR_X(uchar x){unsigned char i, j;for(j = 0; j < 6; j++){SET_XY(x, j);for(i = x; i < 84; i++){write_byte(0x00, 1);}}}void LCD_CLEAR_Y(uchar y){unsigned char i, j;for(j = 0; j < 2; j++){SET_XY(0, y + j);for(i = 0; i < 84; i++){write_byte(0x00, 1);}}}void write_hanzi(uchar x, uchar y, uchar code *dat){uchar i ,j, k;y <<= 1;while(*dat){for(k = 0; k < ZISHU; k++){if((GB_16[k].JIANMA[0] == dat[0]) && (GB_16[k].JIANMA[1] == dat[1])) break;}for(j = 0; j < 2; j++){SET_XY(x, (y + j));for(i = 16*j; i < 16*(j+1); i++){write_byte(GB_16[k].MO[i], 1);}}x= x + 16;dat += 2;}}void write_shuzi(uchar x, uchar y, uchar c){unsigned char i, j;for(j = 0; j < 2; j++){SET_XY(x, y + j);for(i = j * 8; i < 8 * (j + 1); i++){write_byte(shuzi[c * 16 + i], 1);}}}//////////////////////////////////////码表存放处TAB.HTAB.Htypedef struct ZIMO_16 // 汉字字模数据结构{signed char JIANMA[2]; // 汉字内码索引char MO[32]; // 点阵码数据};struct ZIMO_16 code GB_16[] = // 数据表汉字:”确认登录失败功能选择成重置修改“{ // "角度测量旋转调当前试进微粗电机复位" "确", 0x04,0x84,0xE4,0x5C,0x44,0xC4,0x20,0x10,0xE8,0x27,0x24,0xE4,0x34,0x2C,0xE0,0x00, 0x02,0x01,0x7F,0x10,0x10,0x3F,0x80,0x60,0x1F,0x09,0x09,0x3F,0x49,0x89,0x7F,0x00, "认", 0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3F,0x90,0x48,0x20,0x18,0x07,0x00,0x07,0x18,0x20,0x40,0x80,0x00, "登", 0x00,0x00,0x8A,0x52,0x22,0x5A,0x46,0x40,0x47,0x58,0x24,0x52,0x88,0x04,0x00,0x00, 0x01,0x41,0x40,0x4F,0x59,0x69,0x49,0x49,0x49,0x69,0x59,0x4F,0x40,0x41,0x01,0x00, "录", 0x80,0x80,0x82,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x80,0x80,0x80,0x00, 0x40,0x40,0x22,0x24,0x10,0x48,0x80,0x7F,0x04,0x08,0x18,0x24,0x22,0x40,0x40,0x00, "失", 0x00,0x40,0x30,0x1E,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 0x81,0x81,0x41,0x21,0x11,0x0D,0x03,0x01,0x03,0x0D,0x11,0x21,0x41,0x81,0x81,0x00,"败", 0x00,0xFE,0x02,0xFA,0x02,0xFE,0x40,0x20,0xD8,0x17,0x10,0x10,0xF0,0x10,0x10,0x00, 0x80,0x47,0x30,0x0F,0x10,0x67,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00, "功", 0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00, 0x10,0x30,0x10,0x1F,0x08,0x88,0x48,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00, "能", 0x08,0xCC,0x4A,0x49,0x48,0x4A,0xCC,0x18,0x00,0x7F,0x88,0x88,0x84,0x82,0xE0,0x00, 0x00,0xFF,0x12,0x12,0x52,0x92,0x7F,0x00,0x00,0x7E,0x88,0x88,0x84,0x82,0xE0,0x00, "选", 0x40,0x40,0x42,0xCC,0x00,0x50,0x4E,0xC8,0x48,0x7F,0xC8,0x48,0x48,0x40,0x00,0x00, 0x00,0x40,0x20,0x1F,0x20,0x50,0x4C,0x43,0x40,0x40,0x4F,0x50,0x50,0x5C,0x40,0x00, "择", 0x10,0x10,0xFF,0x10,0x00,0x82,0x86,0x4A,0x52,0xA2,0x52,0x4A,0x86,0x80,0x80,0x00, 0x42,0x82,0x7F,0x01,0x00,0x10,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x10,0x00,0x00, "成", 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0x08,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x08,0x00, 0x80,0x60,0x1F,0x00,0x10,0x20,0x1F,0x80,0x40,0x21,0x16,0x18,0x26,0x41,0xF8,0x00, "重", 0x10,0x10,0x14,0xD4,0x54,0x54,0x54,0xFC,0x52,0x52,0x52,0xD3,0x12,0x10,0x10,0x00, 0x40,0x40,0x50,0x57,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00, "置", 0x00,0x17,0x15,0xD5,0x55,0x57,0x55,0x7D,0x55,0x57,0x55,0xD5,0x15,0x17,0x00,0x00, 0x40,0x40,0x40,0x7F,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0x40,0x40,0x40,0x00, "新", 0x40,0x44,0x54,0x65,0xC6,0x64,0x54,0x44,0x00,0xFC,0x44,0x44,0xC4,0x42,0x40,0x00, 0x20,0x12,0x4A,0x82,0x7F,0x02,0x0A,0x92,0x60,0x1F,0x00,0x00,0xFF,0x00,0x00,0x00, "尖", 0x00,0x00,0x80,0xC0,0xE0,0xE0,0xF0,0xF8,0xFC,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0, 0x00,0x01,0x03,0x07,0x0F,0x0F,0x1F,0x3F,0x7F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, "角", 0x20,0x10,0xE8,0x24,0x27,0x24,0x24,0xE4,0x24,0x34,0x2C,0x20,0xE0,0x00,0x00,0x00, 0x80,0x60,0x1F,0x09,0x09,0x09,0x09,0x7F,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00, "度", 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00, 0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00, "测", 0x10,0x60,0x02,0x8C,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0xFF,0x00,0x00, 0x04,0x04,0x7E,0x01,0x80,0x47,0x30,0x0F,0x10,0x27,0x00,0x47,0x80,0x7F,0x00,0x00, "量", 0x20,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x20,0x20,0x20,0x00 ,0x00,0x80,0x80,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0x80,0x80,0x00,0x00, "扭", 0x10,0x10,0xF1,0x96,0x90,0x90,0x10,0x28,0x27,0x24,0xE4,0x24,0x24,0xE4,0x04,0x00, 0x80,0x60,0x1F,0x40,0x80,0x7F,0x80,0x60,0x1F,0x20,0x7F,0x44,0x44,0x44,0x40,0x00, "调", 0x40,0x42,0xCC,0x00,0x00,0xFE,0x82,0x92,0x92,0xFE,0x92,0x92,0x82,0xFE,0x00,0x00, 0x00,0x00,0x3F,0x10,0x88,0x7F,0x00,0x1E,0x12,0x12,0x12,0x5E,0x80,0x7F,0x00,0x00, "当", 0x00,0x40,0x42,0x44,0x58,0x40,0x40,0x7F,0x40,0x40,0x50,0x48,0xC6,0x00,0x00,0x00, 0x00,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00, "前", 0x08,0x08,0xE8,0x29,0x2E,0x28,0xE8,0x08,0x08,0xC8,0x0C,0x0B,0xE8,0x08,0x08,0x00, 0x00,0x00,0xFF,0x09,0x49,0x89,0x7F,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00, "车", 0xC8,0xB8,0x8F,0xE8,0x88,0x88,0x40,0x48,0x48,0xE8,0x5F,0x48,0x48,0x48,0x40,0x00,0x08,0x18,0x08,0xFF,0x04,0x04,0x00,0x02,0x0B,0x12,0x22,0xD2,0x0A,0x06,0x00,0x00, "试", 0x40,0x40,0x42,0xCC,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x11,0x16,0x10,0x00,0x00,0x00,0x00,0x3F,0x10,0x28,0x60,0x3F,0x10,0x10,0x01,0x0E,0x30,0x40,0xF0,0x00, "进", 0x40,0x40,0x42,0xCC,0x00,0x80,0x88,0x88,0xFF,0x88,0x88,0xFF,0x88,0x88,0x80,0x00, 0x00,0x40,0x20,0x1F,0x20,0x40,0x50,0x4C,0x43,0x40,0x40,0x5F,0x40,0x40,0x40,0x00, "微", 0x10,0x88,0xC4,0x33,0x80,0x9E,0x90,0x9F,0x90,0x9E,0x20,0xD8,0x17,0xF0,0x10,0x00, 0x01,0x00,0xFF,0x80,0x40,0x3E,0x02,0x02,0x3E,0x10,0x88,0x67,0x18,0x67,0x80,0x00, "粗", 0x44,0x58,0xC0,0xFF,0x50,0x4C,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00, 0x08,0x06,0x01,0xFF,0x01,0x46,0x40,0x7F,0x42,0x42,0x42,0x42,0x7F,0x40,0x40,0x00, "电", 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00, 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00, "机", 0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00, 0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00, "复", 0x20,0x10,0x08,0xF7,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0xF4,0x04,0x04,0x00,0x00, 0x80,0x90,0x90,0x49,0x4D,0x57,0x25,0x25,0x25,0x55,0x4D,0x45,0x80,0x80,0x80,0x00, "位", 0x00,0x80,0x60,0xF8,0x07,0x10,0x90,0x10,0x11,0x16,0x10,0x10,0xD0,0x10,0x00,0x00, 0x01,0x00,0x00,0xFF,0x40,0x40,0x41,0x5E,0x40,0x40,0x70,0x4E,0x41,0x40,0x40,0x00, };uchar code shuzi[] ={0x00,0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F, //"0"0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00, //"1" 0x00,0x10,0x08,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x30,0x28,0x24,0x22,0x21,0x20, //"2" 0x00,0x10,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x10,0x20,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0xF8,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x3F,0x04,0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x10,0x20,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0xC0,0x20,0x90,0x88,0x88,0x88,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x10,0x0F,0x00,0x08,0x08,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x30,0x0E,0x01,0x00,0x00,0x00,0x70,0x88,0x08,0x08,0x08,0x88,0x70,0x00,0x1E,0x21,0x21,0x21,0x21,0x21,0x1E,0x00,0xF0,0x08,0x08,0x08,0x08,0x08,0xF0,0x00,0x01,0x22,0x22,0x22,0x22,0x11,0x0F, //"9"0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, //". 10"0x00,0x80,0x80,0x80,0xFC,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00, // "+ 11"0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00, // "- 12"0x00,0xC0,0xF8,0xFE,0xF8,0xC0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,//"上箭头13"};#define ZISHU sizeof(GB_16) / 34。