icc avr LCD1602显示屏程序

发布者:火箭飞人最新更新时间:2018-01-15 来源: 21IC中国电子网关键字:icc  avr  LCD1602  显示屏 手机看文章 扫描二维码
随时随地手机看文章

入口参数说明:


// control port

//#define SET_RS sbi(PORTB,5)

//#define CLR_RS cbi(PORTB,5)

//#define OUT_RS sbi(DDRB,5)

//#define SET_RW sbi(PORTB,6)

//#define CLR_RW cbi(PORTB,6)

//#define OUT_RW sbi(DDRB,6)

//#define SET_E sbi(PORTB,7)

//#define CLR_E cbi(PORTB,7)

//#define OUT_E sbi(DDRB,7)

// data port

//#define SET_D4 sbi(PORTD,4)

//#define CLR_D4 cbi(PORTD,4)

//#define OUT_D4 sbi(DDRD,4)

//#define SET_D5 sbi(PORTD,5)

//#define CLR_D5 cbi(PORTD,5)

//#define OUT_D5 sbi(DDRD,5)

//#define SET_D6 sbi(PORTD,6)

//#define CLR_D6 cbi(PORTD,6)

//#define OUT_D6 sbi(DDRD,6)

//#define SET_D7 sbi(PORTD,7)

//#define CLR_D7 cbi(PORTD,7)

//#define OUT_D7 sbi(DDRD,7)

// busy port

//#define GET_BF gbi(PIND,7)

//#define OUT_BF sbi(DDRD,7)

//#define IN_BF cbi(DDRD,7)

----------------------------------------------------------------------

接口定义:

LCD1602 ATmega16

1.GND -------- GND

2.VCC -------- VCC

3.V0 -------- V0

4.RS -------- 由外部程序定义

5.R/W -------- 由外部程序定义

6.E -------- 由外部程序定义

7.D0 -------- NC

8.D1 -------- NC

9.D2 -------- NC

10.D3 -------- NC

11.D4 -------- 由外部程序定义

12.D5 -------- 由外部程序定义

13.D6 -------- 由外部程序定义

14.D7 -------- 由外部程序定义

15.LED+ -------- VCC

16.LED- -------- GND

说明:

(1)使用ATmega16的7根IO口操作LCD1602

(2)该程序的优点是:7根IO可任意定义,不需分布在固定的一组PORT口上

(3)该程序的缺点是:IO定义的写法较为繁琐

----------------------------------------------------------------------

待定参数说明:

//#define DELAY() {_nop_();_nop_();_nop_();}

----------------------------------------------------------------------

对外变量说明:

----------------------------------------------------------------------

对外函数说明:

----------------------------------------------------------------------

10101010101010101010101010101010101010101010101010101010101010101010*/

#ifndef LCD1602_H

#define LCD1602_H

#include "D:\ICC_H\CmmICC.H"

/* 待定参数 */

#define DELAY() {NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();}

/* 不考虑移植性的写法 */

//uint8 bdata bdat;

//sbit bdat0=bdat^0;

//sbit bdat1=bdat^1;

//sbit bdat2=bdat^2;

//sbit bdat3=bdat^3;

//sbit bdat4=bdat^4;

//sbit bdat5=bdat^5;

//sbit bdat6=bdat^6;

//sbit bdat7=bdat^7;

/* 考虑移植性的写法 */

uint8 bdat;

#define bdat0 (bdat&0x01)

#define bdat1 (bdat&0x02)

#define bdat2 (bdat&0x04)

#define bdat3 (bdat&0x08)

#define bdat4 (bdat&0x10)

#define bdat5 (bdat&0x20)

#define bdat6 (bdat&0x40)

#define bdat7 (bdat&0x80)

#define CGRAM0 0x00

#define CGRAM1 0x01

#define CGRAM2 0x02

#define CGRAM3 0x03

#define CGRAM4 0x04

#define CGRAM5 0x05

#define CGRAM6 0x06

#define CGRAM7 0x07

#define TRUE 1

#define FALSE 0

bool LCD1602Err = FALSE;

/*--------------------------------------------------------------------

函数名称:LCD1602读读读读读忙~

函数功能:都说是读读读读读忙咯~

注意事项:对于高速CPU,应加延时,好像是废话~

提示说明:无

输 入:

返 回:无

--------------------------------------------------------------------*/

void busy(void)

{

uint16 busyCounter=0;

bool busySta; //用于探测 lcd busy status

IN_BF;

SET_D4;

SET_D5;

SET_D6;

SET_D7;

DELAY();

CLR_RS;

DELAY();

SET_RW;

DELAY();

do

{

SET_E;

DELAY();

/* 这里读取AC4-AC6位及BF的值,程序不需记录AC4-AC6的值,所以不存储 */

busySta=(bool)GET_BF;

CLR_E;

DELAY();

/* 读取 "BUSY"时,"D4-D7"状态可能已经改变,必须再次设为输出"1" */

SET_D4;

SET_D5;

SET_D6;

SET_D7;

DELAY();

SET_E;

DELAY();

/* 这里读取AC0-AC3位的值,程序不需记录AC0-AC3的值,所以不存储 */

CLR_E;

DELAY();

if(busyCounter==1000)

{

LCD1602Err=TRUE; //标识LCD1602错误,方便上缴系统报错

return ; //避免由于LCD1602错误而导致程序阻塞

}

busyCounter++;

}

while(busySta);

LCD1602Err=FALSE;

CLR_E;

OUT_BF;

}

/*--------------------------------------------------------------------

函数名称:LCD1602写操作

关键字:icc  avr  LCD1602  显示屏 引用地址:icc avr LCD1602显示屏程序

上一篇:理清ARM开发思路的四个必看知识点
下一篇:通过存储提升处理器核心性能,为IT开源节流

推荐阅读最新更新时间:2024-05-03 02:19

使用ICC AVRAVR STUDIO的一些差别
列出ICC AVR 过渡到 AVR STUDIO时要注意的几个问题 1.头文件更改 ICCAVR使用的是“#include iom16v.h ” AVR STUDIO更改为“#include avr/io.h ” 在ICC中使用不同MCU的头文件是不同的,在AVR studio中所有MCU的头文件都用“#include avr/io.h ” 2.AVR studio中延时函数可直接使用“#include util/delay.h ”头文件中的延时函数: void _delay_us (double __us); void _delay_ms(double __ms); 两个函数的参数均为double
[单片机]
详解LED电子显示屏的主要技术问题
  电子显示屏LED显示LED   首先是高光效:对于led电子显示屏的光效可以说是节能效果重要指标,目前我国在光效效果上还有待加强,要真正要做到高光效,要从产业链各个环节上解决相关的技术问题,那么如何实现高光效呢?本文将具体争对外延、芯片,封装,灯具等几个环节要解决的技术问题探讨。   1.提高内量子效率和外量子效率。   2.提高封装出光效率及降低结温。   3.提高灯具的取光效率。   其次是从高显色性来看:led电子显示屏光色质量很多,包括色温、显色性、光色保真度、光色自然度、色调识别度、视觉舒适度等。这里我们目前只讨论解决色温和显色性问题。制作高显色性led显示屏光源,会损失较多的光效,所以在设计时要照顾这两方面因素。当
[电源管理]
浅谈LED显示屏防护等级
在我们接触显示屏的过程中常常会听到防护等级的说法,大多数朋友都知道这是防水防尘的意思,不过具体每一个等级所代表的真正含义,可能并不能很好地去区分,在这里小编不妨跟大家了解一下吧。   防护等级系统是由IEC(International ElectroTechnical Commission)所起草。将全彩LED显示屏依其防尘、防止外物侵入、防水、防湿气之特性加以分级。这里所指的外物包含工具、人的手指等均不可接触到灯具内之带电部分,以免触电。   IP防护等级是由两个数字所组成,第一个数字表示全彩LED显示屏防尘、防止外物侵入的等级;第二个数字表示全彩LED显示屏防湿气、防水侵入的密闭程度。数字越大,表示其防护等级越高。(例如IPX
[模拟电子]
条形LED显示屏在汽车显示领域的应用
车用条形 LED显示屏 是利用 LED 技术、GSM/GPRS技术、低温技术、抗静电技术、抗干扰技术、车载电子技术等在 移动 汽车上 显示 信息条形LED显示屏。它不同于在固定场所安装的普通条形 LED屏 。   车用条形LED显示屏特点:   1)汽车是一直在移动的,对电子产品的稳定性和可靠性要求很高。   2)车上 电源 是用蓄电池供电,汽车在启动、刹车、停止时会产生很高的脉冲电压,如果电源系统不好,就会烧毁 显示屏 。   3)在北方汽车一般在室外放置。冬天温度可能达到-40°C,夏天气温可能达到60°C,这要求电源和显示屏元器件在宽温度下工作。   4)汽车在运行当中容易产生静电,尤其是在秋天静电高压可达到数千
[电源管理]
AVR单片机中eeprom的字节读写和块读写程序实例
1、程序编译坏境是WINAVR version 20070122 2、可在proteus中仿真,单片机采用ATmega16即可。 3、特别注意uchar eemem __attribute__((section( .eeprom )));这句程序中eemem是变量名,可以随意改成自己想要的名字,只是变量名不能全为大写字母,否则编译不能通过。 程序如下: #include avr/io.h #include avr/eeprom.h #define uchar unsigned char #define uint unsigned int uchar ORGDATA ={0X9b,0X9b,0X9b,0X9b,0X9b,0X
[单片机]
Keil C软件与AVR Atmega系列下载器使用
Keil 作为电子工程师首选,因为他目前通吃C51和STM32的开发平台。 51单片机是8位单片机(AT89C51与STC89C51与AT89S51),AVR Atmega也是属于8位(Atmega328p-pu(Arduino-URO主控芯片) STM32顾名思义也是32位的芯片。 Arduino系列的单片机大部分人都习惯在Arduino IDE环境下编译和下载烧写程序。 那么万能的Keil 编译和烧写AVR Atmega又是如何操作呢:见下面链接,可见Keil用到的C51语言直接能在Atmega上继续用,所以很多工程师不需要学习Arduino的语言即可开发,但无可否认Arduino语言更接近有编程基础的语言,C
[单片机]
Keil C软件与<font color='red'>AVR</font> Atmega系列下载器使用
基于AVR的锂电池智能充电器的设计与实现
   1 引言   锂电池闲其比能量高、自放电小等优点,成为便携式电子设备的理想电源。近年来,随着笔记本电脑、PDA,无绳电话等大功耗大容量便携式电子产品的普及,其对电源系统的要求也日益提高。为此,研发性能稳定、安全可靠、高效经济的锂电池充电器显得尤为重要。   本文在综合考虑电池安全充电的成本、设计散率及重要性的基础上,设计了一种基于ATtiny261单片机PWM控制的单片开关电源式锂电池充电器,有效地克服了一般充电器过充电、充电不足、效率低的缺点,实现了对锂电池组的智能充电,达到了预期效果。该方案设计灵活,可满足多种型号的锂电池充电需求,且ATtiny261集成化的闪存使其便于软件调试与升级。    2 锂电池充电特性
[电源管理]
19-基于51单片机的倒计时系统
具体实现功能 系统由STC89C52单片机+按键电路+复位电路+晶振电路+LCD1602显示模块构成。 具体功能: (1)六位LED显示,从59分59秒99开始倒计时; (2)倒计时精度为0.01秒,能正确地进行倒计时; (3)复位后倒计时重新回到初始状态。 设计背景 近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。本文阐述了基于单片机的数字电子秒表倒计时设计,倒计时精度达0.01s了,解决了传统的由于倒计时精度不够造成的误差和不公平性,是各种体育竞赛的必备设备之一。本设计的数字电子秒表倒计时系统采用8051单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断
[单片机]
19-基于51单片机的倒计时系统
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved