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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

Lcd.h頭文件下載-字符型液晶LCD的AVR單片機驅動程序頭文件

[復制鏈接]
跳轉到指定樓層
樓主
ID:71259 發表于 2014-12-30 12:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在代碼下方點復制代碼,然后另存到電腦磁盤即可下載.
  1. /*****************************************************************************

  2.       單    位:廣西民族大學物理與電子工程學院07物本班
  3.       文件名稱:Lcd.h
  4.       文件標識:_LCD_H_
  5.       摘    要:字符型液晶LCD的AVR單片機驅動程序頭文件
  6.       當前版本:V2.0
  7.       作    者: 【白 羽】
  8.       完成日期:2010年5月15日

  9. *****************************************************************************/
  10. #ifndef  _LCD_H_
  11. #define  _LCD_H_

  12. #include <BaiYuAvrKu\DataType.H>
  13. #include <BaiYuAvrKu\PORT.H>
  14. #include <BaiYuAvrKu\DELAY.H>

  15. /*****************************************************************************
  16. 編繹控制:以下條件編繹語句保證只有在正確配置IO端口的情況下,才引用并編繹本文件
  17. *****************************************************************************/
  18. #if !defined(LCD_PORT)&&!defined(LCD_RS)&&!defined(LCD_EN)&&!defined(LCD_DN)
  19.    #define  LCD_RS    P(PORTA,0)
  20.    #define  LCD_EN    P(PORTA,2)
  21.    #define  LCD_DN    P(PORTA,H)
  22. #elif defined(LCD_PORT)&&!defined(LCD_RS)&&!defined(LCD_EN)&&!defined(LCD_DN)
  23.    #define  LCD_RS    P(LCD_PORT,0)
  24.    #define  LCD_EN    P(LCD_PORT,2)
  25.    #define  LCD_DN    P(LCD_PORT,H)
  26. #elif defined(LCD_RS)&&defined(LCD_EN)&&defined(LCD_DN)&&!defined(LCD_PORT)
  27. #else
  28.    #error   您沒有正確配置lcd.h與AVR單片機的連接情況
  29. #endif


  30. /*****************************************************************************
  31. 整數顯示函數顯示的范圍定義:代碼優化之用,參見LcdShowNumber函數
  32. *****************************************************************************/
  33. #ifndef NumType
  34.    #define NumType  SINT32
  35. #endif

  36. /*****************************************************************************
  37. 常用控制命令
  38. *****************************************************************************/
  39. #define  LcdLocate(x,y)     LcdWriteCommand(0x40*(x)+(y)+0x3f)  //定位
  40. #define  LcdMyChar(pc,x)    LcdDefineChar(pc,0x40+(x)*8)        //自定義自符
  41. #define  LcdShowChar(data)  LcdWriteData(data)                  //顯示字符
  42. void LcdInit(void);                                             //液晶初始化
  43. void LcdWriteCommand(UINT8 command);                            //寫指令
  44. void LcdWriteData(UINT8 data);                                  //寫數據
  45. void LcdShowString(UINT8 *string);                              //顯示字符串
  46. void LcdShowNumber(NumType number,SINT8 n);                     //顯示整數

  47. /*****************************************************************************
  48. 向LCD控制器寄存器寫入指令或數據  底層函數  不包含RS控制線
  49. *****************************************************************************/
  50. #define H4BIT(X) ((PBITS(LCD_DN)==H)?((X)&0XF0):((X)>>4))       //高四位
  51. #define L4BIT(X) ((PBITS(LCD_DN)==L)?((X)&0X0F):((X)<<4))       //低四位
  52. void LcdSendByte(UINT8 byte)
  53. {
  54.    if(PBITS(LCD_DN) == W)                       //八線模式
  55.    {
  56.       PORT(LCD_DN) = byte;
  57.           SET(LCD_EN);
  58.           CLR(LCD_EN);
  59.    }
  60.    if((PBITS(LCD_DN)==H)||(PBITS(LCD_DN)==L))   //四線模式
  61.    {
  62.       PORT(LCD_DN) = (PORT(LCD_DN)&(~PBITS(LCD_DN))) | H4BIT(byte);
  63.           SET(LCD_EN);
  64.           CLR(LCD_EN);
  65.       PORT(LCD_DN) = (PORT(LCD_DN)&(~PBITS(LCD_DN))) | L4BIT(byte);
  66.           SET(LCD_EN);
  67.           CLR(LCD_EN);  
  68.    }
  69.    delay_us(40);                                //這里至少需要延時35us   
  70. }

  71. /*****************************************************************************
  72. 向LCD控制器寄存器寫入指令
  73. *****************************************************************************/
  74. void LcdWriteCommand(UINT8 command)
  75. {
  76.    CLR(LCD_RS);
  77.    LcdSendByte(command);
  78. }

  79. /*****************************************************************************
  80. 向LCD控制器寄存器寫入數據
  81. *****************************************************************************/
  82. void LcdWriteData(UINT8 data)
  83. {
  84.    SET(LCD_RS);
  85.    LcdSendByte(data);
  86. }

  87. /*****************************************************************************
  88. 自定義自符
  89. *****************************************************************************/
  90. void LcdDefineChar(const UINT8 *pc,UINT8 acg)
  91. {
  92.    UINT8 i;
  93.    LcdWriteCommand(acg);                        //設CGROM地址
  94.    for(i = 0; i < 8; i++)
  95.       LcdWriteData(*pc++);                      //寫入字模數據
  96. }

  97. /*****************************************************************************
  98. 顯示字符串
  99. *****************************************************************************/
  100. void LcdShowString(UINT8 *string)
  101. {
  102.    while(*string)
  103.       LcdShowChar(*string++);
  104. }

  105. /*****************************************************************************
  106. 格式顯示整數  n<0:左對齊  n>0:右對齊   可以實現形如"001"或"1  "的顯示哦!
  107. *****************************************************************************/
  108. #define Longth  ((sizeof(NumType)==1)?4:((sizeof(NumType)==2)?6:11))
  109. void LcdShowNumber(NumType number,SINT8 n)
  110. {
  111.    UINT8 array[Longth], *p, *temp, flag = 0;
  112.    if(n < 0)
  113.    {
  114.       n = -n;
  115.       flag = 1;
  116.       if(number == 0)
  117.       {
  118.          LcdShowChar('0');
  119.          flag += n - 1;
  120.          goto NULLs;                            //補空格
  121.       }
  122.    }
  123.    p = array;
  124.    array[n] = 0;
  125.    #ifndef  LCD_UINT                            //對有符號整數判斷正負值
  126.       if(number < 0)
  127.       {
  128.          number = -number;
  129.          LcdShowChar('-');
  130.          p++;
  131.       }
  132.    #endif
  133.    for(temp = &array[n-1]; temp >= p; temp--)
  134.    {
  135.       *temp = (UINT8)(number % 10) + '0';
  136.       number /= 10;
  137.    }
  138.    if(flag)                                     //取消左邊多余的零
  139.    {
  140.       while(*p == '0')
  141.       {
  142.          p++;
  143.          flag++;
  144.       }
  145.    }
  146.    LcdShowString(p);
  147. NULLs:                                          //在右邊補足空格
  148.    while(flag-- > 1)
  149.    {
  150.       LcdShowChar(' ');
  151.    }
  152. }

  153. /*****************************************************************************
  154. 液晶器件初始化
  155. *****************************************************************************/
  156. void LcdInit(void)
  157. {
  158.    OUT(LCD_RS);                                 //設RS輸出
  159.    OUT(LCD_EN);                                 //設EN輸出
  160.    OUTS(LCD_DN);                                //設DN輸出
  161.    LcdWriteCommand(PBITS(LCD_DN)==W?0X38:0X28); //設置顯示模式
  162.    LcdWriteCommand(PBITS(LCD_DN)==W?0X38:0X28);
  163.    LcdWriteCommand(0x0c);                       //開顯示
  164.    LcdWriteCommand(0x01);                       //軟復位
  165.    delay_us(1600);
  166. }



  167. #endif
復制代碼



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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品免高潮在线观看 | 91资源在线 | 成人小视频在线观看 | 成人免费在线播放 | 欧美一级免费看 | 亚洲国产aⅴ精品一区二区 免费观看av | 久久精品视频一区二区三区 | 午夜一级黄色片 | 国产日韩欧美激情 | 精品一区二区三区不卡 | 99热视 | 日韩精品一区二区三区 | av三级 | 中文字幕在线视频免费观看 | 精品一区二区三区在线观看 | 欧美福利久久 | 欧美精品在欧美一区二区少妇 | 国产激情在线播放 | 久草青青草 | 国产视频欧美 | 91精品久久久久久久久久小网站 | 操到爽| 亚洲精品视频免费观看 | 国产高清性xxxxxxxx | 欧美一级视频免费看 | 久久99精品久久久久久琪琪 | 亚洲人久久 | 国产激情亚洲 | 国产91在线播放 | 亚洲精品视频在线播放 | 久久久久成人精品 | 久久久免费电影 | 亚洲高清成人在线 | 理论片免费在线观看 | 9191av| 久久99久久98精品免观看软件 | 亚洲欧美在线视频 | 狠狠干狠狠操 | 久久亚洲天堂 | 国内自拍视频在线观看 | 日韩在线观看一区二区三区 |