历史上的今天
今天是: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
史海拾趣
|
提起标致品牌给人的印象,相信很多人都会不约而同地想到其出色的操控性。确实,从低端的206,到中、高端的307、407,其出色的操控性能一直为人们所津津乐道。拥有如此出色技术功底的标致汽车,自然也将这种运动精髓引入到了607的身上。 607搭 ...… 查看全部问答> |
|
我在网上下了一个简单的C#控制GPIO的演示程序,Project type 选的是c#\\smart device\\win ce5.0,模板选的是device application,可是程序编译下来出错了,错误信息部分如下: Error 4 Th ...… 查看全部问答> |
|
小弟想学习usb 2.0 驱动开发,帮我推荐一个学习板吧,谢谢。 由于种种原因,分析了自己的发展方向,决定往驱动方面发展,各位高手能不能帮我推荐一个适合初学者的开发板? 需求:1.usb 2.0 的开发板,用于驱动开发 学习 2.写程序工具 (1)推荐一款编程 ...… 查看全部问答> |
|
目前只对BMP格式文件进行总结 想在我开发的项目上加几个图片 结果我们公司测试用的PDA怎么也不显示图片~~~很纳闷 找了好多格式转换器 但是还是不行 无意间找到一个PICTURE的例子 里面有一张图片是可以显示出来的 然后进 ...… 查看全部问答> |




