LCD12864子程序

发布者:美好的人生最新更新时间:2020-06-27 来源: eefocus关键字:LCD12864  子程序  AVR单片机 手机看文章 扫描二维码
随时随地手机看文章

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

目    的:   建立LCD12864操作库

目标系统:   基于AVR单片机                                                 

应用软件:   ICCAVR                                                      

版    本:   Version 1.0                                                           

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


/*01010101010101010101010101010101010101010101010101010101010101010101

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

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

入口参数说明:

//#define OUT_LCD_CS sbi(DDRD,0)

//#define SET_LCD_CS sbi(PORTD,0)

//#define CLR_LCD_CS cbi(PORTD,0)


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

待定参数说明:


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

对外变量说明:


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

对外函数说明:


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

10101010101010101010101010101010101010101010101010101010101010101010*/


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

接口定义:


LCD12864_ST7920 ATmega16

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

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

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

4.RS(CS) -------- VCC

5.R/W(SID) -------- MOSI/PB5

6.E(SCLK) -------- SCK/PB7

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

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

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

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

11.D4 -------- NC

12.D5 -------- NC

13.D6 -------- NC

14.D7 -------- NC

15.PSB -------- GND

16.NC -------- NC

17.RST -------- NC

18.NC -------- NC

19.LED+ -------- VCC

20.LED- -------- GND


说明:

(1)使用ATmega16的硬件SPI操作LCD12864_ST7920

(2)PIN4/CS接VCC,其实也可接到特定的IO口,但外部程序需要指定

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


#ifndef LCD12864_ST7920_H

#define LCD12864_ST7920_H


#include "D:ICC_HCmmIcc.h"


void SPI_init()

{

DDRB |= 0xB0;

SPCR = 0x50; //setup SPI

SPSR = 0x01; //setup SPI

SEI(); 

}


void lcd_wrByte(uint8 data)

SPDR = data; 

while ((SPSR & 0x80) == 0); 

}


void lcd_wrCmd(uint8 HC,uint8 LC)

{

lcd_wrByte(0xF8);

lcd_wrByte(HC); //传输高四位

lcd_wrByte(LC); //传输低四位

}


void lcd_wrDat(uint8 HD,uint8 LD)

{

lcd_wrByte(0xFA);

lcd_wrByte(HD); //传输高四位

lcd_wrByte(LD); //传输低四位

}


/*

x表示在第几行显示,y表示在第几列显示

*/

void lcd_set_xy(uint8 x,uint8 y) 

{

uint8 adr;


switch(x)

{

case 1: adr = 0x7F + y;

break; //在第1行y列显示

case 2: adr = 0x8F + y;

break; //在第2行y列显示

case 3: adr = 0x87 + y;

break; //在第3行y列显示

case 4: adr = 0x97 + y;

break; //在第4行y列显示

default: ;

}

lcd_wrCmd(adr&0xF0,(adr&0x0F)<<4);

}


void lcd_putc(uint8 x,uint8 y,uint8 ch)

{

lcd_set_xy(x,y);

delay50us(20); 

lcd_wrDat(ch&0xF0,(ch&0x0F)<<4);

}


void lcd_putd0(uint8 x,uint8 y,uint32 dat,uint8 length)

{

sint8 i;


speaData(dat,length);

lcd_set_xy(x,y);

delay50us(40);

for(i=length-1;i>=0;i--)

{

lcd_wrDat( (dataElem[i]+0x30)&0xF0 ,( (dataElem[i]+0x30)&0x0F )<<4 );

delay50us(40); 

}

}


void lcd_putd(uint8 x,uint8 y,uint32 dat,uint8 length)

{

sint8 i;

sint8 effectLen;


if(dat>999999)

effectLen=7;

else if(dat>99999)

effectLen=6;

else if(dat>9999)

effectLen=5;

else if(dat>999)

effectLen=4;

else if(dat>99)

effectLen=3;

else if(dat>9)

effectLen=2;

else

effectLen=1;

speaData(dat,effectLen);


lcd_set_xy(x,y);

delay50us(40); 

if(length>effectLen)

{

for(i=length-effectLen-1;i>=0;i--)

{

lcd_wrDat(' '&0xF0,(' '&0x0F)<<4);

delay50us(40); 

}

}

for(i=effectLen-1;i>=0;i--)

{

lcd_wrDat( (dataElem[i]+0x30)&0xF0 ,( (dataElem[i]+0x30)&0x0F )<<4 );

delay50us(40);

}

}


void lcd_puts(uint8 x,uint8 y,uint8 *str)

lcd_set_xy(x,y);

delay50us(20); 

while(*str)

{

lcd_wrDat((*(str))&0xF0,((*(str))&0x0F)<<4);

str++;

delay50us(20);

}


void lcd_puts_(uint8 x,uint8 y,uint8 *str,uint8 dlyMs)

lcd_set_xy(x,y);

delay50us(20); 

while(*str)

{

lcd_wrDat((*(str))&0xF0,((*(str))&0x0F)<<4);

str++;

delay50ms(dlyMs);

}


void lcd_clr()

{

lcd_wrCmd(0x00,0x10); //显示右移

delay50us(200);

}


void lcd_init(void)

{

SPI_init(); 

//OUT_LCD_CS; //若LCD_CS

//SET_LCD_CS; 

delay50ms(1);

lcd_wrCmd(0x30,0x30); //使用8位控制界面,使用基本指令集

//lcd_wrCmd(0x00,0xF0); //整体显示ON

lcd_wrCmd(0x00,0xC0); //整体显示ON

lcd_wrCmd(0x00,0x10); //清屏

//lcd_wrCmd(0x10,0x00); //光标

lcd_wrCmd(0x00,0x60);

//lcd_wrCmd(0x00,0x70); //显示右移

delay50ms(1); //不可省去!!!

}


#endif


关键字:LCD12864  子程序  AVR单片机 引用地址:LCD12864子程序

上一篇:AVR调试和下载官方平台的建立
下一篇:AVR PS/2 硬件中断控制程序

推荐阅读最新更新时间:2024-11-13 14:09

AVR单片机应用经验总结
使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以前传统的硬件和软件设计思想和方法的话,是不能用好AVR的,甚至也不能真正的了解AVR的特点和长处。 功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。就象一部好的F1赛车,只有具备高超技术的驾驶员才能充分体会到车的特点,并能最大限度的发挥出车的性能。 AVR具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR的优点,还需要应用工程师本身的硬软件设计开发能力的不断学习、实践提高。 “外行看热闹,内行看门道”,对于有一定基础的嵌入式和单片机系统设计开发的工程师,不妨先简单尝试一下AVR。 开发环境与工具:PC+下载线+
[单片机]
avr单片机可演奏的电子琴仿真加源码
单片机电子琴仿真原理图如下 avr单片机源程序如下: //----------------------------------------------------------------- // 名称: 电子琴仿真 //----------------------------------------------------------------- // 说明: 本例在键盘矩阵上模拟演奏电子琴,数码管显示键号. // 按下不同按键时将输出不同频率音符,按键长按时发出长音, // 短按时发出短音. // //-------------------------------------------------------
[单片机]
<font color='red'>avr单片机</font>可演奏的电子琴仿真加源码
基于AVR单片机的医用臭氧治疗仪的设计
概述 臭氧作为一种高效冷杀菌手段,目前已经被广泛应用在各行各业中。具有高效、迅速杀菌作用的臭氧在医院环境消毒、术前消毒等方面应用广泛,其治疗效果优于其它传统杀菌治疗仪。因此研制一种运行稳定、使用方便、便携的臭氧治疗仪产品,为妇科疾病患者提供一种方便有效的在家治疗方式,具有实际意义。 目前市面上的同类型产品都是采用80C51单片机为控制核心的, 虽然也能实现它所需求的功能,但执行速度慢,在长期工作环境中,特别在臭氧治疗仪的内部大功率气泵模块和臭氧发生器的干扰下,系统功耗高和抗干扰性能差,系统性能不稳定等问题便凸现出来。对此本文采用了ATMEL公司的一款AVR高档单片机,对控制系统作了改进,提高了整机的性能。 臭氧产生的原理及方法 臭
[电源管理]
基于<font color='red'>AVR单片机</font>的医用臭氧治疗仪的设计
51单片机控制LCD12864显示汉字
程序: #include reg52.h #define DATA_PORT P0 sbit LCD12864_EN = P1^2; sbit LCD12864_RSET = P1^3; sbit LCD12864_RS = P1^0; sbit LCD12864_RW = P1^1; sbit LCD12864_PSB = P1^6; void delay(unsigned int xms) //延时// { unsigned char i,j; for(j = 0; j xms; j++) { for(i = 0;i 110;i++); } } bit LcdBus
[单片机]
51单片机控制<font color='red'>LCD12864</font>显示汉字
基于AVR单片机的低成本真随机数发生器设计
引 言 随机数已广泛地应用于仿真、抽样、数值分析、计算机程序设计、决策、美学和娱乐之中。常见的随机数发生器有两种:使用数学算法的伪随机数发生器和以物理随机量作为发生源的真随机数发生器。要获取真正随机的真随机数,常使用硬件随机数发生器的方法来获取。这些真随机数都是使基于特定的真随机数发生源(如热噪声、电流噪声等),每次获取的真随机数都是不可测的,具有很好的随机性。 真随机数因其随机性强,在数据加密、信息辅助、智能决策和初始化向量方面有着广泛应用,构建一种基于硬件真随机数发生源,具有广泛的应用价值。但目前硬件真随机数发生源均较复杂,而且很少有基于单片机的真随机数发生器。本文利用RC充放电的低稳定度,根据AVR单片机的特点设计了一种
[单片机]
基于<font color='red'>AVR单片机</font>的低成本真随机数发生器设计
基于AVR单片机熔丝位的设置经验分享
mega8的熔丝位设置以下内容根据mega8的英文手册翻译,希望对大家有所帮助。如发现错误,恳请大家指正。 mega8熔丝位: 1:未编程(不选中) 0:编程(选中) ******************************** 熔丝位说明缺省设置 ******************************** RSTDISBL:复位或I/O功能选择11:复位功能;0:I/O功能(PC6) WDTON:看门狗开关11:看门狗打开(通过WDTCR允许);0:看门狗禁止 SPIEN:SPI下载允许01:SPI下载禁止;0:SPI下载允许(注:当使用SPI编程时,该项不可用) EEAVE:烧录时EEPROM数据保留11:不
[单片机]
基于<font color='red'>AVR单片机</font>熔丝位的设置经验分享
任务7:74HC595的使用方法
本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。 参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版 本文介绍74HC595的使用方法。 一、认知74HC595内部工作原理 74HC595时一款漏极开路输出的CMOS移位寄存器,输出端为可控的三态输出,亦能串行输出控制下一级级联芯片,其移位时钟频率高达25MHz。 二、74HC595引脚的简要说明 三、74HC595内部原理形象理解图 四、认知24路LED模块电路控制原理
[单片机]
任务7:74HC595的使用方法
AVR单片机解锁简单方法分享
前几天把一片mega128给不小心锁住了。心中正呼不爽,后来才在网上发现如此好的文章,简简单单的将AVR给解锁了,也不需要什么高压编程器。具体如下面: 方法一: 我按ouravr里面的方法解锁:通过外加有源晶振的办法,让其恢复。这个方法最可行。它可以恢复大部分熔丝位搞错的芯片。 方法二: 还有一个办法,如果没有有源晶振的话可以用其他工作正常的单片机的时钟作为外部晶振,只要将工作正常的单片机的XTAL2脚连接熔丝设置错误的单片机的 XTAL1引脚即可。像我使用AVR910下载线的可直接把AT90S2313的时钟输出连到被设置错的芯片就可恢复了,很方便。(此方法由彩虹数码提供),刚开始还是不行,无法擦除,后来我把原来的有源晶
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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