显示光电
proteus提供了很多LCD的仿真器件,分享一个关于lcd1602的查找操作,希望对需要的朋友有帮助。
第1步:使用proteus打开一个工程,点击DEVICES的P,准备放置元件。
第2步:在Pick Devices对话框中的“Category”列表找到“Optoelectronics”。在“Sub-category”列表中选择“Alphanumeric LCDs”,可以在右侧的Results中看到可以使用的LCD元件,其中Description列名了分辨率,16x2即为1602,确认后点击“OK”键。
如果不记得1602的具体路径,那么可以使用关键词LCD在Pick Devices对话框进行检索,这样可以缩小查找范围。
另一种比较粗暴的方法是利用proteus自带的Demo工程里的现有元件的信息,经常使用proteus应该都知道它提供了LCD1602的仿真Demo工程。我们可以通过“File”-》“Open Sample Project”打开Sample工程。
在软件弹出的“Sample Projects Browser”的Category列表找到VSM for 8051,右侧Results显示出了几个LCD的工程,其中一个就是LCD1602的。
当然,我们也可以使用LCD关键词进行查找,这样能够更快的锁定LCD1602示例工程。
选择LCD1602工程后,点击“打开”。
在LCD1602工程中找到LCD1602元件,可以看到它的元件具体名称为LM016L,接着通过在Pick Devices检索LM016L关键词即可找到该器件。
先看懂液晶操作时序图(写操作:写命令、写数据)
1.读操作时序
2.写操作时序
由时序图可知,写操作时(包括写指令、写数据),RS=0;RW=0;再进行I/O口写操作,然后使能端口完成一次高脉冲(——高——低),这是液晶就会执行写操作的内容;
1602液晶模块内部的控制器共有11条控制指令,如表10-14所示:
思路:
1、控制液晶显示输出,需要对其进行写数据(写数据前,同样需要先告诉液晶你下一步要在哪里写,因此写数据前,要写命令先设定数据指针)
程序设计方式:
write_com();//写命令函数,
write_date();//写数据函数
2、由于要先进行初始化,(初始化实际就是对液晶写指令,告诉其工作方式等)因此初始化函数里面自然就需要调用写命令函数write_com();
程序结构如下:
int init()
{
EN = 0;
write_com(0X38);//设置16*2显示,5*7点阵,8位数据接口
write_com(0X0C);//设置开显示,不显示光标
write_com(0X06);//写一个字符时,整屏右移
write_com(0X01);//显示清零
return 0;
}
主函数部分程序结构:
int main()
{
init();//调用初始化函数
write_com(0x80);//调用写指令函数,设置写数据开始指针(第一行)
for(x=0;x《6;x++)//数据写入循环程序
{
write_date(table[x]);
delay(150);
}
write_com(0x80+0x40); ;//调用写指令函数,设置写数据开始指针(第二行)
for(x=0;x《17;x++)//数据写入循环程序
{
write_date(table1[x]);
delay(150);
}
while(1);
return 0;
}
完整程序如下:
1 #include《reg52.h》
2 int init(); //声明初始化函数
3 int write_com(unsigned char);//声明写命令函数
4 int write_date(unsigned char);//声明写数据函数
5 int delay(unsigned char);//声明延迟函数
6 unsigned char x;
7 sbit RS = P1^0;
8 sbit RW = P1^1;
9 sbit EN = P1^2;
10 unsigned char code table[]=“HELLO!”;
11 unsigned char code table1[]=“MY name is Terry!”;
12
13 int main(void)//主函数
14 {
15 init();
16 write_com(0x80);
17 for(x=0;x《6;x++)
18 {
19 write_date(table[x]);
20 delay(150);
21 }
22 write_com(0x80+0x40);
23 for(x=0;x《17;x++)
24 {
25 write_date(table1[x]);
26 delay(150);
27 }
28 while(1);
29 return 0;
30 }
31
32 int init()//初始化函数体
33 {
34 EN = 0;
35 write_com(0X38);//设置16*2显示,5*7点阵,8位数据接口
36 write_com(0X0C);//设置开显示,不显示光标
37 write_com(0X06);//写一个字符时,整屏右移
38 write_com(0X01);//显示清零
39 return 0;
40 }
41
42 int write_com(unsigned char com)//写命令的函数体
43 {
44 RS = 0;
45 RW = 0;
46 P0 = com;
47 delay(5);
48 EN = 1;
49 delay(5);
50 EN = 0;
51 return 0;
52 }
53
54 int write_date(unsigned char date)//写数据的函数体
55 {
56 RS = 1;
57 RW = 0;
58 P0 = date;
59 delay(5);
60 EN = 1;
61 delay(5);
62 EN = 0;
63 return 0;
64 }
65
66 int delay(unsigned char xms)
67 {
68 unsigned char x,y;
69 for(x=xms;x》0;x--)
70 for(y=110;y》0;y--);
71 return 0;
72 }
显示输出如下:
小编推荐阅读:
全部0条评论
快来发表一下你的评论吧 !