历史上的今天
返回首页

历史上的今天

今天是:2024年11月25日(星期一)

正在发生

2019年11月25日 | Lcd.h头文件下载-字符型液晶LCD的AVR单片机驱动程序头文件

2019-11-25 来源:51hei

/*****************************************************************************


      单    位:广西民族大学物理与电子工程学院07物本班

      文件名称:Lcd.h

      文件标识:_LCD_H_

      摘    要:字符型液晶LCD的AVR单片机驱动程序头文件

      当前版本:V2.0


*****************************************************************************/

#ifndef  _LCD_H_

#define  _LCD_H_


#include

#include

#include


/*****************************************************************************

编绎控制:以下条件编绎语句保证只有在正确配置IO端口的情况下,才引用并编绎本文件

*****************************************************************************/

#if !defined(LCD_PORT)&&!defined(LCD_RS)&&!defined(LCD_EN)&&!defined(LCD_DN)

   #define  LCD_RS    P(PORTA,0)

   #define  LCD_EN    P(PORTA,2)

   #define  LCD_DN    P(PORTA,H)

#elif defined(LCD_PORT)&&!defined(LCD_RS)&&!defined(LCD_EN)&&!defined(LCD_DN)

   #define  LCD_RS    P(LCD_PORT,0)

   #define  LCD_EN    P(LCD_PORT,2)

   #define  LCD_DN    P(LCD_PORT,H)

#elif defined(LCD_RS)&&defined(LCD_EN)&&defined(LCD_DN)&&!defined(LCD_PORT)

#else

   #error   您没有正确配置lcd.h与AVR单片机的连接情况

#endif



/*****************************************************************************

整数显示函数显示的范围定义:代码优化之用,参见LcdShowNumber函数

*****************************************************************************/

#ifndef NumType

   #define NumType  SINT32

#endif


/*****************************************************************************

常用控制命令

*****************************************************************************/

#define  LcdLocate(x,y)     LcdWriteCommand(0x40*(x)+(y)+0x3f)  //定位

#define  LcdMyChar(pc,x)    LcdDefineChar(pc,0x40+(x)*8)        //自定义自符

#define  LcdShowChar(data)  LcdWriteData(data)                  //显示字符

void LcdInit(void);                                             //液晶初始化

void LcdWriteCommand(UINT8 command);                            //写指令

void LcdWriteData(UINT8 data);                                  //写数据

void LcdShowString(UINT8 *string);                              //显示字符串

void LcdShowNumber(NumType number,SINT8 n);                     //显示整数


/*****************************************************************************

向LCD控制器寄存器写入指令或数据  底层函数  不包含RS控制线

*****************************************************************************/

#define H4BIT(X) ((PBITS(LCD_DN)==H)?((X)&0XF0):((X)>>4))       //高四位

#define L4BIT(X) ((PBITS(LCD_DN)==L)?((X)&0X0F):((X)<<4))       //低四位

void LcdSendByte(UINT8 byte)

{

   if(PBITS(LCD_DN) == W)                       //八线模式

   {

      PORT(LCD_DN) = byte;

          SET(LCD_EN);

          CLR(LCD_EN);

   }

   if((PBITS(LCD_DN)==H)||(PBITS(LCD_DN)==L))   //四线模式

   {

      PORT(LCD_DN) = (PORT(LCD_DN)&(~PBITS(LCD_DN))) | H4BIT(byte);

          SET(LCD_EN);

          CLR(LCD_EN);

      PORT(LCD_DN) = (PORT(LCD_DN)&(~PBITS(LCD_DN))) | L4BIT(byte);

          SET(LCD_EN);

          CLR(LCD_EN);  

   }

   delay_us(40);                                //这里至少需要延时35us   

}


/*****************************************************************************

向LCD控制器寄存器写入指令

*****************************************************************************/

void LcdWriteCommand(UINT8 command)

{

   CLR(LCD_RS);

   LcdSendByte(command);

}


/*****************************************************************************

向LCD控制器寄存器写入数据

*****************************************************************************/

void LcdWriteData(UINT8 data)

{

   SET(LCD_RS);

   LcdSendByte(data);

}


/*****************************************************************************

自定义自符

*****************************************************************************/

void LcdDefineChar(const UINT8 *pc,UINT8 acg)

{

   UINT8 i;

   LcdWriteCommand(acg);                        //设CGROM地址

   for(i = 0; i < 8; i++)

      LcdWriteData(*pc++);                      //写入字模数据

}


/*****************************************************************************

显示字符串

*****************************************************************************/

void LcdShowString(UINT8 *string)

{

   while(*string)

      LcdShowChar(*string++);

}


/*****************************************************************************

格式显示整数  n<0:左对齐  n>0:右对齐   可以实现形如"001"或"1  "的显示哦!

*****************************************************************************/

#define Longth  ((sizeof(NumType)==1)?4:((sizeof(NumType)==2)?6:11))

void LcdShowNumber(NumType number,SINT8 n)

{

   UINT8 array[Longth], *p, *temp, flag = 0;

   if(n < 0)

   {

      n = -n;

      flag = 1;

      if(number == 0)

      {

         LcdShowChar('0');

         flag += n - 1;

         goto NULLs;                            //补空格

      }

   }

   p = array;

   array[n] = 0;

   #ifndef  LCD_UINT                            //对有符号整数判断正负值

      if(number < 0)

      {

         number = -number;

         LcdShowChar('-');

         p++;

      }

   #endif

   for(temp = &array[n-1]; temp >= p; temp--)

   {

      *temp = (UINT8)(number % 10) + '0';

      number /= 10;

   }

   if(flag)                                     //取消左边多余的零

   {

      while(*p == '0')

      {

         p++;

         flag++;

      }

   }

   LcdShowString(p);

NULLs:                                          //在右边补足空格

   while(flag-- > 1)

   {

      LcdShowChar(' ');

   }

}


/*****************************************************************************

液晶器件初始化

*****************************************************************************/

void LcdInit(void)

{

   OUT(LCD_RS);                                 //设RS输出

   OUT(LCD_EN);                                 //设EN输出

   OUTS(LCD_DN);                                //设DN输出

   LcdWriteCommand(PBITS(LCD_DN)==W?0X38:0X28); //设置显示模式

   LcdWriteCommand(PBITS(LCD_DN)==W?0X38:0X28);

   LcdWriteCommand(0x0c);                       //开显示

   LcdWriteCommand(0x01);                       //软复位

   delay_us(1600);

}




#endif


推荐阅读

史海拾趣

Capital Advanced Technologies公司的发展小趣事

随着产品技术的不断升级和完善,CAT开始积极寻求市场拓展的机会。公司不仅在国内市场取得了显著的成绩,还逐步打开了国际市场的大门。CAT的产品远销海外,赢得了全球客户的信赖和好评。同时,公司还注重品牌塑造,通过参加国际电子展会、举办技术研讨会等方式,不断提升品牌知名度和影响力。

Galaxy Microelectronics公司的发展小趣事

江苏飞翼智能科技有限公司在无人机航模领域也有着深厚的积累。公司不仅自己购买零件组装各类航模,还积极参与国内航模比赛,凭借良好的飞机性能和一流的操控技术取得了不俗的成绩。尤其是涡喷航模,作为中高级的航模产品,其高难度的特技动作展示了飞翼智能在无人机技术方面的深厚功底。这些经验积累和技术创新为飞翼智能向无人机应用型企业转型奠定了坚实基础。

Crydom公司的发展小趣事

深圳市飞翼科技有限公司自2006年成立以来,一直致力于模拟与数字MCU混合芯片领域的研究、设计和开发应用。公司主攻电容式触摸感应按键芯片设计,凭借多项独有的专利技术,成功突破了行业内的技术难点。经过多年的努力,飞翼科技已成为该应用领域中技术最全面、市场份额最大的公司之一。其电容式触摸感应芯片广泛应用于各类电子产品中,为用户带来了更加便捷、智能的交互体验。

Hirosugi-Keiki公司的发展小趣事

飞翼科技(FEIYI)在多个领域的发展均体现了其创新驱动的发展战略。无论是无人机技术的智能化应用,还是绿色矿山技术的创新突破,亦或是电容式触摸感应芯片的市场领先,都离不开公司对技术创新的不断追求。飞翼科技积极与高校、研究机构及行业专家开展合作,集聚顶尖科技人才,共同推动技术进步和产业升级。同时,公司还注重知识产权保护,拥有国家专利技术300余项,为企业的持续发展提供了有力保障。通过这些努力,飞翼科技在电子行业中不断崛起,成为行业内的佼佼者。

风华(FH)公司的发展小趣事

随着光伏胶膜业务的快速发展,福斯特面临着仓库管理和存储的巨大挑战。光伏胶膜成品体积大、重量重,传统人工作业方式效率低下且劳动强度大。为了应对这一挑战,福斯特引入了智能仓储系统,与亨通智能合作打造自动化立库系统。该系统通过堆垛机、RGV、缠绕膜等设备的配合使用,实现了库内产品的全面自动化搬运、存储与管理。这不仅大大提高了仓库的运营管理效率,还确保了产品的先进先出和库存盘点的准确性。这一智能化改造不仅提升了福斯特自身的竞争力,也为整个光伏行业的数字化转型树立了标杆。

和芯润德(CoreChips)公司的发展小趣事

和芯润德深知产品质量对于企业发展的重要性。因此,公司建立了严格的质量管理体系,从原材料采购到生产过程的每一个环节都进行严格把关。此外,公司还引进了先进的检测设备和技术手段,确保产品的可靠性和稳定性。这种对质量的严格把控使和芯润德的产品在市场上赢得了良好的口碑。

问答坊 | AI 解惑

平稳而自如的驾乘607

提起标致品牌给人的印象,相信很多人都会不约而同地想到其出色的操控性。确实,从低端的206,到中、高端的307、407,其出色的操控性能一直为人们所津津乐道。拥有如此出色技术功底的标致汽车,自然也将这种运动精髓引入到了607的身上。   607搭 ...…

查看全部问答>

Proteus元件库中文对照

嘿嘿!  这个好像也没人发过哦!…

查看全部问答>

电源可能出什么呀?

本帖最后由 paulhyde 于 2014-9-15 09:43 编辑  …

查看全部问答>

请教高手一个程序编译问题!

我在网上下了一个简单的C#控制GPIO的演示程序,Project type 选的是c#\\smart device\\win ce5.0,模板选的是device application,可是程序编译下来出错了,错误信息部分如下: Error        4        Th ...…

查看全部问答>

小弟想学习usb 2.0 驱动开发,帮我推荐一个学习板吧,谢谢。

  由于种种原因,分析了自己的发展方向,决定往驱动方面发展,各位高手能不能帮我推荐一个适合初学者的开发板? 需求:1.usb 2.0 的开发板,用于驱动开发 学习       2.写程序工具   (1)推荐一款编程 ...…

查看全部问答>

PDA上可显示的图片的主要参数::::如下

目前只对BMP格式文件进行总结    想在我开发的项目上加几个图片 结果我们公司测试用的PDA怎么也不显示图片~~~很纳闷 找了好多格式转换器 但是还是不行 无意间找到一个PICTURE的例子 里面有一张图片是可以显示出来的  然后进 ...…

查看全部问答>

透明

  把一个位图的背景色设置成透明,怎么做呀?谢谢?…

查看全部问答>

这次电设拿全国一等奖的是不是都能去北京领奖啊?

本帖最后由 paulhyde 于 2014-9-15 03:46 编辑 这次电设拿全国一等奖的是不是都能去北京领奖啊?  …

查看全部问答>