- #include <reg52.h>
- #include <string.h>
- #include "delay.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit RW=P2^6;
- sbit EN=P2^7; // 注:采用2线时,第15脚PSB接地->GND yuqingshan 2017-06-02
- uint Strlen(uchar *p)
- {
- uint i;
- for(i=0;*(p+i);i++);
- return i;
- }
- void WriteBytes(uchar *p)
- {
- uchar i,j,temp;
- EN=0;
- for(j=0;j<3;j++)
- {
- temp=p[j];
- for(i=0;i<8;i++)
- {
- if(temp & 0x80)
- RW=1;
- else RW=0;
- EN=1;
- delay(1);
- EN=0;
- temp<<=1;
- }
- }
- RW=1;
- }
- void SerialWriteData(uchar send)
- {
- uchar data1[3];
- data1[0]=0xfa ; //1111 1010向液晶写数据
- data1[1]=send & 0xf0; //取高4位
- data1[2]=(send<<4)&0xf0; //取低4位
- WriteBytes(data1);
- }
- void SerialWriteCmd(uchar send)
- {
- uchar data1[3];
- data1[0]=0xf8 ; //1111 1000向液晶写命令
- data1[1]=send & 0xf0; //取高4位
- data1[2]=(send<<4) & 0xf0; //取低4位
- WriteBytes(data1);
- }
- void init_lcd()
- {
- SerialWriteCmd(0x0C);
- SerialWriteCmd(0x06);
- SerialWriteCmd(0x01);
- }
- void display_12864(uchar hang,uchar lie,uchar *p)
- {
- uchar i;
- switch(hang)
- {
- case 1:SerialWriteCmd(0x80+lie);break;
- case 2:SerialWriteCmd(0x90+lie);break;
- case 3:SerialWriteCmd(0x88+lie);break;
- case 4:SerialWriteCmd(0x98+lie);break;
- }
- for(i=0;i<strlen(p);i++)
- {
- SerialWriteData(p[i]);
- }
- }
复制代码
这是12864.c的文件 我整的是一个多级菜单,已经能正常显示,现在是要加上一个送数的子函数。 |