-
Notifications
You must be signed in to change notification settings - Fork 0
/
lcd12864.c
98 lines (82 loc) · 2.4 KB
/
lcd12864.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include<reg52.h>
#include<delay_ms.h>
#include<lcd12864.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char disp[4];
uchar code tab0[]={"电压测量系统"};
uchar code tab1[]={"U ="};
void Check_Busy() //检测忙位
{
RS=0; // RS=0、RW=1读出忙标志(BF)的状态
RW=1;
E=1; //E的下降沿有效
DataPort=0xff; //如果想读取端口的数据,需要先把端口置位
while((DataPort&0x80)==0x80); //忙则等待
E=0;
}
//*******************************************************************************************
void Write_Cmd(unsigned char Cmd) //写命令
{
Check_Busy();
RS=0; // RS=0、RW=0写命令
RW=0;
E=1; //E的下降沿有效
DataPort=Cmd; //写命令到端口
E=0;
}
//*******************************************************************************************
void Write_Data(unsigned char Data)//写数据
{
Check_Busy();
RS=1; // RS=1、RW=0写数据
RW=0;
E=1; //E的下降沿有效
DataPort=Data; //写数据到端口
E=0;
}
//*******************************************************************************************
void LCD12864_init() // 液晶屏初始化
{
PSB=1; //设置为8BIT并口工作模式
Write_Cmd(0x01); //清除显示,并且设定地址指针为00H
delay_ms(1);
Write_Cmd(0x30); //选择基本指令集、8bit数据流
delay_ms(1);
Write_Cmd(0x06); //读/写时,设定游标的移动方向及指定显示的移位
delay_ms(1);
Write_Cmd(0x0c); //开显示(无游标、不反白)
delay_ms(1);
}
void display() //显示
{
unsigned char i;
Write_Cmd(0x81); //设置显示地址位置,即在第一行显示
i=0; //初始化变量,防止显示乱码
while(tab0[i]!='\0')
{
Write_Data(tab0[i]); //显示变量i对应的数组元素
delay_ms(2);
i++; //为显示下一个字符变量自增
}
Write_Cmd(0x90); //设置显示地址位置,即在第二行显示
i=0; //初始化变量,防止显示乱码
while(tab1[i]!='\0')
{
Write_Data(tab1[i]); //显示变量i对应的数组元素
delay_ms(2);
i++; //为显示下一个字符变量自增
}
Write_Cmd(0x92); //设置显示地址位置,即在第二行第四个显示
Write_Data(disp[3]); //显示千位
Write_Cmd(0x93);
Write_Data('.'); //显示.
Write_Cmd(0x94);
Write_Data(disp[2]); //显示百位
Write_Cmd(0x95);
Write_Data(disp[1]); //显示十位
Write_Cmd(0x96);
Write_Data(disp[0]); //显示个位
Write_Cmd(0x97);
Write_Data('V'); //显示
}