lcd12864简单例程

合集下载

stm32驱动lcd12864程序

stm32驱动lcd12864程序

stm32驱动lcd12864程序预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制#include "12864.h"#include "sys.h"#include "delay.h"#include "usart.h"void p_out(void) //把PB命令端口配置成输出{rs();wr();en();psb();}void wr_outite_cmd(u8 cmd) //写命令{p_out();data_out(); //把PB数据端口配置成输出rs_out=0;wr_out=0;en_out=0;GPIOB->ODR=((GPIOB->ODR&0X00FF)|(cmd<<8));delay_ms(10);en_out=1;delay_ms(10);en_out=0;}void wr_outite_data(u8 dat) //写数据{p_out();data_out();rs_out=1;wr_out=0;en_out=0;GPIOB->ODR=((GPIOB->ODR&0X00FF)|(dat<<8)); //把dat 给PB高八位delay_ms(10);en_out=1;delay_ms(10);en_out=0;}void LCDClear(void){wr_outite_cmd(0x01); //显示清屏delay_ms(5);wr_outite_cmd(0x34); // 显示光标移动设置delay_ms(5);wr_outite_cmd(0x30); // 显示开及光标设置delay_ms(5);}void locate_x_y(u8 x,u8 y)//指定显示坐标{u8 x2=0;x2=x;if(y<1) y=1;if(y>4) y=4;x&=0x0f;switch(y){case 1:x2|=0x80;break;case 2:x2|=0x90;break;case 3:x2|=0x88;break;case 4:x2|=0x98;break;}wr_outite_cmd(x2);delay_ms(10);}void lcd_init(void){wr_outite_cmd(0x30);delay_ms(10);wr_outite_cmd(0x01);delay_ms(10);wr_outite_cmd(0x06);delay_ms(10);wr_outite_cmd(0x0c);delay_ms(10);}void DisInt(u8 x,u8 y,int fnum) //显示整型变量的函数,最多显示16位的整数。

LCD12864显示中文及图片C程序

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 );//提示信息显示}。

LCD12864程序—毕业设计用过

LCD12864程序—毕业设计用过

/******************************************************************** ********12864.c文件********************************************************************* *******/#include"12864.h"void delay(unsigned int t){unsigned int i,j;for(i=0; i<t; i++)for(j=0; j<10; j++);}void sendbyte(unsigned char zdata){unsigned int i;for(i=0; i<8; i++){if((zdata << i) & 0x80) // 0x80:1000 0000{SID = 1;}else{SID = 0;}SCLK = 0;SCLK = 1;}}void write_com(unsigned char cmdcode) // 写串口指令{CS = 1;sendbyte(0xf8);sendbyte(cmdcode & 0xf0);sendbyte((cmdcode << 4) & 0xf0);delay(2);}void write_data(unsigned char Dispdata) // 写数据{CS = 1;sendbyte(0xfa); //0xfa:1111 1010 &1000 0000 输出SID=1sendbyte(Dispdata & 0xf0);sendbyte((Dispdata << 4) & 0xf0);delay(2);}void lcdstring( uint x, uint y, uchar *string )// 写字符串{uint i; //局部循环体控制变量switch(x){case 0:write_com( 0x80 + y );break; //第一行case 1:write_com( 0x90 + y );break; //第二行case 2:write_com( 0x88 + y );break; //第三行case 3:write_com( 0x98 + y );break; //第四行}for(i = 0;string[i] != '\0';i ++){write_data( string[i] );}}void lcdinit() // 液晶初始化{CH=0;delay(10); //1*10mswrite_com(0x30);delay(5); //1*5mswrite_com(0x0c);delay(5); //1*5mswrite_com(0x01);delay(5); //1*5ms}/***************************** 12864.h文件**********************************12864.h是12864.c的头文件其主要作用是定义引脚并声明了全局函数delay()、write_com()、write_data()、lcdstring()、lcdinit(),使得它们能够在其他函数里也能被调用。

lcd12864程序

lcd12864程序

//用户版//描述: LCD12864液晶显示模块,对于芯片KS0108(HD61202)驱动程序.//编写:微控设计网 DC版主日期:2007.9.//编译环境:IAR EW430 V3.42A//验证平台: MC430F14+开发板 V1.0//声明:此程序只供微控用户使用.在未得到DC版主的许可请勿将资料外公开和用于商业用途.//******************************************************************* ***********#include "lcd12864.h"extern unsigned char ASCII86[][6];//******************************************************************* ***********//LCD12864函数声明void Lcd12864delay(); //延时void CheckState(); //忙状态检查void WriteByte(unsigned char dat); //写显示数据void SEdCommandToLCD(unsigned char command); //向LCD发送命令void SetLine(unsigned char line); //设定行地址(页)--X 0-7void SetColumn(unsigned char column); //设定列地址--Y 0-63void SetOnOff(unsigned char onoff); //开关显示void SetStartLine(unsigned char startline); //设定显示开始行--XXvoid ClearScreE(unsigned char screE); //清屏void SelectScreE(unsigned char screE); //选择屏幕unsigned char ReadByte(); //读显示数据//显示8*6字符串void ShowString86(unsigned char lin,unsigned char column, unsigned char *string); //反显一个8*6字块void ReverseShow86(unsigned char lin,unsigned char column);//反显某行某几个字符void ReverseLinChar(unsigned char lin,unsigned char startcolumn,unsigned char ShowQuantity);void InitLCD(void); //初始化LCD//******************************************************************* ***********//初级函数列表//******************************************************************* ***********//延时void Lcd12864delay(){unsigned int i=500;while(i--) {;}}void LcdDelay(){unsigned int i=2;while(i--) {;}}//******************************************************************* ***********//忙状态检查(已整理)void CheckState(){MCU_BUS_DIR_IN; //设置BUS口为输入LVC4254_5Vto3V; //LVC4254数据方向为5V往3VRS0;RW1;E1;while(BUSIN & busy) _NOP(); //等待LCD_DB7为0E0; //重设E=0MCU_BUS_DIR_OUT; //设置BUS口为输出LVC4254_3Vto5V; //LVC4254数据方向为3V往5V}//******************************************************************* ***********//写显示数据(已整理)//dat:显示数据void WriteByte(unsigned char dat){CheckState(); //忙状态检查RS1;RW0;BUSOUT = dat; //写向数据口E1;LcdDelay();E0;}//******************************************************************* ***********//向LCD发送命令(已整理)//command :命令void SEdCommandToLCD(unsigned char command){CheckState(); //忙状态检查RS0;RW0;BUSOUT = command; //写入E1;LcdDelay();E0;}//******************************************************************* ***********//清屏(已整理)//screE:1-左屏,2-右//每个屏的显示RAM共64行,分8页,每页8行(一行对相一个字节)void ClearScreE(unsigned char screE){unsigned char i,j;SelectScreE(screE); //选择指定屏for(i=0;i<8;i++) //共8页(每页8行*64列){ SetLine(i); //选择某一页for(j=0;j<64;j++) //每一页全送0x00为清屏{WriteByte(0x00); //一个数据对应8行,8*64=1页,64*8页}}}//******************************************************************* ***********//开关显示(已整理)//onoff=1开,onoff=0为关//当DB0=1时LCD显示RAM中的内容DB0=0时关闭显示void SetOnOff(unsigned char onoff){onoff=0x3e | onoff; //0011 111xSEdCommandToLCD(onoff); //发命令到LCD}//******************************************************************* ***********//选择屏幕(已整理)//screE: 0-全屏,1-左屏,2-右屏void SelectScreE(unsigned char screE){ //MSC-G12864DYSY-2N:选中高电平switch(screE){ case 0: //开全屏CS1_1;_NOP();CS2_1;_NOP();break;case 1: //开左屏CS1_0;_NOP();CS2_1; //关右屏_NOP();break;case 2:CS1_1;//关左屏_NOP();CS2_0;//开右屏_NOP();break;}}//******************************************************************* ***********//设定行地址(页,也就是字行)--X 0-7(已整理)void SetLine(unsigned char line){line=line & 0x07; //保证在 0<=line<=7line=line|0xb8; //1011 1xxx,SEdCommandToLCD(line); //设定指定页}//******************************************************************* ***********//设定列地址--Y 0-63(已整理)void SetColumn(unsigned char column){column=column &0x3f; //0=<column<=63column=column | 0x40; //01xx xxxxSEdCommandToLCD(column); //指定列}//******************************************************************* ***********//设定显示开始行--XX(已整理)//0--63void SetStartLine(unsigned char startline){startline=startline & 0x07; //保证 0<=startline<8startline=startline|0xc0; //1100 0000(显示起始行ROW设置指令)SEdCommandToLCD(startline); //指定行}//******************************************************************* ***********//初始化LCD (已整理)void InitLCD(void){LVC4254_DIR0; //MCU对LVC4254 DIR控制端IO方向设为0LVC4254_3Vto5V; //LVC4254方向为3V转5V,DIR=0MCU_BUS_DIR_OUT; //MCU总线方向为输出LCDCTL_RSRWE_DIR; //MCU对LCD 控制组端IO方向设为LCDCTL_CS1CS2_DIR; //Lcd12864delay();SelectScreE(0); //选择屏SetOnOff(0); //关显示ClearScreE(1); //清屏1ClearScreE(2); //清屏2SelectScreE(0);SetOnOff(1); //开显示SelectScreE(0);SetColumn(0); //开始列:0SetStartLine(0); //开始行:0ClearScreE(0);}//******************************************************************* ***********//读显示数据(已整理)unsigned char ReadByte(void){unsigned int i;unsigned char dat;CheckState();RS1;RW1;MCU_BUS_DIR_IN; //设置BUS口为输入LVC4254_5Vto3V;E1;for(i=0;i<10;i++); //这个延时是不同MCU速度而不同dat=BUSIN; //读入,(原文件是没有此句的)E0;MCU_BUS_DIR_OUT; //设置BUS口为输出LVC4254_3Vto5V;return(dat);}//******************************************************************* ***********//显示8*6点阵,如显ASCII86[][6],字符(已整理)//旋转90度:字模被竖着切分//lin:字行(0-7), column: 字列(0-31)//address : 字模区首地址由Microcontrol dc 编写void Show86(unsigned char lin,unsigned char column, unsigned char *address){unsigned char i,j=0;if(column>31) //列地址大于31返回{return;}//第0-9个字列else if(column<=9){SelectScreE(1);SetLine(lin);SetColumn((column<<3)-(column<<1)); //计算列地址,以6为倍数.每6列显示一个字符.for(i=0;i<6;i++)WriteByte(address[i]);}//第10个字列else if(column==10){ j=(column<<3)-(column<<1);if(j<=63) //第10个字列的前4列{ SelectScreE(1);SetLine(lin);SetColumn(j);for(i=0;i<4;i++){ WriteByte(address[i]);j++;}}if(j>=64){ SelectScreE(2); //第10个字列的后2列j=j-64;SetLine(lin);SetColumn(j);for(i=4;i<6;i++) //在12864中第10个字列的最后两个字节{WriteByte(address[i]);}}}//第11-20个字列else if(10<column&&column<21){ column=column-11;SelectScreE(2);SetLine(lin);SetColumn((column<<3)-(column<<1)+2);for(i=0;i<6;i++)WriteByte(address[i]);}//第21个字列else if(column==21) //第21个字列{ j=(column<<3)-(column<<1);if(j<128) //第21个字列的前2列{ SelectScreE(2);SetLine(lin);SetColumn(j);for(i=0;i<2;i++){ WriteByte(address[i]);j++;}}if(j>=128){j=j-128;SelectScreE(3); //第21个字列的后4列 SetLine(lin);SetColumn(j);for(i=0;i<4;i++){ WriteByte(address[i]);}}}//第22-31个字列/* else{ column=column-22;SelectScreE(3);SetLine(lin);SetColumn((column<<3)-(column<<1)+4);for(i=0;i<6;i++)WriteByte(address[i]);}*/}//******************************************************************* ***********//显示8*6字符串此字体下对应的点阵为:宽x高=8x6 (已整理)//!!!只能显示在一行上即: 串长+column <=31 column(为6的字列,左屏前4列和右屏后4列不用作显示,两屏共19字列)//旋转90度:字模被竖着切分//lin:字行(0-8), column: 字列(0-31)// *string :指向字符串的首址.void ShowString86(unsigned char lin,unsigned char column, unsigned char *string) { unsigned char ch;unsigned char i=0;for(i=0;string[i]!='\0';i++){if(i+column >20) //保证字符不会起过可显示长度.break;ch=string[i]-0x20; //将ASC字符从32-127位置移到0-96位置,以对应ASC86.C中位置Show86(lin,i+column,ASCII86[ch]);}}//******************************************************************* ***********//反显一个8*6字块只适合LCD19264屏,芯片KS0108(HD61202)//lin:行(0-8), column: 列(0-31)void ReverseShow86(unsigned char lin,unsigned char column){ unsigned char i,j=0;unsigned char tab[6];if(column>31) //列地址大于31返回{return;}//第0-9个字列if(column<=9){ SelectScreE(1); //如果列数(0-9),则写在第一屏上(左屏)SetColumn((column<<3)-(column<<1)); //计算列地址,以6为倍数.每6列显示一个字符.SetLine(lin); //设置行//tab[0]=(ReadByte()); //空读!!!!! ,进行读操作前,必须空读一次for(i=0;i<6;i++) //读6个字节回来tab[i]=~(ReadByte());SetColumn((column<<3)-(column<<1)); //设回初始列for(i=0;i<6;i++) //写回来字节WriteByte(tab[i]);}//第10个字列else if(column==10){ j=(column<<3)-(column<<1); //暂存列值if(j<=63) //是否为第10个字列的前4列{SelectScreE(1); //前4列显示在左屏SetColumn(j);SetLine(lin);//tab[0]=ReadByte(); //空读!!!!!for(i=0;i<4;i++) //读4个字节回来{tab[i]=~ReadByte();j++; }SetColumn((column<<3)-(column<<1));for(i=0;i<4;i++) //写回来字节WriteByte(tab[i]);}if(j>=64){ column=column-10; //为第10个字列的后2列 SelectScreE(2); //显示在中屏SetColumn(column);SetLine(lin);//tab[0]=ReadByte(); //空读!!!!!for(i=0;i<2;i++) //读6个字节回来{tab[i]=~ReadByte();j++;}SetColumn((column<<3)-(column<<1));for(i=0;i<2;i++) //写回来字节WriteByte(tab[i]);}}//第11-20个字列else if(10<column&&column<21){ SelectScreE(2); //显示在中屏column=column-11; //如果列数(11-20),则写在第一屏上(中屏)SetColumn((column<<3)-(column<<1)+2); //计算列地址,以6为倍数SetLine(lin);//tab[0]=ReadByte(); //空读!!!!! ,进行读操作前,必须空读一次for(i=0;i<6;i++) //读6个字节回来tab[i]=~ReadByte();SetColumn((column<<3)-(column<<1)+2);for(i=0;i<6;i++) //写回来字节WriteByte(tab[i]);}//第21个字列 --对于192*64屏else if(column==21){ j=(column<<3)-(column<<1);if(j<=127){SelectScreE(2);SetColumn(j);SetLine(lin);//tab[0]=ReadByte(); //空读!!!!!for(i=0;i<2;i++) //读6个字节回来{tab[i]=~ReadByte();j++; }SetLine(lin);SetColumn((column<<3)-(column<<1));for(i=0;i<2;i++)WriteByte(tab[i]);}if(j>=128){ column=column-21; //计算字列SelectScreE(3); //显示右屏SetColumn(column);SetLine(lin);//tab[0]=ReadByte(); //空读!!!!!for(i=0;i<4;i++) //读6个字节回来 {tab[i]=~ReadByte();j++;}SetLine(lin);SetColumn((column<<3)-(column<<1));for(i=0;i<4;i++)WriteByte(tab[i]);}}/* //第22-31个字列--对于192*64屏else if(21<column&&column<=31){ SelectScreE(3);column=column-22;SetColumn((column<<3)-(column<<1)+4);SetLine(lin);tab[0]=ReadByte();for(i=0;i<6;i++)tab[i]=~ReadByte();SetLine(lin);SetColumn((column<<3)-(column<<1)+4);for(i=0;i<6;i++)WriteByte(tab[i]);}*/}//******************************************************************* ***********//反显某行某几个字符 LCD19264//lin:行(0-7), column: 列(0-15)void ReverseLinChar(unsigned char lin,unsigned char startcolumn,unsigned char ShowQuantity){ unsigned char i;for(i=0;i<ShowQuantity;i++){if(startcolumn+i>21) //列地址大于21返回return;ReverseShow86(lin,startcolumn+i);}}//******************************************************************* ***********。

LCD12864模块程序

LCD12864模块程序
uchar code table4[]="";
uchar code table5[]="0123456J0";
//---DS1302写入和读取时分秒的地址命令---//
//---秒分时日月周年 最低位读写位;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar TIME[7] = {0, 0, 0x01, 0x01, 0x02, 0x13};
uchar SetState,SetPlace;
void Int0Configuration();
/*********************************************
addr >>= 1;
sCLK = 1;//数据在上升沿时,DS1302读取数据
_nop_();
sCLK = 0;
_nop_();
}
for (n=0; n<8; n++)//写入8位数据
{
DSIO = dat & 0x01;
dat >>= 1;
sCLK = 1;//数据在上升沿时,DS1302读取数据
* 函 数 名 : 12864写数据
* 函数功能 : 向12864写入数据
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
延时程序,时间us

lcd12864程序流程图

lcd12864程序流程图

lcd12864 程序流程图
我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602 之外,还有一种液晶屏用的比较多。

相信接触过单片机的朋友都知道了,那就是12864 液晶。

顾名思义,12864 表示其横向可以显示128 个点,纵向可以显示64 个点。

我们常用的12864 液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108 、T6963,ST7920 等等。

在这里我们以ST7920 为主控芯片的12864 液晶屏来学习如何去驱动它。

(液晶屏采用金鹏的OCMJ4X8C)。

lcd12864 液晶说明:
我们先来了解一下它的并行连接情况。

下面是电路连接图:
上面的图可以看出,液晶模块和单片机的连接除了P0 口的8 位并行数据线之外,还有RS,RW,E 等几根线。

其中R/S 是指令和数据寄存器的选择控制线(串行模式下为片选),R/W 是读写控制线(串行模式下是数据线),E 是使能线(串行模式下为时钟线)。

通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。

看看并行模式下的写时序图:。

LCD12864显示实时时钟例程可运行

LCD12864显示实时时钟例程可运行

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

下面是一段12864液晶显示实时时钟的程序:/****************************************************************************** *********时间:2012.11.30晶振:11.0592MHz芯片:STC89C52RC功能描述:在12864上显示年、月、日、星期、时、分和秒等时间信息******************************************************************************* ********/#include<reg52.h>#define uchar unsigned charsbit CLK=P1^4; //DS1302引脚定义sbit IO=P1^5;sbit CE=P1^6;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit RS=P2^4; //12864引脚定义数据口为P0sbit RW=P2^5;sbit EN=P2^6;sbit PSB=P2^1;sbit RET=P2^3;void Input_1byte(uchar TD) //DS1302输入一字节数据{uchar i;ACC=TD;for(i=8;i>0;i--){IO=ACC0;CLK=1;CLK=0;ACC=ACC>>1;}}uchar Output_1byte(void) //DS1302输出一字节数据{uchar i;for(i=8;i>0;i--){ACC=ACC>>1;ACC7=IO;CLK=1;CLK=0;}return(ACC);}void Write_DS1302(uchar add,uchar dat)//向DS1302写{CE=0;CLK=0;CE=1;Input_1byte(add);Input_1byte(dat);CE=0;}uchar Read_DS1302(uchar add) //从DS1302读{uchar inf; //信息临时存储变量CE=0;CLK=0;CE=1;Input_1byte(add);inf=Output_1byte();CE=0;return(inf);}/**********************DS1302初始化*****************************/void init_1302(){if(Read_DS1302(0xd1)==0x55) //判断内存单元的内容,是否进行初始化 {return;}else{Write_DS1302(0x8e,0x00); //关闭写保护Write_DS1302(0x90,0x00); //电池充电设置Write_DS1302(0x80,0x00); //秒Write_DS1302(0x82,0x54); //分Write_DS1302(0x84,0x20); //时Write_DS1302(0x86,0x30); //日Write_DS1302(0x88,0x11); //月Write_DS1302(0x8a,0x05); //星期Write_DS1302(0x8c,0x12); //年Write_DS1302(0xd0,0x55); //写RAMWrite_DS1302(0x8e,0x80); //打开写保护}}/**********************延时函数*****************************/ void DelayUs2x(unsigned char t){while(--t);}void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/**********************12864判忙*****************************/ void check_busy(){RS=0;RW=1;EN=1;while((P0&0x80)==0x80);EN=0;}/**********************12864写指令*****************************/ void write_com(uchar com){check_busy();RS=0;RW=0;EN=1;P0=com;DelayUs2x(250);EN=0;DelayUs2x(250);}/**********************12864写数据*****************************/void write_data(uchar dat){check_busy();RS=1;RW=0;EN=1;P0=dat;DelayUs2x(250);EN=0;DelayUs2x(250);}/**********************12864初始化函数*****************************/void init(){DelayMs(40); //大于40MS的延时程序PSB=1; //设置为8BIT并口工作模式DelayMs(1); //延时RET=0; //复位DelayMs(1); //延时RET=1; //复位置高DelayMs(200);write_com(0x30); //选择基本指令集DelayUs2x(250); //延时大于100uswrite_com(0x30); //选择8bit数据流DelayUs2x(200); //延时大于37uswrite_com(0x0c); //开显示(无游标、不反白)DelayUs2x(250); //延时大于100uswrite_com(0x01); //清除显示,并且设定地址指针为00HDelayMs(200); //延时大于10mswrite_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动DelayUs2x(250); //延时大于100us}/**********************清屏*****************************/void clrscreen(){write_com(0x01);DelayMs(15);}/*********************************************************主函数********************************************************/void main(){uchar sec,sec1,sec2;uchar min,min1,min2;uchar hour,hour1,hour2;uchar date,date1,date2;uchar mon,mon1,mon2;uchar day;uchar year,year1,year2;uchar table1[]="年月日时分秒星期温度摄氏"; //长度24uchar table2[]={0XD2,0XBB, 0XB6,0XFE, 0XC8,0XFD, 0XCB,0XC4, 0XCE,0XE5, 0XCE,0XF9, 0XC8,0XD5}; //长度14 uchar table3[]="0123456789"; //长度10init(); //液晶初始化clrscreen();DelayMs(200);init_1302(); //1302初始化只初始化一下就可以需要下载两次DelayMs(50);write_com(0x80); //显示20write_data('2');write_data('0');write_com(0x82); //显示年write_data(table1[0]);write_data(table1[1]);write_com(0x84); //显示月write_data(table1[2]);write_data(table1[3]);write_com(0x86); //显示日write_data(table1[4]);write_data(table1[5]);write_com(0x91); //显示时write_data(table1[6]);write_data(table1[7]);write_com(0x93); //显示分write_data(table1[8]);write_data(table1[9]);write_com(0x95); //显示秒write_data(table1[10]);write_data(table1[11]);write_com(0x88); //显示星期write_data(table1[12]);write_data(table1[13]);write_data(table1[14]);write_data(table1[15]);while(1){sec=Read_DS1302(0x81); ////读秒sec1=sec&0x0f; //个位sec2=sec>>4; //十位min=Read_DS1302(0x83); ////读分min1=min&0x0f; //个位min2=min>>4; //十位hour=Read_DS1302(0x85); ////读时hour1=hour&0x0f; //个位hour2=hour>>4; //十位date=Read_DS1302(0x87); ////读日date1=date&0x0f; //个位date2=date>>4; //十位mon=Read_DS1302(0x89); ////读月mon1=mon&0x0f; //个位mon2=mon>>4; //十位year=Read_DS1302(0x8d); ////读年year1=year&0x0f; //个位year2=year>>4; //十位day=Read_DS1302(0x8b); ////读星期write_com(0x94); //送显示内容write_data(table3[sec2]); //秒write_data(table3[sec1]);write_com(0x92);write_data(table3[min2]); //分write_data(table3[min1]);write_com(0x90);write_data(table3[hour2]); //时write_data(table3[hour1]);write_com(0x85);write_data(table3[date2]); //日write_data(table3[date1]);write_com(0x83);write_data(table3[mon2]); //月write_data(table3[mon1]);write_com(0x81);write_data(table3[year2]); //年write_data(table3[year1]);write_com(0x8a);write_data(table2[2*day-2]); //星期write_data(table2[2*day-1]);}}。

LCD12864程序文档

LCD12864程序文档

LCD12864串口显示使用详解LCD12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。

每个显示点对应一位二进制数,1表示亮,0表示灭。

存储这些点阵信息的RAM称为显示数据存储器,要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。

LCD12864控制芯片:ST7920A 带中文字库MCU:STM32F103源程序下载地址:/detail/wylloong/8538839根据串行连接时序图所示,串行数据传送共分三个字节完成:第一字节:串口控制指令——格式 11111ABC 其中,A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD;B为数据类型选择:H表示数据是显示数据,L表示数据是控制指令;C固定为0第二字节:(并行)8位数据的高4位——格式 DDDD0000第三字节:(并行)8位数据的低4位——格式 0000DDDD,发送时将低四位移至发送数据的高四位,即DDDD0000方能正确。

绘图RAM(GDRAM):绘图显示RAM提供128*8个字节的记忆空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个字节的数据到绘图RAM,而地址计数器(AC)会自动加1;在写入绘图RAM的期间,绘图显示必须关闭。

整个写入绘图RAM的步骤如下:1、关闭绘图显示功能。

2、先将水平的位元组坐标(X)写入绘图RAM地址,再将垂直的坐标(Y)写入绘图RAM地址;将D15——D8写入到RAM中;将D7——D0写入到RAM 中;3、打开绘图显示功能。

带中文字库的128X64显示模块时应注意以下几点:①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。

②显示ASCII字符过程与显示中文字符过程相同。

不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。

LCD12864液晶显示原理电路图程序

LCD12864液晶显示原理电路图程序

LCD12864系列点阵型液晶显示模块使用说明书一、OCM12864液晶显示模块概述1.OCM12864液晶显示模块是128×64点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8位标准数据总线、6条控制线及电源线。

采用KS0107控制IC。

2.外观尺寸:113×65×11mm(ocm12864-1), 93×70×10mm(ocm12864-2)78×70×10mm(ocm12864-3),3.视域尺寸:73.4×38.8mm(ocm12864-1) 70.7×38mm(ocm12864-2),64×44mm(ocm12864-3)4.重量:大约g补充说明:外观尺寸可根据用户的要求进展适度调整。

二、最大工作X围1、逻辑工作电压(Vcc):4.5~5.5V2、电源地(GND):0V3、LCD驱动电压(Vee):0~-10V4、输入电压:Vee~Vdd5、工作温度(Ta):0~55℃(常温) / -20~70℃〔宽温〕6、保存温度(Tstg):-10~65℃三、电气特性(测试条件Ta=25,Vdd=5.0+/-0.25V)1、输入高电平(Vih):3.5Vmin2、输入低电平(Vil):0.55Vmax3、输出高电平(Voh):3.75VminH H D7 D6 D5 D4 D3 D2 D1 D0功能:从DD RAM读数据,读指令执行后Y地址计数器自动加1。

从DD RAM读数据前要先执行“设置页地址〞及“设置列地址〞命令。

六、接口时序1.写操作时序时序11.读操作时序时序2时序参数表:名称符号最小值典型值最大值单位E周期时间Tcyc 1000 nsE高电平宽度Pweh 450 nsE低电平宽度Pwel 450 nsX=7Line60 1/0 1/0 1/0 1/0 ………… 1/0 1/0 1/0 DB4 Line61 1/0 1/0 1/0 1/0 ………… 1/0 1/0 1/0 DB5 Line62 1/0 1/0 1/0 1/0 ………… 1/0 1/0 1/0 DB6 Line631/0 1/0 1/0 1/0…………1/0 1/0 1/0 DB7八、测试硬件电路九、读写模块程序举例● 写指令子程序〔INST 〕 SETB E CLR D _I CLR R _W MOV P1, A CLR E RET● 写数据子程序〔DATA 〕 SETB E SETB D_I CLR R _W MOV P1, A CLR E RET● 写一页显示RAM 数据〔假设指令子程序为INST ,数据子程序为DATA 〕VEE ’V0第三脚VEE 第18脚可调10K〔三极管内置〕MOV A, #0B8HLCALL INST ;置页地址为0页MOV A, #40HLCALL INST ;置列地址为0列MOV R2,#40HMOV R1,#00HMOV DPTR,#ADDRLOOP:MOV A, R1MOVC A, A+DPTRLCALL DATAINC R1DJNZ R2, LOOP带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。

LCD12864显示程序

LCD12864显示程序

本例程为通过用AT89C52芯片操纵LCD12864显示的程序,使用的晶振为12M.之五兆芳芳创作/*************************************************** *******程序说明:LCD12864显示主程序程序调试员:莫剑辉调试时间:67*************************************************** *******/#include<reg52.h>#include"12864.c"void main(){Ini_Lcd(); //液晶初始化子程序Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序while(1);}这里我们通过调用下面的头文件就可以了,这样的做法便利我们以后要用到LCD12864的程序的调用./*************************************************** *******程序说明:LCD12864显示头文件程序调试员:莫剑辉调试时间:67*************************************************** *******///#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define DATA P2 //数据输出端0~7sbit RS=P0^0; //LCD12864 RS端sbit RW=P0^1; //LCD12864 RW端sbit E =P0^2; //LCD12864 E 端sbit PSB =P0^3;/*********************************************延时子程序*********************************************/void Delay_1ms(uint x){uint j,i;for(j=0;j<x;j++){for(i=0;i<120;i++); //延时X乘以120}}/*********************************************LCD12864液晶测忙子程序(读状态)*********************************************/void Busy(){uchar busy;do{E = 0; //0为封闭使能端,1为打开使能端RS = 0; //1为指令,0为数据RW = 1; //1为读,0为写Delay_1ms(20); //延时20乘以120时间E = 1; //0为封闭使能端,1为打开使能端busy=P1; //读取P2状态Delay_1ms(20); //延时20乘以120时间E = 0; //0为封闭使能端,1为打开使能端}while(busy&0x80); //判断BUSY位是否任务:1为内部在任务,0为正常状态}/*********************************************LCD12864液晶数据写入子程序*********************************************/void Write_Data(uchar k){Busy(); //测忙E =1; //0为封闭使能端,1为打开使能端RS=1; //1为指令,0为数据RW=0; //1为读,0为写DATA=k; //输入数据K到DATADelay_1ms(20); //延时20乘以120时间E =0; //0为封闭使能端,1为打开使能端Delay_1ms(20); //延时20乘以120时间}/*********************************************LCD12864液晶命令写入子程序*********************************************/void Write_Cmd(uchar cmd){Busy(); //测忙E=1; //0为封闭使能端,1为打开使能端RS=0; //1为指令,0为数据RW=0; //1为读,0为写DATA=cmd; //输入命令cmd到DATADelay_1ms(20); //延时20乘以120时间E=0; //0为封闭使能端,1为打开使能端Delay_1ms(20); //延时20乘以120时间}/*********************************************LCD12864液晶数据显示子程序*********************************************/void Disp(uchar y,uchar x,uchar i,uchar *z){uchar Address;if(y==1){Address=0x80+x;} //Y判断第几行,X判断第几列,0x80为液晶行初始地址if(y==2){Address=0x90+x;}if(y==3){Address=0x88+x;}if(y==4){Address=0x98+x;}Write_Cmd(Address); //写入地址命令到LCD12864while(i) //写入显示数据的大小{Write_Data(*(z++)); //写入显示数据到LCD12864i;}}/*********************************************LCD12864液晶初始化子程序*********************************************/void Ini_Lcd(void){PSB=1;Delay_1ms(20);Write_Cmd(0x30); //根本指令集Delay_1ms(20);Write_Cmd(0x02); // 地址归位Delay_1ms(20);Write_Cmd(0x0c); //整体显示打开,游标封闭Delay_1ms(20);Write_Cmd(0x06); //游标右移Delay_1ms(20);Write_Cmd(0x80); //设定显示的起始地址Delay_1ms(20);Write_Cmd(0x01); //清除显示}。

LCD12864VHDL语言例程

LCD12864VHDL语言例程

本段程序可以将4*4小键盘上读入的四位数值(需要另外的程序)百位K1、十位K2、个位K3和单位K4显示出来。

经FPGA实验效果良好。

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;use ieee.numeric_std.all;ENTITY lcd12864 ISPORT (clk : IN std_logic;--reset : IN std_logic;rs : OUT std_logic;rw : OUT std_logic;en : OUT std_logic;dat : OUT std_logic_vector(7 DOWNTO 0);--rst : OUT std_logic);LCD_N : OUT std_logic;LCD_P : OUT std_logic;PSB : OUT std_logic;LCD_RST : OUT std_logic;----------------------------------------------------------------------------------------------------------- k1 : in std_logic_vector(7 downto 0);k2 : in std_logic_vector(7 downto 0);k3 : in std_logic_vector(7 downto 0);k4 : in std_logic_vector(7 downto 0));---------------------------------------------------------------------------------------------------------END lcd12864;ARCHITECTURE fun OF lcd12864 ISSIGNAL y : BIT_vector (10 DOWNTO 0);signal var1,var2,var3:integer;--//状态定义SIGNAL e : std_logic;SIGNAL counter : std_logic_vector(15 DOWNTO 0);SIGNAL current : std_logic_vector(7 DOWNTO 0);SIGNAL clkr : std_logic;SIGNAL cnt : std_logic_vector(1 DOWNTO 0);CONSTANT set0 : std_logic_vector(7 DOWNTO 0) := "00000000";CONSTANT set1 : std_logic_vector(7 DOWNTO 0) := "00000001";CONSTANT set2 : std_logic_vector(7 DOWNTO 0) := "00000010";CONSTANT set3 : std_logic_vector(7 DOWNTO 0) := "00000011";CONSTANT set4 : std_logic_vector(7 DOWNTO 0) := "00100101";CONSTANT set5 : std_logic_vector(7 DOWNTO 0) := "00100110";CONSTANT dat0 : std_logic_vector(7 DOWNTO 0) := "00000100";CONSTANT dat1 : std_logic_vector(7 DOWNTO 0) := "00000101";CONSTANT dat2 : std_logic_vector(7 DOWNTO 0) := "00000110";CONSTANT dat3 : std_logic_vector(7 DOWNTO 0) := "00000111";CONSTANT dat4 : std_logic_vector(7 DOWNTO 0) := "00001000";CONSTANT dat5 : std_logic_vector(7 DOWNTO 0) := "00001001";CONSTANT dat6 : std_logic_vector(7 DOWNTO 0) := "00001010";CONSTANT dat7 : std_logic_vector(7 DOWNTO 0) := "00001011";CONSTANT dat8 : std_logic_vector(7 DOWNTO 0) := "00001100";CONSTANT dat9 : std_logic_vector(7 DOWNTO 0) := "00001101";CONSTANT dat10 : std_logic_vector(7 DOWNTO 0) := "00001110";CONSTANT dat11 : std_logic_vector(7 DOWNTO 0) := "00001111";CONSTANT dat12 : std_logic_vector(7 DOWNTO 0) := "00010000";CONSTANT dat13 : std_logic_vector(7 DOWNTO 0) := "00010001";CONSTANT dat14 : std_logic_vector(7 DOWNTO 0) := "00010010"; CONSTANT nul : std_logic_vector(7 DOWNTO 0) := "00110000";SIGNAL dat_r : std_logic_vector(7 DOWNTO 0);SIGNAL rs_r : std_logic;SIGNAL rw_r : std_logic;SIGNAL en_r : std_logic;------------------------------------------------------------------------------------------------ SIGNAL k1_r : std_logic_vector(7 DOWNTO 0):="00000111";SIGNAL k2_r : std_logic_vector(7 DOWNTO 0):="00001000";SIGNAL k3_r : std_logic_vector(7 DOWNTO 0):="00001001";SIGNAL k4_r : std_logic_vector(7 DOWNTO 0):="00001100";SIGNAL a : std_logic_vector (7 DOWNTO 0);SIGNAL b : std_logic_vector (7 DOWNTO 0);SIGNAL c : std_logic_vector (7 DOWNTO 0);SIGNAL d : std_logic_vector (7 DOWNTO 0);--------------------------------------------------------------------------------------------------------BEGINdat <= dat_r;rs <= rs_r;rw <= rw_r;en <= en_r;k1_r<=k1;k2_r<=k2;k3_r<=k3;k4_r<=k4;PSB <= '1' ;LCD_RST <= '1' ;LCD_N<='0';LCD_P<='1';--时钟分频PROCESS(clk)BEGINIF(clk'EVENT AND clk = '1') THENcounter <= counter + "0000000000000001";IF (counter = "0000000000001111") THENclkr <= NOT clkr;END IF;END IF;END PROCESS;PROCESS(clkr)BEGINaaaIF(clkr'EVENT AND clkr = '1') THENCASE current ISWHEN set0 =>rs_r <= '0';dat_r <= "00110000"; --初始化--基本指令集current <= set1;WHEN set1 =>rs_r <= '0';dat_r <= "00001100"; --开显示current <= set2;WHEN set2 =>rs_r <= '0';dat_r <= "00000110"; --光标右移current <= set3;WHEN set3 =>rs_r <= '0';dat_r <= "00000001"; --清屏current <= set4;WHEN set4 =>rs_r <= '0';dat_r <= "10000000"; --设置坐标位置(地址设置为第1行)current <= dat0;WHEN dat0 =>rs_r <= '1';dat_r <= a; --发送第一行数据current <= dat1;WHEN dat1 =>rs_r <= '1';dat_r <= b;current <= dat2;WHEN dat2 =>rs_r <= '1';dat_r <= c;current <= dat3;WHEN dat3 =>rs_r <= '1';dat_r <= d;current <= nul;WHEN nul => --这段保证前段显示部分至少执行一遍--然后把液晶的En脚拉高,完成一次读写过程rs_r <= '0';dat_r <= "00000000";IF (cnt /= "10") THENe <= '0';current <= set0;cnt <= cnt + "01";ELSEcurrent <= set0;e <= '1';cnt <= "00";END IF;WHEN OTHERS =>current <= nul;END CASE;END IF;END PROCESS;en_r <= clkr OR e ; --对LCD始终为写操作rw_r <= '0' ; --对LCD始终为写操作-- rst <= reset ;----------------------------------------------------------------------------------process(clkr)beginIF(clkr'EVENT AND clkr = '1') THENcase k1_r is --百位when "00000000"=>a<= x"30";when "00000001"=>a<= x"31";when "00000010"=>a<= x"32";when "00000011"=>a<= x"33";when "00000100"=>a<= x"34";when "00000101"=>a<= x"35";when "00000110"=>a<= x"36";when "00000111"=>a<= x"37";when "00001000"=>a<= x"38";when "00001001"=>a<= x"39";when others =>a<= x"30" ;end case;case k2_r is --??位when "00000000"=>b<= x"30";when "00000001"=>b<= x"31";when "00000010"=>b<= x"32";when "00000011"=>b<= x"33";when "00000100"=>b<= x"34";when "00000101"=>b<= x"35";when "00000110"=>b<= x"36";when "00000111"=>b<= x"37";when "00001000"=>b<= x"38";when "00001001"=>b<= x"39";when others =>b<= x"31" ;end case;case k3_r is --个位when "00000000"=>c<= x"30";when "00000001"=>c<= x"31";when "00000010"=>c<= x"32";when "00000011"=>c<= x"33";when "00000100"=>c<= x"34";when "00000101"=>c<= x"35";when "00000110"=>c<= x"36";when "00000111"=>c<= x"37";when "00001000"=>c<= x"38";when "00001001"=>c<= x"39";when others =>c<= x"32" ;end case;case k4_r is --单位when "00001010"=>d<= x"48"; --Hwhen "00001011"=>d<= x"4B"; --Kwhen "00001100"=>d<= x"4D"; --M when others =>d<=x"48";end case;end if;end process;END fun;。

LCD12864(并口)显示程序

LCD12864(并口)显示程序

#ifndef jh_f330#define jh_f330#include<c8051f330.h>#endiftypedef unsigned char uint8;typedef unsigned int uint16;/*************端口配置**************///******************************************************sbit CS =P0^4;sbit RSET=P0^3;sbit A0 =P0^2;sbit WR =P0^1;sbit RD =P0^0;#define DATAPORT P1 //数据口uint8 code word1[]={0x04,0x44,0x84,0x04,0xE4,0x1F,0x84,0x44,0xA4,0x3F,0xA4,0xA4,0x64,0x06,0x04,0x00, 0x20,0x10,0x09,0x04,0xFF,0x04,0x04,0x14,0x26,0x05,0x84,0xFF,0x04,0x06,0x04,0x00 };/**********预定义数据*********/#define LCD_X 128-1 //屏幕的X轴的物理宽度#define LCD_Y 64-1 //屏幕的Y轴的物理宽度/***********LCD指令集***************///LCD开关命令#define LCD_ON() Wr_Com(0xaf)#define LCD_OFF() Wr_Com(0xae)//设置显示起始行#define LCD_START_LINE 0x40 //起始行地址为,0x40+(0-63)//页地址设置#define LCD_Page 0xb0 //页地址为:0xb0+(0-8)//列地址设置#define LCD_Ad_H 0x10 //列高四位地址:0x10+()#define LCD_Ad_L 0x00 //列低四位地址:0x00+()//行列地址方向设置#define ADC_Norm() Wr_Com(0xa0);#define ADC_Reve() Wr_Com(0xa1);#define Com_Norm() Wr_Com(0xc0);#define Com_Reve() Wr_Com(0xc8);void Init_f330(){/*****内部振荡器配置******/OSCICL=OSCICL+4; //设置系统时钟为24MHZ,ΔT=(0.005*ΔOSCICL)/fbase // OSCICL=OSCICL+22; //设置系统时钟为22.1184MHZ// OSCICL=OSCICL+45; //设置系统时钟为20MHZ //15MHZ--24.5MHZ/********设置分频*********/// OSCICN|=0x00; //设置时钟为八分频,OSCIN复位值为1100000//00:8分频,01:4分频,10:2分频,11:不分频// OSCICN|=0x01; //设置系统时钟4分频// OSCICN|=0x02; //设置系统时钟2分频OSCICN|=0x03; //设置系统时钟不分频// RSTSRC=0x04;// OSCLCN = 0x82; // 设置内部L-F振荡器为40kHZ// CLKSEL = 0x02; // 内部低频振荡器while(OSCLCN&0x40 == 0); // 等待振荡器频率稳定/*****设置看门狗*****/PCA0MD &=~0x40; // 禁止看门狗定时器EA=1;/*****端口初始化******/P0MDIN = 0xff; //复位值为11111111P1MDIN = 0xff; //1为数字输入,0为模拟输入P0MDOUT = 0xff; //复位值为11111111P1MDOUT = 0xff; //1为推挽输出,0为漏极输出XBR0 = 0x00; // 交叉开关使能XBR1 = 0x40; //交叉开关允许,T0接到引脚//XBR1 = 0x48; // ECI连到端口引脚//XBR1 |= 0x08; // PCA0 外部计数输入使能}/****************************************函数名:Wr_com**功能:LCD12864写命令程序**输入:uint8 com***************************************/void Wr_Com(uint8 com){A0=0; //命令数据选通,H:数据,L:命令CS=0; //芯片选通,低电平有效RD=1; //L:读信号WR=0; //L:写信号//nop();Data=com;WR=1;CS=1;}/****************************************函数名:Wr_Dat**功能:LCD12864写数据程序**输入:uint8 dat***************************************/void Wr_Dat(uint8 dat){A0=1; //命令数据选通,H:数据,L:命令CS=0; //芯片选通,低电平有效RD=1; //L:读信号WR=0; //L:写信号//nop();Data=dat;WR=1;CS=1;}/***************************************函数名称:LCD_Fill()**功能:LCD全屏显示数据程序**输入:8位数据**输出:无************************************/void LCD_Fill(uint8 dat){uint8 page;uint8 colume;for(page=0;page<8;page++){Wr_Com(LCD_Page+page);Wr_Com(LCD_Ad_H);Wr_Com(LCD_Ad_L);for(colume=0;colume<LCD_X;colume++)Wr_Dat(dat);}}/***************************************函数名称:LCD_Clear()**功能:LCD清屏程序(全屏填充0x00)**输入:8位数据**输出:无************************************/void LCD_Clear(){LCD_Fill(0x00);}/******************************************************* ** 函数名称: LCD12864_Init** 功能: LCD1286初始化程序** 输入: 无TimeDelay ** 输出: 无********************************************************/ void TimeDelay(int Time){int i;while(Time > 0){for(i = 0;i < 8000;i++){}Time --;}}void LCD_Init(void){LCD_RST=0;TimeDelay(200);LCD_RST=1;TimeDelay(200);ADC_Norm();Com_Reve();Wr_Com(0xa2);Wr_Com(0x2c); //vc onTimeDelay(200);Wr_Com(0x2e); //vr onTimeDelay(200);Wr_Com(0x2f); //internal booster,follower,divided onWr_Com(0x24); //set rb/ra=5.29Wr_Com(0x81); //set reference voltage selectWr_Com(0x1d);LCD_ON();Wr_Com(LCD_START_LINE);}/***********************************************************************函数名称:LCD_Word()**功能:输入单个汉字(16x16符号)**输入:页地址,列地址、字符数组**输出:无***********************************************************************/ void LCD_Word(unsigned char row,unsigned char colume,unsigned char *pword){unsigned char page= row;unsigned char col_high=colume>>4;unsigned char col_low =colume&0x0f;unsigned char i;Wr_Com(LCD_Page+page);Wr_Com(LCD_Ad_H+col_high);Wr_Com(LCD_Ad_L+col_low);for(i=0;i<16;i++){Wr_Dat(*(pword+i));}Wr_Com(LCD_Page+page+1);Wr_Com(LCD_Ad_H+col_high);Wr_Com(LCD_Ad_L+col_low);for(i=0;i<16;i++){Wr_Dat(*(pword+16+i));}main(){Init_f330();LCD_Init();LCD_Clear();LCD_Word(1,1,word1);while(1);}。

12864串口时序及反白例程

12864串口时序及反白例程

LCD12864 (ST7920)串行通信1-原理图2.引脚定义描述VSS:液晶显示地(GND)。

VDD:液晶显示电源(+5V)。

CS:片选,使能信号,该引脚为高读写才能成功。

SID:数据信号。

SCLK:同步时钟信号,上升沿有效。

PSB:并「1/串II选择信号。

高电平定义为并I】,低电平定义为串「I通信。

/RST:复位信号,低电平有效。

LEDA:背光电源正。

LEDK:背光电源负。

3・通信协议1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24当PSB接低电位时,将进入串行传输模式。

主要用到CS、SCLK、SID三根线来实现: CS为片选使能SCLK为同步时钟信号,以SCLK上升沿接收1 BITSID为传输的数据从一个完整的串行传输流程来看,一开始先传输启始字节,根据定义启始字节前五位为“同步位”字符串(五个连续的“1”),此时传输计数将被重置并且串行传输将被同步, 再跟随的两个位字符串(第六、第七位)分别指定传输方向位(RW)及寄存器选择位(RS),最后第八位则为“0”。

再接收到包含同步位及RW和RS资料的启始字节后,每一个八位的指令(数据)将被分为两个字节发送接收:高4位(DE7〜DB4)的数据将会被放在第一个字节的LSB部分,而低4位(DB3〜DB0)的数据会被放在第二个字节的LSB部分,至于相关的另四位则以“0”填充。

第一个字节:启始字节,格式Uli 1ABCA传输方向位RW, H表示LCD->MCU, L表示MCU->LCDB数据类型位RS, H表示显示数据,L表示控制指令C固定为0第二个字节:(并行)8位数据的高4位,格式D7~D4 0000第三个字节:(并行)8位数据的低4位,格式0000D3~D0 因为串行通信的数据是以位为单位进行传输,所以只要在每位数据的传输过程中适当的添加一段延时基本上就能保证数据收发成功。

LCD12864显示程序(成功版)

LCD12864显示程序(成功版)

#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char//--定时使用的IO口--//#define DATA_PORT P0sbit LCD12864_CS = P3^2;sbit LCD12864_RSET = P3^3;sbit LCD12864_RS = P2^6;sbit LCD12864_RW = P2^7;sbit LCD12864_RD = P2^5;//--定义全局函数--//void LcdSt7565_WriteCmd(cmd);void LcdSt7565_WriteData(dat);void Lcd12864_Init();void Lcd12864_ClearScreen(void);void Lcd12864_Write16CnCHAR(uchar x, uchar y,uchar k);void Delay10ms(unsigned int c);unsigned char code table[40][32]={/*-- 文字: 。

--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x24,0x24,0x18,0x00,0x00,/*-- 文字: 都--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x06,0xDA,0x22,0x02,0xFE,0x20,0x26,0x28,0x34,0x24,0x7F,0xA4,0x24,0x24,0x20, 0x00,0x07,0x08,0x10,0x08,0xFF,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0xFF,0x02,0x04,/*-- 文字: 皇--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x7C,0x54,0x54,0x54,0x54,0x55,0x56,0x54,0x7C,0x00,0x00,0x00, 0x00,0x40,0x41,0x49,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,/*-- 文字: 满--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x24,0x24,0x2F,0xE4,0x24,0x24,0xE4,0x2F,0x24,0x24,0x00,0x8C,0x02,0x60,0x10, 0x00,0x7F,0x91,0x49,0x07,0x09,0x19,0x07,0x09,0x11,0xFF,0x00,0x01,0x7E,0x04,0x04,/*-- 文字: 柳--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFC,0x04,0x04,0xFC,0x00,0xF8,0x02,0x04,0xFC,0x10,0x90,0xFF,0xD0,0x10,0x10, 0x00,0x07,0x08,0x04,0xFF,0x00,0x0F,0x32,0x44,0x8F,0x01,0x00,0xFF,0x00,0x03,0x04,/*-- 文字: 烟--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0xFE,0x08,0x10,0xFF,0x00,0x70,0x80, 0x00,0xFF,0x40,0x4C,0x42,0x41,0x46,0x48,0x50,0xFF,0x10,0x08,0x07,0x18,0x60,0x80,/*-- 文字: 胜--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x10,0x10,0x10,0xFF,0x10,0x10,0x3C,0x40,0x00,0xFE,0x22,0x22,0xFE,0x00, 0x00,0x40,0x42,0x42,0x42,0x7F,0x42,0x42,0x42,0x40,0x00,0xFF,0x82,0x02,0x7F,0x80,/*-- 文字: 绝--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xE0,0x2C,0x34,0xE4,0x24,0x27,0xE8,0x10,0x20,0x10,0x63,0xAC,0x30,0x20, 0x00,0x70,0x43,0x42,0x42,0x43,0x42,0x42,0x3F,0x00,0x00,0x12,0x12,0x22,0x67,0x22,/*-- 文字: ,--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x58,0x00,0x00,/*-- 文字: 处--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x80,0x40,0x20,0x10,0xFF,0x00,0x00,0xF8,0x08,0x08,0x9F,0x60,0x80,0x00, 0x00,0x40,0x41,0x40,0x40,0x40,0x5F,0x40,0x20,0x20,0x13,0x0C,0x13,0x20,0x40,0x81,/*-- 文字: 好--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x80,0x86,0x8A,0x92,0xE2,0x82,0x82,0x80,0x00,0xF0,0x10,0x1F,0xF0,0x10,0x10, 0x00,0x00,0x00,0x00,0x00,0x7F,0x80,0x40,0x00,0x00,0x61,0x16,0x08,0x15,0x22,0x40,/*-- 文字: 春--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x40,0x44,0x54,0x54,0xD4,0x54,0x54,0x5F,0x74,0x54,0xD4,0x54,0x54,0x44,0x40, 0x00,0x04,0x04,0x02,0x01,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x01,0x02,0x04,0x04,/*-- 文字: 年--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x04,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0xC7,0x18,0x20,0x00, 0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,/*-- 文字: 一--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字: 是--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x7F,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x7F,0x00,0x00,0x00, 0x00,0x81,0x81,0x89,0x89,0x89,0x89,0x89,0xFF,0x81,0x41,0x21,0x1D,0x21,0x41,0x81,/*-- 文字: 最--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x40,0x40,0x40,0x5F,0x55,0x55,0x55,0x55,0xD5,0x55,0x55,0x5F,0xC0,0x40,0x40, 0x00,0x80,0x80,0x43,0x2D,0x11,0x29,0x47,0x90,0xFF,0x15,0x15,0x25,0x3F,0x60,0x20,/*-- 文字: 。

LCD12864 程序

LCD12864 程序

#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define LCD_data P0 //数据口sbit LCD_RS = P2^6; //寄存器选择输入sbit LCD_RW = P2^5; //液晶读/写控制sbit LCD_EN = P2^7; //液晶使能控制sbit LCD_PSB = P3^2; //串/并方式控制sbit LCD_RST = P3^7; //液晶复位端口#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};uchar code DIS1[] = {"欢迎您乘坐12路"};uchar code DIS2[] = {"起点站井冈山大学"};void delay(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void delay1(int ms){while(ms--){uchar y;for(y=0;y<100;y++) ;}}bit lcd_busy(){bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN = 0;return(result);}void lcd_wcmd(uchar cmd) {while(lcd_busy());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}void lcd_wdat(uchar dat) {while(lcd_busy());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}void lcd_init(){LCD_PSB = 1; //并口方式LCD_RST = 0; //液晶复位delay(3);LCD_RST = 1;delay(3);lcd_wcmd(0x34); //扩充指令操作delay(5);lcd_wcmd(0x30); //基本指令操作delay(5);lcd_wcmd(0x0C); //显示开,关光标delay(5);lcd_wcmd(0x01); //清除LCD的显示内容delay(5);}void lcd_pos(uchar X,uchar Y){uchar pos;if (X==1){X=0x80;}else if (X==2){X=0x90;}else if (X==3){X=0x88;}else if (X==4){X=0x98;}pos = X+Y ;lcd_wcmd(pos); //显示地址}void lcdflag(){lcd_wcmd(0x08);delay(400);lcd_wcmd(0x0c);delay(400);lcd_wcmd(0x08);delay(400);lcd_wcmd(0x0c);delay(400);lcd_wcmd(0x08);delay(200);lcd_wcmd(0x0c);delay(5);lcd_wcmd(0x01);delay(5);}void clr_screen(){lcd_wcmd(0x34); //扩充指令操作delay(5);lcd_wcmd(0x30); //基本指令操作delay(5);lcd_wcmd(0x01); //清屏delay(5);}void bytecode(){uchar s;clr_screen(); //清屏lcd_wcmd(0x80); //设置显示位置为第一行for(s=0;s<16;s++){lcd_wdat(0x30+s);}lcd_wcmd(0x90); //设置显示位置为第二行for(s=0;s<16;s++){lcd_wdat(0x40+s);}lcd_wcmd(0x88); //设置显示位置为第三行for(s=0;s<16;s++){lcd_wdat(0x50+s);}lcd_wcmd(0x98); //设置显示位置为第四行for(s=0;s<16;s++){lcd_wdat(0x60+s);}}void main(){uchar i;delay(100); //上电,等待稳定lcd_init(); //初始化LCDwhile(1){lcd_pos(1,0); //设置显示位置为第一行for(i=0;i<16;i++){lcd_wdat(DIS1[i]);delay(30);}lcd_pos(2,0); //设置显示位置为第二行for(i=0;i<16;i++){lcd_wdat(DIS2[i]);delay(30);}delay(1000);lcdflag();clr_screen(); //清屏delay(2000);clr_screen(); //清屏delay(2000);bytecode(); //显示字符表代码delay(2000);clr_screen();}}。

LCD12864程序

LCD12864程序
wr_lcd (dat,word2); //接着前一个字在显示一个字符,均写入DDRAM
}
/*======================================
显示框架函数
=======================================*/
void disp_frame(void)
wr_lcd (dat,0x11);
}
else if((i%2==1)&&(i!=7)&&(j%4==0))
{
wr_lcd (dat,0x00);
wr_lcd (dat,0x01);
}
else
{
wr_lcd (dat,0x00);
wr_lcd (dat,0x00);
}
}
}
//wr_lcd (comm,0x36);//扩展功能:绘图显示开
wr_lcd (comm,0x30); //进入基本指令动作,8位MPU
wr_lcd (comm,0x01); //清DDRAM
wr_lcd (comm,0x06); //光标左移,AC自动加一
wr_lcd (comm,0x0c); //开显示,关游标
clear_Wdisp();//清除GDRAM
disp_frame();
wr_lcd (comm,0x30);//确保在基本指令模式,此模式下所写的数据存在DDRAM中
wr_lcd (comm,r); //列地址
wr_lcd (comm,c); //行地址,此处的行地址只能是0x80或0x90
wr_lcd (dat,word1); //以(x,y)为起点的8*16区域内显示一个字符,格式为'字符',如显示a则写为'a'。

LCD12864显示程序(汇编语言)

LCD12864显示程序(汇编语言)

;实验目的:熟悉12864LCD的使用;12864LCD带中文字库;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“5”,公司传真“6”;硬件设置:;关断所有拨码开关。

#include<p16f877a.inc>;__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择#DEFINE RW PORTA,4 ;读/写选择#DEFINE E PORTA,3 ;使能信号#DEFINE PSB PORTA,2 ;并口/串口选择(H/L)#DEFINE RST PORTA,0 ;复位信号;-----------------------------------------------LCD_X EQU 30H ;页地址LCD_Y EQU 31H ;Y地址COUNT EQU 32H ;循环计数用COUNT1 EQU 33H ;循环计数用COUNT2 EQU 34H ;循环计数用POINT EQU 35H ;查表偏移地址POINT1 EQU 36H ;查表偏移地址POINT2 EQU 37H ;查表偏移地址TEMP EQU 38H ;临时寄存器TEMP1 EQU 39H ;临时寄存器;-----------------------------------------------ORG 0000H ;复位地址NOP ;ICD需要的空指令GOTO MAIN ;跳转到主程序;**********************主程序************************MAINBANKSEL TRISACLRF TRISA ;A口输出CLRF TRISD ;D口输出BANKSEL ADCON1MOVLW 06HMOVWF ADCON1 ;A口全为数字口CLRF STATUSBCF RST ;复位LCDCALL DELAY ;延时一段时间BSF RST ;清除复位信号NOPBSF PSB ;并口通讯;**************************初始化**********************MOVLW 30H ;基本指令操作CALL SEND_IMOVLW 01H ;清除显示CALL SEND_IMOVLW 06H ;指定在写入或读取时,光标的移动方向 CALL SEND_IMOVLW 0CH ;开显示,关光标,不闪烁CALL SEND_I;***********************显示汉字************************HAN_WR2CALL CLEAR_P ;清屏HAN_WR2A ;“深圳乾龙盛电子”MOVLW LOW(TAB1A)MOVWF POINTMOVLW HIGH(TAB1A)MOVWF POINT1 ;获取表格的首地址MOVLW 0eH ;数数据字节个数(7个汉字共14字节) MOVWF COUNTMOVLW 81H ;页地址CALL SEND_ICALL QUSHUHAN_WR2B ;“。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ClearScreen(0);
Set_line(0);
}
/****************************************************/
/*
函数名:Display,Display_Photo_Panda
功能:写入显示数据
特点:
列行式
逆向
阴码
{
reg0 = 2;
//P3 = 0x0d;
}
}
P1 = 0x0b;
if((P1 & 0x0f)!=0x0f)
{
if((P1&0x0f) == 0x0b)
{
reg0 = 3;
//P3 = 0x0b;
{
if((P1&0x0f) == 0x0e)
{
reg0 = 1;
//P3 = 0x0e;
}
}
P1 = 0x0d;
if((P1 & 0x0f)!=0x0f)
{
if((P1&0x0f) == 0x0d)
}
}
P1 = 0x07;
if((P1 & 0x0f)!=0x0f)
{
if((P1&0x0f) == 0x07)
{
reg0 = 4;
//P3 = 0x07;
}
}
}
P1 = 0x0f;
if((P1&0x0f)==0x0f)
}
void Set_line(uchar startline)
{
startline = 0xc0 | startline;
WriteInstruction(startline);
}
void Set_column(uchar column)
{
column = column & 0x3f;
/**********************************************************/
BIT No_FUNC_KEY = 1; //1:表示FUNC没有按下
BIT EN_CHANGE;
uchar counterF;
//uchar counterA;
//uchar counterD;
column = 0x40 | column;
WriteInstruction(column);
}
void Set_on_off(uchar on_off)
{
on_off = 0x3e | on_off;
WriteInstruction(on_off);
}
/****************************************************/
}
void SCAN_KEYBOARD(void)
{
P1 = 0x0f;
if((P1 & 0x0f)!=0x0f)
{
delay();
//delay();
if((P1 & 0x0f)!=0x0f)
{
P1 = 0x0e;
if((P1 & 0x0f)!=0x0f)
功能:页,行,列,开关屏等的设置函数
特点:
*/
/****************************************************/
void Set_page(uchar page)
{
page = 0xb8 | page;
WriteInstruction(page);
/*
函数名:SelectScreen
功能:选屏
特点:
*/
/****************************************************/
void SelectScreen(uchar screen)
{
switch(screen)
{
case 0:CS1 = 0;CS2 = 0;break;//全屏
/*
函数名:LcdInitiate
功能:LCD初始化
特点:
*/
/****************************************************/
void LcdInitiate(void)
{
/*delayNms(15);
WriteInstruction(0x38);
{
//reg1 = reg0;
if(reg0 == 1)
{
FUNC = 1;
P3 = 0x0e;
delay();
}
else if(reg0 == 2)
{
ADD_da = 1;
P3 = 0x0d;
/*
函数名:ClearScreen
功能:清屏
特点:
*/
/****************************************************/
void ClearScreen(uchar screen)
{
uchar i,j;
SelectScreen(screen);
*/
/****************************************************/
void Display(uchar ss,uchar page,uchar column,uchar *p)
{
uchar i;
SelectScreen(ss);
for(i=0;i<8;i++)
{
Set_page(i);
Set_column(0);
for(j=0;j<64;j++)//控制列
{
WriteData(0x00);//写入0,地址指针自加1
}
}
}
/****************************************************/
delayNms(5);
WriteInstruction(0x38);
delayNms(5);
WriteInstruction(0x38);
delayNms(5);
WriteInstruction(0x0f);
delayNms(5);
WriteInstruction(0x06);
}
}
}
/****************************************************/
/*
函数名:BusyTest,WriteData,WriteInstruction
功能:屏幕状态检测,写入数据,写指令等功能函数
特点:
*/
/****************************************************/
uchar counterC;
uchar sc0;
uchar page0;
uchar column1,column2;
uchar number_b; //空白
uchar num_for_changed;
/**********************************************************/
case 1:CS1 = 0;CS2 = 1;break;//左半屏
case 2:CS1 = 1;CS2 = 0;break;//右半屏
default:break;
}
}
/****************************************************/
//#pragma sm
#include<reg52.h>
#include<intrins.h>
#include"WH12864.h"
//#include"CONTROL.c"
uchar counter = 0;
uchar counter0;
uchar tempSL = 0;
delayNms(5);
WriteInstruction(0x01);
delayNms(5);*/
BusyTest();
SelectScreen(0);
Set_on_off(0);
SelectScreen(0);
Set_on_off(1);
SelectScreen(0);
_nop_();
E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
E = 0;
}
/****************************************************/
/*
函数名:Set_page,Set_line,Set_column,Set_on_off
uchar MON_counter = 0;
uchar YEAR_counter = 0;
uchar tempDL = 0;
uchar tempDH = 0;
uchar tempMNL = 0;
uchar tempMNH = 0;
相关文档
最新文档