找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1990|回復: 0
打印 上一主題 下一主題
收起左側

LCD1602學習—Proteus仿真(顯示操作)

[復制鏈接]
跳轉到指定樓層
樓主
ID:937858 發(fā)表于 2021-7-24 18:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
學習關鍵:先看懂液晶操作時序圖(寫操作:寫命令、寫數(shù)據(jù))
讀狀態(tài)
輸入
RS=L,R/W=H,E=H
輸出
D0—D7=狀態(tài)字
寫指令
輸入
RS=L,R/W=L,D0—D7=指令碼,E=高脈沖
輸出
讀數(shù)據(jù)
輸入
RS=H,R/W=H,E=H
輸出
D0—D7=數(shù)據(jù)
寫數(shù)據(jù)
輸入
RS=H,R/W=L,D0—D7=數(shù)據(jù),E=高脈沖
輸出


由時序圖可知,寫操作時(包括寫指令、寫數(shù)據(jù)),RS=0;RW=0;再進行I/O口寫操作,然后使能端口完成一次高脈沖(——高——低),這是液晶就會執(zhí)行寫操作的內(nèi)容;
1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表10-14所示:
序號
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清顯示
0
0
0
0
0
0
0
0
0
1
2
光標返回
0
0
0
0
0
0
0
0
1
*
3
置輸入模式
0
0
0
0
0
0
0
1
I/D
S
4
顯示開/關控制
0
0
0
0
0
0
1
D
C
B
5
光標或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符發(fā)生存貯器地址
0
0
0
1
字符發(fā)生存貯器地址
8
置數(shù)據(jù)存貯器地址
0
0
1
顯示數(shù)據(jù)存貯器地址
9
讀忙標志或地址
0
1
BF
計數(shù)器地址
10
寫數(shù)到CGRAM或DDRAM)
1
0
要寫的數(shù)據(jù)內(nèi)容
11
從CGRAM或DDRAM讀數(shù)
1
1
讀出的數(shù)據(jù)內(nèi)容


思路:

1、控制液晶顯示輸出,需要對其進行寫數(shù)據(jù)(寫數(shù)據(jù)前,同樣需要先告訴液晶你下一步要在哪里寫,因此寫數(shù)據(jù)前,要寫命令先設定數(shù)據(jù)指針)
程序設計方式:
write_com();//寫命令函數(shù),
write_date();//寫數(shù)據(jù)函數(shù)

2、由于要先進行初始化,(初始化實際就是對液晶寫指令,告訴其工作方式等)因此初始化函數(shù)里面自然就需要調(diào)用寫命令函數(shù)write_com();
程序結構如下:
int init()
{
  EN = 0;
  write_com(0X38);//設置16*2顯示,5*7點陣,8位數(shù)據(jù)接口
  write_com(0X0C);//設置開顯示,不顯示光標
  write_com(0X06);//寫一個字符時,整屏右移
  write_com(0X01);//顯示清零
  return 0;
} 
主函數(shù)部分程序結構:
int main()
{
  init();//調(diào)用初始化函數(shù)
  write_com(0x80);//調(diào)用寫指令函數(shù),設置寫數(shù)據(jù)開始指針(第一行)
  for(x=0;x<6;x++)//數(shù)據(jù)寫入循環(huán)程序
  {
    write_date(table[x]);
    delay(150);
  }
  write_com(0x80+0x40); ;//調(diào)用寫指令函數(shù),設置寫數(shù)據(jù)開始指針(第二行)
  for(x=0;x<17;x++)//數(shù)據(jù)寫入循環(huán)程序
  {
    write_date(table1[x]);
    delay(150);
  }
  while(1);
return 0;
}

完整程序如下:
1 #include<reg52.h> 2     int init();    //聲明初始化函數(shù) 3     int write_com(unsigned char);//聲明寫命令函數(shù) 4     int write_date(unsigned char);//聲明寫數(shù)據(jù)函數(shù) 5     int delay(unsigned char);//聲明延遲函數(shù) 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)//主函數(shù)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()//初始化函數(shù)體33 {34     EN = 0;35     write_com(0X38);//設置16*2顯示,5*7點陣,8位數(shù)據(jù)接口36     write_com(0X0C);//設置開顯示,不顯示光標37     write_com(0X06);//寫一個字符時,整屏右移38     write_com(0X01);//顯示清零39     return 0;40 }41 42 int write_com(unsigned char com)//寫命令的函數(shù)體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)//寫數(shù)據(jù)的函數(shù)體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 }
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表