LCD1602程序

发布者:温柔的心情最新更新时间:2017-12-20 来源: eefocus关键字:LCD1602  ATMega16 手机看文章 扫描二维码
随时随地手机看文章

配置: 

 ATMega16L @3.3V @7.3728MHz 
 1602B LCD @5.0V @6 lines 
 Compiler: WinAVR 20060125 

我自己搭的万用板,1602用5V供电,M16用3.3V供电。为了使LCD尽快投入运转,同时也因为懒惰 ... 便参考了网站上很多的1602的帖子,包括网站收集帖,程序下载后稍加修改,编译通过,下载到M16中,总是没有反应。 

 

在这个过程中,我确信我的1602硬件是没有问题的,因为我手头上有个以前用51做的时间温度计(1602+18B20),放到上面都能正常显示。 

整个过程中,感觉不管是网站收集的精华帖,还是普通帖子里面的1602程序,冗长繁杂 ... 比如我在一个帖子中,看到的一个1602的初始化函数,居然用了10几行代码!我在51中,不过也就4句而已啊 ... 


后来,遇到了下面的程序,简明扼要,一次成功。当然,这也是从论坛中COPY的,我做了一些修改: 


#include  

#define LCD_EN_PORT    PORTC 
#define LCD_RW_PORT    PORTC 
#define LCD_RS_PORT    PORTC 
#define LCD_DATA_PORT  PORTA 
#define LCD_DATA_DDR   DDRA 
#define LCD_DATA_PIN   PINA 

//LCD的 r/w 脚直接接 GND 
#define LCD_EN         0x80   //portd7        out 
#define LCD_RS         0x40   //portc6        out 
#define LCD_DATA       0xF0   //porta 4/5/6/7   out 

/*-------------------------------------------------------------------------------------------------- 
PublIC function prototypes 
--------------------------------------------------------------------------------------------------*/ 
void LCD_init         (void); 
void LCD_en_write     (void); 
void LCD_write_char   (unsigned command,unsigned data); 
void LCD_set_xy       (unsigned char x, unsigned char y); 
void LCD_write_string (unsigned char X,unsigned char Y,unsigned char *s); 
void delay_nus        (unsigned int n); 
void delay_nms        (unsigned int n); 


void LCD_init(void)       //液晶初始化 

 delay_nms(15); 
  
 DDRA |= LCD_DATA;   // 数据为输出 
 DDRC |= LCD_RS | LCD_EN;  //置位RS.EN 
  
 LCD_write_char(0x28,0);  //4位显示 
 LCD_write_char(0x0c,0);  //显示开 
 LCD_write_char(0x01,0);  //清屏 
  
 delay_nms(60); 


void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) 

 LCD_set_xy( X, Y ); //写地址 
    
 while (*s) { 
    LCD_write_char( 0, *s ); 
   s ++; 
 } 

   
void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数 

 unsigned char address; 
  
 if (y == 0) 
   address = 0x80 + x; 
 else  
   address = 0xc0 + x; 
       
 LCD_write_char(address, 0 ); 


void LCD_en_write(void)  //液晶使能 

  LCD_EN_PORT |= LCD_EN; 
  delay_nus(1); 
  LCD_EN_PORT &= ~LCD_EN; 

void LCD_write_char(unsigned command,unsigned data) // 写数据 

 unsigned command_temp,data_temp; 
  
 command_temp = command; 
 data_temp = data; 
 delay_nus(16); 
  
 if(command == 0) { 
   LCD_RS_PORT |= LCD_RS;  //RS=1 
   LCD_DATA_PORT &= 0X0f; 
   LCD_DATA_PORT |= data_temp & 0xf0;  //写高四位 
    
   LCD_en_write(); 
    
   data_temp = data_temp << 4;   
   LCD_DATA_PORT &= 0X0f; 
   LCD_DATA_PORT |= data_temp & 0xF0;   //写低四位 
    
   LCD_en_write(); 
 } 
 else { 
   LCD_RS_PORT &= ~LCD_RS;   //RS=0 
   LCD_DATA_PORT &= 0X0f; 
   LCD_DATA_PORT |= command_temp & 0xF0; //写高四位 
    
   LCD_en_write(); 
    
   command_temp = command_temp << 4; 
   LCD_DATA_PORT &= 0x0F; 
   LCD_DATA_PORT |= command_temp & 0xF0;  //写低四位 
    
   LCD_en_write(); 
  } 




int main(void) 


 LCD_init(); 
  
 LCD_write_string(0,0,"Hello,AVR WORLD!!!"); 
 LCD_write_string(0,1,"hitro@tom.com"); 

 while(1); 
  

   /*----------------------------------------------------------------------- 
延时函数 
系统时钟:8M 
-----------------------------------------------------------------------*/ 
void delay_1us(void)                 //1us延时函数 
  { 
   asm("nop"); 
  } 

void delay_nus(unsigned int n)       //N us延时函数 
  { 
   unsigned int i=0; 
   for (i=0;i   delay_1us(); 
  } 
   
void delay_1ms(void)                 //1ms延时函数 
  { 
   unsigned int i; 
   for (i=0;i<1356;i++); 
  } 
   
void delay_nms(unsigned int n)       //N ms延时函数 
  { 
   unsigned int i=0; 
   for (i=0;i   delay_1ms(); 
  } 


关键字:LCD1602  ATMega16 引用地址:LCD1602程序

上一篇:用89S51制作简易并行编程器ATmega16
下一篇:AVR并口ISP下载器

推荐阅读最新更新时间:2024-03-16 15:50

基于单片机ATmega16的无线温度监测系统
0 引言 随着社会的发展和进步,越来越多的场合对温度的要求日臻严格,温度监控系统的应用日趋受到重视。在农业发展领域,农业大棚、冷库、培育温室等众多场合都需要温度测量技术。传统的测温系统都是有线系统,对于一些需要多点测温的场合,使用传统有线测温方式在布设、维护和更新方面存在着很多不便。为了解决这个问题,设计了一种基于单片机和无线收发模块的无线温度监控系统,结合温度传感器可以很方便构建一个多点分布式智能无线温度监控系统。 1 无线温度监控系统构成 系统主要由两部分组成。如图1所示,第一部分是节点温度测量系统,第二部分是温度显示管理终端。节点温度测量系统负责测量温度,并将温度值通过无线通信发送到温度显示管理终端。管理终端接收温度信
[单片机]
基于单片机<font color='red'>ATmega16</font>的无线温度监测系统
单片机 MSP430 G2553 launchpad LCD1602 显示 连线
情节提示:一定要看到最后。 一般无特殊计划 买的LCD1602显示屏是5V版本的,不是3.3特殊版本,这时候怎么连线。 下图画正方形的2个孔,上面是5V,下面是板子的GND。下图右上角的VCC是3.3V. 接线方式: 成功: 最终我单片机烧毁了,无法下载程序进去了,因为LCD1602输出了5V电压,而MSP430单片机是3.3V单片机,有的引脚兼容不了。 所以建议买3.3V的LCD1602显示屏或者买OLED显示屏。
[单片机]
单片机 MSP430 G2553 launchpad <font color='red'>LCD1602</font> 显示 连线
基于ATMEGA16的电热锅炉温度控制器的设计
引言 电热锅炉是可将电能直接转化成热能,具有热效率高、体积小、无污染、噪声小、运行安全可靠、供热稳定、自动化程度高等优点,是理想的节能环保型的供暖设备。 本控制器主要针对过程控制实验室的控制装置而设计的,对浙大中控的AE2000B过程控制实验装置中电热锅炉的温度进行控制、显示,具有手动、自动功能,带有漏电、超温、超压及缺水保护和报警系统。 智能仪表的研制开发 智能仪表是以单片机为核心的仪表,其设计要点大致有两点,即模块化设计和模块的连接。 ● 模块化设计 依据仪表的功能、精度要求等,自上而下按仪表功能层次把硬件和软件分成若干个模块,分别进行设计与调试,然后把它们连接起来,进行总调,这是设计仪表最基
[单片机]
ATmega16开发板教程(8)——ADC
9、ADC 在将ADC之前,先聊聊其前因后果——由于计算机在自动控制、检测以及其他领域广泛应用数字电子技术,而大自然的信号全是模拟信号,如果通过计算机保存自然信号呢?那么就需要ADC(模数转换器Analog-Digital Converter)来讲模拟信号转换为数字信号,这样才能存储到计算机中。 那么ADC是如何转换的呢? l首先对选定一个瞬间对模拟信号进行采样; l然后将值转换为数字量; l最后按照一定编码格式转换。 — 一个模拟信号肯定是不能采样一个点的,而是许多点集合而成。当长方形又窄又长时几乎接近竖线时,就可以很好的还原之前的波形了。 用官方的话说:抽样定理——若原图的最大频率是fmax,那么采
[单片机]
<font color='red'>ATmega16</font>开发板教程(8)——ADC
51单片机lcd1602d电子时钟设计
由于课程设计需要,本人做了一个基于51单片机控制的lcd1602d显示的电子时钟电子设计产品。可以显示万年历,星期。 本来还想加上温湿度的检测,发现屏幕空间不够用了。。有需要可以再另外共享那个设计。第一次 单片机源程序如下: #include reg52.h #define uint unsigned int #define uchar unsigned char sbit rs=P1^0; sbit rw=P1^1; sbit en=P1^2; sbit key_set=P3^4; sb
[单片机]
51单片机<font color='red'>lcd1602</font>d电子时钟设计
气动发动机的电控系统设计
0 引言 随着环境污染、能源危机等全球性问题的日益突出,代用燃料汽车、电动汽车和混合动力汽车等低排放、节能经济型的汽车相继涌现。它们有各自突出的优点,但同时也有相应的局限。而压缩空气动力汽车(Air-powered Vehicle)是利用高压压缩空气在发动机气缸内膨胀做功,推动活塞做功对外输出动力,驱动汽车行驶。不仅压缩空气来源方便,而且它还具有结构简单、造价低廉、清洁环保等众多优点;可以实现零排放,是真正的环保汽车。 本课题将LF162MK改装成由电控系统控制电磁阀喷射压缩空气的气动发动机。本文进行了基于ATmcga16的气动发动机电控系统设计,该电控系统具有灵活、快速和准确等优点,能够实现对气动发动机各传感器的实时测量和对执
[单片机]
气动发动机的电控系统设计
基于单片机的智能计算器(AT89C51、LCD1602、矩阵键盘)
一、简介 此电路由AT89C51最小系统、LCD1602液晶显示模块和矩阵键盘模块组成。 二、执行效果 三、部分代码 /* S16 S12 S8 S4分别是123+ S15 S11 S7 S3分别是456- S14 S10 S6 S2分别是789* S13 S9 S5 S1分别是0 CLR = / */ /*想要更多项目私wo!!!*/ /* 实现两个数的运算,每个数的位数至少可以八位 */ #include reg52.h #include lcd.h typedef unsigned char uint8; typedef unsigned int uint16; sbit led=P3^
[单片机]
基于单片机的智能计算器(AT89C51、<font color='red'>LCD1602</font>、矩阵键盘)
DS12887+lcd1602万年历仿真原理图+程序
下面是仿真原理图: 51单片机驱动DS12887时钟芯片,采用lcd1602液晶屏来显示万年历 源程序如下: #include reg51.h #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit rs=P3^5; sbit lcden=P3^4; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; sbit rd=P3^7; sbit s4=P3^3; sbit dsds=P1^7; sbit dsrw=P1^6; sbit dsas=P1^5; sbit dscs
[单片机]
DS12887+<font color='red'>lcd1602</font>万年历仿真原理图+程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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