想随便问一下可不可以用ucgui操作带字库的12864
1个回答
2015-07-23
展开全部
#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/*12864端口定义*/#define LCD_data P1 //数据口sbit LCD_RS = P2^4; //选择寄存器(并行) 0 ;指令 1 :数据; sbit LCD_RW = P2^3; //液晶读/写控制sbit LCD_EN = P2^2; //读写数据启始脚(并行)sbit LCD_PSB = P2^7; //串/并方式控制 0为串行模式,1 为并sbit LCD_RST = P2^5; //复位 低电平有uchar code dis1[] = {"一二三四 ,送 |"};uchar code dis2[] = {"落日或谨故人情。友李"};uchar code dis3[] = {"挥手自兹去,人白"};uchar code dis4[] = {"萧萧班马鸣。 | "};/******************************************************** //延时函数 //*******************************************************/ void delay(uint k) { uint i; uchar j; for(i=0;i<k;i++) { for(j=0;j<10;j++); } } /**********************************************************// 延时1ms 函数 //********************************************************/ void delay_ms(unsigned int k)//延时0.994us,晶振12M { unsigned int x,y; for(x=k;x>0;x--) for(y=121;y>0;y--); }void ledzs(){ led=0; delay_ms(100); led=1; delay_ms(100);}/*************************************************************/ 12864 读忙标志位 最高位为1 则忙,不能读卜侍写/************************************************************/void Read_busy(){ LCD_RS=0; LCD_RW=1; LCD_EN=1; while(P2&0x80); LCD_EN=0; }/*************************************************************/ 写命令函数 /************************************************************/void Lcdwcom(uchar wcom){ Read_busy(); //每次进行读忙标识 可以不加 最好加 delay(1); // 延时 LCD_RS=0; //指令 为底 数据为高 delay(1); // 延时 LCD_RW=0; //写为底 读为高 delay(1); // 延时 LCD_EN=1; //使能信号型团吵 delay(1); // 延时 LCD_data=wcom; //将指令写入并口 delay(1); // 延时 LCD_EN=0; // 关闭使能}/*************************************************************/ 写数据函数 /************************************************************/void Lcdwdata(uchar wdata){ Read_busy(); delay(1); LCD_RS=1; //指令 为底 数据为高 delay(1); LCD_RW=0; //写为底 读为高 delay(1); LCD_EN=1; //使能信号 delay(1); LCD_data=wdata; //将数据写入并口 delay(1); LCD_EN=0; // 关闭使能}/*************************************************************/ 12864显示位置设定函数 参数说明: x 为行号 y 位列号/************************************************************/void Set_Pos(uchar x,uchar y){ uchar i; switch(x) //确定行号 { case 0: i=0x80; break; case 1: i=0x90; break; case 2: i=0x88; break; case 3: i=0x98; break; default :break; } i=i+y; //确定列号 Lcdwcom(i); }/*************************************************************/ 12864初始化函数 顺序不可乱/************************************************************/void LCD_Init(void){ delay_ms(2); LCD_RST=1; LCD_RST=0; LCD_RST=1; LCD_PSB=1; //选择并口 Lcdwcom(0x30); //基本指令操作1 延时不同 delay(8); Lcdwcom(0x30); //基本指令操作2 delay(5); Lcdwcom(0x0c); //显示开光标 delay(5); Lcdwcom(0x01); //清楚LCD显示内容 delay(5); Lcdwcom(0x06); //光标的移动方向 delay(5); }/*************************************************************/ 12864 指定位置显示字符串函数 若整体化则只能显示第一行/************************************************************/void Display_String(uchar x1,uchar y1,uchar *string){ uchar i=0; Set_Pos(x1,y1); //设定位置 while(string[i]!='\0') { Lcdwdata(string[i]); i++; }}/*************************************************************/ 12864 自带字符串显示函数 只需将ASCII码 写入即可 不怎么好使/************************************************************/void Display_Ascii(uchar x2,uchar y2,uchar ascii){ Set_Pos(x2,y2); Lcdwdata(ascii);}void main(){ uchar j=0; LCD_Init(); Lcdwcom(0x01); //清楚LCD显示内容 Display_String(0,0,dis1); Display_String(1,0,dis2); Display_String(2,0,dis3); Display_String(3,0,dis4); while(1);}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询