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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

74HC595驅動LCD1602(主控芯片at328p)

[復制鏈接]
跳轉到指定樓層
樓主
ID:99624 發表于 2015-12-27 03:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LCD貌似很少用了 太小  這個作為串入并出的一個小實驗罷LCD1602的數據線有8個直接用單片機驅動很費IO口,所以用74hc595(3位控制線串入8位并出)芯片的輸出端連接到LCD1602的數據線上
之前試了幾次都沒有弄好 主要是對數據手冊理解有誤

代碼(電路連接方式很簡單,包含在其中):
  1. #include"Display.h"
  2. #include<avr/pgmspace.h>

  3. //unsigned char dpins[8]={A0,A1,A2,A3,A4,A5,8,9};

  4. void InitLCD1602();
  5. void WriteLCD1602Cmd(unsigned char cmd);
  6. void AllowInput74HC595();
  7. void  WriteByte74HC595(byte data);
  8. void AllowOutput74HC595();


  9. void InitDisplay()
  10. {
  11.   pinMode(_74HC595_RCK,OUTPUT);
  12.   pinMode(_74HC595_SCK,OUTPUT);
  13.   pinMode(_74HC595_SI,OUTPUT);
  14.   AllowInput74HC595();
  15.   WriteByte74HC595(0x00);
  16.   AllowOutput74HC595();
  17.   InitLCD1602();
  18.   
  19. }

  20. void InitLCD1602()
  21. {
  22.   pinMode(LCD1602_RS,OUTPUT);
  23.   pinMode(LCD1602_RW,OUTPUT);
  24.   pinMode(LCD1602_EN,OUTPUT);
  25.   digitalWrite(LCD1602_EN,HIGH);
  26.   digitalWrite(LCD1602_RW,HIGH);
  27.   digitalWrite(LCD1602_RS,HIGH);
  28.   /*
  29.   for(int i=0;i<8;i++)
  30.   {
  31.     pinMode(dpins[i],OUTPUT);
  32.     digitalWrite(dpins[i],LOW);
  33.   }*/
  34.   LCD1602_ENABLE;
  35.   delayMicroseconds(100);
  36.   WriteLCD1602Cmd(0x3c);//16*2行顯示,5*10點陣,8數據接口
  37.   delayMicroseconds(64);
  38.   WriteLCD1602Cmd(0x3c);//16*2行顯示,5*10點陣,8數據接口
  39.   delayMicroseconds(50);
  40.   WriteLCD1602Cmd(0x3c);
  41.   delay(20);
  42.   WriteLCD1602Cmd(0x06);//顯示模式,屏幕不動,字符后移
  43.   delayMicroseconds(20);
  44.   WriteLCD1602Cmd(0x0c); //屏幕開,光標關
  45.   delayMicroseconds(20);
  46.   WriteLCD1602Cmd(0x01);//清屏
  47.   delayMicroseconds(20);
  48. }

  49. void WriteLCD1602Cmd(unsigned char cmd)
  50. {
  51.   
  52.   LCD1602_RS_LOW; //rs=0:讀取/寫入指令模式
  53.   LCD1602_RW_WRITE;
  54.   
  55.   delayMicroseconds(1);
  56.   LCD1602_ENABLE;
  57.   delayMicroseconds(1);
  58.   
  59.   AllowInput74HC595();
  60.   WriteByte74HC595(cmd);
  61.   AllowOutput74HC595();
  62.   
  63.   //WriteDpins(cmd);
  64.   delayMicroseconds(1);
  65.   
  66.   LCD1602_DISABLE;
  67.   delayMicroseconds(1);
  68.   LCD1602_ENABLE;
  69.   delayMicroseconds(1);
  70. }


  71. void WriteLCD1602Data(unsigned char data)
  72. {

  73.   LCD1602_RS_HIGH;
  74.   LCD1602_RW_WRITE;
  75.   delayMicroseconds(1);
  76.   LCD1602_ENABLE;
  77.   delayMicroseconds(1);
  78.   
  79.   AllowInput74HC595();
  80.   WriteByte74HC595(data);
  81.   AllowOutput74HC595();
  82.   
  83.   //WriteDpins(data);
  84.   delayMicroseconds(1);
  85.   
  86.   LCD1602_DISABLE;
  87.   delayMicroseconds(1);
  88.   LCD1602_ENABLE;
  89.   delayMicroseconds(1);
  90. }


  91. void ClearLCD1602()
  92. {
  93.    int i;
  94.     WriteLCD1602Cmd(0x80); //寫數據指針地址,0位置顯示
  95.     for(i=0;i<16;i++)
  96.     {
  97.       WriteLCD1602Data(' ');
  98.       delay(5);
  99.     }
  100.     WriteLCD1602Cmd(0xC0); //第二行顯示
  101.     for(i=0;i<16;i++)
  102.     {
  103.       WriteLCD1602Data(' ');
  104.       delay(5);
  105.     }
  106.   

  107. }

  108. void Display(unsigned char row,char str[])
  109. {
  110.   int i;
  111.   if(row==1)
  112.   {
  113.     WriteLCD1602Cmd(0x80); //寫數據指針地址,0位置顯示
  114.   }
  115.   else
  116.   {
  117.     WriteLCD1602Cmd(0xC0); //第二行顯示
  118.   }
  119.   int len=strlen(str);
  120.   for(i=0;i<len;i++)
  121.   {
  122.       WriteLCD1602Data(str[i]);
  123.       delay(5);
  124.   }
  125. }


  126. void AllowInput74HC595()
  127. {
  128.   digitalWrite(_74HC595_RCK,LOW);//allow input 74HC595
  129. }

  130. void AllowOutput74HC595()
  131. {
  132.   digitalWrite(_74HC595_RCK,HIGH);//allow output 74HC595
  133. }


  134. void  WriteByte74HC595(unsigned char data)
  135. {
  136.   boolean pinState;
  137.   unsigned char i;
  138.   
  139.   digitalWrite(_74HC595_SI,LOW);
  140.   digitalWrite(_74HC595_SCK,LOW);
  141.   for(i=0;i<=7;i++)
  142.   {
  143.      digitalWrite(_74HC595_SCK,LOW);//before output 1bit must set SCK low
  144.      if(data &(0x01<<i))
  145.      {
  146.        pinState=HIGH;
  147.      }
  148.      else
  149.      {
  150.        pinState=LOW;
  151.      }
  152.      digitalWrite(_74HC595_SI,pinState);//write 1bit
  153.      digitalWrite(_74HC595_SCK,HIGH);//74HC595 receive when rising edge occur
  154.   }
  155.   digitalWrite(_74HC595_SCK,LOW); //stop 74HC595 input
  156. }

  157. /*
  158. void WriteDpins(unsigned char d)
  159. {
  160.   
  161.   int i;
  162.   for(i=0;i<8;i++)
  163.   {
  164.     if(d &(0x01<<i))
  165.     {
  166.       digitalWrite(dpins[i],HIGH);
  167.     }
  168.     else
  169.     {
  170.       digitalWrite(dpins[i],LOW);
  171.     }
  172.   }
  173. }*/
復制代碼





BTComm.zip

2.06 KB, 下載次數: 38, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久久久福利观看 | 久久香蕉网 | 欧美三级在线 | 成人看片在线观看 | 夜夜爽99久久国产综合精品女不卡 | 91久久精品一区二区二区 | 欧美aⅴ| www.久草.com| 在线看一区二区 | 美女视频一区二区三区 | 中文字幕一区二区三区乱码图片 | 一二三四在线视频观看社区 | 日韩在线视频一区 | 中文字幕第一页在线 | 日韩欧美中文字幕在线观看 | 欧美激情在线精品一区二区三区 | 欧美久久久久久久久中文字幕 | 欧美一区二区在线观看 | 亚洲天堂999 | 日韩三极 | 久久人人网 | www成年人视频 | 9色网站 | 国产精品久久久久久久久久 | 成人高潮片免费视频欧美 | 中国av在线免费观看 | 一级做a爰片性色毛片 | 亚洲免费在线观看av | 久久久久av | 日韩免费中文字幕 | 超碰人人人人 | 成人性生交大片免费看中文带字幕 | 国际精品久久 | 欧美久久一级特黄毛片 | 成人一区二区视频 | 欧美日韩高清一区 | 成人一区精品 | 成人黄色在线 | 最新日韩在线 | 91精品久久久久久久久 | av片免费|