51单片机12864显示汉字画图画点常用例程
吴鉴鹰单片机项目项目实战精讲之12864系列基于单片机驱动12864的滚动文字以及漫画图片的显示

吴鉴鹰单片机项目项目实战精讲之12864系列基于单片机驱动12864的滚动文字以及漫画图片的显示备注:相关原理图百度文库可以找到陪伴我长大的小伙伴多啦a梦首先吴鉴鹰让大家来欣赏几张漫画图片,重温一下童年的的美好时光。
这是一只可爱的老虎,可能也就画的比较可爱而已。
这是少儿的偶像喜羊羊鹰哥当时就产生了一个想法,作为一个学电子的专业的学生,能不能用液晶屏将这些图片显示出来呢?于是尝试着用12864显示着,事实证明效果还是可以的。
所以要相信电子行业很多东西,只有你想不到,没有做不到的,要敢想敢做。
下面鹰哥再带大家欣赏一下12864显示的效果:多啦A梦可爱的小老虎小狗显示喜羊羊小猫又像小老虎下面是相应的美女显示程序,只要你愿意做你也可以显示你的女神哦!程序介绍:1/******************************************************2*程序:LCD12664液晶显示原理3*4**这一讲的主要内容:LCD12664液晶显示原理5**功能描述:对滚动汉字和漫画图片的LCD12864的显示6**输入:7**液晶:Proteus元件库—AMPIRE128X64(无字库)8**内容:显示滚动汉字和漫画图片9**输出:10**11**全局变量:12**调用模块:13**14**作者:吴鉴鹰15**日期:14.03.121617备注:有什么错误的地方,欢迎各大烧友指正1819O(∩_∩)O~20*******************************************************/2122#include<AT89X52.h>23#include<intrins.h>24#include<math.h>25//#include"source.h"26#define uchar unsigned char27#define uint unsigned int2829#define LCD_databus P0//LCD12864的8位数据口3031sbit LCD_RS_OUT=P2^2;//LCD_RS_OUT为0---命令;1----数据32sbit LCD_RW_OUT=P2^1;//LCD_RW_OUT为1---写;0---读33sbit LCD_EN_OUT=P2^0;//使能端34sbit LCD_CS1_OUT=P2^4;//片选1低电平有效,控制左半屏35sbit LCD_CS2_OUT=P2^3;//片选1低电平有效,控制右半屏3637sbit KK_KEY1_OUT=P3^0;38sbit KK_KEY2_OUT=P3^1;39sbit KK_KEY3_OUT=P3^2;40sbit KK_KEY4_OUT=P3^3;41sbit KK_KEY5_OUT=P3^4;42sbit KK_KEY6_OUT=P3^5;43sbit KK_KEY7_OUT=P3^6;4445//五个按键控制口4647void CHECK_busy();4849uchar coderrrr_table[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,500x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,510x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,520x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,530x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,540x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,550x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xF0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xF8,560x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0xF8,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,570x00,0x00,0x00,0x0E,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0x87,0x13,0x00,0x00,0x00,0x00,0x00,0x00,580x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x03,0xF7,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x0E,0x30,590x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x78,0x1C,0x78,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,600x00,0x3C,0xFC,0x38,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x79,0xDE,0x71,0xDE,0x00,0x00,0x00,0x00,0x00,0x00,610x00,0x00,0x00,0x00,0x00,0x00,0x79,0x9E,0x79,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,620x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x3B,0x9E,0x78,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,630x0F,0xF7,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, 0xEF,0x37,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,640x00,0x00,0x00,0x00,0x00,0x03,0xDE,0x7B,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0xBC,0xFD,0x80,0x00,0x00,650x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x79,0xDE,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,660x79,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C, 0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,670x00,0x00,0x00,0x00,0x00,0x1E,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,680x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,690xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,700x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,710x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,720x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,730x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,740x00,0x01,0x9C,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0xC0,0x00,0x99,0x00,0x00,0x30,0x00, 0x03,0x9A,0x00,0x0C,0x23,0x00,0x00,0x00,0x02,0xC6,750x00,0x99,0x80,0x06,0xB4,0x00,0x02,0x21,0x00,0x06,0x33,0x00,0x10,0x80,0x07,0x26,0x00, 0x98,0x00,0x12,0x88,0x00,0x02,0x24,0x80,0x06,0x3F,760x00,0x1F,0xC0,0x05,0x26,0x00,0x15,0x00,0x1C,0x00,0x00,0x03,0x66,0x70,0x17,0x67,0x00, 0x0F,0x00,0x01,0xBE,0x00,0x02,0x00,0x0E,0x70,0x00,770x03,0x7E,0x00,0x17,0xE2,0x00,0x07,0x00,0x07,0x00,0x01,0xA0,0x40,0x18,0x00,0x00,0x06, 0xCE,0x00,0x0E,0x62,0x00,0x07,0x00,0x03,0xA6,0x00,780x9C,0x80,0x12,0x38,0x00,0x06,0x0F,0x80,0x06,0x62,0x00,0x06,0x00,0x03,0x08,0x00,0x84, 0x00,0x10,0xF0,0x00,0x0C,0xFC,0x00,0x06,0x22,0x00,790x1E,0x00,0x05,0x1C,0x00,0x1E,0x00,0x10,0x40,0x00,0x12,0x24,0x80,0x3E,0x42,0x00,0x1E, 0x00,0x01,0x1C,0x00,0x04,0x00,0x10,0x80,0x00,0x02,800x44,0xC0,0x3C,0x43,0x00,0x7F,0xF0,0x01,0x0E,0x00,0x04,0x00,0x11,0x10,0x80,0x02,0x64, 0x80,0x00,0x03,0x00,0x20,0x00,0x00,0xFA,0x80,0x08,810x00,0x13,0x08,0x80,0x02,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x18,0x00, 0x00,0x07,0x00,0x02,0x0C,0x00,0x00,0x00,0x00,0x00,820x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,830x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,840x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,850x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,860x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,870x00,0x00};8889unsigned char code picture_DIS[][64]={/*--调入了一幅图像:E:\学习资料\专业课程相关资料\单片机学习\吴鉴鹰单片机项目详细解析\12864项目系列\LCD12864显示\Proteus_12864程序包\12864美女图片显示\图片\1888-11120210532720.bmp--*/90/*--调入了一幅图像:C:\Users\Administrator\Desktop\新建文件夹\50406c075de5b_600x.bmp --*/91/*--宽度x高度=128x64--*/920x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,930x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,940x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,950x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,960x00,0x80,0x80,0xF0,0x1C,0x0C,0x06,0x02,0x02,0x03,0x03,0x01,0x01,0x01,0x01,0x03,970x03,0x02,0x06,0x06,0x0C,0xB8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,980x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,990x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,1000x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0x40,0x40,0x40,0x40,0xC0,0x80,0x80,0x00,0x00, 1010x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1020x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1030x00,0x00,0x80,0x80,0xC0,0xC0,0x60,0x20,0x30,0x10,0x18,0x0C,0x0C,0x06,0x06,0x03, 1040x03,0x01,0x01,0x81,0x83,0xC6,0xCC,0xEC,0xF8,0xF8,0xF8,0xF8,0xF8,0x58,0x58,0x78, 1050x78,0x78,0x6C,0x2E,0xAE,0xEB,0x69,0x38,0x3C,0x1C,0x1C,0x1C,0x1C,0x18,0x18,0x18, 1060x18,0x18,0x38,0x38,0x78,0xF8,0xD8,0x90,0x90,0xB0,0x30,0x20,0x20,0x60,0x60,0xC0, 1070xC0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1080x00,0xFC,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFD,0x0F,0x06,0x04, 1090x04,0x04,0x04,0x0C,0x0C,0x08,0x08,0x08,0x0C,0x8C,0x8C,0xCC,0xCC,0x44,0x64,0x64, 1100x24,0x24,0x24,0x24,0x34,0x34,0x34,0x24,0x24,0x24,0x24,0x24,0x64,0x64,0xC6,0xC6, 1110x87,0x87,0x05,0x05,0x00,0xC0,0xE0,0xF0,0xF8,0xF8,0xF8,0x78,0x38,0x1C,0x1C,0x0E, 1120x0E,0x07,0x07,0x83,0x83,0xC1,0xC1,0xE1,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFC, 1130xFE,0xFE,0xFE,0xFF,0xFF,0x81,0x00,0x0F,0xFC,0xC0,0x00,0x00,0x00,0x00,0x00,0xFF, 1140x00,0x00,0x00,0x02,0x03,0x03,0xE0,0x78,0x1F,0x01,0x03,0x03,0x06,0x0C,0x1C,0x78, 1150xE0,0xC0,0x01,0x01,0x03,0x06,0x06,0x0C,0x18,0x30,0x70,0xE0,0x80,0x00,0x00,0x00, 1160x00,0x3F,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x80,0x80,0x00, 1170x00,0x00,0x00,0xE0,0xF0,0x1C,0x0E,0x86,0xE3,0x31,0x19,0x0C,0x0C,0x06,0x02,0x02, 1180x03,0x03,0x01,0x01,0x01,0xF1,0xFF,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0x40, 1190x40,0xC1,0xC3,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x01,0x00,0xC0,0xF0,0xF8,0xFC, 1200xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 1210xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xE0,0x00,0x07,0x3E,0x00,0x00,0x00,0x00,0x3F, 1220x00,0x00,0x00,0x70,0x3C,0x07,0x83,0x80,0x80,0x80,0x80,0xF0,0xB8,0x0C,0x04,0x06, 1230x82,0x83,0x82,0xC3,0xC3,0xC3,0x83,0x82,0x02,0x02,0x06,0x04,0x0F,0xBF,0xFC,0xF0, 1240x00,0x00,0xC0,0xE1,0x31,0x13,0x12,0x12,0x12,0x13,0x13,0xF1,0xE1,0x61,0x31,0x3F, 1250x0E,0x00,0x00,0xFF,0xE0,0x00,0x0C,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1260x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x0E,0x1F,0x37,0x65,0x6C,0x4E,0x4E,0x4C, 1270x40,0xFF,0xFF,0xFF,0xE1,0xF3,0xFF,0xFF,0xFF,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF, 1280xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 1290xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x04,0x04,0x84,0x84,0x04,0x04,0x84,0x84, 1300x04,0x04,0x04,0x84,0x9F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7B,0xFB,0x7F,0x3F,0x1F,0x0E, 1310x2D,0x7F,0x7F,0x7F,0x77,0x77,0x7F,0x7D,0x0C,0x0C,0x0E,0x1E,0x1B,0x73,0xE1,0xFF, 1320x00,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x81,0x00,0x00,0x00, 1330x00,0x00,0x00,0x00,0x03,0x07,0x0E,0x1C,0x19,0x33,0x66,0x64,0x4C,0xD8,0xD8,0x90, 1340x90,0xB0,0xB0,0xA0,0x20,0x23,0x3F,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0, 1350x60,0x30,0x38,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xC0,0x00,0x00,0x03,0x07,0x0F,1360x0F,0x1F,0x3F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 1370xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x01,0x00,0xE0,0x7F,0x03,0x00,0x00,0x00,0xFF, 1380x80,0x00,0x00,0x00,0x03,0x1E,0x78,0xC0,0x00,0x00,0x00,0x03,0x07,0x0C,0x0C,0x98, 1390xF8,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x98,0xCC,0xFE,0x3F,0x0F,0x03, 1400x00,0x1F,0x38,0x60,0x40,0xC0,0x80,0x80,0x80,0xC0,0xC0,0x63,0x7F,0x1C,0x08,0x08, 1410x08,0x08,0x08,0x0C,0x0C,0x04,0x04,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x08,0x08,0x08, 1420x88,0x89,0xC9,0xC9,0x49,0xC9,0xF9,0x39,0x19,0x09,0x09,0x09,0x08,0x08,0x08,0x08, 1430x08,0x8C,0x8C,0xC0,0x60,0x63,0x37,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0E,0x1E,0x1C, 1440x3C,0x38,0x78,0x70,0x50,0xF0,0xF0,0xA0,0xE1,0xE1,0x43,0x43,0x43,0xC7,0xC7,0xC7, 1450x8F,0x8F,0x8F,0x9F,0xFF,0xE0,0xC0,0x80,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x3F, 1460x3F,0x00,0x00,0x08,0x98,0xF0,0xE0,0x63,0x2F,0x38,0x10,0x18,0x9C,0x8E,0x86,0xC3, 1470xC1,0x40,0x60,0x30,0x30,0x18,0x18,0x0C,0x06,0x03,0x03,0x01,0x00,0x00,0x00,0x00, 1480x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1490x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x3F, 1500x61,0xC1,0xC0,0x80,0x80,0x80,0x81,0x03,0x83,0x82,0x82,0x86,0xC6,0xC6,0x62,0x3F, 1510x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1520x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x03,0x03,0x02,0x02, 1530x02,0x06,0x06,0x06,0x04,0x04,0x05,0x05,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06, 1540x06,0x06,0x07,0x07,0x07,0x03,0x02,0x02,0x03,0x03,0x03,0x01,0x01,0x01,0x00,0x00, 1550x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 156};157158159unsigned char code picture_DIS_ONE[][64]={160/*--调入了一幅图像:C:\Users\Administrator\Desktop\新建文件夹\20070708032327421.bmp --*/161/*--宽度x高度=128x64--*/1620x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1630x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1640x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1650x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1660x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1670x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 1680x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x7C,0xF8,0xEC,0xFF,0xDF,0xCE,0xCE,0xCE, 1690xC0,0xC4,0xEC,0xFC,0xFC,0x6C,0x1C,0xF8,0xF8,0xF8,0xF0,0xE0,0xC0,0x80,0x80,0x00, 1700x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,1710x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,1720x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,1730x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,1740x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0, 1750xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0, 1760xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, 1770x01,0x03,0x0F,0xFF,0xFF,0xFF,0xFB,0xFB,0xBD,0xBC,0x1D,0x1B,0xFF,0xFF,0xFF,0xFE, 1780x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,1790x00,0x78,0xFF,0xFF,0xC3,0x83,0xEF,0xF9,0xFB,0xFB,0xFF,0x37,0x3E,0x1C,0xB8,0xAC, 1800xFC,0xFC,0xFC,0xFE,0xFE,0xFE,0xFC,0xFC,0xFC,0x7C,0xFC,0xFC,0xFC,0xFC,0x7C,0xFC ,1810xFA,0xBF,0x7F,0xF7,0xF7,0xE7,0xE7,0xE6,0x76,0x76,0x76,0x76,0x66,0x6E,0x7E,0xFE, 1820xFE,0xFF,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xEF,0x8F,0x0F,0x1F,0x3F,0x7F,0xFB,0xFB, 1830xF3,0xE3,0x03,0x07,0x0F,0x1F,0x3E,0xFE,0xFD,0xF9,0xF3,0x83,0x07,0x0F,0x1F,0x7F, 1840xFF,0xFD,0xFB,0xE7,0x0F,0x3F,0xFF,0xFE,0xFE,0xFC,0xFC,0x1C,0x1C,0x1C,0x3C,0x7E, 1850xFE,0x7E,0x0F,0x9F,0xBF,0xFF,0xFF,0xFB,0xC3,0xE7,0xF7,0xFE,0xFF,0x7F,0x3F,0x1F, 1860x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0x60, 1870x38,0x3C,0x3E,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x33,0x39,0x18,0x00,0x00,0x00, 1880x80,0x83,0x01,0x01,0x01,0x01,0xF1,0xF9,0xFD,0xFC,0xFC,0xFF,0xFF,0xFC,0xFE,0xFF, 1890xF8,0x6C,0x0C,0x40,0xC1,0xC1,0xC1,0xE6,0xFF,0xFF,0xFD,0xFD,0xEC,0xEC,0x70,0x78, 1900x3D,0x3F,0x1F,0x00,0x00,0x03,0x07,0x3F,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x03, 1910x1F,0xFF,0xFF,0xFC,0xF8,0x00,0x00,0x01,0x03,0xFF,0xFF,0xFF,0x0E,0x00,0x00,0x00, 1920xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x03,0xEF,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x03, 1930x0F,0xFF,0xFF,0xF9,0xE1,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, 1940x00,0x00,0x00,0x00,0x04,0x04,0x04,0x24,0x34,0x14,0x1F,0x1F,0x3D,0x3D,0xF7,0xE3, 1950xE4,0xE0,0xE0,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xBE,0x3E,0x5E,0xBC,0xAE,0xAF, 1960xF7,0xF3,0xF9,0x58,0x58,0xC8,0xC8,0xE9,0xF9,0xFB,0xFB,0xFB,0xFB,0x9B,0x1B,0x01, 1970x00,0x00,0x03,0x03,0x87,0xA7,0xB6,0x67,0x67,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0x40, 1980x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x3F,0x1F,0x1F,0x0F,0x00,0x00,0x00, 1990x00,0x0F,0x0F,0x0F,0x03,0x00,0x00,0x00,0x04,0x07,0x87,0x80,0x80,0x00,0x00,0x03, 2000x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,2010xFC,0xFF,0xFF,0x1F,0x0F,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2020x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0xBF, 2030xB7,0xB3,0xB0,0xB0,0xF0,0xF8,0xFC,0xDF,0xFF,0xF1,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF, 2040xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0xBF,0xBF,0xDF,0xFF,0x6F,0x77,0x3B,0x19,0x19,0x0C, 2050x6C,0xEC,0xE6,0xE6,0xC7,0xCF,0x8F,0x8F,0x9F,0xBE,0x9C,0x81,0x81,0x81,0x81,0x80,2060x00,0x00,0xE0,0xE0,0xF8,0x7E,0x3E,0x3E,0x38,0x38,0x38,0x30,0xF0,0xF0,0xF8,0xF8, 2070xF8,0xF8,0xD8,0xDC,0xDC,0xDE,0x1E,0x0E,0xFE,0xFF,0xFF,0x67,0x67,0xE7,0xCF,0x1E, 2080x1C,0x3E,0x36,0x7E,0xFE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEF,0x6F,0x77,0x77,0xB8,0x98, 2090x03,0x0F,0xBF,0xFC,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 2100x38,0xFC,0xFC,0xFE,0xFE,0xFE,0x3E,0xAE,0x8E,0x8F,0x0F,0x0F,0x0F,0x0F,0xCF,0xEF, 2110xE7,0x7F,0x79,0x3C,0x1C,0x3D,0x39,0x19,0x0F,0x0F,0x08,0x0E,0x07,0x0D,0x07,0x07, 2120x07,0x07,0x07,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2130x00,0x00,0x01,0x03,0x0F,0x1F,0x3F,0x7D,0xFF,0xFF,0xDF,0xDD,0xDD,0xDD,0xCD,0xEE, 2140x6E,0x60,0x1F,0x3F,0xFD,0xFC,0xFC,0xBC,0x18,0xF8,0xF8,0xF8,0xF8,0xFF,0xFF,0x6F, 2150x8F,0xCF,0xCE,0xCE,0x0E,0x8E,0xC0,0xFE,0xFF,0xFF,0x3F,0x01,0x03,0x03,0x01,0xC0, 2160xC0,0xE0,0xE0,0x70,0xF0,0xF1,0x3F,0x3F,0x3F,0x3F,0x1F,0x1E,0x1E,0x1F,0x3F,0x3B, 2170x31,0xC0,0xFF,0xFF,0xFF,0x7C,0x31,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 2180x00,0x00,0x01,0x01,0x03,0x03,0x07,0x07,0x0F,0x0E,0x0E,0x0E,0x0F,0x0F,0x0F,0x03, 2190x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2200x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2210x00,0x38,0x7C,0x7E,0x7F,0x67,0x73,0x7B,0xFB,0xDF,0xCF,0xC3,0xE1,0xF1,0xF1,0xF0, 2220xC0,0xC0,0xC0,0xE6,0xFF,0xFF,0x7F,0x73,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03, 2230x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x03, 2240x03,0x03,0x07,0x0F,0x0F,0x1D,0x19,0x18,0x1F,0x1F,0x1F,0x3B,0x39,0x38,0x38,0x1C, 2250x1C,0x1F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 226};227228unsigned char code picture_DIS_TWO[][64]={229/*--调入了一幅图像:C:\Users\Administrator\Desktop\新建文件夹\u=2035217269,1567906622&fm=21&gp=0.bmp--*/230/*--宽度x高度=128x64--*/2310x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x18,0x1C,0x1E,0x1F,0x1F, 2320x1E,0x1F,0x1F,0x1E,0x1E,0x0C,0x0C,0x18,0x10,0x10,0x10,0x10,0x10,0x18,0x88,0x8C, 2330x84,0x84,0x42,0x42,0x42,0x42,0xE2,0xC2,0x0A,0x0A,0x0A,0x0E,0x0C,0x7C,0x3C,0x08, 2340x08,0x88,0xD0,0x70,0x60,0x60,0x40,0x40,0x40,0x40,0xC0,0x80,0x80,0x00,0x00,0x00, 2350x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2360x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2370x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2380x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2390x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0F,0x1A,0x12,0x36,0x24,0x64,0x48,0xC0, 2400x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0x81,0x81,2410x01,0x03,0x02,0x06,0x06,0x07,0x01,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x38,0x0E, 2420x03,0x01,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x06,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE, 2430x04,0x0C,0x3C,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2440x00,0x00,0x00,0x00,0x00,0xE0,0xB8,0x0C,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, 2450x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2460x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2470x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 2480x80,0x81,0x83,0x86,0x84,0xBC,0xF8,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x19, 2490x18,0x03,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x8C,0x98,0xF0,0xE0, 2500x40,0x80,0x87,0x0F,0x0F,0x07,0x07,0x83,0x80,0xC3,0x43,0x43,0x60,0x61,0x21,0x31, 2510x10,0x18,0x0C,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2520x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0C,0x18,0xF7,0xE7,0xCC,0x18,0x30,0xE0,0x80, 2530x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2540x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2550x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0x4F, 2560x6F,0x3F,0x3F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0xBF,0xBE,0x3E,0x3E,0x3E,0x3E, 2570x3E,0x3E,0x3E,0xBE,0x9E,0x9E,0x9F,0x5F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x0F,0x1F, 2580x13,0x30,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0xA0,0xA0,0xB0,0x90,0x90,0x90, 2590x90,0x90,0x98,0x88,0x88,0x88,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, 2600x08,0x08,0x08,0x18,0x10,0x10,0x18,0x3C,0x26,0x23,0x63,0x63,0x60,0xF0,0xBC,0x07, 2610x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2620x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2630x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x07,0x0F,0x78,0xE0, 2640x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x7B,0x3B,0x81,0xF8,0x1C,0x06, 2650x02,0x02,0x7B,0xFD,0xFC,0xFE,0xFE,0x7E,0x7E,0x3E,0x1E,0x00,0x00,0x00,0x00,0x00, 2660x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x07,0x07,0x07, 2670x1F,0x3F,0x3F,0x3F,0x07,0x07,0x3F,0x3F,0x38,0x38,0x38,0x38,0x00,0x00,0x00,0x00, 2680x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x0E,0x0E,0x04,0x00,0x00,0x00,0x01,0x03, 2690x02,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2700x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2710x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2720x00,0x01,0x03,0x06,0x04,0x04,0x8C,0xC8,0x48,0x78,0x30,0x0C,0x07,0x83,0x80,0x00, 2730x00,0x00,0x03,0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80, 2740x80,0xE0,0x7E,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2750x00,0x00,0x00,0x00,0x00,0x01,0x02,0x06,0x04,0x0C,0x08,0x18,0x30,0x20,0x20,0x40, 2760x40,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x06,0x0E,0x0E,2770x0E,0x0C,0x0C,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x06,0x04,0x04,0x0C,0xCC,0xC8, 2780xC8,0x88,0x98,0x30,0x20,0x60,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 2790xC0,0xE0,0xB0,0xF0,0x50,0x78,0xA8,0x98,0xD8,0x58,0x58,0x58,0x50,0xF0,0xA0,0x20, 2800x30,0x30,0x18,0x0C,0x06,0x03,0x23,0x70,0x30,0x30,0x00,0x00,0x03,0x83,0xC3,0x43, 2810x40,0x60,0x30,0x30,0x10,0x18,0x08,0x0C,0x04,0x06,0x02,0x02,0x03,0x01,0x01,0x83, 2820xC2,0xC2,0xC2,0xC6,0xCE,0x5A,0x72,0x62,0x46,0xC6,0x86,0x84,0x04,0x04,0x04,0x34, 2830x74,0x64,0x1C,0x7C,0x44,0xC6,0x26,0x7A,0xFA,0xDE,0xF6,0x82,0x02,0xE2,0x93,0x01, 2840x01,0x01,0x01,0x00,0x81,0xF1,0x19,0x0F,0x05,0x03,0x03,0x03,0x03,0x02,0x02,0x02, 2850x02,0x02,0x02,0x02,0x02,0x02,0x02,0x06,0x84,0xC4,0xCC,0xC8,0x48,0xD8,0xF0,0x61, 2860x41,0x41,0x41,0x80,0x80,0xC0,0x40,0xC1,0x81,0x83,0x06,0x0C,0x08,0x18,0x70,0xC0, 2870xC3,0xC7,0xC5,0xCE,0xDA,0xD1,0xF1,0xF8,0xEC,0xE4,0xE6,0xC2,0xC2,0xC3,0xC3,0xE2, 2880xE0,0xE0,0xF0,0xD8,0xD8,0xC8,0xCC,0xC4,0xC4,0xC4,0xC6,0xC3,0xC1,0xC1,0xC0,0xC0, 2890xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC6,0xDF, 2900xD7,0xDF,0xDF,0xF9,0xF0,0xE0,0xFE,0xE3,0xE1,0xE1,0xE0,0xE1,0xE1,0xE1,0xE0,0xF0, 2910xD8,0xCC,0xC6,0xC3,0xC1,0xC1,0xC0,0xC0,0xC0,0xC0,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1, 2920xC1,0xC1,0xC1,0xC1,0xC1,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0, 2930xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xCF,0xC9,0xDE,0xDB,0xD0,0xDF,0xD1,0xD0,0xF0, 2940xF0,0xF0,0xFF,0xF1,0xF0,0xF0,0xF0,0xF0,0xD0,0xD0,0xD8,0xCC,0xC2,0xC3,0xC1,0xC0, 295};296297298unsigned char code picture_DIS_THREE[][64]={299/*--调入了一幅图像:C:\Users\Administrator\Desktop\新建文件夹\picture1240x3205580988506.bmp--*/300/*--宽度x高度=128x64--*/3010x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,3020x00,0x00,0x00,0xC0,0x60,0x20,0x10,0x10,0x18,0x08,0x08,0x08,0x08,0x04,0x04,0x04, 3030x04,0x04,0x08,0x08,0x08,0x08,0x18,0x90,0xF0,0xC0,0x00,0x00,0x3E,0x62,0x82,0xE1, 3040x81,0x81,0xC1,0x22,0x82,0x82,0xC6,0x6C,0x38,0x00,0x80,0x40,0x40,0x20,0x00,0x30, 3050x18,0x08,0x04,0x04,0x00,0x04,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,3060x02,0x01,0x01,0x01,0x02,0x02,0x06,0x04,0x06,0x02,0x02,0x02,0x04,0x06,0x0D,0x08, 3070x08,0x09,0x03,0x0A,0x0C,0x0C,0x18,0x30,0x20,0x20,0x20,0x20,0x40,0x80,0x80,0x80, 3080x80,0x80,0xC0,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00, 3090x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,3100x00,0x00,0x03,0x06,0x0E,0x0C,0x1C,0x18,0x18,0x18,0x18,0x18,0xD8,0x38,0x38,0x58, 3110x58,0x5C,0x3C,0x1C,0x0E,0x0A,0x07,0x03,0x03,0x00,0x02,0x02,0x02,0x04,0x03,0x07,3120x07,0x0E,0x0A,0x0B,0x0B,0x13,0x96,0xD8,0xF8,0x30,0x37,0x18,0x90,0x90,0x90,0x90, 3130x90,0x90,0x20,0x00,0x20,0x10,0x10,0x00,0x00,0x10,0x18,0x08,0x84,0x84,0x84,0x44, 3140x46,0x44,0x4C,0x48,0xC8,0x88,0x88,0x0C,0x08,0x08,0x18,0x10,0x10,0x10,0xF0,0x40, 3150x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03, 3160x03,0x07,0x07,0xCF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,0x03,0x01,0x00,0x00,0x00, 3170x80,0xC0,0xE0,0x60,0x30,0x30,0x18,0x38,0xFC,0xFC,0xFC,0xFC,0xFC,0x3C,0x3C,0x3C, 3180x78,0xF0,0x80,0x80,0x00,0x00,0xE0,0x30,0x1C,0x06,0x02,0x01,0x01,0x00,0x00,0x00, 3190x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x90,0x90,0xD8,0xC8,0xC8, 3200x18,0x10,0xF8,0x7C,0xDE,0x67,0x3B,0xCC,0x36,0x1A,0x87,0xC3,0xFF,0xFF,0xFF,0x1F, 3210xC7,0x33,0x8F,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x1E,0x21,0x40,0x5C,0x9E, 3220xBE,0xBE,0xBE,0x9A,0xDE,0x40,0x61,0x33,0x1E,0x00,0x00,0x00,0x80,0xF0,0x7F,0x9E, 3230x80,0xC0,0x7F,0x30,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3240x00,0x00,0x00,0x00,0x00,0x00,0x18,0x1D,0x16,0x30,0xE0,0x00,0x00,0x00,0x00,0x00, 3250x0F,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x0C,0x0F,0x07,0x07,0x07,0x02,0x02,0x06, 3260x04,0x0C,0x08,0x09,0x09,0x1D,0xFB,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3270x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x02,0x02,0x02,0x32, 3280xFE,0xFE,0xEF,0x18,0xE3,0x00,0xFF,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x0F,0xC0,0x78, 3290x07,0x1F,0x1F,0x3F,0x1F,0x1E,0x0F,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 3300x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x8E,0x03,0x01,0x00, 3310x00,0x00,0x00,0x00,0x03,0x02,0x04,0x00,0x04,0x04,0x08,0x00,0x00,0x00,0x00,0x00, 3320x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC4,0x4E,0x3B,0x00,0x00,0x00,0x00,0x00, 3330x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3340x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x04,0x04, 3350x08,0x00,0x08,0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0xF0,0x98,0x08,0x08, 3360x0B,0x0F,0xFF,0xDC,0x71,0x43,0x47,0x4E,0x5F,0x5F,0x5F,0x5F,0x5F,0x98,0x0F,0x00, 3370x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x23,0x41,0x80,0xBC,0xBC,0xBE,0x3E,0xBC,0xBC, 3380x9C,0x41,0x63,0x3E,0x00,0x00,0x00,0x00,0x80,0xF0,0x7F,0x9C,0x83,0x46,0x44,0x38, 3390x18,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x08,0x04,0x00,0x00,0x00,0x00,0x00, 3400x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x11,0x1B,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 3410x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3420x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3430x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1C,0x30, 3440xE0,0x30,0x18,0x89,0x8F,0x06,0x04,0x04,0xE4,0x90,0x10,0x04,0x04,0x04,0x05,0x89, 3450x99,0x71,0x03,0x0C,0x08,0x00,0x08,0x08,0x08,0x18,0x10,0x10,0x10,0x10,0x08,0x08, 3460x08,0x08,0x18,0x08,0x0C,0x04,0x04,0x02,0x03,0x02,0x03,0x00,0x00,0x00,0x00,0x00, 3470x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x40,3490x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3500x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3510x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3520x07,0x1F,0x31,0x40,0x40,0x7D,0x63,0x81,0x81,0x81,0x83,0x47,0x79,0x11,0x31,0x21, 3530x61,0x42,0xC2,0x82,0x84,0x04,0x04,0x04,0x08,0x08,0x18,0x90,0x60,0x40,0x40,0x40, 3540xC0,0x40,0x20,0x40,0x40,0x40,0x80,0x80,0xC0,0xC0,0x40,0x20,0x20,0x20,0x00,0x20, 3550x20,0x20,0x18,0x1C,0x1C,0x3C,0x7C,0xFC,0xFC,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFC, 3560xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3570x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3580x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3590x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3600x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3610x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, 3620x03,0x06,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3630x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x7F,0xFF,0xFF,0x7F,0x3F,0x1F, 3640x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 365366};367368369unsigned char code picture_DIS_FOUR[][64]={370/*--调入了一幅图像:C:\Users\Administrator\Desktop\新建文件夹\u=3745094681,1433150117&fm=21&gp=0.bmp--*/371/*--宽度x高度=128x64--*/3720x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3730x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3740x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3750x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x60,0x20,0x30,0x10,0x30,0x30,0x20, 3760x20,0x60,0x40,0x40,0x60,0x40,0x40,0x40,0x40,0x60,0x20,0x20,0xB0,0x90,0xD8,0xC8, 3770xC8,0x48,0x64,0x64,0x64,0xE6,0xA2,0xE2,0xB2,0xF2,0xF2,0xF2,0xF2,0xB2,0xB2,0xB2, 3780xB2,0xB2,0xB6,0xF4,0xF4,0x6C,0x28,0x08,0x08,0x0C,0x04,0x04,0x02,0x82,0xC2,0x42, 3790xC3,0xC1,0x01,0x01,0x01,0x83,0xE2,0x3E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3800x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3810x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 3820x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,。
12864液晶图像显示图文教程——最全版

由图可以看到水平坐标一个单位是两字节(即 16 位 D15~D0),X 地址会自动加 1,是直接加一个单位 (即两字节 16 位),比如 0001(也即 0X80+000X80+01),从第一行第一列跳到第一行第二列。 代码: void display_image(uchar *p) { uchar i,j; write_cmd(0x34);//扩充指令集动作 write_cmd(0x34);//关绘图显示功能 /*上半屏显示设置*/ for(i=0;i<32;i++)//上半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x80); //水平地址 for(j=0;j<16;j++) { write_data(*p);//连续写入 16 个字节 p++; } } /*下半屏半屏显示设置*/ for(i=0;i<32;i++)//下半屏 { write_cmd(0x80+i);//垂直地址 write_cmd(0x88);//水平地址 for(j=0;j<16;j++)//连续写入 16 个字节 { write_data(*p); p++; } } write_cmd(0x36);//开绘图显示 write_cmd(0x30);//回到基本指令集 } 源程序: #include <reg52.h> #include "12864.h" X 坐标(水平)方向以 2 字节 Byte 为单位,Y 坐标(垂直) 方向以 1 位 Bit 为单位,先连续写入垂直与水平坐标,再写入 两字节数据到 GDRAM。 这里是这样进行的:i=0 时,j=0,1 时,写入两字节到垂直 (0X80+00)水平(0X80+00)这格(D15~D0)里;然后 X 坐标地址自增 1, 地址变为垂直 (0X80+00) , 水平 (0X80+01) 这格,在 j=2,3 时写入两字节,………一直到垂直(0X80+00) 水平(0X80+07)这格,在 j=14,15 时写入两字节,此时循环 for(j=0;j<16;j++)结束跳出,刚好第一行 128 位写完数据;然后 i++,开始写第二行……
12864各种画图程序(带字库修改)

12864各种画图程序(带字库修改)/************************************************************** *********************************************************************************** ************ *********///程序说明:本程序为12864(st7920)驱动程序,只实现了最简单的显示功能//端口设置:RS、RW、EN分别为P0口的0、1、2,数据口为P2口//注意:1.要想在液晶屏上同时显示自定义字库和绘图,必须先显示自定义字库// 2.本程序所有函数均有用且正确,由于我的keil未破解不能编译,所以将其注释了// 3.用取模软件取的图形或汉字必须是逐行取的,因为本函数是在液晶上逐行打点的/****************************************************************** ******************************************************************************* **********/ #include#include //内含-NOP-函数#include //内含rand()函数#define uchar unsigned char#define uint unsigned int//**********宏定义所需指令#define BASIC_SET 0x30#define EXTEND_SET 0x34#define DRAW_ON 0x36#define DRAW_OFF 0x34//*************端口定义sbit LCD_RS = P0^0;sbit LCD_RW = P0^1;sbit LCD_EN = P0^2;//************变量定义//uchar dis1[10];//****************短延时void delay(uint k){uint i;uchar j;for(i = 0; i < k ;i ++)for(j = 0; j < 10 ;j ++);}//***********ms级延时函数/*void delay_1ms(uint x) {uint i,j;for(j = 0;j < x; j++)for(i = 0;i < 110; i++);} *///***********12864写指令函数void write_com(uchar cmd) {LCD_RS = 0;LCD_RW = 0;P2 = cmd;delay(5);LCD_EN = 1;delay(5);LCD_EN = 0;}//********12864写数据函数void write_dat(uchar dat){LCD_RS = 1;LCD_RW = 0;P2 = dat;delay(5);LCD_EN = 1;delay(5);LCD_EN = 0;}//****************从LCD中读数据uchar read_dat(void){uchar temp;P2 = 0XFF; //释放数据线LCD_RS = 1; //数据LCD_RW = 1; // 读模式LCD_EN = 1; //E为高电平进行读数据或指令delay(1); temp = P2;LCD_EN = 0;return temp;}//******************************************************** //设置光标(地址)函数//参数说明:x---为行号,y为列号//******************************************************** void set_cursor(unsigned char x, unsigned char y) {unsigned char i;switch(x) //确定行号{case 0x00: i=0x80; break; //第一行case 0x01: i=0x90; break; //第二行case 0x02: i=0x88; break; //第三行case 0x03: i=0x98; break; //第四行default : break;}i = y+i; //确定列号write_com(i);}//********************************************************//显示字符函数//********************************************************void display_char(unsigned char Alphabet){write_dat(Alphabet); //写入需要显示字符的显示码}//********************************************************//指定位置显示字符串函数//参数说明:x为行号,y为列号//********************************************************void display_string(unsigned char x,unsigned char y,unsigned char *Alphabet) {unsigned char i=0;set_cursor(x,y); //设置显示的起始地址while(Alphabet[i]!='\0'){write_dat(Alphabet[i]); //写入需要显示字符的显示码i++;}}//***********************以下为GDRAM绘图部分***************************////*********************绘图显示的清屏函数(因清屏指令在画图时不能用)------------------------------------------------------------------------------注意void gui_clear(){uchar i , j , k;write_com(EXTEND_SET);//扩展指令集,8位数据传输write_com(DRAW_OFF);//绘图显示关闭for(i = 0; i < 2; i ++)//分上下两屏写{for(j = 0; j < 32; j ++){write_com(0x80 + j);//写y坐标delay(1);if(i == 0) //写x坐标{write_com(0x80);delay(1);}else //写下半屏{write_com(0x88);delay(1);}for(k = 0; k < 16; k ++)//写一整行数据{write_dat(0x00);//写高字节write_dat(0x00);//写低字节delay(1);}}}write_com(DRAW_ON);//打开绘图显示write_com(BASIC_SET);//打开基本指令集}//************************************************************* *****//*****有反白显示功能的打点函数***********//参数:color=1,该点填充1;color=0,该点填充白色0;//************************************************************* ******void GUI_Point(unsigned char x,unsigned char y,unsigned char color){unsigned char x_Dyte,x_byte; //定义列地址的字节位,及在字节中的哪1位unsigned char y_Dyte,y_byte; //定义为上下两个屏(取值为0,1),行地址(取值为0~31)unsigned char GDRAM_hbit,GDRAM_lbit;write_com(0x36); //扩展指令命令/***X,Y坐标互换,即普通的X,Y坐标***/x_Dyte=x/16; //计算在16个字节中的哪一个x_byte=x&0x0f; //计算在该字节中的哪一位y_Dyte=y/32; //0为上半屏,1为下半屏y_byte=y&0x1f; //计算在0~31当中的哪一行write_com(0x80+y_byte); //设定行地址(y坐标),即是垂直地址write_com(0x80+x_Dyte+8*y_Dyte); //设定列地址(x坐标),并通过8*y_Dyte选定上下屏,即是水平地址read_dat(); //预读取数据GDRAM_hbit= read_dat(); //读取当前显示高8位数据GDRAM_lbit= read_dat(); //读取当前显示低8位数据delay(1);write_com(0x80+y_byte); //设定行地址(y坐标)write_com(0x80+x_Dyte+8*y_Dyte); //设定列地址(x坐标),并通过8*y_Dyte选定上下屏delay(1);if(x_byte<8) //判断其在高8位,还是在低8位{if(color==1){write_dat(GDRAM_hbit|(0x01<<(7-x_byte))); //置位GDRAM 区高8位数据中相应的点}elsewrite_dat(GDRAM_hbit&(~(0x01<<(7-x_byte)))); //清除GDRAM区高8位数据中相应的点write_dat(GDRAM_lbit); //显示GDRAM区低8位数据}else{write_dat(GDRAM_hbit);if(color==1)write_dat(GDRAM_lbit|(0x01<<(15-x_byte))); //置位GDRAM 区高8位数据中相应的点elsewrite_dat(GDRAM_lbit&(~(0x01<<(15-x_byte))));//清除GDRAM区高8位数据中相应的点}write_com(0x30); //恢复到基本指令集}//***********(给定坐标并打点的)任意位置打点函数void lcd_set_dot(uchar x,uchar y){uchar x_byte,x_bit;//确定在坐标的那一字节哪一位uchar y_ping , y_bit;//确定在坐标的哪一屏哪一行uchar tmph , tmpl;//定义两个临时变量,用于存放读出来的数据write_com(EXTEND_SET);//扩展指令集write_com(DRAW_OFF);//绘图显示关闭x_byte = x / 16;//算出在哪一字节,注意一个地址是16位的x_bit = x % 16;//& 0x0f;//算出在哪一位y_ping = y / 32;//确定在上半屏还是下半屏,0代表上半屏,1代表下半屏y_bit = y % 32;//& 0x1f;//确定在第几行write_com(0X80 + y_bit);//先写垂直地址(最高位必须)write_com(0x80 + x_byte + 8 * y_ping);//水平坐标,下半屏坐标起始地址为0x88,(+8*y_ping)就是用来确定上半屏还是下半屏read_dat();//预读取数据tmph = read_dat();//读取当前显示高8位数据tmpl = read_dat();//读取当前显示低8位数据delay(1);write_com(0x80 + y_bit);//读操作会改变AC,所以重新设置一下write_com(0x80 + x_byte + 8 * y_ping);delay(1);if(x_bit < 8){write_dat(tmph | (0x01 << (7 - x_bit)));//写高字节,因为坐标是从左向右的,GDRAM 高位在昨,低位在右write_dat(tmpl);//原低位数据送回}else{write_dat(tmph);//原高位数据送回write_dat(tmpl | (0x01 << (15 - x_bit)));}write_com(DRAW_ON); //打开绘图显示write_com(BASIC_SET);//回到基本指令集}//************画水平线函数**********************************// //x0、x1为起始点和终点的水平坐标,y为垂直坐标***************////**********************************************************// void gui_hline(uchar x0, uchar x1, uchar y){uchar bak;//用于对两个数互换的中间变量,使x1为大值if(x0 > x1){bak = x1;x1 = x0;x0 = bak;}do{lcd_set_dot(x0 , y);//从左到右逐点显示x0 ++;}while(x1 >= x0);}//***********画竖直线函数***********************************// //x为起始点和终点的水平坐标,y0、y1为垂直坐标***************////**********************************************************// void gui_rline(uchar x, uchar y0, uchar y1)uchar bak;//用于对两个数互换的中间变量,使y1为大值if(y0 > y1){bak = y1;y1 = y0;y0 = bak;}do{lcd_set_dot(x , y0);//从上到下逐点显示y0 ++;}while(y1 >= y0);}//*********任意两点间画直线*********************************// //x0、y0为起始点坐标,x1、y1为终点坐标**********************// //**********************************************************// void gui_line(uchar x0 , uchar y0 , uchar x1 , uchar y1){char dx;//直线x轴差值char dy;//直线y轴差值char dx_sym;//x轴增长方向,为-1时减值方向,为1时增值方向char dy_sym;//y轴增长方向,为-1时减值方向,为1时增值方向char dx_x2;//dx*2值变量,用于加快运算速度char dy_x2;//dy*2值变量,用于加快运算速度char di; //决策变量if(x0 == x1)//判断是否为垂直线{gui_rline(x0 , y0 , y1);//画垂直线return;}if(y0 == y1)//判断是否为水平线{gui_hline(x0 , x1 , y0);//画水平线return;}dx = x1 - x0;//求取两点之间的差值dy = y1 - y0;//****判断增长方向,或是否为水平线、垂直线、点*// if(dx > 0)//判断x轴方向dx_sym = 1;else{if(dx < 0)dx_sym = -1;else{gui_rline(x0 , y0 , y1);return;}}if(dy > 0)//判断y轴方向dy_sym = 1;elseif(dy < 0)dy_sym = -1;else{gui_hline(x0 , x1 , y0);return;}}/*将dx、dy取绝对值***********/dx = dx_sym * dx;dy = dy_sym * dy;/****计算2倍的dx、dy值*******/dx_x2 = dx * 1;//我改为了一倍,这样才跟真实的两点对应dy_x2 = dy * 1;/***使用bresenham法进行画直线***/if(dx >= dy)//对于dx>=dy,使用x轴为基准{di = dy_x2 - dx;while(x0 != x1){lcd_set_dot(x0,y0);x0 +=dx_sym;if(di < 0)di += dy_x2;//计算出下一步的决策值else{di += dy_x2 - dx_x2;y0 += dy_sym;}lcd_set_dot(x0, y0);//显示最后一点}else //对于dx<dy使用y轴为基准< bdsfid="385" p=""></dy 使用y轴为基准<>{di = dx_x2 - dy;while(y0 != y1){lcd_set_dot(x0, y0);y0 += dy_sym;if(di < 0)di += dx_x2;else{di += dx_x2 - dy_x2;x0 += dx_sym;}}lcd_set_dot(x0, y0);//显示最后一点}}//************************************************************* **************// //*******************画指定宽度的任意两点之间的直线**************************// //参数说明:x0、y0为起始点坐标,x1、y1为终点坐标,with为线宽*****************// //***************************************************************** **********// void gui_linewith(uchar x0 , uchar y0 , uchar x1 , uchar y1 , uchar with){char dx; // 直线x轴差值变量char dy; // 直线y轴差值变量char dx_sym; // x轴增长方向,为-1时减值方向,为1时增值方向char dy_sym; // y轴增长方向,为-1时减值方向,为1时增值方向char dx_x2; // dx*2值变量,用于加快运算速度char dy_x2; // dy*2值变量,用于加快运算速度char di; // 决策变量char wx, wy; // 线宽变量char draw_a, draw_b;// 参数过滤if(with==0) return;if(with>50) with = 50;dx = x1-x0; // 求取两点之间的差值dy = y1-y0;wx = with/2;wy = with-wx-1;//判断增长方向,或是否为水平线、垂直线、点if(dx>0) // 判断x轴方向{dx_sym = 1; // dx>0,设置dx_sym=1 }else{if(dx<0){dx_sym = -1; // dx<0,设置dx_sym=-1 }else{//dx==0,画垂直线,或一点wx = x0-wx;if(wx<0) wx = 0;wy = x0+wy;{x0 = wx;gui_rline(x0, y0, y1);if(wx>=wy) break;wx++;}return;}}if(dy>0) // 判断y轴方向{dy_sym = 1; // dy>0,设置dy_sym=1}else{if(dy<0){dy_sym = -1; // dy<0,设置dy_sym=-1 } else{//dy==0,画水平线,或一点wx = y0-wx;if(wx<0) wx = 0;wy = y0+wy;while(1){y0 = wx;gui_hline(x0, x1, y1);if(wx>=wy) break;}return;}}// 将dx、dy取绝对值dx = dx_sym * dx;dy = dy_sym * dy;//计算2倍的dx及dy值dx_x2 = dx*2;dy_x2 = dy*2;//使用Bresenham法进行画直线if(dx>=dy) // 对于dx>=dy,则使用x轴为基准{ di = dy_x2 - dx;while(x0!=x1){//x轴向增长,则宽度在y方向,即画垂直线draw_a = y0-wx;if(draw_a<0) draw_a = 0;draw_b = y0+wy;gui_rline(x0, draw_a, draw_b);x0 += dx_sym;if(di<0){di += dy_x2; // 计算出下一步的决策值}else{di += dy_x2 - dx_x2;y0 += dy_sym;}}draw_a = y0-wx;if(draw_a<0) draw_a = 0;draw_b = y0+wy;gui_rline(x0, draw_a, draw_b);}else // 对于dx<dy,则使用y轴为基准{< bdsfid="500" p=""></dy,则使用y轴为基准{<>di = dx_x2 - dy;while(y0!=y1){//y轴向增长,则宽度在x方向,即画水平线draw_a = x0-wx;if(draw_a<0) draw_a = 0;draw_b = x0+wy;gui_hline(draw_a, y0, draw_b);y0 += dy_sym;if(di<0){di += dx_x2;}else{di += dx_x2 - dy_x2;x0 += dx_sym;}}draw_a = x0-wx;if(draw_a<0) draw_a = 0;draw_b = x0+wy;gui_hline(draw_a, y0, draw_b);}//***********画矩形函数*************************************// //x0、y0为矩形左上角坐标值,x1、y1为矩形右下角坐标值********////**********************************************************// void gui_rectangle(uchar x0 , uchar y0 , uchar x1 , uchar y1) {gui_hline(x0 , x1 , y0);gui_rline(x0 , y0 , y1);gui_rline(x1 , y0 , y1);gui_hline(x0 , x1 , y1);}//****************画填充矩形函数****************************// //x0、y0为矩形左上角坐标值,x1、y1为矩形右下角坐标值********////**********************************************************///*void gui_rectangle_fill(uchar x0 , uchar y0 , uchar x1 , uchar y1) {uchar i;//转换数据的中间变量,使x1、y1大if(x0 > x1){i = x0;x0 = x1;x1 = i;}if(y0 > y1){i = y0;y0 = y1;y1 = i;}//***判断是否是直线***//* if(y0 == y1)//画水平线{gui_hline(x0 , x1 , y0);return;}if(x0 == x1)//画竖直线gui_rline(x0 , y0 , y1);return;}while(y0 <= y1)//画填充矩形{gui_hline(x0 , x1 , y0);y0 ++;}} *///*******************画正方形函数*************************// //x0、y0为正方形左上角坐标,with正方形边长****************// //********************************************************// /*void gui_square(uchar x0 , uchar y0 , uchar with){if(with == 0)return;if((x0 + with) > 127)//横轴超出液晶边界return;if((y0 + with) > 63)return;gui_rectangle(x0 , y0 , x0 + with , y0 + with);} *///****************画填充正方形函数*************************// //x0、y0为正方形左上角坐标,with正方形边长*****************// //*********************************************************///*void gui_square_fill(uchar x0 , uchar y0 , uchar with) {if(with == 0)return;if((x0 + with) > 127)//横轴超出液晶边界return;if((y0 + with) > 63)return;gui_rectangle_fill(x0 , y0 , x0 + with , y0 + with);} *///****************画圆函数*********************************// //x0、y0为圆心坐标,r为圆的半径****************************////*********************************************************// /*void gui_circle(uchar x0 , uchar y0 , uchar r){char a , b;char di;if(r > 31 || r == 0)//圆大于液晶屏或者没半径则返回return;a = 0;b = r;di = 3 - 2 * r;//判断下个点位置的标志while(a <= b){lcd_set_dot( x0 - b , y0 - a);//3lcd_set_dot( x0 + b , y0 - a); //0lcd_set_dot( x0 - a , y0 + b); //1lcd_set_dot( x0 - b , y0 - a); //7lcd_set_dot( x0 - a , y0 - b); //2lcd_set_dot( x0 + b , y0 + a); //4lcd_set_dot( x0 + a , y0 - b); //5lcd_set_dot( x0 + a , y0 + b); //6lcd_set_dot( x0 - b , y0 + a);a ++;//***使用bresenham算法画圆********//* if(di < 0)di += 4 * a + 6;else{di += 10 + 4 * (a - b);b --;}lcd_set_dot( x0 + a , y0 + b);}} *///************************************************************* **************// //***************************画正椭圆函数************************************// //说明:给定椭圆的四个点的参数,最左、最右点的x轴坐标值为x0、x1,最上、最下点// 的y轴坐标为y0、y1.//说明:----------------------------显示效果不好//************************************************************* **************// /*void gui_ellipse(char x0, char x1, char y0, char y1){char draw_x0, draw_y0; // 刽图点坐标变量char draw_x1, draw_y1;char draw_x2, draw_y2;char draw_x3, draw_y3;char xx, yy; // 画图控制变量char center_x, center_y; // 椭圆中心点坐标变量char radius_x, radius_y; // 椭圆的半径,x轴半径和y轴半径int radius_xx, radius_yy; // 半径乘平方值int radius_xx2, radius_yy2; // 半径乘平方值的两倍char di; // 定义决策变量/* 参数过滤*//* if( (x0==x1) || (y0==y1) ) return; *//* 计算出椭圆中心点坐标*//* center_x = (x0 + x1) >> 1;center_y = (y0 + y1) >> 1; *//* 计算出椭圆的半径,x轴半径和y轴半径*//* if(x0 > x1){ radius_x = (x0 - x1) >> 1;}else{ radius_x = (x1 - x0) >> 1;}if(y0 > y1){ radius_y = (y0 - y1) >> 1;}else{ radius_y = (y1 - y0) >> 1;} *//* 计算半径平方值*//* radius_xx = radius_x * radius_x;radius_yy = radius_y * radius_y; *//* 计算半径平方值乘2值*//* radius_xx2 = radius_xx<<1;radius_yy2 = radius_yy<<1; *//* 初始化画图变量*//* xx = 0;yy = radius_y;di = radius_yy2 + radius_xx - radius_xx2*radius_y ; // 初始化决策变量/* 计算出椭圆y轴上的两个端点坐标,作为作图起点*//* draw_x0 = draw_x1 = draw_x2 = draw_x3 = center_x;draw_y0 = draw_y1 = center_y + radius_y;draw_y2 = draw_y3 = center_y - radius_y;lcd_set_dot(draw_x0, draw_y0); // 画y轴上的两个端点lcd_set_dot(draw_x2, draw_y2);while( (radius_yy*xx) < (radius_xx*yy) ){ if(di<0){ di+= radius_yy2*(2*xx+3);}else{ di += radius_yy2*(2*xx+3) + 4*radius_xx - 4*radius_xx*yy;yy--;draw_y0--;draw_y1--;draw_y2++;draw_y3++;}xx ++; // x轴加1draw_x0++;draw_x1--;draw_x2++;draw_x3--;lcd_set_dot(draw_x0, draw_y0);lcd_set_dot(draw_x1, draw_y1);lcd_set_dot(draw_x2, draw_y2);lcd_set_dot(draw_x3, draw_y3);}di = radius_xx2*(yy-1)*(yy-1) + radius_yy2*xx*xx + radius_yy + radius_yy2*xx - radius_xx2*radius_yy;while(yy>=0){ if(di<0){ di+= radius_xx2*3 + 4*radius_yy*xx + 4*radius_yy - 2*radius_xx2*yy;xx ++; // x轴加1draw_x0++;draw_x1--;draw_x2++;draw_x3--;}else{ di += radius_xx2*3 - 2*radius_xx2*yy;}yy--;draw_y0--;draw_y1--;draw_y2++;draw_y3++;lcd_set_dot(draw_x0, draw_y0);lcd_set_dot(draw_x1, draw_y1);lcd_set_dot(draw_x2, draw_y2);lcd_set_dot(draw_x3, draw_y3);}} *///************************************************************* ****** //*******画满屏图片-----本程序为逐行写,因此图片数据也应该是逐行取的//参数:dat为填充的数据------用本程序时需要满屏图的数组//************************************************************* ****** /*void gui_draw_full_picture (unsigned char *dat) {unsigned char i;unsigned char j;unsigned char k;unsigned char bGDRAMAddrX = 0x80; //GDRAM水平地址unsigned char bGDRAMAddrY = 0x80; //GDRAM垂直地址for(i = 0; i < 2; i++){for(j = 0; j < 32; j++){。
LCD12864显示中文及图片C程序

/****************************************屏幕显示驱动*****************************************/#include "GT23L24T3Y.h"#include "print.h"#include <stdio.h>#include <string.h>#include "bmp_picture.h"#include "lcd_12864.h"#include "..\user\rtc.h"u8 comTable[]={4,5,6,7,3,2,1,0};extern void Setlcd_Addr ( u8 row,u8 column );//外部函数调用声明extern u8 Num_Code[];//字库获得函数extern u8 Big_Num_Code[];//字库获得函数extern u8 Picture_Code[];//字库获得函数extern u8 arrow1[];extern u8 arrow2[];u8 testlcd[]="测试数据";/************************************************************************//显示中文输出//函数名:print_16//功能:显示16x16点阵字符串。
// 函数名:print_16// 功能:显示16点阵字符串// 形参:// row:x轴// column:y轴// *lcd:显示字符串// logic:显示取反// wei.显示位值// len长度*************************************************************************/void _print_15 ( u8 row,u8 column,const char *lcd,u8 logic ,u8 wei,u8 len){u8 w=0,x=0,y=0,l=0,read_data=0;u8 Length=0;GT_cs1;//字库片选至高for ( l=len; l>0; l=l-2 ) //总字节{w=*lcd;if ( w&0x80 ) //为1则为汉字,为0则为ASCII码{GT_cs0; //字库片选选定GT23_Write ( GT23_write_15 ( lcd ) ); //写入字库指令以及文字地址for ( x=0; x<2; x++ ){Setlcd_Addr (row,column);for(y=0;y<16;y++){read_data=GT23_Read();if(logic == true){// read_data = ~read_data;}WriteData(read_data );}row++;}GT_cs1;//字库片选至高row-=2;column+=16;if(column>=128){row+=2;column=0;}lcd=lcd+2;}}}/************************************************************************//描述:显示中文输出//使用:顶层函数调用参数:row 行column 列*lcd 字符串logic 反白*************************************************************************/ void print_15 ( u8 row,u8 column,const char *lcd,u8 logic ){u8 c=strlen ( lcd );_print_15(row,column,lcd,logic,0,c);}/************************************************************************ //描述:显示图片输出//使用:顶层函数调用参数:row 行column 列*lcd 字符串logic 反白*************************************************************************/ void print_array(u16 row,u16 column,u16 size_x,u16 size_y,const u8 *ptr, u8 logic){u8 w=0,x=0,y=0,l=0,read_data=0;u8 Length=0;for( x=0;x<size_x/8;x++){Setlcd_Addr (row,column);for(y=0;y<size_y;y++){read_data=*( ptr + (y+x*size_y) );if(logic == true){read_data = ~read_data;}WriteData1(read_data);// WriteData1(0XFF);}row++;}}u8 OpMgsCode[][10] ={"病人信息","循环播放","房号与床号","从机音量","对比度","广播""恢复","音乐","主机音量","时间"};u8 DayCode[][7]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};void PrintMainFace(time mytime,u8 PeopleNum){//待机界面函数u8 Hrd,Ten,One;Lcd_Clr();//清屏print_15 ( 0,16, "月",false );print_15 ( 0,48, "日",false );print_15 ( 0,70, &DayCode[mytime.day][0],false );//显示星期//日期显示Ten=mytime.month/10;One=mytime.month%10;print_array(0 , 0, 16 , 7 , &Num_Code[Ten*14], false);print_array(0 , 8, 16 , 7 , &Num_Code[One*14], false);Ten=mytime.date/10;One=mytime.date%10;print_array(0 , 32, 16 , 7 , &Num_Code[Ten*14], false);print_array(0 , 40, 16 , 7 , &Num_Code[One*14], false);//时间显示Ten=mytime.hour/10;One=mytime.hour%10;print_array(2 , 20, 32 , 21 , &Big_Num_Code[Ten*84], false);print_array(2 , 42, 32 , 21 , &Big_Num_Code[One*84], false);Ten=mytime.minute/10;One=mytime.minute%10;print_array(2 , 68, 32 , 21 , &Big_Num_Code[Ten*84], false);print_array(2 , 90, 32 , 21 , &Big_Num_Code[One*84], false);//住院人数显示print_15 ( 6,32, "住院人数",false );Hrd=PeopleNum/100;PeopleNum=PeopleNum%100;Ten=PeopleNum/10;One=PeopleNum%10;if(Hrd ){print_array(6 , 96, 16 , 7 , &Num_Code[Hrd*14], false);}print_array(6 , 102, 16 , 7 , &Num_Code[Ten*14], false);print_array(6 , 110, 16 , 7 , &Num_Code[One*14], false);}void PrintPictureFace(u8 Index){time mytime;Lcd_Clr();//清屏mytime.month = 10;mytime.date = 16;mytime.hour = 12;mytime.minute = 15;mytime.day =3;PrintMainFace(mytime,96);//print_array(0 , 10, 48 , 8 , arrow1, false);//左箭头显示// print_array(0,38 ,48 ,48 , &Picture_Code[288*Index], false);//图片显示// print_array(0,108, 48 , 8 , arrow2, false); //右箭头显示//print_15 ( 6,33, &OpMgsCode[0][Index],false );//提示信息显示}。
51单片机YM12864汉字图形点阵液晶显示模块

51单片机YM12864汉字图形点阵液晶显示模块­本文以AT89C51单片机控制使用比较普遍的YM12864液晶显示器为基础,介绍了一种采用分页原理实现多级中文菜单操作的方法。
给出了YM12864主要技术参数、显示特性和核心的程序。
设计的中文菜单具有一定的通用性,只需更改其中的菜单项即可将此设计应用到家电、仪器仪表等设备上,为操作者提供友好方便的中文操作界面。
51单片机YM12864汉字图形点阵液晶显示模块-_典型应用电路图。
目前小型的显示器主要有LCD和LED,LED显示器只能显示数字和有限个英文字符,不能显示汉字,显示内容不直观,操作人员只能根据约定格式了解显示内容。
而LCD则可显示各种汉字和图形,尤其能实现中文菜单显示,为操作者提供方便友好的操作界面,并且功耗低,因此LCD得到广泛应用。
而现在市面上带中文字库的LCD比比皆是,价格适中,且大部分具有与MUC统一的标准接口,为使用LCD实现中文菜单操作提供了很大的方便。
相信更多的电子产品在提升性能的同时,设计更加人性化的中文菜单交互界面,将会使产品具有更广阔的前景。
二、YM12864液晶显示模块简介YM12864汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压)显示内容:128列×64行与MCU接口:8位或4位并行/3位串行多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等。
其引脚功能为通用20脚LCD接口,用户指令集也为通用128*64LCD用户指令集,相关资料很容易获取。
因其内置中文字库,省去了自己造字库的工作量,而只需写入相应的汉字和字符内码即可显示所需要的汉字和字符,这在许多程序开发软件中很容易实现,如:WAVE、KEIL等。
带字库12864超详细扩展操作,写自定义字符,画图,画直线,画圆,读取数据等操作

在此指出,这一篇文章出至网络上zhaoshan413之手,感谢他的无私贡献,让大家轻松玩转带字库12864!~~[p=30, 2, left]之前说学完12864字库液晶后和大家交流一下心得,一直没有时间,今天整理一下发上来,希望对想学习的朋友能有点帮助…首先说明一点,本人也是初学者,自感水平不高,若有不足及不对之处,望情指正…以下以并行口传输为例,别的还不会,呵呵![/p][p=30, 2, left]先传一下ST7920的芯片说明书:[/p][p=30, 2, left]/bbs/redirect.php?tid=7676&goto=lastpo st#lastpost[/p][p=30, 2, left]ST7920(字库)12864.pdf(2010-12-01 10:46:58, Size: 1.65 MB, Downloads: 1689)[/p][p=30, 2, left]一、首先说一下关于驱动函数的书写,这些是液晶显示的基础一般包括四个函数:1、写命令函数;2、写数据函数;3、读状态函数;4、读数据函数;这四个函数并不是必须全部写的,具体要看你实现的功能,如果只是单纯的显示汉字和字符,写命令、写数据、读状态这三个函数就够了,如过你还需要进行一些绘图的操作,那读数据函数也必须书写。
另外关于读状态函数,其实也就是用于判忙操作,我看郭天祥的书里面是这样说的:原则上每次对控制器进行读写操作之前,都必须进行读写检测,由于单片机的操作速度慢于液晶控制器的反应速度,因此可不进行读写检测,或者只进行简短的延时即可。
因此,读状态函数也可以不写,只用简短的延时函数替换即可。
1、写操作的编写:首先看一下时序图[/p][p=30, 2, left]时序.JPG[/p][p=30, 2, left]由图可见操作很简单:1>RS=1(写数据操作);或者RS=0(写命令操作);2>RW=0;//指明为写操作3>E=1;4>DB=data;//data为你要写入的命令或数据值5>E=0;[/p][p=30, 2, left]以下是我的驱动函数,仅供参考:[/p][p=30, 2, left]CODE:/********************************液晶端口定义**************************/#define lcd_data P0 //数据口sbit RS = P2^4; //选择寄存器(并行) 0:指令寄存器1:数据寄存器;sbit RW = P2^5; //读写控制脚(并行) 0:写入 1:读出sbit E = P2^6; //读写数据启始脚(并行)sbit PSB = P2^1; //串并方式选择引脚,0为串行模式,1为8/4位数据口模式sbit RST = P2^3; //复位引脚//******************************************************* *//延时函数//******************************************************* *void delay(unsigned int k){unsigned int i;unsigned char j;for(i=0;i<k;i++){for(j=0;j<10;j++);}}//******************************************************* *//延时1ms函数//******************************************************* *void delay_ms(unsigned int k)//延时0.994us,晶振12M{unsigned int x,y;for(x=k;x>0;x--)for(y=121;y>0;y--);}//******************************************************* *//写命令函数//******************************************************* *void LcdWcom(unsigned char WCom){delay(1);RS=0; //指明操作对象为指令寄存器RW=0; //指明为写操作E=1;lcd_data=WCom; //将命令写入总线E=0;}//******************************************************* *//写数据函数//******************************************************* *void LcdWdata(unsigned char WData){delay(1);RS=1; //指明操作对象为数据寄存器RW=0; //指明为写操作E=1;lcd_data=WData; //将数据写入总线E=0;}[/p][p=30, 2, left]二、初始化操作[/p][p=30, 2, left]以8位并行操作为例,操作流程图如下:[/p][p=30, 2, left]初始化.JPG[/p][p=30, 2, left]初始化操作如下:[/p][p=30, 2, left]1>芯片上电;[/p][p=30, 2, left]2>延时40ms以上;[/p][p=30, 2, left]3>复位操作:RST出现一个上升沿(RST=1;RST=0;RST=1;);[/p][p=30, 2, left]4>功能设定;[/p][p=30, 2, left]5>延时100us以上;[/p][p=30, 2, left]6>再次进行功能设定;[/p][p=30, 2, left]7>延时37us;[/p][p=30, 2, left]8>显示开关控制;[/p][p=30, 2, left]9>延时100us 以上;[/p][p=30, 2, left]10>清除显示;[/p][p=30, 2, left]11>延时10ms以上;[/p][p=30, 2, left]12>进入点设置;[/p][p=30, 2, left]13>初始化结束;[/p][p=30, 2, left]这里我遇到了一个小问题,我的液晶按照这个顺序进行初始化结果不正确,无法显示,最后我把调整了一下就可以了,调整后的顺序为:清除显示进入点设置显示开关控制,不知道是什么原因,知道的告诉我一声…[/p][p=30, 2, left]CODE://******************************************************* *//显示初始化函数//******************************************************* *void Display_Init(void){delay_ms(45); //延时45msPSB=1; //8位并行口//复位操作RST=1;delay(1);RST=0;delay(1);RST=1;delay(1);//功能设定LcdWcom(0x30); //设置为8位并行口,基本指令集delay(10);LcdWcom(0x30); //再次设置为8位并行口,基本指令集delay(5);// //显示开关控制// LcdWcom(0x0c); //游标显示关,正常显示,整体显示开// delay(10);//清除显示LcdWcom(0x01);delay_ms(12); //延时12ms//进入点设置LcdWcom(0x06); //设置为游标右移,DDRAM位地址加1,画面不移动delay(5);LcdWcom(0x0C); //开显示}[/p][p=30, 2, left]三、显示基本的字符和汉字[/p][p=30, 2, left]1、要想显示汉字或字符,首先要确定显示的位置,看看芯片说明书上关于屏幕地址的分配:[/p][p=30, 2, left]DDRAM位址.JPG[/p][p=30, 2, left]由于此液晶为128*64,即是横向128个点,竖向64个点,由于该液晶控制器支持的字符为8*16,汉字为16*16,因此只能显示四行,如果是汉字,为每行显示8个,如果是字符,每行显示16个。
基于51单片机的12864液晶画点程序

unsigned char largex,largey,smallx,smally; //将两点横纵坐标按大小存储
unsigned char i;
if(x1 > x2)
{
largex = x1;
smallx = x2;
}
else
{
largex = x2;
smallx = x1;
}
if(y1 > y2)
}else{
DL |= (0x01 << (7 - (k % 8))); //修改该点同时保持其他位不变
}
break;
case 2:
if(k < 8){
DH ^= (0x01 << (7 - k)); //修改该点同时保持其他位不变
}else{
DL ^= (0x01 << (7 - (k % 8))); //修改该点同时保持其他位不变
DH &= ~(0x01 << (7 - k)); //修改该点同时保持其他位不变
}else{ //点在低字节
DL &= ~(0x01 << (7 - (k % 8))); //修改该点同时保持其他位不变
}
break;
case 1:
if(k < 8){
DH |= (0x01 << (7 - k)); //修改该点同时保持其他位不变
com(0x34); //在写GDRAM的地址之前一定要打开扩充指令集
//否则地址写不进去!!
for( j = 0 ; j < 32 ; j++ )
{
com(0x80 + j) ; //写Y坐标
中文图形12864点阵液晶显示模块与51单片机的并行接口电路及C51程序设计

BF 位 ! 当 BF 为 0 时 !LM3033B *0BR3 才可接收 新的指令或数据 " 在操作时 !LM3033B+0BR3 在单
片机的时钟信号的控制下 ! 数据通过数据线传送给
LM3033B,0BR3 ! 当 LM3033B-0BR3 成功接收 到数据后 ! 转入内部时钟控制 ! 封 锁 I/O 口 缓 冲 器 !
技 术 交 流
}
! 结论
在单片机与液晶的接口中 ! 关键是要满足液晶 的时序要求 * 在软件编程中 ! 关键是要进行正确的初 始化 + 操作及写入显示内容的代码 $ 以上接口电路和 相应的程序已经通过调试 ! 并在实际中得到应用 $ 由
& 2008’ 07- 0041- 04 文章编号 "1006- 6268
中文图形 12864 点阵液晶显示模块与 51 单片机的并行接口电路及 C51 程序设计
李志广 :J;! 李晓泉 L! 淮俊霞 :J; &:Q 河北工业大学应用物理系 ! 天津 L$$:L$%
技 术 交 流
;Q深圳市拓普微科技开发有限公司 ! 深圳 D:<$DX% LQ天津市轻工业设计院 ! 天津 L$$:YL ’
[1]杨应平 , 石城 , 蒋爱湘 , 李振华 . 图形点阵液晶显示 模块与 51 系列单片机的接口设计 [J ]. 现代显示 ! 2006,(5):41- 45. [2]李良成 , 张永顺 , 张璟 . 基于 MSP430 单片机的液
晶显示[J ]. 现代显示 !2007 !(5):32- 33.
其对应关系如表图形显示绘图显示ram提供64x32个位元组的记忆空由扩充指令设定绘图ram位址在更改绘图ram时由扩充指令设定gdram位址先设置垂直位址再设置水平位址连续写入两个位元组的资料来完成垂直与水平的坐标位址再写入两个资料到绘图ram而位址计数器ac会自动加一整个写入绘图ram的步骤如下
51单片机LCD12864绘图

LCD12864绘图方法如下:一、绘图方法:1、使用扩展指令集并关闭绘图显示2、输入y轴坐标3、输入x轴坐标4、写入数据D15-D85、写入数据D7-D06、开绘图显示7、返回普通指令对应程序如下:LCD_write_comm(0x34);//使用扩充指令集LCD_delay();LCD_write_comm(0x80+y);//y坐标起始地址LCD_delay();LCD_write_comm(0x80+x);//x坐标起始地址LCD_delay();LCD_write_date(0x55);//写入数据D15-D8LCD_delay();LCD_write_date(0x55);//写入数据D7-D0LCD_delay();LCD_write_comm(0x36);//显示RAMLCD_delay();LCD_write_comm(0x30);//退出扩展指令集LCD_delay();程序执行效果则是第一行的第1-16个像素点会描出0x5555的二进制像素点,则后面的整个屏幕则是花屏,如果只想看到这0x5555,这几个像素点,则必须要给LCD的RAM重新赋值,也可以说是清屏,程序如下:void LCD12864_RAM_Cls(){u8 x,y;//xy坐标LCD_write_comm(0x34);//使用扩充指令集LCD_delay();for(y=0;y<32;y++){LCD_write_comm(0x80+y);//y坐标起始地址LCD_delay();LCD_write_comm(0x80);//x坐标起始地址LCD_delay();for(x=0;x<16;x++){LCD_write_date(0x00);LCD_delay();LCD_write_date(0x00);LCD_delay();}}LCD_write_comm(0x36);//显示RAMLCD_delay();LCD_write_comm(0x30);//退出扩展指令集LCD_delay();}二、坐标与显示X轴坐标设定初始值后会自动加1,取值范围0-15Y轴需要人为加1,取值范围为0-31整个屏幕分为上下屏,上屏对应坐标为x(0-7)y(0-31),下屏对应坐标为x(8-15)y(0-31)三、LCD12864图片显示代码1、Main.c#include"common.h"#include"delay.h"#include"12864.h"unsigned char code Picture[]= // 图片数据表{//此处添加图片取模16进制码共1024Byte,取模方式:从左到右从上到下0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x06,0x30,0x01,0xE0,0x00,0x00,0x2A,0x00,0x00,0xD8,0x00,0x00,0x00,0x00,0x01, 0x80,0x0F,0x7B,0x63,0xE0,0x00,0x00,0x22,0x00,0x01,0x24,0x00,0x00,0x00,0x00,0x01,0x80,0x0D,0xDB,0x63,0x01,0xBC,0x00,0x08,0x00,0x00,0x88,0x00,0x00,0x00,0x00,0x01, 0x80,0x0C,0x1B,0x63,0x07,0xB0,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x01, 0x80,0x0C,0x1B,0x63,0xED,0xB0,0xDB,0x00,0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x01, 0x80,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x0C,0x19,0xE1,0xE7,0xB0,0xDB,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x05,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0A,0x80,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x0A,0x00,0x00,0xFF,0xF8,0xE0,0x05,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x06,0xC0,0x15,0x00,0x1F,0xFF,0xFF,0xC0,0x02,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x09,0x20,0x11,0x00,0xFB,0xFF,0xE1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x08,0x20,0x0A,0x03,0x9F,0x00,0x9E,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x04,0x40,0x04,0x0E,0x70,0x00,0x81,0xC7,0x80,0x01,0x40,0x00,0x00,0x00,0x01, 0x80,0x02,0x80,0x00,0x1D,0x80,0x00,0xE0,0x61,0xE0,0x02,0xA0,0x00,0x00,0x00,0x01, 0xC0,0x01,0x00,0x00,0x77,0x9F,0xFC,0xF0,0x18,0xF8,0x02,0x20,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x01,0xDF,0x00,0x00,0xF3,0x0C,0x3C,0x01,0x40,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x03,0x9E,0x00,0x00,0xF8,0x06,0x1E,0x00,0x80,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x07,0x0E,0x30,0x01,0xFC,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0x83,0xC0,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x0F,0xFD,0xFF,0xFF,0xFF,0xFF,0xFC,0x01,0xF0,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x3F,0x81,0xFF,0x00,0x00,0x00,0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0xFE,0xF0,0x00,0x00,0x01,0x00,0x00,0xC0,0x1C,0x00,0x00,0x00,0x00,0x01, 0x80,0x03,0xC0,0x07,0x80,0x00,0x03,0xE0,0x07,0x00,0x1C,0x00,0x00,0x00,0x00,0x01, 0x80,0x03,0x80,0x03,0x60,0x00,0x03,0xE0,0x0C,0x00,0x0E,0x00,0x00,0x00,0x00,0x01, 0x80,0x07,0x00,0x00,0xC0,0x00,0x00,0x20,0x18,0x00,0x07,0x00,0x00,0x00,0x00,0x01, 0x80,0x09,0x01,0x80,0x60,0x00,0x00,0x20,0x73,0x9F,0x03,0x80,0x00,0x00,0x00,0x01, 0x80,0x1E,0x0F,0xF2,0x20,0x00,0x00,0x20,0x67,0xFF,0xC1,0xC0,0x00,0x00,0x00,0x01, 0x80,0x1E,0x1F,0xF9,0x30,0x00,0x00,0x20,0xEF,0xFF,0xE0,0xE0,0x00,0x00,0x00,0x01, 0x80,0x38,0x3F,0xFC,0x90,0x00,0x00,0x20,0xCB,0xFF,0xF9,0xF0,0x00,0x00,0x00,0x01, 0x80,0x7F,0x7F,0xFE,0x10,0x00,0x00,0x20,0xDB,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x01, 0x80,0x6E,0xF9,0xBF,0x10,0x00,0x00,0x20,0xF7,0xED,0xFF,0xF0,0x00,0x00,0x00,0x01, 0x80,0x7C,0xFC,0x3F,0x10,0x00,0x00,0x20,0x67,0xE1,0xFD,0xE0,0x00,0x00,0x00,0x01, 0x80,0x7C,0xFC,0x3F,0x10,0x00,0x00,0x20,0x67,0xE1,0xFD,0xE0,0x00,0x00,0x00,0x01, 0x80,0x38,0xFC,0x3F,0x18,0x00,0x00,0x20,0x87,0xE0,0xFD,0xC0,0x00,0x00,0x00,0x01, 0x80,0x38,0xF1,0x8F,0x18,0x00,0x1F,0xE7,0x87,0x9C,0x7D,0xC0,0x00,0x00,0x00,0x01, 0x80,0x1C,0xFE,0x1F,0x81,0xFF,0xFF,0xC0,0x0F,0xE0,0xFF,0x80,0x00,0x00,0x00,0x01, 0x80,0x0C,0xFC,0x3F,0x80,0x00,0x00,0x00,0x0F,0xE1,0xF8,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0xF9,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEC,0xFE,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0xF9,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0xE0,0x00,0x00,0x00,0x60,0x00,0x00,0x01,0xC0,0x02,0x80,0x00,0x00,0x00,0x1C,0x01, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};void main(){LCD12864_init();//LCD初始化//LCD12864_RAM_Cls();LCD_Picture_show(Picture);while(1);}2、common.h#ifndef __COMMON_H#define __COMMON_H#include<STC12C5A60S2.h>#include "intrins.h"#define u8 unsigned char//无符号字符型#define u16 unsigned int//无符号整型#endif3、delay.h#ifndef __DELAY_H#define __DELAY_H#include "common.h"#define MAIN_Fosc 24000000L //定义主时钟void delay_ms(u16 ms);void LCD_delay();//LCD延时函数#endif4、delay.c#include "delay.h"//-------毫秒延时函数---------------void delay_ms(u16 ms){u16 i;do{i = MAIN_Fosc / 13000;while(--i) ; //14T per loop }while(--ms);}//------LCD延时函数-----------------void LCD_delay(void){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}5、12864.h#ifndef __12864_H#define __12864_h#include "common.h"sbit CS =P1^1;//片选sbit SID=P1^2;//数据口sbit CLK=P1^3;//同步时钟void LCD_write_spi(u8 date);//LCD SPI数据写入void LCD_write_comm(u8 comm);//LCD写指令void LCD_write_date(u8 date);//LCD写数据void LCD12864_init();//LCD初始化void LCD12864_RAM_Cls();//RAM清屏void LCD_print(u8 *date);//LCD字符串显示void LCD_Picture_show(u8 *date);#endif6、12864.c#include"common.h"#include"delay.h"#include"12864.h"//------LCD SPI数据写入--------------------void LCD_write_spi(u8 date){u8 i;for(i=0;i<8;i++){CS=1;if(date&0x80){SID=1;}else{SID=0;}date <<= 1;CLK=1;LCD_delay();CLK=0;}}//------LCD写指令--------------------void LCD_write_comm(u8 comm){u8 date = 0xf8;//串行写入指令到LCD(数据手册)u8 comm_H = comm&0xf0;u8 comm_L = comm<<4;CS =0;CLK=0;SID=0;LCD_delay();LCD_write_spi(date);LCD_write_spi(comm_H);LCD_write_spi(comm_L);CS=0;}//------LCD写数据-----------------------void LCD_write_date(u8 date){u8 date2 = 0xfa;//串行写入指令到LCD(数据手册)u8 date_H = date&0xf0;u8 date_L = date<<4;CS =0;CLK=0;SID=0;LCD_delay();LCD_write_spi(date2);LCD_write_spi(date_H);LCD_write_spi(date_L);CS=0;}//-----LCD初始化--------------------------void LCD12864_init(){LCD_write_comm(0x01);//清屏幕delay_ms(1);LCD_write_comm(0x0c);//开显示,游标显示关闭LCD_delay();LCD_write_comm(0x81);//设定坐标LCD_delay();}//-----写RAM清屏--------------------------void LCD12864_RAM_Cls(){u8 x,y;//xy坐标LCD_write_comm(0x34);//使用扩充指令集LCD_delay();for(y=0;y<32;y++){LCD_write_comm(0x80+y);//y坐标起始地址LCD_delay();LCD_write_comm(0x80);//x坐标起始地址LCD_delay();for(x=0;x<16;x++){LCD_write_date(0x00);LCD_delay();LCD_write_date(0x00);LCD_delay();}}LCD_write_comm(0x36);//显示RAMLCD_delay();LCD_write_comm(0x30);//退出扩展指令集LCD_delay();}//----LCD字符串显示-----------------------void LCD_print(u8 *date){u8 j=0;while(date[j]!='\0'){LCD_write_date(date[j]);j++;LCD_delay();}}//----图片显示-----------------------------void LCD_Picture_show(u8 *date){u8 x,y;//xy坐标LCD_write_comm(0x34);//使用扩充指令集LCD_delay();for(y=0;y<32;y++){LCD_write_comm(0x80+y);//y坐标起始地址LCD_delay();LCD_write_comm(0x80);//x坐标起始地址LCD_delay();for(x=0;x<8;x++)//写上半屏幕{LCD_write_date(date[16*y+x*2]);LCD_delay();LCD_write_date(date[16*y+x*2+1]);LCD_delay();}for(x=0;x<8;x++)//写下半屏幕{LCD_write_date(date[16*(y+32)+x*2]);LCD_delay();LCD_write_date(date[16*(y+32)+x*2+1]);LCD_delay();}}LCD_write_comm(0x36);//显示RAMLCD_delay();LCD_write_comm(0x30);//退出扩展指令集LCD_delay();}四、程序执行效果。
12864显示汉字,图型,任意点,任意直线程序(绝对能用)

#include<stdio.h>#include<reg52.h>#include<math.h>#include<intrins.h>sbit RS=P0^0;sbit RW=P0^1;sbit E=P0^2;sbit PSB=P0^3;sbit RES=P0^4;#define LCD12864_DatePort P2unsigned char lcd_x,lcd_y;unsigned char h[]={"aaaaaaaaaaaaaaaa"};unsigned char code image[1024]={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,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,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,0x1F,0xC1,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0xFF,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1F,0xFF,0xFC,0x00,0x00,0x01,0xFF,0xFE,0x1F,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x3F,0xFF,0xFF,0x00,0x00,0x07,0xFF,0xFF,0x9E,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x7F,0xFF,0xFF,0x80,0x00,0x0F,0xFF,0xFF,0xEC,0x60,0x00,0x00,0x00,0x00, 0x00,0x00,0xFF,0xFF,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xE0,0x40,0x00,0x00,0x00,0x00, 0x00,0x01,0xFF,0x3E,0x3F,0xC0,0x00,0x1F,0xE3,0xE7,0xF0,0x80,0x00,0x00,0x00,0x00, 0x00,0x01,0xFE,0x1E,0x1F,0xE0,0x00,0x3F,0xE3,0xC3,0xF9,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0xFC,0x1C,0x1F,0xE0,0x00,0x3F,0xC1,0xC3,0xFC,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0xFC,0x6D,0x9F,0xF0,0x00,0x7F,0xC1,0x81,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFC,0x6D,0x8F,0xF0,0x00,0x7F,0xCD,0xB1,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFC,0x6D,0x9F,0xF0,0x00,0x7F,0xCF,0xB1,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFC,0x1C,0x1F,0xF0,0x00,0xFF,0xC5,0xF3,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFE,0x1E,0x1F,0xF8,0x00,0xFF,0xE3,0xC3,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFF,0x3E,0x3F,0xF8,0x00,0xFF,0xE3,0xE7,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xFF,0xF3,0xFF,0xF8,0x00,0xFF,0xFE,0x7F,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x0F,0xF8,0xC1,0xCF,0xFC,0x00,0xFF,0x9C,0x38,0xFF,0x80,0x00,0x00,0x00,0x00, 0x00,0x0F,0xE0,0x7F,0x83,0xFC,0x01,0xFE,0x0F,0xF0,0x3F,0x80,0x00,0x00,0x00,0x00, 0x00,0x1F,0xFF,0x00,0x3F,0xFC,0x01,0xFF,0xE0,0x07,0xFF,0x80,0x00,0x00,0x00,0x00, 0x00,0x1F,0xFF,0xFB,0xFF,0xFC,0x01,0xBF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00, 0x00,0x1F,0xFF,0xFF,0xFF,0xFC,0x01,0xDF,0xFF,0xFF,0xFB,0x80,0x00,0x00,0x00,0x00, 0x00,0x3F,0xFF,0xFF,0xFF,0xFC,0x03,0xC7,0xFF,0xFF,0xE7,0x80,0x00,0x00,0x00,0x00, 0x00,0x7F,0xFF,0xFF,0xFF,0xFC,0x07,0xC1,0xFF,0xFF,0x8F,0xC0,0x00,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xFE,0x0F,0xE0,0x3F,0xFC,0x3F,0xC0,0x00,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xF8,0x00,0x00,0x7F,0xE0,0x00,0x00,0x00,0x00, 0x01,0xFC,0x7F,0xFF,0xFF,0x3F,0x1F,0x8E,0x00,0x00,0xE3,0xF0,0x00,0x00,0x00,0x00, 0x03,0xF8,0x7F,0xFF,0xFC,0x1F,0xBF,0x87,0xC8,0x1F,0x83,0xF0,0x00,0x00,0x00,0x00, 0x03,0xF8,0x7F,0xFF,0xE0,0x1F,0xFF,0x87,0xFF,0xFC,0x01,0xF8,0x00,0x00,0x00,0x00, 0x03,0xF8,0x7F,0x00,0x00,0x1F,0xFF,0x04,0xE0,0x00,0x01,0xF8,0x00,0x00,0x00,0x00, 0x07,0xF8,0x7F,0x00,0x00,0x0F,0xFF,0x04,0x60,0x00,0x01,0xF8,0x00,0x00,0x00,0x00, 0x07,0xF8,0x7F,0x00,0x00,0x0F,0xFF,0x0C,0x60,0x00,0x01,0xFC,0x00,0x00,0x00,0x00, 0x07,0xF8,0x7F,0x00,0x00,0x0F,0xFF,0x0C,0x60,0x00,0x01,0xFC,0x00,0x00,0x00,0x00, 0x07,0xF8,0x7F,0x00,0x00,0x0F,0xFF,0x06,0x60,0x00,0x01,0xFC,0x00,0x00,0x00,0x00, 0x07,0xB8,0x3E,0x00,0x00,0x19,0xF3,0x87,0xE0,0x00,0x01,0xBC,0x00,0x00,0x00,0x00, 0x07,0x18,0x00,0x00,0x00,0x18,0xE3,0x80,0x00,0x00,0x01,0x18,0x00,0x00,0x00,0x00, 0x00,0x1C,0x00,0x00,0x00,0x10,0x01,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x0C,0x00,0x00,0x00,0x30,0x01,0xC0,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x06,0x00,0x00,0x00,0x60,0x00,0xE0,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0x00,0x00,0x00,0x40,0x00,0x70,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0x80,0x00,0x00,0xC0,0x00,0x78,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, 0x00,0x0D,0xE0,0x00,0x03,0xB8,0x01,0x9C,0x00,0x00,0x3B,0x00,0x00,0x00,0x00,0x00, 0x00,0x18,0x78,0x00,0x0F,0x7C,0x03,0xCF,0x00,0x00,0xE7,0x80,0x00,0x00,0x00,0x00, 0x00,0x10,0x1C,0x00,0x3E,0xFC,0x03,0xF3,0xE0,0x03,0xDF,0x80,0x00,0x00,0x00,0x00, 0x00,0x1A,0x0B,0xC1,0xE3,0xF8,0x01,0xF8,0xFC,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xF1,0x80,0xEF,0xE0,0x00,0x7F,0xF0,0x1F,0xFC,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,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};void delay_ms(unsigned char z) //延时{unsigned i,j;for(i=0;i<z;i++)for(j=0;j<110;j++);}void LCD12864_WriteCmd(unsigned int cmd) //写命令{RS=0;RW=0;E=0;LCD12864_DatePort=cmd;delay_ms(5);E=1;delay_ms(5);E=0;}void LCD12864_WriteDate(unsigned char dat) //写数据{RS=1;RW=0;E=0;LCD12864_DatePort=dat;delay_ms(5);E=1;delay_ms(5);E=0;}void LCD12864_Init(){PSB=1; //1并行,0串行LCD12864_WriteCmd(0x30); //基本指令操作//delay_ms(5);LCD12864_WriteCmd(0x0c); //显示开,关光标//delay_ms(5);LCD12864_WriteCmd(0x01); //清除led的显示内容//delay_ms(5);LCD12864_WriteCmd(0x06);}/*====================================================函数功能:清除GCROM的内容,如果不清除会出现花屏现象清除方法:向GCROM中写入0x00来清除内========================================================*/ void LCD12864_ClearGDRAM(){unsigned char i,j,k;lcd_x=0x80;lcd_y=0x80;LCD12864_WriteCmd(0x34);for(i=0;i<2;i++){for(j=0;j<32;j++){LCD12864_WriteCmd(lcd_y+j);LCD12864_WriteCmd(lcd_x);for(k=0;k<16;k++){LCD12864_WriteDate(0x00);}}lcd_x=0x88;}LCD12864_WriteCmd(0x36);LCD12864_WriteCmd(0x30);}/*================================================================ 函数功能:向12864中写入一幅图片函数参数:lcd_x为水平显示位置,lcd_y为垂直显示位置,函数将12864屏分成上下两屏写入,上半屏LCD_x=0x80,下半屏lcd_x=0x88=================================================================*/ void LCD12864_WriteImage(unsigned char *p){unsigned char i,j,k;lcd_x=0x80;lcd_y=0x80;LCD12864_WriteCmd(0x34);for(i=0;i<2;i++) //分为上下两屏{for(j=0;j<32;j++){LCD12864_WriteCmd(lcd_y+j);LCD12864_WriteCmd(lcd_x);for(k=0;k<16;k++) //写入显示数据{LCD12864_WriteDate(*p++);}}lcd_x=0x88;}LCD12864_WriteCmd(0x36);LCD12864_WriteCmd(0x30);}bit LCD12864_CheckBusy() //读忙碌状态{bit i;RS=0;RW=1;E=1;LCD12864_DatePort=0xff;delay_ms(1);i=(bit)(LCD12864_DatePort&0x80);E=0;return(i);}unsigned char LCD12864_ReadByte( void ){unsigned char ReturnValue ;LCD12864_CheckBusy() ;LCD12864_DatePort = 0xff ;RS=1;RW=1;E=0;E=1;ReturnValue =LCD12864_DatePort;E=0;return ReturnValue ;}void LCD12864_DrawPoint( unsigned char X, unsigned char Y, unsigned char Color ) {unsigned char Row , Tier , Tier_bit ;unsigned char ReadOldH, ReadOldL ;LCD12864_WriteCmd( 0x34 ) ;LCD12864_WriteCmd( 0x36 ) ;Tier = X >> 4 ;Tier_bit = X & 0x0f ;if( Y < 32 ){Row = Y ;}else{Row = Y - 32 ;Tier += 8 ;}LCD12864_WriteCmd( Row + 0x80 ) ;LCD12864_WriteCmd( Tier + 0x80 ) ;LCD12864_ReadByte();ReadOldH = LCD12864_ReadByte() ;ReadOldL = LCD12864_ReadByte() ;LCD12864_WriteCmd( Row + 0x80 ) ;LCD12864_WriteCmd( Tier + 0x80 ) ;if( Tier_bit < 8 ){switch( Color){case 0 : ReadOldH &=( ~( 0x01 << ( 7 - Tier_bit ))) ; break ;case 1 : ReadOldH |= ( 0x01 << ( 7 - Tier_bit )) ; break ;case 2 : ReadOldH ^= ( 0x01 << ( 7 - Tier_bit )) ; break ;default : break ;}LCD12864_WriteDate( ReadOldH ) ;LCD12864_WriteDate( ReadOldL ) ;}else{switch(Color){case 0 : ReadOldL &= (~( 0x01 << ( 15 - Tier_bit ))) ; break ;case 1 : ReadOldL |= ( 0x01 << ( 15 - Tier_bit )) ; break ;case 2 : ReadOldL ^= ( 0x01 << ( 15 - Tier_bit )) ; break ;default : break ;}LCD12864_WriteDate( ReadOldH ) ;LCD12864_WriteDate( ReadOldL ) ;}LCD12864_WriteCmd( 0x30 ) ;}void LCD12864_DrawLine_X( unsigned char X0, unsigned char X1, unsigned char Y, unsigned char Color ){ unsigned char Temp ;if( X0 > X1 ){Temp = X1 ;X1 = X0 ;X0 = Temp ;}for( ; X0 <= X1 ; X0++ )LCD12864_DrawPoint( X0, Y, Color ) ;}void LCD12864_DrawLine_Y( unsigned char X, unsigned char Y0, unsigned char Y1, unsigned char Color ){unsigned char Temp ;if( Y0 > Y1 ){Temp = Y1 ;Y1 = Y0 ;Y0 = Temp ;}for(; Y0 <= Y1 ; Y0++)LCD12864_DrawPoint( X, Y0, Color) ;}void LCD12864_DrawLine( unsigned char StartX, unsigned char StartY, unsigned char EndX, unsigned char EndY, unsigned char Color ){int t, distance; /*根据屏幕大小改变变量类型(如改为int型)*/int x = 0 , y = 0 , delta_x, delta_y ;char incx, incy ;delta_x = EndX - StartX ;delta_y = EndY - StartY ;if( delta_x > 0 ){incx = 1;}else if( delta_x == 0 ){LCD12864_DrawLine_Y( StartX, StartY, EndY, Color ) ;return ;}else{incx = -1 ;}if( delta_y > 0 ){incy = 1 ;}else if(delta_y == 0 ){LCD12864_DrawLine_X( StartX, EndX, StartY, Color ) ;return ;}else{incy = -1 ;}delta_x = abs( delta_x );//求绝对值delta_y = abs( delta_y );if( delta_x > delta_y ){distance = delta_x ;}else{distance = delta_y ;}LCD12864_DrawPoint( StartX, StartY, Color ) ;/* Draw Line*/for( t = 0 ; t <= distance+1 ; t++ ){LCD12864_DrawPoint( StartX, StartY, Color ) ;x += delta_x ;y += delta_y ;if( x > distance ){x -= distance ;StartX += incx ;}if( y > distance ){y -= distance ;StartY += incy ;}}}void LCD12864_DrawCross(){LCD12864_DrawLine_X( 0, 127 , 0, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 7, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 15, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 23, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 31, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 39, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 47, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 55, 1 ) ;LCD12864_DrawLine_X( 0, 127 , 63, 1 ) ;LCD12864_DrawLine_Y( 0, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 15, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 31, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 47, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 63, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 79, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 95, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 111, 0 , 63, 1 ) ;LCD12864_DrawLine_Y( 127, 0 , 63, 1 ) ;}void LCD12864_Draw_ObliqueLine(){LCD12864_DrawLine( 0, 0, 127, 63, 1 ) ;LCD12864_DrawLine( 0, 63, 127, 0 , 1 ) ;LCD12864_DrawLine( 12, 0, 127, 63, 1 ) ;LCD12864_DrawLine( 52, 63, 127, 0 , 1 ) ;LCD12864_DrawLine( 32, 63, 98, 0, 1 ) ;LCD12864_DrawLine( 67, 0, 127, 63 , 1 ) ;}void LCD12864_DisplayOneChar(unsigned char X, unsigned char Y, unsigned char Data) {switch(Y){case 0:Y=0X80;break; //根据行数来选择相应地址case 1:Y=0X90;break;case 2:Y=0X88;break;case 3:Y=0X98;break;}LCD12864_WriteCmd( Y+X ); //这里不检测忙信号,发送地址码LCD12864_WriteDate(Data);}void LCD12864_DisplayListChar(unsigned char X, unsigned char Y, unsigned char *Data) {switch(Y){case 0:Y=0X80;break; //根据行数来选择相应地址case 1:Y=0X90;break;case 2:Y=0X88;break;case 3:Y=0X98;break;}LCD12864_WriteCmd( Y+X ); //这里不检测忙信号,发送地址码X = X*2;Y = 0;while( Data[Y] != 0 ) //若到达字串尾则退出{if (X <= 0x0F) //X坐标应小于0xF{LCD12864_WriteDate(Data[Y]);X++;Y++;}else break;}}void main(){LCD12864_Init();// write_com(0x1c);LCD12864_ClearGDRAM();//LCD12864_WriteImage(image);//LCD12864_Draw_ObliqueLine();LCD12864_DrawCross();//LCD12864_DisplayListChar(0,0,h);while(1);}。
12864汉字和图片的显示

12864汉字和图片的显示课程设计报告书设计题目:12864汉字和图片的显示课程名称:单片机快速入门系部:电子信息系专业:应用电子技术班级:电子0901姓名:组长:学号:成绩:2011年6月16日目录任务安排 (3)一、项目介绍 (3)1.1 设计内容 (3)1.2 设计要求 (3)1.3 系统主要功能 (4)二、硬件设计 (4)2.1 原理电路图 (4)2.2主要元件功能说明 (5)三、系统软件设计 (10)3.1 分析论证 (10)3.2 程序流程图 (12)3.3 源程序清单 (13)四、个人心得 (19)五、结束语 (20)六、参考文献 (21)七、12864汉字和图片的显示原理图 (21)任务安排一、项目介绍1.1 设计内容利用单片机和12864液晶显示屏通过按键功能实现汉字和图片的显示1.2 设计要求(1)在12864上第一次显示汉字“安徽财贸职业学院大学城翡翠路900/doc/dd174fd133d4b14e852468a7.ht ml ”(2)在12864上第二次显示汉字“单片机实训周6月11日星期六”(3)第三次显示图片:服装,帽子,鞋,皮包等(4)第四次显示汉字:“这就是我们小组的设计方案谢谢欣赏”1.3系统主要功能:12864LCD指令系统及时序该类液晶显示模块(表1-1)控制信号控制代码指令名称R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 显示开关0 0 0 0 1 1 1 1 1 1/0 起始行设置0 0 1 1 X X X X X X 页设置0 0 1 0 1 1 1 X X X 列地址设置0 0 0 1 X X X X X X 读状态 1 0 BUSY 0 ON/OFF RST 0 0 0 0 写数据0 1 写数据读数据 1 1 读数据二、硬件设计2.1 原理电路图12864显示屏(图2-1a)独立按键原理图(图2-1b)2.2主要元件功能说明1)12864显示屏内部功能器件及相关功能如下指令寄存器(IR): IR是用于寄存指令码,与数据寄存器数据相对应。
12864画点、画线、画圆、显示图片程序,亲测可用

#include <reg52.h>#include <intrins.h>#define dataPort P0 //数据口sbit rs=P2^6; //寄存器选择输入sbit rw=P2^5; //液晶读/写控制sbit en=P2^7; //液晶使能控制sbit psb=P3^2; //串/并方式控制//sbit LCD_RST =P3^7; //液晶复位端口unsigned char code Photo1[] ={0x00,0x00,0x00,0x04,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,0x01,0x3F,0xC0,0x80,0x42,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8A,0x1F,0xFC,0x42,0x04,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x01,0xFF,0xDE,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x2A,0x87,0xF0,0xA2,0x0A,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0x84,0x10,0xA2,0x0A,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1F,0xFC,0xA2,0x0A,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9F,0x90,0x05,0x2F,0xCA,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0xE1,0xA8,0x4A,0xA8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xC2,0x24,0x48,0x44,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x84,0x24,0xA8,0x4A,0xA8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA6,0x58,0x3D,0x0F,0xD0,0xC4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x08,0x37,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x08,0x40,0x00,0xFF,0x90,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x86,0x10,0x40,0x00,0x08,0x08,0x01,0x02,0x49,0x40,0x40,0x00,0x7F,0x0B, 0xFC,0x08,0x0F,0x00,0x00,0x00,0x00,0x00, 0x01,0x08,0x00,0x40,0x20,0x00,0x10,0x00, 0x10,0x49,0x0F,0x00,0x00,0x00,0x00,0x00, 0x02,0x08,0x00,0x20,0x20,0x01,0xFF,0xDD, 0x10,0x2A,0x0F,0x00,0x00,0x00,0x00,0x00, 0x04,0x31,0x83,0x20,0x20,0x00,0x20,0x04, 0x91,0xFF,0xC6,0x00,0x00,0x00,0x00,0x00, 0x04,0x52,0x44,0x90,0x20,0x00,0x7F,0x04, 0x90,0x1C,0x06,0x00,0x00,0x00,0x00,0x00, 0x09,0xA4,0x28,0x4C,0x10,0x00,0xA1,0x04, 0x10,0x2A,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x44,0xE9,0xC3,0x90,0x01,0x3F,0x04, 0x70,0x49,0x06,0x00,0x00,0x00,0x00,0x00, 0x00,0x82,0xC5,0x81,0x70,0x00,0x21,0x0A, 0x01,0x88,0xC6,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x83,0x00,0x80,0x00,0x3F,0x11, 0xFC,0x08,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x0C,0x70,0x00,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x13,0x87,0x10,0x40,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x20,0x78,0xA0,0x40,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x20,0x00,0x60,0x40,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x21,0x80,0x60,0x40,0x00,0x00,0x71, 0xEE,0x3C,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x11,0x98,0x90,0x80,0x00,0x00,0x8E, 0x31,0xC6,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x08,0x18,0x80,0x80,0x00,0x01,0x24, 0x24,0x83,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x96,0x01,0x01,0x00,0x00,0x01,0x40, 0x28,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x49,0x86,0x03,0x00,0x00,0x01,0x40, 0x28,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x34,0x78,0x8C,0x00,0x00,0x01,0x00, 0x20,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0E,0x01,0x30,0x00,0x00,0x00,0x80, 0x30,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x71,0x87,0xCE,0x00,0x00,0x00,0x40, 0x68,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xE0,0x78,0x07,0x00,0x00,0x00,0x20,0x01,0xAF,0xFF,0xC5,0x80,0x00,0x00,0x11, 0x82,0x30,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0xA9,0xB6,0x45,0xC0,0x00,0x00,0x0B, 0x01,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0x2F,0x03,0xC4,0xE0,0x00,0x00,0x06, 0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x16,0x01,0x88,0x70,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0F,0x08,0x00,0x10,0xF0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0F,0x84,0x00,0x21,0xF0,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,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,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,0x00,0x00,0x00 };//89c51系列延时/*void delayms(unsigned int n){unsigned char i;for(;n>0;n--)for(i=0;i<100;i++);}*///12c5a系列延时void delayms(unsigned int a) //@11.0592MHz {unsigned char i, j;while(a--){_nop_();i = 11;j = 190;do{while (--j);} while (--i);}}//判断是否忙void checkBusy(void){rs=0;rw=1;en=1;dataPort=0xff;while(dataPort & 0x80);en=0;}//写指令函数void writeCommand(unsigned char cmd){checkBusy();rs=0;rw=0;en=1;dataPort=cmd;_nop_();en=0;}//写数据函数void writeData(unsigned char adata){checkBusy();rs=1;rw=0;en=1;dataPort=adata;_nop_();en=0;}//读数据函数unsigned char readData(void){unsigned char RData;dataPort=0xff;checkBusy();rs=1;rw=1;en=0;en=1;RData=dataPort;en=0;return RData;}//清除rom函数,若不清除则会出现花屏现象void ClrGDRAM(void){unsigned char x,y;for(y=0;y<64;y++)for(x=0;x<16;x++){writeCommand(0x34);writeCommand(y+0x80); //行地址writeCommand(x+0x80); //列地址writeCommand(0x30);writeData(0x00);writeData(0x00);}//writeCommand(0x30);}//lcd12864初始化函数void LcmInit(void){writeCommand(0x30);delayms(50);writeCommand(0x01);delayms(50);writeCommand(0x06);delayms(50);writeCommand(0x0c);ClrGDRAM();psb=1;}//在坐标(x,y)处显示字符串void LcmPrint(unsigned char x,unsigned char y,unsigned char *adata) {unsigned char address;unsigned char i=0;switch (y){case 0:address=0x80+x;break;case 1:address=0x90+x;break;case 2:address=0x88+x;break;case 3:address=0x98+x;break;default:break;}writeCommand(address);while(*(adata+i)){writeData(*(adata+i));i++;}}/*********************************************************** 函数名:disp_picture函数说明:显示一幅128*64的图画传入参数:图形指针*img传出参数:无返回值:无**********************************************************/ void disp_picture(unsigned char *img){unsigned char i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){writeCommand(0x34);writeCommand(0x80+j);writeCommand(0x80+i);writeCommand(0x30);writeData(img[j*16+i*2]);writeData(img[j*16+i*2+1]);}}for(j=32;j<64;j++){for(i=0;i<8;i++){writeCommand(0x34);writeCommand(0x80+j-32);writeCommand(0x80+(i+8));writeCommand(0x30);writeData(img[j*16+i*2]);writeData(img[j*16+i*2+1]);}}writeCommand(0x36);}/*********************************************************** 函数名:dispU_picture函数说明:上半屏显示一幅128*32的图画传入参数:图形指针*img传出参数:无返回值:无**********************************************************/ /*void dispU_picture(unsigned char *img){unsigned char i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){writeCommand(0x34);writeCommand(0x80+j);writeCommand(0x80+i);writeCommand(0x30);writeData(img[j*16+i*2]);writeData(img[j*16+i*2+1]);}}writeCommand(0x36);}*//*********************************************************** 函数名:dispD_picture函数说明:下半屏显示一幅128*32的图画传入参数:图形指针*img传出参数:无返回值:无**********************************************************/ /*void dispD_picture(unsigned char *img){unsigned char i,j;for(j=0;j<32;j++){for(i=0;i<8;i++){writeCommand(0x34);writeCommand(0x80+j);writeCommand(0x80+(i+8));writeCommand(0x30);writeData(img[j*16+i*2]);writeData(img[j*16+i*2+1]);}}writeCommand(0x36);}*//*********************************************************** 函数名:drawPoint函数说明:画点传入参数:打点位置(x0,y0);color=1,点亮;color=0,擦除传出参数:无返回值:无**********************************************************/ void drawPoint(unsigned char x,unsigned char y,unsigned char color) {unsigned char row,collum,cbite;unsigned char tempH,tempL;writeCommand(0x34);delayms(5);writeCommand(0x36);collum=x>>4;cbite=x&0x0f;if(y<32)row=y;else{row=y-32;collum+=8;}writeCommand(0x80+row);delayms(5);writeCommand(0x80+collum);readData();delayms(5);tempH=readData();tempL=readData();writeCommand(0x80+row);delayms(5);writeCommand(0x80+collum);if (color){if(cbite<8){tempH|=(1<<(7-cbite));//tempL=(1<<(7-cbite));}else{//tempH=(1<<(15-cbite));tempL|=(1<<(15-cbite));}}else{if(cbite<8){tempH&=~(1<<(7-cbite));//tempL=(1<<(7-cbite));}else{//tempH=(1<<(15-cbite));tempL&=~(1<<(15-cbite));}}writeData(tempH);writeData(tempL);writeCommand(0x30);}/***********************************************************函数名:drawRowLine函数说明:画水平线传入参数:(x0,y0),水平线的起点;(x1,y0)水平线的终点color=1,点亮;color=0,擦除传出参数:无返回值:无**********************************************************/void drawRowLine(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char color) {unsigned char temp;if(x0>x1) // 对x0、x1大小进行排列,以便画图{temp = x1;x1 = x0;x0 = temp;}do{drawPoint(x0, y0, color); // 逐点显示,描出垂直线x0++;}while(x1>=x0);}/***********************************************************函数名:drawCollumLine函数说明:画竖直线传入参数:(x0,y0),竖直线的起点;(x1,y0)竖直线的终点;color=1,点亮;color=0,擦除传出参数:无返回值:无************************************************************/void drawCollumLine(unsigned char x0,unsigned char y0,unsigned char y1,unsigned char color) {unsigned char temp;if(y0>y1){temp=y0;y0=y1;y1=temp;}while (y0<=y1){drawPoint(x0,y0,color);y0++;}}/*************************************************************函数名:drawLine函数说明:使用Bresenham法,画任意两点间的直线传入参数:(x0,y0),竖直线的起点;(x1,y1)竖直线的终点color=1,点亮;color=0,擦除传出参数:无返回值:无*************************************************************/void drawLine(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char color){int dx; // 直线x轴差值变量int dy; // 直线y轴差值变量char dx_sym; // x轴增长方向,为-1时减值方向,为1时增值方向char dy_sym; // y轴增长方向,为-1时减值方向,为1时增值方向int dx_2; // dx*2值变量,用于加快运算速度int dy_2; // dy*2值变量,用于加快运算速度int di; // 决策变量dx = x1-x0; // 求取两点之间的差值dy = y1-y0;if (dx<0) dx_sym=-1;else{if(dx>0) dx_sym=1;else{drawCollumLine(x0,y0,y1,color);return;}}if(dy>0) dy_sym=1;else{if(dy<0) dy_sym=-1;else{drawRowLine(x0,y0,x1,color);return;}}dx=dx_sym*dx;dy=dy_sym*dy;dx_2=dx*2;dy_2=dy*2;if(dx>=dy){di=dy_2-dx;while(x0!=x1){drawPoint(x0,y0,color);x0+=dx_sym;if(di<0) di+=dy_2;else {di+=dy_2-dx_2;y0+=dy_sym;}}drawPoint(x0,y0,color);}else{di=dx_2-dy;while(y0!=y1){drawPoint(x0,y0,color);y0+=dy_sym;if(di<0) di+=dx_2;else {di+=dx_2-dy_2;x0+=dx_sym;}}drawPoint(x0,y0,color);}}//画圆函数void drawRound(int x0,int y0,unsigned char r){int x=0,y=r;float d;d=1.25-r;while(x<=y){drawPoint(x0+x,y0+y,1);drawPoint(x0+x,y0-y,1);drawPoint(x0-x,y0+y,1);drawPoint(x0-x,y0-y,1);drawPoint(x0+y,y0+x,1);drawPoint(x0+y,y0-x,1);drawPoint(x0-y,y0+x,1);drawPoint(x0-y,y0-x,1);if(d<0)d+=x*2.0+3;else{d+=2.0*(x-y)+5;y--;}x++;}}//清屏函数void clr_screen(){writeCommand(0x34); //扩充指令操作delayms(5);writeCommand(0x30); //基本指令操作delayms(5);writeCommand(0x01); //清屏delayms(5);ClrGDRAM();}void main(void){delayms(500);//等待上电稳定LcmInit();while(1){drawPoint(10,20,1);delayms(1000);clr_screen();delayms(1000);drawCollumLine(20,2,50,1);delayms(1000);clr_screen();delayms(1000);drawRowLine(10,3,50,1);delayms(1000);clr_screen();delayms(1000);drawLine(1,1,30,20,1);delayms(1000);clr_screen();delayms(1000);LcmPrint(1,20,"哈哈kkkah");delayms(1000);clr_screen();delayms(1000);drawRound(64,32,20);delayms(1000);clr_screen();delayms(1000);disp_picture(Photo1);delayms(1000);clr_screen();delayms(1000);}}。
PG12864F汉字显示

Proteus仿真图:汉字用取模软件取得地址程序:#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit wr=P2^0;sbit rd=P2^1;sbit ce=P2^2;sbit cd=P2^3;sbit rst=P2^4;void delay(uint t);void init_12864();void write_data(uchar dat);void write_cmd1(uchar cmd);void write_cmd2(uchar dat,uchar cmd);void write_cmd3(uchar data1,uchar data2,uchar cmd); uchar read_status();void check_status();void clear_screen();void display_char(uchar x,uchar y,uchar ch);//注意汉字数组要加code放到外部存储器中,如果不加code则空间不够uchar code HZ0[6][32]={{/*-- 文字: 华--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/0x11,0x00,0x11,0x10,0x21,0x20,0x61,0xC0,0xA3,0x00,0x2D,0x08,0x21,0x08,0x20,0xF8, 0x22,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00},/*-- 文字: 东--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x12,0x00,0x22,0x00,0x3F,0xE0,0x02,0x00, 0x02,0x00,0x22,0x40,0x22,0x20,0x42,0x10,0x82,0x10,0x0E,0x00},/*-- 文字: 交--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x02,0x00,0xFF,0xF8,0x00,0x00,0x10,0x40,0x20,0x20,0x40,0x10,0x10,0x40, 0x08,0x80,0x05,0x00,0x02,0x00,0x05,0x00,0x18,0xC0,0xE0,0x38},/*-- 文字: 通--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x47,0xF0,0x21,0x20,0x20,0xC0,0x07,0xF0,0x04,0x90,0xE4,0x90,0x27,0xF0,0x24,0x90, 0x24,0x90,0x27,0xF0,0x24,0x90,0x24,0xB0,0x50,0x00,0x8F,0xF8},/*-- 文字: 大--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x05,0x00,0x05,0x00, 0x05,0x00,0x08,0x80,0x08,0x80,0x10,0x40,0x20,0x20,0xC0,0x18},/*-- 文字: 学--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x24,0x20,0x12,0x40,0x00,0x80,0xFF,0xF8,0x80,0x08,0x80,0x08,0x3F,0xC0,0x00,0x80, 0x03,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00}};uchar code HZ1[4][32]={/*-- 文字: 电--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x00,0x02,0x08,0x02,0x08,0x01,0xF8},/*-- 文字: 气--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x20,0x00,0x20,0x00,0x3F,0xF8,0x40,0x00,0x9F,0xE0,0x00,0x00,0x7F,0xE0,0x00,0x20, 0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x28,0x00,0x18,0x00,0x08},/*-- 文字: 学--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x24,0x20,0x12,0x40,0x00,0x80,0xFF,0xF8,0x80,0x08,0x80,0x08,0x3F,0xC0,0x00,0x80, 0x03,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00},/*-- 文字: 院--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x00,0x80,0xF0,0x40,0x97,0xF8,0x94,0x08,0xA0,0x00,0xA3,0xF0,0x90,0x00,0x90,0x00, 0x97,0xF8,0x91,0x20,0xE1,0x20,0x82,0x20,0x84,0x28,0x88,0x18}};uchar code HZ2[6][32]={{/*-- 文字: 零--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/0x3F,0xE0,0x02,0x00,0xFF,0xF8,0x82,0x08,0xBA,0xE8,0x02,0x00,0x3A,0xE0,0x0D,0x80, 0x30,0x60,0xC2,0x18,0x1F,0xC0,0x00,0x80,0x1D,0x00,0x03,0x00},/*-- 文字: 七--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x78,0x07,0x80,0xFC,0x00,0x04,0x00, 0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x08,0x04,0x08,0x03,0xF8},/*-- 文字: 电--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10, 0x42,0x10,0x7F,0xF0,0x42,0x00,0x02,0x08,0x02,0x08,0x01,0xF8},/*-- 文字: 牵--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x02,0x00,0x3F,0xE0,0x05,0x00,0x08,0x80,0x10,0x40,0xFF,0xF8,0x80,0x08,0x22,0x00, 0x3F,0xE0,0x42,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00},/*-- 文字: 二--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,0x00,0x00},/*-- 文字: 班--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x01,0x00,0xF9,0x78,0x21,0x20,0x25,0x20,0x25,0x20,0xFD,0x20,0x25,0x78,0x25,0x20, 0x29,0x20,0x21,0x20,0x3A,0x20,0xE2,0x20,0x04,0xF8,0x08,0x00}};uchar code HZ3[3][32]={{/*-- 文字: 占--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/0x04,0x00,0x04,0x00,0x04,0x00,0x07,0xF8,0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xE0, 0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,0x7F,0xE0,0x40,0x20},/*-- 文字: 俊--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x10,0x80,0x11,0x00,0x12,0x20,0x27,0xF0,0x20,0x10,0x62,0x20,0xA4,0x10,0x29,0x08, 0x21,0xE0,0x22,0x20,0x25,0x40,0x20,0x80,0x23,0x60,0x2C,0x18},/*-- 文字: 龙--*//*-- 楷体_GB231211; 此字体下对应的点阵为:宽x高=14x14 --*//*-- 宽度不是8的倍数,现调整为:宽度x高度=16x14 --*/{0x04,0x00,0x04,0x80,0x04,0x40,0x04,0x00,0xFF,0xF8,0x05,0x00,0x09,0x10,0x09,0x20, 0x09,0x40,0x11,0x80,0x11,0x00,0x23,0x08,0x4D,0x08,0x80,0xF8}};//汉字显示函数,处在x y处显示汉字hzvoid display_HZ(uchar x,uchar y,uchar *hz)////x 0-3 y 0-7{uchar i,j=0;for(i=0;i<16;i++){write_cmd3(((j/2)<<4)|(y*2),x,0x24);//地址指针设置..低地址,高地址,命令write_cmd2(hz[j++],0xc0);write_cmd2(hz[j++],0xc0);}}void main(){uchar i,j=0;init_12864();for(i=0;i<6;i++)display_HZ(0,1+i,HZ0[i]);//显示:华东交通大学for(i=0;i<4;i++)display_HZ(1,1+i,HZ1[i]);显示:电气学院for(i=0;i<6;i++)display_HZ(2,1+i,HZ2[i]);显示:零七电牵二班for(i=0;i<3;i++)display_HZ(3,2+i,HZ3[i]);显示:占俊龙//for(i=0;i<128;i++)//{// display_char(i/16,i%16,'0'+i);//}//clear_screen();}//显示字符函数,处在x y处显示chvoid display_char(uchar x,uchar y,uchar ch)//x 0-7 y 0-15{write_cmd3((((x*2)<<4)+y),0x00,0x24);//地址指针位置write_cmd2(ch-32,0xc0);//t6963c字符表与ASCII差32@@@@@@@@@@@@@@@@ }void delay(uint t){uint i,j;for(i=0;i<t;i++)for(j=0;j<50;j++);}void init_12864(){rst=1;delay(10);rst=0;wr=1;rd=1;ce=1;cd=1;rst=1;check_status();write_cmd3(0x01,0x00,0x21);//光标指针设置check_status();write_cmd3(0x00,0x00,0x42);//图形区首地址check_status();write_cmd3(16,0x00,0x43);//图形区宽度check_status();write_cmd1(0x80);//显示方式设置,正常显示check_status();//write_cmd1(0x94);//。
12864画点教程(保留)

基于ST7920控制的12864液晶用于字符显示很方便的,但网友说用它显示图形并不合适,原因就是它绘图时先要关闭显示,绘完后又要打开,速度会较慢。
我没有用过别的液晶,手中只有这一款,摆弄了几天,掌握了一点东西,写出来共享。
首先,我们知道,图形都是由像素点组成的,绘图的基础其实就是画点。
只要我们能点亮液晶的任意一个像素点,那么绘图就不是什么难事了。
万丈高楼平地起嘛,先要做的,当然是要打好基础。
ST7920提供了用于绘图的GDRAM(graph display RAM)。
共64×32个字节的空间(由扩充指令设定绘图 R AM 地址),最多可以控制256×64点阵的二维绘图缓冲空间。
在它的Datasheet给出了GDRAM的坐标地址对照表:(原文件名:图片1.png)引用图片用坐标表示,就是这样:(原文件名:图片2.png)引用图片它的横坐标每一个地址都是16 位的。
共16个地址,256位。
很明显,它能控制256*64像素的液晶屏,而我们的只是128*64像素液晶屏,显然只用到它的一部分。
我刚开始以为它对应屏幕的绘图RAM是这样分布的(如红色部分):(原文件名:图片3.png)引用图片结果栽了大根头,后来终于弄明白,原来它对应屏幕的GDRAM是这样分布的:汗,发了一半不小心提交了,继续(原文件名:图片4.png)引用图片只要我们清楚了它的GDRAM和屏幕上像素点的映射(对应)关系,点亮对应的像素点就容易多了。
要点亮某一个像素点,就是将这个像素点在GDRAM中对应的位置1,这个相信没人会不知道吧?我们先讨论一下思路,再一步步写代码。
我觉得,思路要比代码重要的多,只要你的思路通了,正确了,那么写出代码肯定会很容易。
首先,给你x,y的坐标,要你点亮一个点,要怎么做呢?从上面的图我们知道,它是分为两个半屏的,首先,我们要确定这个点是在上半屏还是下半屏,然后确定它是在那一行(纵坐标Y),再确定它是在哪一个字节的哪一个位(也就是确定它在那一列,即横坐标X)。
基于51单片机的lcd12864的画图程序

1、打点部分/********************************************************名称:GUI_Point(打点)说明:X:横坐标(代表列的位置,0~127) Y:纵坐标(代表行的位置,0~63) 根据Datesheet需先把数据写到GDRAM,读取当前位置的数据,经过或和移位后再把数据重新写入GDRAM每行有16个位元,共64行,每个位元有两个8位(高低8位) 计算出在那个位元,在该位元的哪一位易出现的问题:1、打点位置的定位2、读取当前显示的数据3、或和移位,即重新写人的新数据********************************************************/void GUI_Point(uchar x,uchar y,uchar flag){uchar x_Dyte,x_byte; //定义列地址的字节位,及在字节中的哪1位uchar y_Dyte,y_byte; //定义为上下两个屏(取值为0,1),行地址(取值为0~31)Write_command(0x36); //绘图模式命令/***X,Y坐标互换,即普通的X,Y坐标***/x_Dyte=x/16; //计算在16个字节中的哪一个x_byte=x&0x0f; //计算在该字节中的哪一位y_Dyte=y/32; //0为上半屏,1为下半屏y_byte=y&0x1f; //计算在0~31当中的哪一行Write_command(0x80+y_byte); //设定行地址(y坐标)Write_command(0x80+x_Dyte+8*y_Dyte); //设定列地址(x坐标),并通过8*y_D yte选定上下屏Read_data();GDRAM_hbit=Read_data(); //读取当前显示高8位数据GDRAM_lbit=Read_data(); //读取当前显示低8位数据delay_us(5);if(flag==1){Write_command(0x80+y_byte); //设定行地址(y坐标)Write_command(0x80+x_Dyte+8*y_Dyte); //设定列地址(x坐标),并通过8*y _Dyte选定上下屏delay_us(5);if(x_byte<8) //判断其在高8位,还是在低8位{Write_data(GDRAM_hbit|(0X01<<(7-x_byte))); //显示GDRAM区高8位数据 Write_data(GDRAM_lbit); //显示GDRAM区低8位数据}else{Write_data(GDRAM_hbit);Write_data(GDRAM_lbit|(0x01<<(15-x_byte)));}}else{Write_data(0x00); //清除GDRAM区高8位数据Write_data(0x00); //清除GDRAM区低8位数据}}2、画线部分先看程序/********************************************************* 名称:GUI_Line()采用布兰森汉姆(Bresenham)算法画线* 功能:任意两点间的直线。
51单片机带字库12864液晶动态汉字显示C语言源程序

51单片机带字库12864液晶动态汉字显示C语言源程序2009-10-17 19:36实验芯片为:AT89S52,带字库液晶屏:12864,实现的目的:动态一个汉字一个汉字显示。
其实和显示汉字的程序一样,只是稍做一下修改即可。
C语言源程序如下:#include <stdio.h>#include <math.h>#include <reg52.h>#include <string.h>sbit RS=P2^4;sbit WRD=P2^5;sbit E=P2^6;sbit PSB=P2^1;sbit RES=P2^3;void TransferData(char data1,bit DI);void delayms(unsigned int n);void delay(unsigned int m);void lcd_mesg003(unsigned char code *addr1);unsigned char code IC_DAT[]={"我是一个中国人啊"};void initinal(void){delay(40);PSB=1; //并口工作模式delay(1);RES=0; //复位delay(1);RES=1; //复位置高delay(10);TransferData(0x30,0);delay(100);TransferData(0x30,0);delay(37);TransferData(0x08,0);delay(100);TransferData(0x10,0);delay(100);TransferData(0x0C,0);delay(100);TransferData(0x01,0);delay(10);TransferData(0x06,0);delay(100);}void main(void){while(1){initinal();//调用LCD字库初始化程序delay(100);lcd_mesg003(IC_DAT);}}void lcd_mesg003(unsigned char code *addr1){unsigned char i;//第一行TransferData(0x80,0);delay(100);for(i=0;i<16;i++){TransferData(*addr1,1);addr1++;delayms(50);}}void TransferData(char data1,bit DI) //传送数据或是命令,当DI=0时,传送命令,当DI=1时,传送数据{WRD=0;RS=DI;delay(1);P0=data1;E=1;delay(1);E=0;}void delayms(unsigned int n){unsigned int i,j;for(i=0;i<n;i++)for(j=0;j<2000;j++);}void delay(unsigned int m){unsigned int i,j;for(i=0;i<m;i++)for(j=0;j<10;j++);}原理就是在显示每个汉字的时候加了一个延时程序,当然可以用定时器来实现,这样的话,不占用CPU处理时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//选择命令 //等待
LCD12864_EN = 1; LCD12864_Delay1ms(1); readValue = LCD12864_DATAPORT; LCD12864_EN = 0;
return readValue; }
#endif
/******************************************************************************
}
/******************************************************************************
* *函数名
: LCD12864_ClearScreen
* 函数功能 个清
: 在画图模式下,LCD12864 的 01H 命令不能清屏,所以要自己写一
uchar i,j;
LCD12864_WriteCmd(0x34);
//开启拓展指令集
for(i=0;i<32;i++) {
//因为 LCD 有纵坐标 32 格所以写三十二次
LCD12864_WriteCmd(0x80+i);
//先写入纵坐标 Y 的值
LCD12864_WriteCmd(0x80);
/******************************************************************************
*
*函数名 * 函数功能
: LCD12864_Delay1ms : 延时 1MS
*输 入
:c
*输 出
:无
*******************************************************************************
/
void LCD12864_Delay1ms(uint c) {
uchar a,b; for(; c>0; c--) {
for(b=199; b>0; b--) {
for(a=1; a>0; a--); } } }
/******************************************************************************
*
*函数名 * 函数功能 *输 入 *输 出
: LCD12864_ReadData : 读取数据 :无 : 读取到的 8 位数据
*******************************************************************************
/
#ifdef LCD12864_PICTURE
*
*函数名 * 函数功能
: LCD12864_Init : 初始化 LCD12864
*输 入
:无
*输 出
:无
*******************************************************************************
/
void LCD12864_Init() {
* *函数名
: LCD12864_WriteData
* 函数功能 *输 入 *输 出
: 写数据 : dat :无
*******************************************************************************
/
void LCD12864_WriteData(uchar dat)
i++; if(i > 100) {
LCD12864_EN = 0; return 0; //超过等待时间返回 0 表示失败 } }
LCD12864_EN = 0;
return 1; }
/******************************************************************************
/
void Delay10ms(unsigned int c) //误差 0us
{ unsigned char a, b;
//--c 已经在传递过来的时候已经赋值了,所以在 for 语句第一句就不用赋值了--// for (;c>0;c--) {
for (b=38;b>0;b--) {
for (a=130;a>0;a--); }
//--声明全局函数--// void Delay10ms(unsigned int c); //延时 10ms
/******************************************************************************
* *函数名
: main
* 函数功能 *输 入
//0x36 扩展指令里面打开绘图显示 //恢复基本指令集
#endif
/******************************************************************************
LCD12864_PSB = 1; LCD12864_RST = 1;
//选择并行输入 //复位
LCD12864_WriteCmd(0x30); //选择基本指令操作 LCD12864_WriteCmd(0x0c); //显示开,关光标 LCD12864_WriteCmd(0x01); //清除 LCD12864 的显示内容
//选择命令 //选择写入 //初始化使能端
LCD12864_DATAPORT = cmd; //放置数据
LCD12864_EN = 1; LCD12864_Delay1ms(1); LCD12864_EN = 0; }
//写时序
/******************************************************************************
{
uchar i;
i = 0;
while( LCD12864_Busy() == 0)
{
LCD12864_Delay1ms(1);
i++;
if( i>100)
{
return;
//超过等待退出
}
}
LCD12864_RS = 1; LCD12864_RW = 0;
//选择数据 //选择写入
LCD12864_EN = 0; //初始化使能端
*
*函数名 * 函数功能 *输 入 *输 出
: LCD12864_WriteCmd : 写命令
: cmd :无
*******************************************************************************
/
void LCD12864_WriteCmd(uchar cmd) {
/******************************************************************************
*
*函数名 * 函数功能
: Delay10ms : 延时函数,延时 10ms
*输 入
:无
*输 出
:无
*******************************************************************************
//再写入横坐标 X 的值
for(j=0;j<32;j++)
//横坐标有 16 位,每位写入两个字节的的数据,也
{
//就写入 32 次以为当写入两个字节之后横坐标会自
LCD12864_WriteData(0x00);
//动加 1,所以就不用再次写入地址了。
}
}
LCD12864_WriteCmd(0x36); LCD12864_WriteCmd(0x30); }
/
uchar LCD12864_Busy(void) {
uchar i = 0;
LCD12864_RS = 0; //选择命令 LCD12864_RW = 1; //选择读取
LCD12864_EN = 1; LCD12864_Delay1ms(1);
while((LCD12864_DATAPORT & 0x80) == 0x80) //检测读取到的值 {
uchar i; i = 0; while( LCD12864_Busy() == 0) {
LCD12864_Delay1ms(1);
i++;
if( i>100)
{ return;
//超过等待退出
}
}
LCD12864_RS = 0; LCD12864_RW = 0; LCD12864_EN = 0;
* *输 入
* 屏函数 :无
*输 出
:无
*******************************************************************************
/
#ifdef LCD12864_PICearScreen(void) {
uchar LCD12864_ReadData(void) {
uchar i, readValue;
i = 0;
while( LCD12864_Busy() == 0)
{
LCD12864_Delay1ms(1);
i++;