ATmeg16单片机+LCD12864温度检测显示程序(并行控制,不带字库)

2019-10-22来源: 51hei关键字:ATmeg16  单片机  LCD12864  温度检测

LCD12864温度检测显示程序(ATmega16)

制作出来的实物图如下:

 

单片机源程序如下:

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

ATmega64并行控制不带字库的12864程序

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

实验内容:LCD12864

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


硬件连接:

LCD12864         --------        ATmega64


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

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

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

4.RS(CS)         --------        PB0

5.R/W(SID)       --------        PB1

6.E(SCLK)        --------        PB2

7.D0             --------        PA0

8.D1             --------        PA1

9.D2             --------        PA2

10.D3            --------        PA3

11.D4            --------        PA4

12.D5            --------        PA5

13.D6            --------        PA6

14.D7            --------        PA7

15.PSB           --------        VCC

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

17.RST           --------        VCC

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

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

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


编译烧写该程序到ATmega64

上电,如果操作正确,这时您可以看到显示的内容了

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

//头文件定义

#include

#include

//#include

//#include

//#include

//宏定义

#define uchar unsigned char

#define uint unsigned int

//LCD12864液晶显示(数据线端口)

#define rs_h PORTB |= BIT(PB0)//数据/命令选择

#define rs_l PORTB &=~BIT(PB0)

#define rw_h PORTB |= BIT(PB1)//读/写选择

#define rw_l PORTB &=~BIT(PB1)

#define en_h PORTB |= BIT(PB2)//使能信号

#define en_l PORTB &=~BIT(PB2)

//温度18b20(数据线端口)

#define tmp (PINB&BIT(PB3))

#define temp_h PORTB |= BIT(PB3)

#define temp_l PORTB &=~BIT(PB3)

#define temp_o DDRB |= BIT(PB3)

#define temp_i DDRB &=~BIT(PB3)

//数组定义

/*

unsigned char dis1[]={"黄俊华,啊蠢。"};

unsigned char dis2[]={"曾志成,啊成。"};

unsigned char dis3[]={"梁毓毅,啊毓。"};

unsigned char dis4[]={"柳艺明,啊明。"};


unsigned char dis1[]={"温度检测"};

unsigned char dis2[]={"℃"};

*/


//温度18b20(变量定义)

unsigned char dat1=0x00;//保存读出的温度 L

unsigned char dat2=0x00;//保存读出的温度 H

unsigned long int dat=0;//保存读出的温度 XS

unsigned char flag=0;//错误标志位

unsigned char keyvalue=0;//返回值变量

unsigned char tempH=30;//温度H

unsigned char tempL=20;//温度L

//按键定义

unsigned char key1=0;

unsigned char key2=0;

//unsigned char key3=0;

//unsigned char key4=0;


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

//*************************      IO 端口定义      **********************//

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


void IO_init(void)

{          

         DDRA = 0XFF;

         DDRB = 0XFF;

         //DDRC = 0XFF;

         //DDRD = 0XFF; 

        //PORTA = 0X00;

        //PORTB = 0X00;

        //PORTC = 0X00;

        //PORTD = 0X00;

}


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

//*************************      延时函数         **********************//

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


void delayms(uint z)          //8M晶振下,延时1ms

{

        uint x,y;

        for(x=z;x>0;x--)

                 for(y=1333;y>0;y--);

}


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

//*************************      LCD12864         **********************//

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

void LCD_clear(void)//清屏函数

{

  write_com(0x01);

  delayms(5);

}

void lcd_en(void)        //en端产生一个高电平脉冲,控制LCD写时序

{

        delayms(5);//延时5ms

        en_h;

    delayms(5);//延时5ms

    en_l;

}

void write_com(uchar com)//向LCD12864写命令

{

        rs_l;

        rw_l;

        en_h;

        delayms(5);//延时5ms

        PORTA=com;

        lcd_en();//写入命令

}

void write_dat(uchar dat)//向LCD12864写数据

{

        rs_h;

        rw_l;

        en_h;

        delayms(5);//延时5ms

        PORTA=dat;

        lcd_en();//写入数据

}

void LCD_init(void)//LCD显示屏初始化函数 

{

        write_com(0x30);//设置8位数据总线,DB7~DB0;

        delayms(5);//延时5ms

        write_com(0x0c);//开显示,光标不显示;

        delayms(5);//延时5ms

        write_com(0x01);//清屏

        delayms(5);//延时5ms

}

void LCD_pos(uchar x,uchar y)//字符显示初始地址设置

{

        uchar pos;

        if(x==0)//第一行显示

        {

                 x=0x80;

        }

        else if(x==1)//第二行显示

        {

                 x=0x90;

        }

        else if(x==2)//第三行显示

        {

                 x=0x88;

        }

        else if(x==3)//第四行显示

        {

                 x=0x98;

        }

        pos=x+y;

        write_com(pos);

}

void LCD_write_str(uchar x,uchar y,uchar *s)//在第X行Y列开始显示,指针*S所指向的字符串

{

        LCD_pos(x,y);//设置初始字符显示地址

        while(*s)//逐次写入显示字符,直到最后一个字符"/0"

        {

                 write_dat(*s);//写入当前字符并显示

                s++;//地址指针加1,指向下一个待写字符

        }

}

void LCD_write_char(uchar x,uchar y,uchar Wdata)//在第X行Y列开始显示Wdata所对应的单个字符

{

        LCD_pos(x,y);//设置初始字符显示地址

        write_dat(Wdata);//写入当前字符并显示

}


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

//*************************         18B20         **********************//

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


void Ds18b20_reset(void)//DS18B20初始化

{

        uint count;

        temp_o;

        temp_l;

        for(count=700;count>0;count--);//延时480us

        temp_h;

        temp_i;//不须配置PORT内部上拉电阻,MCU输入输出自动切换

        while((tmp==0x08));//&&(i>0)) i--;

        for(count=700;count>0;count--);//延时480us

}

void Ds18b20_write(uchar dat)//向DS18B20写一个字节

{

        uchar count;

        uchar i;

        temp_o;

        for(i=8;i>0;i--)

        {

                temp_l;

                for(count=2;count>0;count--);

                //temp_h;//不能有此语句

                if(dat&0x01==0x01)

                        temp_h;

                else

                        temp_l;

                for(count=120;count>0;count--);//延时60us

[1] [2] [3]
关键字:ATmeg16  单片机  LCD12864  温度检测 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477945.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AVR单片机读取DS18B20温度上传到串口程序
下一篇:基于AVR单片机的多功能智能小车系统设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

学习笔记--Atmeg16外中断
与外中断有关的寄存器: MCU 控制寄存器- MCUCR MCU 控制寄存器包含中断触发控制位与通用MCU 功能;     7   6   5   4     3    2       1       0     SM2 S
发表于 2015-09-29
基于ATMEG16电子节气门控制系统的设计
必须能够将模拟信号转换为数字信号。基于控制器要具备这些功能,本文选用AVR单片机ATMEG16作为主控芯片,并且使用英飞凌公司的TLE6209R芯片作为电机驱动芯片,开发电子节气门控制系统硬件电路。控制电路部分包括:信号采集处理,稳压,直流电机驱动,串行通信等。油门踏板传感器和节气门位置传感器分别给出油门踏板位置和节气门开度信号,通过单片机中的模数转换器将模拟信号转换为数字信号,对两信号比较,给出控制电机转向的信号并调用控制算法计算输出合适占空比的PWM信号,再通过直流电机驱动电路驱动电机使节气门达到目标开度。本实验中用手柄电位器模拟代替踏板位置传感器;PA1即ADC1接节气门位置传感器反馈的信号TPS1;PD5用于输出占空比可调
发表于 2013-10-12
基于ATMEG16电子节气门控制系统的设计
小家电热销带动盛群,新唐单片机出货量激增
由于今年白色小家电需求依旧热络,10月开始一波急单带动IC设计盛群(6202)、新唐(4919)MCU出货量增,加上年底耶诞节购物需求,及上半年库存去化告一段落,第四季业绩将优于第三季,全年营运可望倒吃甘蔗。10月相关白牌小家电零组件IC出现节前急单拉货潮,盛群表示,10月开始,已感受到订单回流迹象,客户及终端库存去化、中国双11及年底拉货旺季到来,且中国去美化政策逐季发酵,客户拉货态度转趋积极。上半年受到贸易战影响,客户拉货态度观望,下半年库存水位已降至低点,MCU厂在客户要求下,于10月备妥急单需求,主要以小家电商品IC为主,第四季进入全年出货旺季,法人预估今年第四季MCU厂业绩可望成为全年最高点。
发表于 2019-11-11
AVR单片机红外遥控键值解码实验
AVR学习笔记十八、红外遥控键值解码实验  18.1 实例功能 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 在这个实验中,我们采用红外线遥控器和一体化红外接收头来进行红外遥控键值解码的实验,本实例分为三个功能模块,分别描述如下: ● 单片机系统:利用 ATmega16单片机与一体化红外接收器组成红外接收电路。 
发表于 2019-11-11
AVR单片机红外遥控键值解码实验
AVR单片机跑马灯的仿真设计
简易的跑马灯设计。基于AVR单片机仿真原理图如下:单片机源程序如下:/********************************************************************                            汇诚科技*********************************************************************/#include <iom16v.h>
发表于 2019-11-11
AVR单片机跑马灯的仿真设计
直流有刷伺服控制系统(pic单片机,pid控制)
基于PIC18系列单片机的直流有刷伺控制系统:(来处于国外贴)1:原理图(PDF)2:原理图及PCB图(EAGLE)3:带pid + 编码器的控制程序。main.c电路原理图如下: 单片机源程序如下:// Vertical motor driver code // Oringially made by Kevin Wolfe 2009-2011// Modified by Matt Moses 2010-2011// #include <p18f1320.h>//#include <stdlib.h>//#include <delays.h>//#include
发表于 2019-11-11
直流有刷伺服控制系统(pic单片机,pid控制)
小广播
何立民专栏 单片机及嵌入式宝典

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

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