久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

LCD1602的8個數據口,怎么定義到單片機引腳

查看數: 7174 | 評論數: 11 | 收藏 2
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2020-1-6 17:29

正文摘要:

我原來用STC89C52做的LCD1602顯示,現在想改成個頭小的STC15F204,哪位大神可以告知

回復

ID:608872 發表于 2020-1-8 15:23
angmall 發表于 2020-1-6 21:57
LCD1602還有一種使用高4位數據線的接法,可以減少單片機的負擔。
另外,RW的控制也并非是必用的,如果僅僅 ...

謝謝,顯示成功了。這個高4位的接法是不是要比8位的刷新慢呢?我原來8位的3秒刷新顯示,用4位的要12秒
ID:608872 發表于 2020-1-8 11:51
wulin 發表于 2020-1-6 21:19
給你寫一個異組端口驅動LCD示例

謝謝,順利移植成功
ID:130230 發表于 2020-1-8 11:38
接到一組IO口
ID:584814 發表于 2020-1-8 10:50
用1602的4+2線方案吧,省P口。
還可以花2塊錢淘個IIC接口,只要2線就可以,還可以控制背光。
以上線數不包括電源的2線。
ID:307020 發表于 2020-1-8 00:38
并行數據需要按順序接到1個完整的8位口上去
ID:475247 發表于 2020-1-7 10:55
P1與P3口都可以用,如果你要用外部中斷就只能用P1口,具體看你的要求來定
ID:444039 發表于 2020-1-6 22:47
隨便定義,定義后寫一個子程序,在子程序中對數據轉移至相應位的引腳中即可。
ID:160500 發表于 2020-1-6 22:01
這樣寫程序很麻煩的,要控制好LCD1602的控制信號,把數據分開到不同的IO口,讀取的時候還要合并數據,麻煩。
ID:155507 發表于 2020-1-6 21:57
LCD1602還有一種使用高4位數據線的接法,可以減少單片機的負擔。
另外,RW的控制也并非是必用的,如果僅僅是用于讀取LCD1602“忙”的狀態,就可以用稍事等待來代替。這樣一來,RW就可以直接接地,使LCD1602永遠處于寫入的狀態。

那么,LCD1602和單片機之間就僅僅需要6條線了,這就是LCD1602最簡潔的連接方法。



  1. /*
  2. 詳解一種LCD1602 的4線接法
  3. LCD1602還有一種使用高4位數據線的接法,可以減少單片機的負擔。
  4. 另外,RW的控制也并非是必用的,如果僅僅是用于讀取LCD1602“忙”的狀態,就可以用稍事等待來代替。這樣一來,RW就可以直接接地,使LCD1602永遠處于寫入的狀態。

  5. 那么,LCD1602和單片機之間就僅僅需要6條線了,這就是LCD1602最簡潔的連接方法。

  6. */
  7. #include <reg51.h>
  8. #include <stdio.h>

  9. #define Hi 1
  10. #define Lo 0

  11. #ifndef TRUE
  12. #define TRUE 1
  13. #endif

  14. #ifndef FALSE
  15. #define FALSE 0
  16. #endif

  17. #define RIGHT 0
  18. #define LEFT  1

  19. void init_lcd(void);      //LCD初始化
  20. //void write_high_lcd(unsigned char Val);
  21. void gotoxy_lcd(unsigned char col,unsigned char line);  //按指定坐標
  22. void putc_lcd(unsigned char byte);        //顯示一個字符
  23. void print_lcd(char String[]);            //顯示一串字符
  24. void delay_lcd(void);                     //LCD顯示延時
  25. void write_lcd(unsigned char Val);        //發送一個字符
  26. //void write_low_lcd(unsigned char Val);
  27. void write_command_lcd(char cmd);         // 寫入指令
  28. //void scroll_lcd(char enable, char dir);
  29. //void clear_lcd();
  30. void write_nibble_lcd(unsigned char Val);  //使用的是4位數據傳輸

  31. //數據口
  32. sbit RS = P3^7;  //LCD寄存器選擇
  33. sbit En = P3^6;  //LCD使能控制
  34. sbit D0 = P3^3; //由4位的接線是接到LCD口的高四位
  35. sbit D1 = P3^2;
  36. sbit D2 = P3^1;
  37. sbit D3 = P3^0;


  38. void delay (unsigned int m) //延時函數
  39. { while(--m); }

  40. void delay_lcd (void) //LCD顯示延時
  41. {
  42.         unsigned int del1, del2;
  43.         for(del1=0;del1<10;del1++)
  44.         {
  45.                 for(del2=0;del2<200;del2++);
  46.         }
  47. }


  48. void init_lcd (void)    //LCD初始化
  49. {
  50.         RS = Lo;  //寫入命令   0 選擇發送命令    1 選擇發送數據
  51.         write_nibble_lcd(0x03);        delay_lcd();
  52.         write_nibble_lcd(0x03);        delay_lcd();
  53.         write_nibble_lcd(0x02);        delay_lcd();
  54.         write_lcd(0x28);    //在四位線下的初始化
  55.         write_lcd(0x06);    //寫一個指針加1
  56.         write_lcd(0x0c);    //開顯示不顯示光標
  57.         write_lcd(0x01);    //清屏
  58. }  

  59. void gotoxy_lcd(unsigned char col,unsigned char line) //按指定坐標
  60. {
  61.         RS = Lo;  //寫入命令   0 選擇發送命令    1 選擇發送數據
  62.         if (line == 1)
  63.         write_lcd(0x7f+col);
  64.         if (line == 2)
  65.         write_lcd(0xbf+col);
  66. }

  67. void write_command_lcd(char cmd)  // 寫入指令
  68. {
  69.         RS = Lo;
  70.         write_lcd(cmd);
  71.    
  72. }

  73. void putc_lcd(unsigned char byte) //顯示一個字符
  74. {
  75.         RS = Hi;  //寫入數據   0 選擇發送命令    1 選擇發送數據
  76.         write_lcd(byte);
  77. }

  78. void print_lcd(char String[]) //顯示一串字符
  79. {
  80.         int i = 0;
  81.         do
  82.         {
  83.                 putc_lcd(String[i]);
  84.                 i++;
  85.         }
  86.         while(String[i] != '\0');
  87. }

  88. void write_lcd(unsigned char Val) //發送一個字符
  89. {
  90.         write_nibble_lcd(Val >> 4);
  91.         write_nibble_lcd(Val);
  92.         delay_lcd();
  93. }

  94. void write_nibble_lcd(unsigned char Val) //使用的是4位數據傳輸
  95. {
  96.         En = Hi;   //寫入時序
  97.         D0 = D1 = D2 = D3 = 0;
  98.         if(Val & 0x01)
  99.         D0 = 1;
  100.         if(Val & 0x02)
  101.         D1 = 1;
  102.         if(Val & 0x04)
  103.         D2 = 1;
  104.         if(Val & 0x08)
  105.         D3 = 1;
  106.         En = Lo;   //使能清零
  107. }


  108. void main() //主函數
  109. {
  110.        
  111.         init_lcd(); //LCD初始化
  112.         write_command_lcd(0x01);  //清屏
  113.         gotoxy_lcd(1,2);
  114.         print_lcd("Hello 4 Bit LCD");
  115.         gotoxy_lcd(1,1);
  116.         while(1)
  117.         {
  118.                 putc_lcd('a'); putc_lcd('b'); delay(65255);delay(65255);
  119.         }
  120. }

復制代碼





ID:213173 發表于 2020-1-6 21:19
給你寫一個異組端口驅動LCD示例


  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit LCD_RW=P2^5;
  5. sbit LCD_RS=P2^6;       
  6. sbit LCD_EN=P2^7;       

  7. sbit code0=P1^1;                                        //定義LCD數據端口
  8. sbit code1=P1^0;
  9. sbit code2=P3^7;
  10. sbit code3=P3^6;
  11. sbit code4=P3^3;
  12. sbit code5=P3^2;
  13. sbit code6=P3^1;
  14. sbit code7=P3^0;       

  15. uchar table1[]="0123456789ABCDEFG";                //第一行
  16. uchar table2[]="HIJKLMNOPQRSTUVWX";        //第二行


  17. void PX(uchar i)                                        //寫入8位數據
  18. {   
  19.     code0=i&0x01;i>>=1;       
  20.     code1=i&0x01;i>>=1;
  21.     code2=i&0x01;i>>=1;
  22.     code3=i&0x01;i>>=1;
  23.     code4=i&0x01;i>>=1;
  24.     code5=i&0x01;i>>=1;
  25.     code6=i&0x01;i>>=1;
  26.     code7=i&0x01;
  27. }
  28. /*******100us延時程序********/
  29. void delay(uint x)
  30. {
  31.         uint a,b;
  32.         for(a=x;a>0;a--)
  33.                 for(b=10;b>0;b--);
  34. }
  35. /*******液晶寫指令程序********/
  36. void write_com(uchar com)
  37. {
  38.         LCD_RW=0;
  39.         LCD_EN=0;        //初始設置LCD_EN低電平
  40.         LCD_RS=0;        //允許寫指令
  41.         PX(com);                //傳遞指令
  42.         delay(10);        //延時1ms
  43.         LCD_EN=1;        //使能寫入
  44.         delay(10);        //延時1ms
  45.         LCD_EN=0;        //低跳變執行
  46.        
  47. }
  48. /*******液晶寫數據程序********/
  49. void write_date(uchar date)
  50. {
  51.         LCD_RW=0;
  52.         LCD_RS=1;        //允許寫數據
  53.         PX(date);        //傳遞數據
  54.         delay(10);        //延時1ms
  55.         LCD_EN=1;        //使能寫入
  56.         delay(10);        //延時1ms
  57.         LCD_EN=0;        //低跳變執行
  58.        
  59. }
  60. /*******液晶初始化程序********/
  61. void init()                //設置顯示模式、
  62. {

  63.         write_com(0x38);//設置16*2顯示,5*7點陣,8位數據接口
  64.         write_com(0x01);//顯示清零,數據指針清零
  65.         write_com(0x0c);//設置開顯示,不顯光標
  66.         write_com(0x06);//設置寫一個字符后地址指針加1
  67.         write_com(0x80);//數據指針初始化,設置顯示初始位置
  68. }
  69. /**********************主程序*************************/
  70. void main()
  71. {
  72.         uchar i;                                        //定義循環變量
  73.         init();                                                //初始化程序
  74. /******用for循環按字節逐個寫********/
  75.         write_com(0x80);                        //數據指針第一行起始0x80位置
  76.         for(i=0;i<16;i++)                        //每循環一次寫一個字節數據
  77.         {
  78.                 write_date(table1[i]);        //寫一個字節數據               
  79.         }
  80.         write_com(0xc0);                        //數據指針第二行起始位置0x80+0x40=0xc0
  81.         for(i=0;i<16;i++)                        //每循環一次寫一個字節數據
  82.         {
  83.                 write_date(table2[i]);        //寫一個字節數據               
  84.         }
  85.         while(1);
  86. }
復制代碼



評分

參與人數 1黑幣 +15 收起 理由
m182892 + 15

查看全部評分

ID:403593 發表于 2020-1-6 19:47
這樣做不行,8位的并口,所有的數據線必須都在單片機的同一組IO口上

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国色| 国产综合久久 | 国产精品精品久久久 | 精品久久久久一区 | 国产视频久久久 | 亚洲精品天堂 | 精品亚洲一区二区三区四区五区 | 久久久久久影院 | 国产日韩视频 | 九九99精品 | 亚洲成人日韩 | 亚洲精品一级 | 精品视频在线免费观看 | 久草网址| 毛片免费观看视频 | 在线国产小视频 | 天天夜天天操 | 国产 欧美 日韩 一区 | 日日摸夜夜添夜夜添精品视频 | 成人精品在线观看 | 久艹av| 国产视频精品免费 | 国产精品一区二区三区四区 | 黄网站免费在线看 | 日韩在线精品视频 | 国产在线网站 | 午夜电影福利 | 伊人操| 国产高清一区 | 超碰激情 | 久久久精品网 | 色爱综合网 | 中文字幕在线观看国产 | 四虎影院免费在线播放 | 久久国产视频播放 | 日韩精品 电影一区 亚洲 | 精品视频一区二区三区在线观看 | 欧美日韩综合精品 | 成人在线观看免费爱爱 | 精品国产欧美一区二区 | 日韩av高清在线 |