无字库12864使用protues仿真
基于Proteus仿真的12864液晶的显示

H:选择芯片(右半屏)信号
2CS2
H/L
H:选择芯片(左半屏)信号
17RET
H/L
复位信号,低电平复位
18V0UT
-10V
LCD驱动负电压
19LED+
-
LED背光板电源
20LED-
-
LED背光板电源
3、LCD原理简图
4、LCD主要功能介绍
1)显示数据RAM(DDRAM)
DDRAM64X8X8 bits)是存储图形显示数据的。此RA啲每一位 数据对应显示面板上一个点的显示(数据为H与不显示(数据为L)。DDRA的地址与显示位置关系对照图(见附录一)
8)丫地址计数器
丫地址计数器是一个6位循环加一计数器。它管理某一页面上的64个单元。丫地址计数器可以由MP以指令形式设置,它和页地址指针结 合唯一选通显示存储器的一个单元,丫地址计数器具有自动加一功能。
在显示存储器读/写操作后丫地址计数将自动加一。当计数器加至3FH后 循环归零再继续加一。
9)Z地址计数器
2、LCD引脚说明
管脚名称
LEVER
管脚功能描述
3VSS
0
电源地
4VDD
+5.0V
电源电压
5V0
-
液晶显示器驱动电压
6D/I(RS)
H/L
D/I=“H'表示DB7sDB0为显示数据
D/I=“,表示DB7sDB0为显示指令数据
7R/W
H/L
R/W=“H,E=“H数据被读至U DB7sDB0 R/W= “L”,E=“HRL'数据被写到IR或DR
12)复位端/RES
复位端/RES用于在LCM(液晶显示模块)上电时或需要时实现硬件 电路对LCM(液晶显示模块)的复位。该复位功能将实现:
12864指令以及PROTUES的应用

表3.1 AMPIRE128×64接口说明表管脚电平说明管脚号1 CS1 H/L 片选择信号,低电平时选择前64列2 CS2 H/L 片选择信号,低电平时选择后64列3 GND 0V 逻辑电源地4 VCC 5.0V 逻辑电源正5 V0 LCD驱动电压,应用时在VEE与V0之间加一2K可调电阻6 RS H/L 数据\指令选择:高电平:数据D0-D7将送入显示RAM;低电平:数据D0-D7将送入指令寄存器执行7 R/W H/L 读\写选择:高电平:读数据;低电平:写数据8 E H/L 读写使能,高电平有效,下降沿锁定数据9 DB0 H/L 数据输入输出引脚10 DB1 H/L 数据输入输出引脚11 DB2 H/L 数据输入输出引脚12 DB3 H/L 数据输入输出引脚13 DB4 H/L 数据输入输出引脚14 DB5 H/L 数据输入输出引脚15 DB6 H/L 数据输入输出引脚16 DB7 H/L 数据输入输出引脚17 RST L 复位信号,低电平有效18 VOUT -10V LCD驱动电源2. 指令描述(1)显示开/关设置CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L L L H H H H H H/L 功能:设置屏幕显示开/关。
DB0=H,开显示;DB0=L,关显示。
不影响显示RAM(DD RAM)中的内容。
(2)设置显示起始行CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L H H行地址(0~63)功能:执行该命令后,所设置的行将显示在屏幕的第一行。
显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。
Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。
(3)设置页地址CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 L L H L H H H页地址(0~7)功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。
LCD12864_proteus仿真(移动显示中文)

D_PORT EQU P1 ;P1连接LCD的数据口EN EQU P2.0 ;P2.0为LCD的使能脚RW EQU P2.1 ;P2.1为读写选择,低为写,高为读RS EQU P2.2 ;P2.2为指令或数据选择,低为指令,高为数据CS1 EQU P2.3 ;P2.3为左半LCD选择CS2 EQU P2.4 ;P2.4为右半LCD选择ORG 0000H;*******************************************MAIN:MOV DPTR,#TAB ;送表的首地址CLR CS1 ;开左边;CLR CS2 ;开右边MOV A,#3FH ;开显示器LCALL WRZHILINGMAIN1: MOV R2,#0C0H ;设置起始行,从第0行开始,用R2作为行的变量,每幅画面每次移动一行 MAIN2: MOV A,R2 ;送行地址LCALL WRZHILING ;写行地址;########################### 一幅画面从这里开始 #################################### MOV R5,#00H ;字的偏移地址从0开始。
;-----------------------------------------------------------;为LCD的第0页(字的上半节)设置页地址与列地址及字节数,(0~7共8页)MOV A,#0B8H ;设置页地址,从第0页开始LCALL WRZHILINGMOV A,#40H ;设置列地址,从第0列开始LCALL WRZHILINGMOV R4,#48 ;字的上半部分共有48个字节(16X3=48)。
;*******************************************LOOP0: ;显示字的上半部分MOV A,R5MOVC A,@A+DPTRLCALL WRDATAINC R5DJNZ R4,LOOP0;***********************************************************;为LCD的第1页(字的下半节)设置页地址与列地址及字节数,(0~7共8页)MOV A,#0B9H ;设置/页地址,从第1页开始LCALL WRZHILINGMOV A,#40H ;设置列地址,从第0列开始LCALL WRZHILINGMOV R4,#48 ;字的下半部分共有48个字节(16X3=48)。
LCD128x64液晶Proteus仿真

LCD128x64液晶Proteus仿真---AT89C52(并口) proteus 2010-04-07 20:05:40 阅读16 评论0字号:大中小/****************由龙丘科技开发板程序改写************************/ #include "AT89X52.H" //52系列单片机定义文件#include "intrins.h" //调用_nop_();延时函数用#define LCD_Data_Out P3sbit RW = P1^0;sbit RS = P1^1;sbit RST = P1^2;sbit CS = P1^3;sbit E = P1^4;#define X_WIDTH 132#define Y_WIDTH 64#define byte unsigned char //无符号字符(8位)#define uint unsigned int //无符号整数(16位)void LCD_Init(void);void LCD_CLS(void);void LCD_P6x8Str(byte x,byte y,byte ch[]);void LCD_P8x16Str(byte x,byte y,byte ch[]);void LCD_P14x16Str(byte x,byte y,byte ch[]);void LCD_Print(byte x, byte y, byte ch[]);void LCD_PutPixel(byte x,byte y);void LCD_Rectangle(byte x1,byte y1,byte x2,byte y2,byte gif); void Draw_LQLogo(void);void Draw_LibLogo(void);void Draw_BMP(byte x0,byte y0,byte x1,byte y1,byte bmp[]); void LCD_WrDat(byte date);void LCD_WrCmd(byte cmd);void LCD_Fill(byte bmp_data);void LCD_Set_Pos(byte x, byte y);//*************************建立数字库*********************code byte F6x8[][6] ={{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // ' { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z};code byte F14x16_Idx[] ={"科技"};code byte F14x16[] = {0x24,0x24,0xA4,0xFE,0xA2,0x22,0x00,0x24,0x48,0x00,0xFE,0x80,0x80,0x00,0x04,0x03,0x00,0x3F,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,0x00,0x00,//科2 0x10,0x10,0xFE,0x90,0x10,0x48,0xC8,0x48,0x7E,0x48,0x48,0xC8,0x08,0x00,0x12,0x21,0x1F,0x00,0x20,0x20,0x11,0x0A,0x04,0x0A,0x11,0x20,0x20,0x00,//技3 };//************************延时******************************void LCD_DLY_ms(uint ms){int ii,jj;if (ms<1) ms=1;for(ii=0;ii<ms;ii++)for(jj=0;jj<2670;jj++); //busclk:16MHz--1ms}/**********************主函数*******************************/main(){LCD_Init(); //LCD初始化while(1){LCD_P6x8Str(0,3,"zjwind@163com"); //输出字符,利用ASCLL码/* LCD_P6x8Str(0,1,"1"); //输出字符,利用ASCLL码LCD_P6x8Str(0,2,"2"); //输出字符,利用ASCLL码LCD_P6x8Str(0,3,"3"); //输出字符,利用ASCLL码LCD_P6x8Str(0,4,"4"); //输出字符,利用ASCLL码LCD_P6x8Str(0,5,"5"); //输出字符,利用ASCLL码LCD_P6x8Str(0,6,"6"); //输出字符,利用ASCLL码LCD_P6x8Str(0,7,"7"); //输出字符,利用ASCLL码*/LCD_Print(0,0,"科技");}}/***************************LCD12864************************///**************************写命令**************************void LCD_WrCmd(byte cmd) //写命令{RS = 0; CS = 0; RW = 0; E = 1;P3 = cmd;_nop_();E = 0;}//**************************写数据************************** void LCD_WrDat(byte date) //--写数据{RS = 1; CS = 0; RW = 0; E = 1;P3 = date;_nop_();E = 0;}//************************清屏***************************** void LCD_Fill(byte bmp_data){byte y,x;for(y=0;y<8;y++) //分页,总共8页{LCD_WrCmd(0xb0+y); //设置页地址LCD_WrCmd(0x01); //设置column地址低地址LCD_WrCmd(0x10); //设置column地址高地址for(x=0;x<X_WIDTH;x++)LCD_WrDat(bmp_data);}}//*************************定指针坐标*********************** void LCD_Set_Pos(byte x, byte y) //定坐标,指针的位置{LCD_WrCmd(0xb0+y); //定初始页---P39LCD_WrCmd(((x&0xf0)>>4)|0x10); //坐标在column的位置MSB ---P40 LCD_WrCmd((x&0x0f)|0x01); //LSB 0X01 ---P40}//************************LCD初始化*************************void LCD_Init(void){RST = 0; //指令表---P37LCD_DLY_ms(50);RST = 1;LCD_DLY_ms(20);LCD_WrCmd(0xaf); //0xaf LCD On ---P39LCD_WrCmd(0x2f); //0x2f 设置上电控制模式---P44LCD_WrCmd(0x81); //0x81 电量设置模式(显示亮度?---P45LCD_WrCmd(0x1a); //指令数据0x0000~0x003fLCD_WrCmd(0x24); //0x24 V5内部电压调节电阻设置---P45LCD_WrCmd(0xa2); //0xa2 5V,0xa1 3V3 LCD偏压设置---P42 LCD_WrCmd(0xc0); //0xc8 正常,0xc0 倒置Com 扫描方式设置LCD_WrCmd(0xa1); //0xa0 正常,0xa1 反向Segment方向选择---P42 LCD_WrCmd(0xa4); //0xa4 全屏点亮/变暗指令---P42LCD_WrCmd(0xa6); //0xa6 正向反向显示控制指令---P42LCD_WrCmd(0xac); //0xac 关闭静态指示器---P46LCD_WrCmd(0x00); //指令数据LCD_WrCmd(0x40+32); //0x40+32 设置显示起始行对应RAM ---P39LCD_Fill(0x00); //初始清屏LCD_Set_Pos(0,0); //指针的位置}/******************************输出字符****************************/void LCD_P6x8Str(byte x,byte y,byte ch[]) //输入字符{byte c=0,i=0,j=0;while (ch[j]!='\0'){c =ch[j]-48; //F6x8[c][i]从032开始建立ASCLL码数组,要查找,需减32if(x>126){x=0;y++;}LCD_Set_Pos(x,y);for(i=0;i<6;i++)LCD_WrDat(F6x8[c][i]);x+=6;j++;}}/******************************输出汉字字符串***********************/void LCD_P14x16Str(byte x,byte y,byte ch[]){byte wm=0,ii = 0; //字节:0xffuint adder=1; //字:0xffffwhile(ch[ii] != '\0'){wm = 0;adder = 1;while(F14x16_Idx[wm] > 127) //why {if(F14x16_Idx[wm] == ch[ii]){if(F14x16_Idx[wm + 1] == ch[ii + 1]) {adder = wm * 14;break;}}wm += 2;}if(x>118){x=0;y++;}LCD_Set_Pos(x , y);if(adder != 1)// 显示汉字{LCD_Set_Pos(x , y);for(wm = 0;wm < 14;wm++){LCD_WrDat(F14x16[adder]);adder += 1;}LCD_Set_Pos(x,y + 1);for(wm = 0;wm < 14;wm++){LCD_WrDat(F14x16[adder]);adder += 1;}}else //显示空白字符{ii += 1;LCD_Set_Pos(x,y);for(wm = 0;wm < 16;wm++){LCD_WrDat(0);}LCD_Set_Pos(x,y + 1);for(wm = 0;wm < 16;wm++){LCD_WrDat(0);}}x += 14;ii += 2;}}//******************输出汉字和字符混合字符串********************** void LCD_Print(byte x, byte y, byte ch[]){byte ch2[3];byte ii=0;while(ch[ii] != '\0'){if(ch[ii] > 127) //汉字的码>127{ch2[0] = ch[ii];ch2[1] = ch[ii + 1];ch2[2] = '\0'; //汉字为两个字节LCD_P14x16Str(x , y, ch2); //显示汉字x += 14; //不太理解ii += 2;}else{ch2[0] = ch[ii];ch2[1] = '\0'; //字母占一个字节LCD_P8x16Str(x , y , ch2); //显示字母x += 8;ii+= 1;}}}。
Protues中单片机驱动12864仿真

4.上面设置好之后我们就可以在文字输入区输入汉字了,以“Ctrl”+“Enter”结束:
5.然后点击“C51格式”,在点阵生成区就会出现相应的模如下,我们可以把每个汉字对应的模存放在相应的数组中:
上面为取模软件的使用方法,下面开始正式教给读者单片机驱动lcd12864液晶显示屏的方法,在这之前,需要对无字库lcd12864液晶显示屏有个基础的了解,相关引脚如下:
void LCDWriteChineseBlack (char leftright, char page, char column, char chinese[]);//12864指定页指定列显示一个汉字,以黑色背景白色文本显示
void LCDWriteNum (char leftright, char page, char column, char num[]);//12864指定屏指定页指定列显示一个数字
void LCDDelay (char t)
{
char i, j;
for (i = 0; i < t; i ++ )
for (j = 0; j < 10 ;j ++ );
}
void CheckState ( )
{
char dat;
LCDRs = 0;
LCDRw = 1;
do
{
dat = 0x00;
LCDEn = 1;
参数leftright用来使能左半屏或者右半屏(‘L’或者’R’),
参数page用来选择在哪一页显示(0~7),
参数column用来选择在哪一列显示(0~64),
参数num[]即为待显示汉字的模。
基于Proteus仿真的12864液晶的显示

基于Proteus仿真的12864液晶的显示Proteus实验报告课程题目:基于Proteus仿真的12864液晶的显示班级:XXX姓名:XXX学号:XXX完成时间:XXX目录一、概述 (3)1、1LCD简介 (3)1、2LCD引脚说明 (3)1、3LCD原理简图 (4)1、4LCD主要功能介绍 (4)1、5指令说明 (6)二、液晶显示原理 (8)2.1汉字和英文显示原理 (8)2.2图形显示 (9)三、软件仿真 (10)3.1汉字显示 (10)3.2向上滚动显示 (11)3.3PCB图 (11)四、部分实验代码 (12)五、总结 (18)一、概述1、LCD简介在Protues仿真软件中,AMPIRE12864是一种图形点阵液晶显示器。
它主要采用动态驱动原理由行驱动—控制器和列驱动器两部分组成了128(列)×64(行)的全点阵液晶显示。
软件中不提供中文字库,但可完成图形显示,也可以通过汉字取模软件显示8×4个(16×16点阵)汉字。
2、LCD引脚说明-3、LCD原理简图4、LCD主要功能介绍1)显示数据RAM(DDRAM)DDRAM(64×8×8 bits)是存储图形显示数据的。
此RAM 的每一位数据对应显示面板上一个点的显示(数据为H)与不显示(数据为L)。
DDRAM的地址与显示位置关系对照图(见附录一)2)I/O缓冲器(DB0~DB7)I/O缓冲器为双向三态数据缓冲器。
是LCM(液晶显示模块)内部总线与MPU总线的结合部。
其作用是将两个不同时钟下工作的系统连接起来,实现通讯。
I/O缓冲器在片选信号/CS有效状态下,I/O缓冲器开放,实现LCM(液晶显示模块)与MPU之间的数据传递。
当片选信号为无效状态时,I/O缓冲器将中断LCM(液晶显示模块)内部总线与MPU数据总线的联系,对外总线呈高阻状态,从而不影响MPU的其他数据操作功能。
3)输入寄存器输入寄存器用于接收在MPU运行速度下传送给LCM(液晶显示模块)的数据并将其锁存在输入寄存器内,其输出将在LCM(液晶显示模块)内部工作时钟的运作下将数据写入指令寄存器或显示存储器内。
Proteus仿真软件使用方法

Proteus仿真软件使用方法第二部分 Proteus ISIS快速入门一、简介Proteus软件是一款强大的单片机仿真软件,对于单片机学习和开发帮助极大。
Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和数字集成电路,包括单片机。
在国内由广州的风标电子技术有限公司代理。
在单片机课程中我们主要利用它实现下列功能:1、绘制硬件原理图,并设置元件参数。
2、仿真单片机及其程序以及外部接口电路,验证设计的可行性与合理性,为实际的硬件实验做好准备。
3、如有必要可以利用它来设计电路板。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,可以实现从构想到实际项目完成全部功能。
这里介绍Proteus ISIS软件的工作环境和一些基本操作,实现初学者入门。
至于更加详细的使用,请参考软件的帮助文件和其他有关书籍,还可以到网上找到许多参考资料。
二、界面介绍双击桌面上的ISIS 7 Professional图标或者单击屏幕左下方的“开始”?“程序”?“Proteus 7 Professional” ?“ISIS 7 Professional”,出现如图2-1所示屏幕,表明进入Proteus ISIS集成环境。
图2-1 Proteus ISIS集成环境进入之后的界面类似如图2- 2 所示。
图中已经标注各个部分的作用,我们现在就使用软件提供的功能进行工作。
图2-2 ISIS主窗口三、一个小项目的设计过程1、建立新项目启动软件之后,首先,新建一个项目:点击菜单:File?New Design,如图2-3所示,即可出现如图2-4所示的对话框,以选择设计模板。
一般选择A4图纸即可,点击OK,关闭对话框,完成设计图纸的模板选择,出现一个空白的设计空间。
图2-3 新设计图2-4 选模板这时设计名称为 UNTITLED (未命名),你可以点击菜单 file?save design 来给设计命名。
LCD12864原理与应用(源程序+原理图+proteus仿真)

LCD12864原理与应用1、LCD12864简介:LCD12864分为两种,带字库的和不带字库的,不带字库的液晶显示汉字的时候可以选择自己喜欢的字体。
而带字库的液晶,只能显示GB2312字体,当然也可以显示其他的字体,不过是用图片的形式显示。
下面介绍不带字库的LCD12864,以Proteus中的AMPIRE128×64为例,如下图所示,它的液晶驱动器为KS0108。
引脚功能:引脚符号状态引脚名称功能CS1,CS2输入芯片片选端,都是低电平有效CS1=0开左屏幕,CS1=1关左屏幕CS2=0开右屏幕,CS2=1关右屏幕RS输入数据/命令选择信号RS=1为数据操作,RS=0为写指令或读状态RW输入读写选择信号R/W=1为读选通,R/W=0为写选通E输入读写使能信号在E下降沿,数据被锁存(写)入液晶,在E高电平期间,数据被读出DB0—DB7三态数据总线数据或指令的传送通道RST 输入复位信号,低电平时复位复位时,关闭液晶显示,使显示起始行为0,可以跟单片机的复位引脚RST相连,也可以直接接VCC,使之不起作用V0液晶显示器驱动电压-Vout-10V LCD驱动负电压与带字库的液晶不同,此块液晶含有两个液晶驱动器,每块驱动器都控制64*64个点,分为左右两个屏幕显示,总共为128*64个点(即有128×64个点)。
这就是为什么AMPIRE128*64有CS1和CS2两个片选端的原因。
此液晶有8页,一页有8行点阵点,左右各64列,共128列。
如下图所示:2、LCD12864中的几条重要指令(一)行(line)设置命令:由此可见显示的起始行地址为0XC0,共64行,有规律地改变起始行号,可以实现滚屏效果。
(二)页(page)设置指令:起始页地址为0XB8,因为液晶有64行点,分为8页,每页就有8行点。
(三)列(column)地址设置指令每块驱动器的列地址都是从0X40到0X7F,共64列,所以此液晶共有128列点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
原理图:原程序:#include<>#define uchar unsigned char#define uint unsigned int#define Port P0 //DB0~DB7数据口sbit EN=P2^2;//使能sbit RW=P2^1;//读写sbit RS=P2^0;//数据/命令sbit CS2=P2^3;//片选sbit CS1=P2^4;/*图片“生活不易,知行合一”*/unsigned char code tu[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF 8,0xF8,0x7C,0x7C,0x7C,0x7C,0x3E,0x3E,0x3E,0x3E,0x3E,0x3F,0x1F,0x1F,0x1F,0x1F,0x1 F,0x1F,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0 F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x3E,0x3E,0x3E,0x3 E,0x3E,0x7C,0x7C,0x7C,0x7C,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xE0,0xE0,0xC 0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0xFC,0xF E,0x7E,0x3F,0x3F,0x1F,0x0F,0x0F,0x07,0x07,0x07,0x03,0x83,0x61,0x39,0x29,0x20,0x2 0,0xFC,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x64,0xC8,0x10,0x40,0x48,0x48,0x4 8,0x48,0xF8,0x48,0x44,0x44,0x44,0x40,0x00,0x04,0x04,0x04,0x04,0x84,0x64,0xF4,0x0 C,0x84,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x7C,0x54,0xD4,0x54,0x54,0x54,0x54,0x5 4,0x54,0x54,0xFC,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x03,0x07,0x0 7,0x0F,0x0F,0x1F,0x1F,0x3F,0x7E,0x7E,0xFC,0xF8,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xFE,0xFF,0x7F,0x3F,0x0F,0x07,0x03,0x01,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x42,0x42,0x42,0x42,0x4 2,0x7F,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00,0x70,0x1E,0x00,0x00,0x7E,0x22,0x2 2,0x22,0x23,0x22,0x22,0x22,0x7E,0x00,0x10,0x08,0x0C,0x06,0x01,0x00,0x00,0x7F,0x0 0,0x00,0x01,0x02,0x06,0x04,0x08,0x00,0x2C,0x26,0x13,0x13,0x4A,0x26,0x22,0x12,0x4 E,0x42,0x42,0x62,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x7F,0xFF,0xF E,0xFC,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF F,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x01,0x0F,0x3F,0x7F,0xFF,0xFF,0xFC,0xF0,0xE0,0x80,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x70,0x40,0x40,0x40,0x4 0,0x00,0xE0,0x20,0x20,0x20,0x20,0xE0,0x00,0x00,0x80,0x40,0x20,0x90,0x00,0x10,0x1 0,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0x60,0x30,0x3 0,0x40,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFF,0xF F,0x7F,0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,C,0xF8,0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x80,0x80,0x05,0x84,0xC4,0x36,0x1C,0x24,0xC 4,0x00,0xFF,0x80,0x80,0x80,0x80,0xFF,0x00,0x10,0x08,0x0C,0xFE,0x01,0x00,0x02,0x0 2,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x03,0x8B,0x8A,0x8A,0x8A,0x8A,0x8 A,0x8A,0x8A,0x8B,0xFB,0x02,0x02,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0 4,0x04,0x04,0x04,0x04,0x04,0x00,0x80,0x40,0x40,0x80,0x00,0x00,0x00,0x80,0x80,0xC 0,0xC0,0xE0,0xE0,0xF0,0xF0,0xF8,0xFC,0x7E,0x7E,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x0 1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x01,0x01,0x03,0x03,0x07,0x07,0x0F,0x0F,0x7F,0xFF,0xFF,0xFF,0xFE,0xFE,0x1C,0x0 0,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x81,0xC0,0xC0,0xE0,0xE 0,0xE1,0xE1,0xE1,0xE1,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE 0,0xE0,0xE0,0xE0,0xE1,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF 0,0xF8,0xF8,0xF8,0xF8,0x7C,0x7C,0x7D,0x7E,0x3E,0x3F,0x3F,0x1F,0x1F,0x1F,0x0F,0x0 F,0x07,0x07,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xF0,0xF 0,0xF8,0xF8,0xFC,0x7C,0x7C,0x7E,0x3E,0x3F,0x1F,0x1F,0x1F,0x0F,0x0F,0x07,0x07,0x0 7,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x07,0x07,0x07,0x07,0x03,0x03,0x0 3,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x0 1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,};void delay_ms(unsigned char x){unsigned char i,j;for(i=0;i<x;i++)for(j=0;j<250;j++);}/******************************************/void Wcmd(unsigned char cmd){RS=0;RW=0;EN=0;EN=1;Port=cmd;delay_ms(10); //一般情况下,如果此前有checkbusy函数这里就不用写delay 了EN=0;}/**************************************************/void Wdata(unsigned char dat){RS=1;RW=0;EN=0;EN=1;Port=dat;delay_ms(10);EN=0;}/***********************************************/ void Setpage(unsigned char page){page=page|0xb8;Wcmd(page);}/***********************************/void Setx(unsigned char x){x=0xc0|x;Wcmd(x);}/***********************************/ void Sety(unsigned char y){y=0x3f&y;y=0x40|y;Wcmd(y);}/************************************/ void Setonoff(unsigned char key){key=0x3e|key;Wcmd(key);}/*******************************/void Select(unsigned char x){switch(x){case 0: CS1=0; CS2=0; break;case 1: CS1=0; CS2=1; break;case 2: CS1=1; CS2=0; break;}}/************************************/void Clear(unsigned char screen){unsigned char i,j;Select(screen);for(i=0;i<8;i++){Setpage(i);for(j=0;j<64;j++)Wcmd(0x00);}}/*****************************************/ void Initial(){Select(0);Setonoff(1);Setonoff(0);Setonoff(1);Select(0);}/**************************************/void Display(unsigned char a,b,c,unsigned char *d) {unsigned char i;Select(a);Setpage(b);Sety(c);for(i=0;i<16;i++)Wdata(d[i]);Setpage(b+1);Sety(c);for(i=16;i<32;i++)Wdata(d[i]);}void Displaytu(unsigned char a[][64]){unsigned char i,j;for(i=0;i<8;i++){Select(1);Setpage(i);Sety(0);for(j=0;j<64;j++)Wdata(a[2*j][i]);Select(2);Setpage(i);Sety(0);for(j=0;j<64;j++)Wdata(a[2*j+1][i]);}}/******************************************/ void main(){unsigned int i,j;Initial();while(1){Select(1);for(i=0;i<8;i++){Select(1);Setpage(i);Sety(0);for(j=0;j<64;j++)Wdata(tu[128*i+j]);Select(2);Setpage(i);Sety(0);for(j=0;j<64;j++)Wdata(tu[128*i+64+j]);}}}注:关于图片的处理,网上有不少取模软件。