找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5823|回复: 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 单片机教程网

快速回复 返回顶部 返回列表