12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)

12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)
12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)

这个程序写得很好,自己也是看的别人写的很好的程序,但是它代码不够完整,注释不详细,经过自己的修改加以完善。另外我发现很多的测试代码都没有附上测试代码效果图,在本人的代码下面有自己拍的效果图,填补不足之处。

自己在找资料的过程中花掉很多的财富值,如果大家看得起该代码请评五分加以下载,在下感激不尽!

/*******************************************

程序名称:12864液晶经典驱动程序(带中文字库)

功能:12864测试程序

修改作者:王程

修改时间:2014年2月5日23:22:32

********************************************/

#include

#define uchar unsigned char

#define uint unsigned int

// P0 为数据口

sbit LCD_RS=P2^0; //数据、命令选择端口

sbit LCD_RW=P2^1; //液晶读写控制

sbit LCD_EN=P2^2; //液晶使能控制

sbit PSB = P2^4; //模式选择1为并行0为串行

sbit RES = P2^5;//复位端口低电平复位,上电之前进行复位,为了稳定!unsigned char code DAT[] = "我爱我家"; //测试显示的汉字,下面的A为测试显示的英文

/*******************************************

函数名称:Delay_1ms (晶振为12M)

功能:延时约1ms的时间

参数:无

返回值:无

********************************************/

void delay_1ms(uint x)

{

uint i,j;

for(j = 0;j < x;j++)

for(i=0;i<110;i++);

}

/*******************************************

函数名称:write_cmd

功能:向液晶中写控制命令

参数:cmd--控制命令

返回值:无

********************************************/

void write_cmd(uchar cmd)

{

uchar lcdtemp = 0;

LCD_RS=0;

LCD_RW=1;

do //经典判忙方式,精简{

LCD_EN=1;

delay_1ms(2);

lcdtemp = P0;

LCD_EN=0;

}

while(lcdtemp & 0x80);

LCD_RW=0;

P0 = cmd;

LCD_EN=1;

delay_1ms(5);

LCD_EN=0;

}

/*******************************************

函数名称:write_data

功能:向液晶中写显示数据

参数:dat--显示数据

返回值:无

********************************************/ void write_data(uchar dat)

{

uchar lcdtemp = 0;

LCD_RS=0;

LCD_RW=1;

do //经典判忙方式

{

LCD_EN=1;

delay_1ms(2);

lcdtemp = P0;

LCD_EN=0;

}

while(lcdtemp & 0x80);

LCD_RS=1;

LCD_RW=0;

P0 = dat;

LCD_EN=1;

delay_1ms(5);

LCD_EN=0;

}

/*******************************************

函数名称:lcd_int

功能:初始化液晶模块

参数:无

返回值:无

********************************************/

void lcd_int(void)

{

delay_1ms(40); //大于40MS的延时程序

PSB=1; //设置为8BIT并口工作模式delay_1ms(1); //延时

RES=0; //复位

delay_1ms(1); //延时

RES=1; //复位置高

delay_1ms(10);

write_cmd(0x30); //基本指令集

delay_1ms(5);

write_cmd(0x30); //基本指令集

delay_1ms(5);

write_cmd(0x08); // 地址归位

delay_1ms(5);

write_cmd(0x10); //光标设置

delay_1ms(5);

write_cmd(0x0c); //整体显示打开,游标关闭

delay_1ms(5);

write_cmd(0x01); //清除显示

delay_1ms(5);

write_cmd(0x06); //游标右移

delay_1ms(5);

write_cmd(0x80); //设定显示的起始地址

delay_1ms(5);

}

函数名称:main

功能:测试1602初始化函数模块

参数:无

返回值:无

********************************************/

void main()

{

uchar i;

char *a = DAT;//使用指针,指向字符串地址

lcd_int();

write_data('A'); //每个显示都是用的两个字节,必须写两次

write_data(' ');//再写一次,不然乱显示(如果不加就再显示一个别的字母)for(i=0;i<8;i++)

{

write_data(*a);//将地址当作数据传给12864

a++;//一个汉字传送两次,因为一个汉字占用两个字节,两次传完

}

write_cmd(0x90);//一行显示八个汉字,第一行0x80-87,第二行0x90开始

a = DAT;

for(i=0;i<8;i++)

{

write_data(*a);

a++;

}

while(1); //停住,不然重复的初始化显示,作为测试用

}

/*******************************************

代码测试效果图片两两张

由于曝光度影响,拍了两张

********************************************/

基于某STM32LCD12864驱动程序

STM32 LCD12864驱动程序(头文件)(2012-05-29 21:25:08)转载▼ 标签:杂谈 #ifndef LCD12864_H #define LCD12864_H #define LCD_CONTROL GPIOD //默认LCD12864的控制口在PD口 #define LCD_DATAPORT GPIOD //默认LCD12864的数据口在PD口 #define LCD_RESET_Pin GPIO_Pin_12 //默认LCD12864的复位引脚连接到PD.12 也可不用 #define LCD_RS_Pin GPIO_Pin_13 //默认LCD12864 RS -- PD.13 #define LCD_RW_Pin GPIO_Pin_14 //默认LCD12864 RW -- PD.14 #define LCD_EN_Pin GPIO_Pin_15 //默认LCD12864 E -- PD.15 #define LCD_CONTROL_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的控制口时钟 #define LCD_DATAPORT_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的数据口时钟 #define LCD_RS_1 LCD_CONTROL->BSRR &=~LCD_RS_Pin;LCD_CONTROL->BSRR |=LCD_RS_Pin //RS置高电平 #define LCD_RS_0 LCD_CONTROL->BRR &=~LCD_RS_Pin;LCD_CONTROL->BRR |=LCD_RS_Pin //RS置低电平 #define LCD_RW_1 LCD_CONTROL->BSRR &=~LCD_RW_Pin;LCD_CONTROL->BSRR |=LCD_RW_Pin //RW置高电平 #define LCD_RW_0 LCD_CONTROL->BRR &=~LCD_RW_Pin;LCD_CONTROL->BRR |=LCD_RW_Pin //RW置低电平 #define LCD_EN_1 LCD_CONTROL->BSRR &=~LCD_EN_Pin;LCD_CONTROL->BSRR |=LCD_EN_Pin //EN置高电平 #define LCD_EN_0 LCD_CONTROL->BRR &=~LCD_EN_Pin;LCD_CONTROL->BRR |=LCD_EN_Pin //EN置低电平 #define LCD_RESET_0 LCD_CONTROL->BRR = LCD_RESET_Pin // 复位 #define LCD_RESET_1 LCD_CONTROL->BSRR = LCD_RESET_Pin // 复位脚拉高 #define DATAOUT LCD_DATAPORT->ODR &=0xff00;LCD_DATAPORT->ODR // 数据输出寄存器 #define DATAIN LCD_DATAPORT->IDR // 数据输入寄存器 #define LCD_BF ((DATAIN)& 0x0080) // 忙状态 void LCD_delayus(unsigned long n); //延时n(us) void LCD_delayms(unsigned long n); //延时n(ms) void LCD_WriteInitcmd(uint8_t initcmd); //写初始化命令 void LCD_WaitLaisure(void); //一直等待到LCD内部操作完成,变为空闲状态 void LCD_Writecmd(uint8_t cmd); //写命令到LCD12864 void LCD_WriteByte(uint8_t byte); //写一字节数据到LCD12864 void LCD_pos(uint16_t pos); //LCD显示位置设置 void LCD_Setpos(uint16_t row,uint16_t col);//设定LCD12864的显示地址,根据习惯 void LCD_DispChar(char ch); //显示一个字符 void LCD_Setpos_DispChar(uint16_t row,uint16_t col,char ch);//在指定位置显示一个字符 void LCD_DispString(char str[]); //显示一个字符串,显示位置需提前设定

UMAT全过程

UMAT全过程——技术篇 1.ABAQUS中非线性问题的处理2.用户子程序接口3.用户子程序和主程序的结合4.用户材料子程序UMAT接口的原理5.UMAT子程序流程ABAQUS是怎么计算的 I.ABAQUS一共有42个用户子程序接口,15个应用程序接口,可以定义包括边界条 件,荷载条件,接触条件,材料特性以及利用用户子程序和其它应用软件进行数值交换。 1.根据ABAQUS提供的相应接口,按照FORTRAN语法自己编写的代码,是一个独立的程序单元,可以独立地被储存和编译,也能被其他程序单元引用。 I.一般结构形式 II. 一个算例中,可以用到多个用户子程序,但必须把它们放在一个以.for为扩展名的文件中。 III.运行带有用户子程序的算例的两种方法 1.在CAE中运行,在EDIT JOB菜单中的GENRAL子菜单的USERSUBROUTINE GILE对话框中选择用户子程序所在的文件 2.在https://www.360docs.net/doc/8c1536206.html,MAND中运行语法如下 IV.编制用户子程序时应注意: 1.用户子程序相互之间不能调用,可以调用用户自己编写的Fortran子程序和 ABAQUS应用程序,ABAQUS应用程序必须由用户子程序调用。编写Fortran子程序时,建议子程序以K开头,以免和ABAQUS内部程序冲突。2.用户在用户子程序中利用OPEN打开外部文件时,要注意以下两点: (1)设备号的选择有限制,只能取15~18和大于100的设备号 (2)用户需提供外部文件的绝对路径而不是相对路径。3.对于不同的用户子程序,ABAQUS调用的时间不相同,有的在每个STEP的开始,有的在结尾,有的在每个 INCREMENT的开始。(当ABAQUS在调用用户子程序时,都会把当前的STEP 和INCREMENT 利用用户子程序的两个实参KSTEP 和KINC 传给用户子程序,用户可把他们输出到外部文件中,这样可清楚知道何时调用) V.ABAQUS提供给用户定义自己的材料属性的Fortran程序接口,用户材料子程序 UMAT 通过与ABAQUS主求解程序的接口实现与ABAQUS的资料交流,输入文件中,使用“UESER MATERIAL”表示定义用户材料属性。 I.UMAT子程序采用Fortran语言编制,包括以下几个部分:子程序定义语句、 ABAQUS 定义的参数说明、用户定义的局部变量说明、用户编制的程序主体、子程序返回和结束语句。I.

51单片机+EDM12864P+KS0108+C语言驱动

KS0108 128*64 LCD C语言驱动 LCD引脚定义 1---GND 2---VCC 3---VLCD 4---D/I 5---R/W 6---E 7到14 D0-D7 15--CS1 16--CS2 17--RESET 18--VEE 19--SW 20--NC */ #include #include unsigned char CurOffset,CurRow,CurPage,CurCol; /* 常量定义 */ #define LCD_STATUS_BUSY 0x80 #define START_LINE0 0xc0 #define DISPLAY_ON 0x3f #define DISPLAY_OFF 0x3e #define PARA1 0x40 //PORTA---数据口 PORTB----控制口 volatile unsigned char *LCD_DIR_PORT = &DDRA; volatile unsigned char *LCD_IP_PORT = &PINA; volatile unsigned char *LCD_OP_PORT = &PORTA; volatile unsigned char *LCD_EN_PORT = &PORTB; volatile unsigned char *LCD_CS2_PORT = &PORTB; volatile unsigned char *LCD_CS1_PORT = &PORTB; volatile unsigned char *LCD_RW_PORT = &PORTB; volatile unsigned char *LCD_DI_PORT = &PORTB; char LCD_EN_BIT = BIT(4); char LCD_CS2_BIT = BIT(3); char LCD_CS1_BIT = BIT(2); char LCD_RW_BIT = BIT(1); char LCD_DI_BIT = BIT(0);

ABAQUS子程序UMAT里弹塑本构的实现

前言 有限元法是工程中广泛使用的一种数值计算方法。它是力学、计算方法和计算机技术相结合的产物。在工程应用中,有限元法比其它数值分析方法更流行的一个重要原因在于:相对与其它数值分析方法,有限元法对边界的模拟更灵活,近似程度更高。所以,伴随着有限元理论以及计算机技术的发展,大有限元软件的应用证变得越来越普及。 ABAQUS软件一直以非线性有限元分析软件而闻名,这也是它和ANSYS,Nastran等软件的区别所在。非线性有限元分析的用处越来越大,因为在所用材料非常复杂很多情况下,用线性分析来近似已不再有效。比方说,一个复合材料就不能用传统的线性分析软件包进行分析。任何与时间有关联,有较大位移量的情况都不能用线性分析法来处理。多年前,虽然非线性分析能更适合、更准确的处理问题,但是由于当时计算设备的能力不够强大、非线性分析软件包线性分析功能不够健全,所以通常采用线性处理的方法。 这种情况已经得到了极大的改善,计算设备的能力变得更加强大、类似ABAQUS这样的产品功能日臻完善,应用日益广泛。 非线性有限元分析在各个制造行业得到了广泛应用,有不少大型用户。航空航天业一直是非线性有限元分析的大客户,一个重要原因是大量使用复合材料。新一代波音 787客机将全部采用复合材料。只有像 ABAQUS这样的软件,才能分析包括多个子系统的产品耐久性能。在汽车业,用线性有限元分析来做四轮耐久性分析不可能得到足够准确的结果。分析汽车的整体和各个子系统的性能要求(如悬挂系统等)需要进行非线性分析。在土木工程业, ABAQUS能处理包括混凝土静动力开裂分析以及沥青混凝土方面的静动力分析,还能处理高度复杂非线性材料的损伤和断裂问题,这对于大型桥梁结构,高层建筑的结构分析非常有效。 瞬态、大变形、高级材料的碰撞问题必须用非线性有限元分析来计算。线性分析在这种情况下是不适用的。以往有一些专门的软件来分析碰撞问题,但现在ABAQUS在通用有限元软件包就能解决这些问题。所以,ABAQUS可以在一个软件完成线性和非线性分析。 ABAQUS给用户提供了强大二次开发接口,尤其是在材料本构方面,给用户开发符合实际工程的材料本构模型提供了强大帮助,本文将针对其用户材料子程序展开研究,总结常用材料模型的开发方法。

51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能)

51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能)过两天的搜索与调试,在别人程序的基础上,不断修改,终于调试成功了这个程序。目前还不能修改时间与日期,只是以预定时间以始。 适用于开发板:51单片机(AT89S52)+带字库液晶12864(ST7920)+DS1302(实时时钟) 实现功能:简单,数字时钟+日期(以后会不断完美)。 C语言源程序如下: #include #include #define uchar unsigned char #define uint unsigned int /*DS1302 端口设置 */ sbit SCK=P3^6; //DS1302时钟 sbit SDA=P3^4; //DS1302 IO sbit RST = P3^5; // DS1302复位 bit ReadRTC_Flag; //读DS1302全局变量 /* 12864端口定义*/ #define LCD_data P0 //带字库液晶12864数据口 sbit LCD_RS = P2^4; //寄存器选择输入 sbit LCD_RW = P2^5; //液晶读/写控制 sbit LCD_EN = P2^6; //液晶使能控制 sbit PSB=P2^1; //并口控制 sbit RES=P2^3; uchar code dis1[] = {" 电子设计天地"}; //液晶显示的汉字 uchar code dis2[] = {"有志者,事竟成!"}; uchar code dis4[] = {'0','1','2','3','4','5','6','7','8','9'}; unsigned char temp; #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; void lcd_pos(uchar X,uchar Y); //确定显示位置 unsigned char l_tmpdate[7]={0,7,16,19,10,1,9};//秒分时日月周年 09-10-19 16:07:00 code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日

很好用的12864驱动程序

/////////////////////////////////////////////////////////// #include #include #define uchar unsigned char #define uint unsigned int //////////单片机与液晶显示的引脚连接///////// sbit P32=P3^2; //RST sbit P33=P3^3; //CS2 sbit P34=P3^4; //CS1 sbit P35=P3^5; //E sbit P36=P3^6; //rs&DI sbit P37=P3^7; // R/W ////////延时///////// void delay(uint v) { while(v!=0)v--; } ////////复位/////////// void reset() { P32=0; delay(10); P32=1; delay(10); } ////////write code写指令/////// void wcode(uchar c,uchar cs1,uchar cs2) { P34=cs1; P33=cs2; P37=0; P36=0; P1=c; P35=0; delay(10);

P35=1; delay(10); P35=0; } /////////write data写数据/////////////// void wdata(uchar c,uchar cs1,uchar cs2) { P34=cs1; P33=cs2; P37=1; P36=0; P1=c; P35=0; delay(10); P35=1; delay(10); P35=0; } ////////////set start设置起始行///////////// void set_startline(uchar i)//起始行。11A5A4A3A2A1A0 共有64行 // 液晶显示器的最底层为第一行 { i=0xc0+64-i;//此算法为把最顶层做为第一层 wcode(i,1,1); } ////////////set 页值设置,起始列值函数///////////// void set_adr(uchar x,uchar y) { x=x+0xb8;//页地址设置。10111A2A1A0 DDRAM的8行为一页,A0~A2为页码,LCD为64行8页 y=y+0x40;//列地址设置。01A5A4A3A2A1A0 两半屏分别有64列,A0~A5送入列地址计数器, //作为列(Y)地址指针。每读写一次其自动加一,指向下一列DDRAM单元wcode(x,1,1); wcode(y,1,1); } ///////////on/off开/关显示函数//////////////

abaqus简单umat子程序

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,RPL,DDSDDT, 1 DRPLDE,DRPLDT,STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED, 2 CMNAME,NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT, 3 PNEWDT,CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC) include 'aba_param.inc' CHARACTER*8 CMNAME DIMENSION STRESS(NTENS),STATEV(NSTATV),DDSDDE(NTENS,NTENS), 1 DDSDDT(NTENS),DRPLDE(NTENS),STRAN(NTENS),DSTRAN(NTENS), 2 TIME(2),PREDEF(1),DPRED(1),PROPS(NPROPS),COORDS(3),DROT(3,3), 3 DFGRD0(3,3),DFGRD1(3,3) C UMAT FOR ISOTROPIC ELASTICITY C CANNOT BE USE D FOR PLAN E STRESS C ---------------------------------------------------------------- C PROPS(1) - E C PROPS(2) - NU C ---------------------------------------------------------------- C IF (NDI.NE.3) THEN WRITE (*,*) 'THIS UMAT MAY ONLY BE USED FOR ELEMENTS 1 WITH THREE DIRECT STRESS COMPONENTS' CALL XIT ENDIF open(400,file='D:\test.txt') C ELASTIC PROPERTIES EMOD=PROPS(1) ENU=PROPS(2) EBULK3=EMOD/(1-2*ENU) EG2=EMOD/(1+ENU) EG=EG2/2 EG3=3*EG ELAM=(EBULK3-EG2)/3 write(400,*) 'temp=',temp C ELASTIC STIFFNESS C DO K1=1, NDI DO K2=1, NDI DDSDDE(K2, K1)=ELAM END DO DDSDDE(K1, K1)=EG2+ELAM

ABAQUS-二次开发资料-UMAT

各个楼层及内容索引 2-------------------------------------什么是UMAT 3-------------------------------------UMAT功能简介 4-------------------------------------UMAT开始的变量声明 5-------------------------------------UMAT中各个变量的详细解释 6-------------------------------------关于沙漏和横向剪切刚度 7-------------------------------------UMAT流程和参数表格实例展示 8-------------------------------------FORTRAN语言中的接口程序Interface 9-------------------------------------关于UMAT是否可以用Fortran90编写的问题 10-17--------------------------------Fortran77的一些有用的知识简介 20-25\30-32-----------------------弹塑性力学相关知识简介 34-37--------------------------------用户材料子程序实例JOhn-cook模型压缩包下载 38-------------------------------------JOhn-cook模型本构简介图 40-------------------------------------用户材料子程序实例JOhn-cook模型完整程序+david详细注解[欢迎大家来看看,并提供意见,完全是自己的diy的,不保证完全正确,希望共同探讨,以便更正,带"?"部分,还望各位大师\同仁指教] 1什么是UMAT??? 1.1 UMAT功能简介!!![-摘自庄茁老师的书 UMAT子程序具有强大的功能,使用UMAT子程序: (1)可以定义材料的本构关系,使用ABAQUS材料库中没有包含的材料进行计算,扩充程序 功能。ABAQUS软件2003年度用户年会论文集 (2)几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋予ABAQUS中 的任何单元; (3)必须在UMAT中提供材料本构模型的雅可比(Jacobian)矩阵,即应力增量对应变增量 的变化率。 (4)可以和用户子程序“USDFLD”联合使用,通过“USDFLD”重新定义单元每一物质点上传 递到UMAT中场变量的数值。 1.2 UMAT开始的变量声明 由于主程序与UMAT之间存在数据传递,甚至共用一些变量,因此必须遵守有关书写格式,UMAT中常用的变量在文件开头予以定义,通常格式为: SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD, 1 RPL,DDSDDT,DRPLDE,DRPLDT, 2STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME 3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,

AMPIRE12864的组成及应用程序(C语言写)

先说AMPIRE12864的组成: 可以看成是两个64*64的屏幕, 通过CS1,CS2两个片选信号来控制,这两个都是低有效(元件面板上没反映出来这一点) RST是低有效,所以直接连到电源了(开始因为没连这个整了半天没反映。。。) 实际应用的时候应该还是要像单片机那样做个复位电路。

DBx,是并行的指令/数据输入/输出端。 E是使能信号。控制时,应先置1,然后设置DB,最后E回0,结束一轮的信息交换。RW,低为写入,高为读出。 RS ,低为指令,高为数据。 然后要说的就是坐标的问题: 对于每一片(左边和右边),分成8行*64列,这是光标(想成一根8位的竖线)的放置单位。 而每一行的高度为8位,从上到下对应的是DB的低位到高位 每写一个数据,光标自动向后移动,到行末的时候返回下一行行首

注意 我以前用的都是带字库的,这个LCD型号是AMPIRE12864,这个没有带字库的。 这个程序的编码完全是由本人自己动手写的,完全没用字符取模软件。 体会 一开始,看见别人的编码,不知道是怎么编出来的(不知道是行扫描,还是列扫描),研究了半天,终于被我发现了规律,为了让大家少走弯路,我就告诉大家啊,然后可以试试 自己编码。

编码 列扫描,从上往下(BCD1248)如下图。然后在是下一列。 由于本人语言文字有限,说的不是很明白,望大家见谅!!! 不懂的可以留言,一起探讨探讨!!! 好了不墨迹了,不懂的看程序吧!!! 程序 #include // 头文件 #include"zifuku.h" // 字符库 #define uchar unsigned char // 宏定义 #define uint unsigned int sbit en=P2^0; // 使能端 sbit rw=P2^1; // 指令/数据 sbit rs=P2^2; // 读/写 sbit cs2=P2^3; // 右屏 sbit cs1=P2^4; // 左屏 zhili(uchar zl) // 指令子函数 { rs=0; rw=0; P0=zl; en=1; en=0; } shuju(uchar sj) //数据子函数 { rs=1; rw=0; P0=sj; en=1; en=0; } xuanping(uchar p) //选屏子函数

无字库12864液晶的驱动方法

无字库12864液晶的驱动方法 在制作单片机系统时,一般都需要用显示器件来显示单片机的工作状态并显示输出结果,如LED、数码管和液晶显示器等。LED最简单,但能给出的信息很少。数码管能清晰地显示数字和部分字母,但是耗电较大,不适合使用电池供电的装置。 常见的液晶显示器有段式液晶、字符液晶和图形液晶等。其中,段式液晶最省电,但对于通用显示使用起来不很方便,只能显示固定式数字或符号,而且需要专用驱动电路或特殊的单片机。 字符液晶(如1602)用得比较多,容易和单片机配合,但是一般都需要5V工作电压,虽然现在也有3V就可以工作的模块,但是体积还是较大,而且只能显示数字和西文字符,无法显示图形和汉字。 点阵液晶模块既可以显示ASCII字符,又可以显示汉字和图形,相对于前面几种,具有更大的灵活性,所以使用得越来越多。不过常用的图形液晶因为显示面积增加,体积比字符液晶(如1602)更大,价格也更贵。初学者要注意的是,12864图形点阵液晶随着厂家设计使用的驱动芯片不同,驱动程序有所区别,不像1602那样基本通用。 几种常见的12864图形点阵模块 12864点阵液晶模块分为带汉字库和不带汉字库两大类,目前带汉字库的通常是ST7920驱动,它可以工作在汉字字符方式和图形点阵方式,很多制作都用它,如果需要显示较多汉字,用它最为方便。 在显示汉字数量很少的场合,我们可以使用更加廉价的、不带字库的点阵液晶模块,这正是本文重点介绍的。它们的控制电路有KS0108和ST7565两种:KS0108很简单,一共只有7条指令,可是它没有串行接口;ST7565有20多条指令(最常用的也就几条),有串行接口,可选串行或并行工作。KS0108和ST7565的指令和上述带字库的ST7920区别较大,所以初学者买液晶时一定要搞清楚是哪种驱动电路。即使同样的驱动电路,不同厂家或者不同型号的产品,具体细节仍可能不同。例如有的片选信号是高电平有效,有的却是低电平有效,有的把显示区分为左右两半分别选取,有的却不加区分。所以使用前要仔细看厂家说明,如果没有,就要看液晶模块背面给出的具体型号,根据这个型号去查找使用手册。 笔者最近在淘宝网上搜寻到一款12864的图形点阵液晶,只有4cm宽、3.5cm高,显示面积为3.2cm宽、1.95cm高,非常小巧。更加难能可贵的是它可以在3V低电压工作,很适合我们制作小型便携装置。该液晶模块型号是SP12864FPD-12CSBE,由北京集粹电子设备公司出品,它的外形见图1。

Abaqus材料用户子程序UMAT基础知识与手册例子完整解释

1、为何需要使用用户材料子程序(User-Defined Material, UMAT )? 很简单,当ABAQUS 没有提供我们需要的材料模型时。所以,在决定自己定义一种新的材料模型之前,最好对ABAQUS 已经提供的模型心中有数,并且尽量使用现有的模型,因为这些模型已经经过详细的验证,并被广泛接受。 UMAT 子程序具有强大的功能,使用UMAT 子程序: (1)可以定义材料的本构关系,使用ABAQUS 材料库中没有包含的材料进行计算,扩充程序功能。 (2) 几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋予ABAQU S 中的任何单元。 (3) 必须在UMAT 中提供材料本构模型的雅可比(Jacobian )矩阵,即应力增量对应变增量的变化率。 (4) 可以和用户子程序“USDFLD ”联合使用,通过“USDFLD ”重新定义单元每一物质点上传递到UMAT 中场变量的数值。 2、需要哪些基础知识? 先看一下ABAQUS 手册(ABAQUS Analysis User's Manual )里的一段话: Warning: The use of this option generally requires considerable expertise(一定的专业知识). The user is cautioned that the implementation (实现) of any realistic constitutive (基本) model requires extensive (广泛的) development and testing. Initial testing on a single eleme nt model with prescribed traction loading (指定拉伸载荷) is strongly recommended. 但这并不意味着非力学专业,或者力学基础知识不很丰富者就只能望洋兴叹,因为我们的任务不是开发一套完整的有限元软件,而只是提供一个描述材料力学性能的本构方程(Constitutive equation )而已。当然,最基本的一些概念和知识还是要具备的,比如: 应力(stress),应变(strain )及其分量; volumetric part 和deviatoric part ;模量(modul us )、泊松比(Poisson’s ratio)、拉梅常数(Lame constant);矩阵的加减乘除甚至求逆;还有一些高等数学知识如积分、微分等。 3、UMAT 的基本任务? 我们知道,有限元计算(增量方法)的基本问题是: 已知第n 步的结果(应力,应变等)n σ,n ε,然后给出一个应变增量1+n d ε,计算新的应力1+n σ。UMAT 要完成这一计算,并要计算Jacobian 矩阵DDSDDE(I,J) =εσΔ?Δ?/。σΔ是应力增量矩阵(张量或许更合适),εΔ是应变增量矩阵。DDSDDE(I,J) 定义了第J 个应变分量的微小变化对

12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)

这个程序写得很好,自己也是看的别人写的很好的程序,但是它代码不够完整,注释不详细,经过自己的修改加以完善。另外我发现很多的测试代码都没有附上测试代码效果图,在本人的代码下面有自己拍的效果图,填补不足之处。 自己在找资料的过程中花掉很多的财富值,如果大家看得起该代码请评五分加以下载,在下感激不尽! /******************************************* 程序名称:12864液晶经典驱动程序(带中文字库) 功能:12864测试程序 修改作者:王程 修改时间:2014年2月5日23:22:32 ********************************************/ #include #define uchar unsigned char #define uint unsigned int // P0 为数据口 sbit LCD_RS=P2^0; //数据、命令选择端口 sbit LCD_RW=P2^1; //液晶读写控制 sbit LCD_EN=P2^2; //液晶使能控制 sbit PSB = P2^4; //模式选择1为并行0为串行 sbit RES = P2^5; //复位端口低电平复位,上电之前进行复位,为了稳定!unsigned char code DAT[] = "我爱我家"; //测试显示的汉字,下面的A为测试显示的英文 /******************************************* 函数名称:Delay_1ms (晶振为12M) 功能:延时约1ms的时间 参数:无 返回值:无 ********************************************/ void delay_1ms(uint x) { uinti,j; for(j = 0;j

常见液晶驱动芯片详解

本文主要是介绍一些常用的LCD驱动控制IC的型号,方便学习或正在使用的LCD的朋友能够更好地编写LCD的驱动程序。 因此各位朋友在选择LCD液晶模块的时候,在考虑到串行,还是并行的方式时,可根据其驱动控制IC的型号来判别,当然你还需要看你选择的LCD 模块引脚定义是固定支持并行,还是可选择并行或串行的方式。 一、字符型LCD驱动控制IC 市场上通用的8×1、8×2、16×1、16×2、16×4、20×2、20×4、40×4等字符型LCD,基本上都采用的KS0066作为LCD的驱动控制器 二、图形点阵型LCD驱动控制IC 1、点阵数122×32--SED1520 2、点阵数128×64 (1)ST7920/ST7921,支持串行或并行数据操作方式,内置中文汉字库(2)KS0108,只支持并行数据操作方式,这个也是最通用的12864点阵液晶的驱动控制IC (3)ST7565P,支持串行或并行数据操作方式 (4)S6B0724,支持串行或并行数据操作方式 (5)T6963C,只支持并行数据操作方式 3、其他点阵数如192×6 4、240×64、320×64、240×128的一般都是采用T6963c驱动控制芯片

4、点阵数320×240,通用的采用RA8835驱动控制IC 这里列举的只是一些常用的,当然还有其他LCD驱动控制IC,在写LCD驱动时要清楚是哪个型号的IC,再到网上去寻找对应的IC数据手册吧。后面我将慢慢补上其它一些常见的. 三 12864液晶的奥秘 CD1601/1602和LCD12864都是通常使用的液晶,有人以为12864是一个统一的编号,主要是12864的液晶驱动都是一样的,其实12864只是表示液晶的点阵是128*64点阵,而实际的12864有带字库的,也有不带字库的;有5V电压的,也有~5V(内置升压电路);归根到底的区别在于驱动控制芯片,常用的控制芯片有ST7920、KS0108、T6963C等等。 下面介绍比较常用的四种 (1)ST7920类这种控制器带中文字库,为用户免除了编制字库的麻烦,该控制器的液晶还支持画图方式。该类液晶支持68时序8位和4位并口以及串口。 (2)KS0108类这种控制器指令简单,不带字库。支持68时序8位并口。 (3)T6963C类这种控制器功能强大,带西文字库。有文本和图形两种显示方式。有文本和图形两个图层,并且支持两个图层的叠加显示。支持80时序8位并口。

UMAT子程序在复合材料强度分析中的应用

UMAT子程序在复合材料强度分析中 的应用 本例使用UMAT用户子程序进行复合材料单层板的应力分析和渐进损伤压缩强度分析,介绍UMA T用户子程序编写方法及在Abaqus/CAE中的设置。本章使用最大应变强度理论作为复合材料单层板的失效准则,相应的Fortran程序简单易读,便于理解UAMT子程序的工作原理。 知识要点: 强度分析 UMAT用户子程序 最大应变理论 刚度折减讲师:孔祥宏 版本:Abq 6.14 难度: 关键词:强度分析,UMAT

『 2 』 第&章复合材料分析入门 &.1 本章内容简介 本章通过两个实例介绍UMAT用户子程序在复合材料单层板的应力分析和强度分析中的应用。在第一个实例中,对一个简单的复合材料单层板进行应力分析,UMAT子程序主要计算应力,不进行强度分析,本例用于验证UMA T子程序的计算精度。在第二个实例中,对复合材料单层板进行渐进损伤强度分析,UMAT子程序用于应力计算、强度分析和刚度折减。 本章所用复合材料为T700/BA9916,材料属性如表&-1所示。 表&-1 T700/BA9916材料属性 参数值强度值 E1/GPa 114 X T/MPa 2688 E2/GPa 8.61 X C/MPa 1458 E3/GPa 8.61 Y T/MPa 69.5 μ120.3 Y C/MPa 236 μ130.3 Z T/MPa 55.5 μ230.45 Z C/MPa 175 G12/GPa 4.16 S XY/MPa 136 G13/GPa 4.16 S XZ/MPa 136 G23/GPa 3.0 S YZ/MPa 95.6

12864显示程序,51单片机,C语言

12864显示程序,51单片机,C语言 可显示固定中文,字符,数字; 可实时动态刷新显示数字,字符; #include sbit rs=P1^2; sbit rw=P1^1; sbit cs=P1^0; sbit psb=P1^3; unsigned char code table[]={" X0: Y0: "}; unsigned char code table1[]={"现在X1: Y1: "}; unsigned char code table2[]={"划线模式:"}; unsigned char code table3[]={"开始暂停"}; void delay(unsigned char z) //延时 { unsigned i,j; for(i=0;i

cs=0; P2=com; delay(5); cs=1; delay(5); cs=0; } void write_date(unsigned char dat) //写数据 { rs=1; rw=0; cs=0; P2=dat; delay(5); cs=1; delay(5); cs=0; } void pos(unsigned char x,unsigned char y) //起点函数{ unsigned char pos;

if(x==0) x=0x80; else if(x==1) x=0x90; else if(x==2) x=0x88; else if(x==3) x=0x98; pos=x+y/2; write_com(pos); } void init() { unsigned char i; psb=1; //1并行,0串行 write_com(0x30); //基本指令操作 delay(5); write_com(0x0c); //显示开,关光标 delay(5); write_com(0x01); //清除led的显示内容delay(5); pos(0,0);

12864-液晶显示-c语言程序

12864-液晶显示-c语言程序

/**************************************** **************************** * 文件名:定时器的使用.c * 描述: * 创建人:东流,2009年4月8日 * 版本号:2.0 ***************************************** ******************************/ #include #include #define uchar unsigned char #define uint unsigned int uchar code IC_DAT[]; uchar code pic1[]; uchar code pic2[]; uchar code pic3[]; sbit le1 = P2^0; sbit le2 = P2^1; sbit RS = P2^5;

sbit WRD = P2^6; sbit E = P2^7; sbit PSB = P2^2; sbit RES = P2^4; void TransferData(char data1,bit DI); void display(void); void display_grapic(void); void delayms(uint n); void DisplayLine(uchar line1,uchar line2); void DisplayGraphic(uchar code *adder); void delay(uint m); void lcd_mesg(uchar code *adder1); uchar code IC_DAT[]={ " HOT-51 " " " " 单片机开发板" " 东流电子" }; uchar code IC_DAT2[]={

基于STM32--LCD12864驱动程序

基于STM32--LCD12864驱动程序

STM32 LCD12864驱动程序(头文件)(2012-05-29 21:25:08)转载▼ 标签:杂谈 #ifndef LCD12864_H #define LCD12864_H #define LCD_CONTROL GPIOD //默认LCD12864的控制口在PD口 #define LCD_DATAPORT GPIOD //默认LCD12864的数据口在PD口 #define LCD_RESET_Pin GPIO_Pin_12 //默认LCD12864的复位引脚连接到PD.12 也可不用 #define LCD_RS_Pin GPIO_Pin_13 //默认LCD12864 RS -- PD.13 #define LCD_RW_Pin GPIO_Pin_14 //默认LCD12864 RW -- PD.14 #define LCD_EN_Pin GPIO_Pin_15 //默认LCD12864 E -- PD.15 #define LCD_CONTROL_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的控制口时钟

#define LCD_DATAPORT_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的数据口时钟 #define LCD_RS_1 LCD_CONTROL->BSRR &=~LCD_RS_Pin;LCD_CONTROL->BSRR |=LCD_RS_Pin //RS置高电平 #define LCD_RS_0 LCD_CONTROL->BRR &=~LCD_RS_Pin;LCD_CONTROL->BRR |=LCD_RS_Pin //RS置低电平 #define LCD_RW_1 LCD_CONTROL->BSRR &=~LCD_RW_Pin;LCD_CONTROL->BSRR |=LCD_RW_Pin //RW置高电平 #define LCD_RW_0 LCD_CONTROL->BRR &=~LCD_RW_Pin;LCD_CONTROL->BRR |=LCD_RW_Pin //RW置低电平 #define LCD_EN_1 LCD_CONTROL->BSRR &=~LCD_EN_Pin;LCD_CONTROL->BSRR |=LCD_EN_Pin //EN置高电平 #define LCD_EN_0 LCD_CONTROL->BRR &=~LCD_EN_Pin;LCD_CONTROL->BRR |=LCD_EN_Pin //EN置低电平

相关文档
最新文档