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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5108|回復: 4
收起左側

C51單片機IIC接口PCF8574T模塊驅動程序 1602/2004LCD

  [復制鏈接]
ID:683123 發表于 2021-2-22 20:14 | 顯示全部樓層 |閱讀模式
借鑒ynzsc001用戶提供的前期代碼加以改善。親測89,12,15系列都可以用。幾個顯示函數比較方便。分享給大家
webwxgetmsgimg.jpg

單片機源程序如下:
  1. #include <reg52.h>
  2. #include "intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit SCL = P3^0;
  6. sbit SDA = P3^1;
  7. uchar i;

  8. char ADDR = 0x4E;    // PCF8574  T  
  9. //  char ADDR = 0x7e;    // PCF8574   AT  //如是后綴AT的用這個地址
  10. uchar code CGCODE[]={
  11. 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,//年0x00
  12. 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//月0x01
  13. 0x0F,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00,//日0x02
  14. 0x18,0x1B,0x04,0x04,0x04,0x04,0x04,0x03,//攝氏度0x03
  15. 0x1F,0x0A,0x0A,0x1F,0x0A,0x0A,0x0A,0x12,//開0x04
  16. 0x11,0x0A,0x1F,0x04,0x1F,0x04,0x0A,0x11,//關0x05
  17. 0x00,0x04,0x04,0x04,0x04,0x15,0x0E,0x04,//向下0x06
  18. 0x00,0x04,0x0E,0x15,0x04,0x04,0x04,0x04//向上0x07

  19. };

  20. //***************************** 延遲函數  ms ***********************************************
  21. void delay1(int y)   //
  22. {
  23.          ;
  24.         while(y--)
  25.         {
  26.         unsigned char a,b,c;
  27.         for(c=1;c>0;c--)
  28.         for(b=142;b>0;b--)
  29.         for(a=2;a>0;a--);
  30.         }
  31. }


  32. //******************************** IIC開始********************************************


  33. void IIC_start(void)
  34. {
  35.    SDA=1;
  36.     _nop_();
  37.     SCL=1;
  38.     _nop_();_nop_(); _nop_();_nop_();_nop_();
  39.     SDA=0;
  40.     _nop_();_nop_();_nop_();_nop_();_nop_();
  41.     SCL=0;
  42. }

  43. //********************************** IIC 寫字節 ******************************************


  44. void IIC_writeByte(char temp)
  45. {
  46.   char i;
  47.   for(i=0;i<8;i++)
  48.     {
  49.        SDA=(bit)(temp & 0x80) ;   //
  50.        temp <<=1;
  51.        _nop_();_nop_();
  52.        SCL=1;
  53.        _nop_();_nop_();_nop_();_nop_(); _nop_();
  54.        SCL=0;
  55.     }
  56.         _nop_(); _nop_();_nop_();_nop_();
  57.    SDA=1;
  58.    _nop_(); _nop_(); _nop_();_nop_();
  59.    SCL=1;
  60.          _nop_();_nop_();_nop_();
  61.    while(SDA);
  62.    _nop_();
  63.    SCL=0;
  64. }
  65. //******************************** 1602寫命令 ********************************************
  66. void LCD_write_command(char comm)
  67. {
  68.         char tmp;
  69.         IIC_start();         
  70.         IIC_writeByte(ADDR);   
  71.         tmp = comm & 0xF0;   
  72.         tmp |= 0x0C;         
  73.         IIC_writeByte(tmp);  
  74.         delay1(20);
  75.         tmp &= 0xFB;        //Make EN = 0
  76.         IIC_writeByte(tmp);
  77.         tmp = (comm & 0x0F) << 4 ;  
  78.         tmp |= 0x0C;        //RS = 0, RW = 0, EN = 1
  79.         IIC_writeByte(tmp);
  80.         delay1(20);
  81.         tmp &= 0xFB; // Make EN = 0
  82.         IIC_writeByte(tmp);

  83. }
  84. //******************************** 1602寫數據 ********************************************


  85. void LCD_write_data(char data1)
  86. {
  87.         char tmp;
  88.         IIC_start();
  89.         IIC_writeByte(ADDR);  
  90.         tmp = data1 & 0xF0;
  91.         tmp |= 0x0D; //RS = 0, RW = 0, EN = 1
  92.         IIC_writeByte(tmp);
  93.         delay1(20);
  94.         tmp &= 0xFB; //Make EN = 0
  95.         IIC_writeByte(tmp);  
  96.         tmp = (data1 & 0x0F) << 4 ;
  97.         tmp |= 0x0D; //RS = 0, RW = 0, EN = 1
  98.         IIC_writeByte(tmp);
  99.         delay1(20);
  100.         tmp &= 0xFB ; // Make EN = 0
  101.         IIC_writeByte(tmp);
  102. }


  103. //******************************** 1602初始化 ********************************************
  104. void UserDiy()
  105. {        
  106.    unsigned char i;
  107.    LCD_write_command(0x40);                        //設置CGRAM地址,自定義字符共8個
  108.    for(i=0;i<64;i++)
  109.    {
  110.      LCD_write_data(CGCODE[i]);
  111.    }                                
  112. }

  113. void Init_Lcd(void)
  114. {
  115.         LCD_write_command(0x33); //
  116.         delay1(50) ;
  117.         LCD_write_command(0x32); //
  118.         delay1(50) ;
  119.         LCD_write_command(0x28); //
  120.         delay1(50) ;
  121.         LCD_write_command(0x0C); //
  122.         delay1(50) ;  
  123.         LCD_write_command(0x06); //
  124.         delay1(50) ;
  125.         LCD_write_command(0x01); //
  126.         delay1(50) ;
  127.                                 UserDiy();
  128. }

  129. /*****************次方函數***********************/
  130. int NumberPow(int x,int y)
  131. {
  132.         unsigned char i;
  133.         int Result=1;
  134.         for(i=0;i<y;i++)
  135.         {
  136.                 Result*=x;
  137.         }
  138.         return Result;
  139. }

  140. //************************設置第幾行第幾列***************************
  141. void SetHL(unsigned x,unsigned y)
  142. {
  143.         if(x==1)
  144.                 LCD_write_command(0x80|(y-1));
  145.         if(x==2)
  146.                 LCD_write_command(0x80|(y-1)+0x40);
  147. }
  148. //**************************第幾行,第幾列,顯示數字,數字幾位************************
  149. void LCDShowNumber(unsigned char x,unsigned char y,unsigned int Number,unsigned char NumberLength)
  150. {
  151.         unsigned char i;
  152.         SetHL(x,y);
  153.         for(i=NumberLength;i>0;i--)
  154.         {
  155.                 LCD_write_data('0'+Number/NumberPow(10,i-1)%10);   /*加'0'是將數字轉換成ASCLL碼*/
  156.         }
  157. }
  158. //*************************************** 第x行第x列寫字串符 *************************************

  159. void LCDShowString(unsigned char x,unsigned char y,unsigned char String[])  /*unsigned char Char[]=unsigned char *Char*/
  160. {
  161.         unsigned char i;
  162.         SetHL(x,y);
  163.         for(i=0;String[i]!='\0';i++)    /*Char[]{"abc"}=Char[]{'a','b','c','\0'},'\0'為結束標志位*/
  164.         {
  165.                 LCD_write_data(String[i]);
  166.         }
  167. }

  168. /*第幾行第幾列顯示一個字符*/
  169. void LCDShowChar(unsigned char x,unsigned char y,unsigned char Char)
  170. {
  171.         SetHL(x,y);
  172.         LCD_write_data(Char);
  173. }

  174. /********************************主函數****************************/
  175. void main()
  176. {
  177.         Init_Lcd();
  178.         LCDShowChar(1,1,0x00);
  179.         LCDShowChar(1,2,0x01);
  180.         LCDShowChar(1,3,0x02);
  181.         LCDShowChar(1,4,0x03);
  182.         LCDShowChar(1,5,0x04);
  183.         LCDShowChar(1,6,0x05);
  184.         LCDShowChar(1,7,0x06);
  185.         LCDShowChar(1,8,0x07);
  186.         LCDShowString(1,9,"abcdefgf");
  187.         while(1)
  188.         {
  189.                 for(i=1;i<100;i++)
  190.                         {
  191.                          LCDShowNumber(1,2,i,3);
  192.                          delay1(1000);
  193.                         }
  194.                         i=0;
  195.         }
  196. }
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:683123 發表于 2021-2-22 20:17 | 顯示全部樓層
lCD2004第三行地址是0X14,第四行地址是0x54;
回復

使用道具 舉報

ID:947166 發表于 2021-7-5 17:15 | 顯示全部樓層
我用的stc12c5a60s2,沒效果,是要對延時進行調整么
回復

使用道具 舉報

ID:974414 發表于 2021-11-8 20:55 | 顯示全部樓層
感謝樓主分享程序,不過里面的delay1函數是毫秒級別,在包括初始化,寫cmd,寫dat的函數里面根本不用毫秒級的延遲,建議使用
void delay(u16 us)
{
        while(us--);
}
回復

使用道具 舉報

ID:546224 發表于 2022-7-24 09:35 | 顯示全部樓層
在STC15W408AS上親測可用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线不卡 | 日韩中文字幕 | 99精品免费在线观看 | 亚洲成人av一区二区 | 一道本不卡视频 | 国产女人第一次做爰毛片 | 国内在线视频 | 水蜜桃亚洲一二三四在线 | 中文字幕在线国产 | 欧洲视频一区 | 欧美国产精品 | 一区二区三区中文 | 欧美日韩中文在线观看 | 中文字幕国产精品 | 视频二区在线观看 | 午夜免费电影 | 精品国产一区久久 | 免费亚洲视频 | 91精品国产综合久久精品图片 | 亚洲精品视频在线观看视频 | 欧美炮房| 中文字幕亚洲一区 | 午夜精品一区二区三区在线观看 | 视频一区二区中文字幕 | 中文在线www | 超碰免费在 | 欧美精品在欧美一区二区 | 精品久久久久久久久久久下田 | 国产欧美精品一区二区 | 伊人网伊人网 | 欧美一级毛片久久99精品蜜桃 | 综合精品久久久 | www,黄色,com| 欧美色综合天天久久综合精品 | 九九热国产视频 | 日本大香伊一区二区三区 | 日本久久精品 | 日本午夜在线视频 | 久久日本 | 一区二区三区四区不卡 | 精品视频99|