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

標題: 74HC595驅動LCD1602(主控芯片at328p) [打印本頁]

作者: 51黑ren    時間: 2015-12-27 03:10
標題: 74HC595驅動LCD1602(主控芯片at328p)
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






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品永久 | 盗摄精品av一区二区三区 | 久久精品亚洲 | 精品不卡 | 亚洲欧美中文字幕在线观看 | 国产一级视频免费播放 | 欧美日韩福利视频 | 中国一级大黄大片 | 91污在线 | 国产精品福利网 | 国产免费一区 | 久久久久国产精品免费免费搜索 | 国产精品久久久久久久免费观看 | 成人在线精品视频 | 99在线视频观看 | 精品美女视频在线观看免费软件 | 亚洲一区二区免费视频 | 国产欧美精品一区二区三区 | 欧美极品在线视频 | 久久人人爽人人爽 | 欧美片网站免费 | 欧美在线亚洲 | 午夜一区二区三区视频 | 在线一区二区观看 | 日韩中文字幕一区二区 | 精品一级 | 精品久久久久久亚洲综合网站 | 男人天堂网址 | 亚洲高清一区二区三区 | 日韩一区二区三区四区五区六区 | 欧美日韩视频在线播放 | 欧美国产中文字幕 | 欧美黄色大片在线观看 | 国产精品国产精品国产专区不卡 | 在线精品一区二区 | 五月综合久久 | 一区二区三区中文字幕 | 久久久久国产一区二区三区四区 | 亚洲不卡一 | 精品久久久久久久久久久久久久 | 在线欧美视频 |