亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8187|回復(fù): 11
收起左側(cè)

LCD1602的8個(gè)數(shù)據(jù)口,怎么定義到單片機(jī)引腳

  [復(fù)制鏈接]
ID:608872 發(fā)表于 2020-1-6 17:29 | 顯示全部樓層 |閱讀模式
我原來(lái)用STC89C52做的LCD1602顯示,現(xiàn)在想改成個(gè)頭小的STC15F204,哪位大神可以告知




現(xiàn)在想把引腳改成這樣,應(yīng)該怎么寫(xiě)程序呢

現(xiàn)在想把引腳改成這樣,應(yīng)該怎么寫(xiě)程序呢

原來(lái)直接定義到P0口 #define lcddata P0

原來(lái)直接定義到P0口    #define lcddata P0
回復(fù)

使用道具 舉報(bào)

ID:403593 發(fā)表于 2020-1-6 19:47 | 顯示全部樓層
這樣做不行,8位的并口,所有的數(shù)據(jù)線必須都在單片機(jī)的同一組IO口上
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-1-6 21:19 | 顯示全部樓層
給你寫(xiě)一個(gè)異組端口驅(qū)動(dòng)LCD示例
無(wú)標(biāo)題.jpg

  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數(shù)據(jù)端口
  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)                                        //寫(xiě)入8位數(shù)據(jù)
  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延時(shí)程序********/
  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. /*******液晶寫(xiě)指令程序********/
  36. void write_com(uchar com)
  37. {
  38.         LCD_RW=0;
  39.         LCD_EN=0;        //初始設(shè)置LCD_EN低電平
  40.         LCD_RS=0;        //允許寫(xiě)指令
  41.         PX(com);                //傳遞指令
  42.         delay(10);        //延時(shí)1ms
  43.         LCD_EN=1;        //使能寫(xiě)入
  44.         delay(10);        //延時(shí)1ms
  45.         LCD_EN=0;        //低跳變執(zhí)行
  46.        
  47. }
  48. /*******液晶寫(xiě)數(shù)據(jù)程序********/
  49. void write_date(uchar date)
  50. {
  51.         LCD_RW=0;
  52.         LCD_RS=1;        //允許寫(xiě)數(shù)據(jù)
  53.         PX(date);        //傳遞數(shù)據(jù)
  54.         delay(10);        //延時(shí)1ms
  55.         LCD_EN=1;        //使能寫(xiě)入
  56.         delay(10);        //延時(shí)1ms
  57.         LCD_EN=0;        //低跳變執(zhí)行
  58.        
  59. }
  60. /*******液晶初始化程序********/
  61. void init()                //設(shè)置顯示模式、
  62. {

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



評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
m182892 + 15

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 2020-1-6 21:57 | 顯示全部樓層
LCD1602還有一種使用高4位數(shù)據(jù)線的接法,可以減少單片機(jī)的負(fù)擔(dān)。
另外,RW的控制也并非是必用的,如果僅僅是用于讀取LCD1602“忙”的狀態(tài),就可以用稍事等待來(lái)代替。這樣一來(lái),RW就可以直接接地,使LCD1602永遠(yuǎn)處于寫(xiě)入的狀態(tài)。

那么,LCD1602和單片機(jī)之間就僅僅需要6條線了,這就是LCD1602最簡(jiǎn)潔的連接方法。
NewLCD1602_4Bit6WireProject.jpg


  1. /*
  2. 詳解一種LCD1602 的4線接法
  3. LCD1602還有一種使用高4位數(shù)據(jù)線的接法,可以減少單片機(jī)的負(fù)擔(dān)。
  4. 另外,RW的控制也并非是必用的,如果僅僅是用于讀取LCD1602“忙”的狀態(tài),就可以用稍事等待來(lái)代替。這樣一來(lái),RW就可以直接接地,使LCD1602永遠(yuǎn)處于寫(xiě)入的狀態(tài)。

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

  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);  //按指定坐標(biāo)
  22. void putc_lcd(unsigned char byte);        //顯示一個(gè)字符
  23. void print_lcd(char String[]);            //顯示一串字符
  24. void delay_lcd(void);                     //LCD顯示延時(shí)
  25. void write_lcd(unsigned char Val);        //發(fā)送一個(gè)字符
  26. //void write_low_lcd(unsigned char Val);
  27. void write_command_lcd(char cmd);         // 寫(xiě)入指令
  28. //void scroll_lcd(char enable, char dir);
  29. //void clear_lcd();
  30. void write_nibble_lcd(unsigned char Val);  //使用的是4位數(shù)據(jù)傳輸

  31. //數(shù)據(jù)口
  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) //延時(shí)函數(shù)
  39. { while(--m); }

  40. void delay_lcd (void) //LCD顯示延時(shí)
  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;  //寫(xiě)入命令   0 選擇發(fā)送命令    1 選擇發(fā)送數(shù)據(jù)
  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);    //寫(xiě)一個(gè)指針加1
  56.         write_lcd(0x0c);    //開(kāi)顯示不顯示光標(biāo)
  57.         write_lcd(0x01);    //清屏
  58. }  

  59. void gotoxy_lcd(unsigned char col,unsigned char line) //按指定坐標(biāo)
  60. {
  61.         RS = Lo;  //寫(xiě)入命令   0 選擇發(fā)送命令    1 選擇發(fā)送數(shù)據(jù)
  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)  // 寫(xiě)入指令
  68. {
  69.         RS = Lo;
  70.         write_lcd(cmd);
  71.    
  72. }

  73. void putc_lcd(unsigned char byte) //顯示一個(gè)字符
  74. {
  75.         RS = Hi;  //寫(xiě)入數(shù)據(jù)   0 選擇發(fā)送命令    1 選擇發(fā)送數(shù)據(jù)
  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) //發(fā)送一個(gè)字符
  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位數(shù)據(jù)傳輸
  95. {
  96.         En = Hi;   //寫(xiě)入時(shí)序
  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() //主函數(shù)
  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. }

復(fù)制代碼





回復(fù)

使用道具 舉報(bào)

ID:160500 發(fā)表于 2020-1-6 22:01 | 顯示全部樓層
這樣寫(xiě)程序很麻煩的,要控制好LCD1602的控制信號(hào),把數(shù)據(jù)分開(kāi)到不同的IO口,讀取的時(shí)候還要合并數(shù)據(jù),麻煩。
回復(fù)

使用道具 舉報(bào)

ID:444039 發(fā)表于 2020-1-6 22:47 | 顯示全部樓層
隨便定義,定義后寫(xiě)一個(gè)子程序,在子程序中對(duì)數(shù)據(jù)轉(zhuǎn)移至相應(yīng)位的引腳中即可。
回復(fù)

使用道具 舉報(bào)

ID:475247 發(fā)表于 2020-1-7 10:55 | 顯示全部樓層
P1與P3口都可以用,如果你要用外部中斷就只能用P1口,具體看你的要求來(lái)定
回復(fù)

使用道具 舉報(bào)

ID:307020 發(fā)表于 2020-1-8 00:38 | 顯示全部樓層
并行數(shù)據(jù)需要按順序接到1個(gè)完整的8位口上去
回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2020-1-8 10:50 | 顯示全部樓層
用1602的4+2線方案吧,省P口。
還可以花2塊錢淘個(gè)IIC接口,只要2線就可以,還可以控制背光。
以上線數(shù)不包括電源的2線。
回復(fù)

使用道具 舉報(bào)

ID:130230 發(fā)表于 2020-1-8 11:38 | 顯示全部樓層
接到一組IO口
回復(fù)

使用道具 舉報(bào)

ID:608872 發(fā)表于 2020-1-8 11:51 | 顯示全部樓層
wulin 發(fā)表于 2020-1-6 21:19
給你寫(xiě)一個(gè)異組端口驅(qū)動(dòng)LCD示例

謝謝,順利移植成功
回復(fù)

使用道具 舉報(bào)

ID:608872 發(fā)表于 2020-1-8 15:23 | 顯示全部樓層
angmall 發(fā)表于 2020-1-6 21:57
LCD1602還有一種使用高4位數(shù)據(jù)線的接法,可以減少單片機(jī)的負(fù)擔(dān)。
另外,RW的控制也并非是必用的,如果僅僅 ...

謝謝,顯示成功了。這個(gè)高4位的接法是不是要比8位的刷新慢呢?我原來(lái)8位的3秒刷新顯示,用4位的要12秒
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表