历史上的今天

今天是:2024年10月22日(星期二)

正在发生

2019年10月22日 | ATmeg16单片机+LCD12864温度检测显示程序(并行控制,不带字库)

发布者:颐真阁 来源: 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

                temp_h;

                dat>>=1;        

        }        

}

uchar Ds18b20_read(void)//从DS18B20读一个字节

{

        uchar i,datt;

        uchar count;

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

        {

                datt>>=1;

                temp_o;

                temp_l;

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

                temp_h;//此语句必须有,参考datasheet的P15

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

                temp_i;

                if(tmp==0x08)

[1] [2] [3]
关键字:ATmeg16  单片机  LCD12864  温度检测 引用地址:ATmeg16单片机+LCD12864温度检测显示程序(并行控制,不带字库)

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

推荐阅读

提到汽车这一疾驰的“金矿”,必然离不开智能化、网联化的加持,这两大风口带动的是以信息娱乐系统、数字仪表、ADAS为代表的智能数字驾驶舱的兴起。而这既需要融合多屏互动以及先进的人机交互、ADAS功能,又还要考量成本优化、软件重用或上市加速,需要一个大一统的“平台”来堪当重任,那么问题来了,到底什么样的平台方案能“以一当十”,从而不仅能够带...
近日,全国最大规模的国家级5G电力实验网,在青岛崂山金家岭、西海岸古镇口、青岛奥帆中心和青岛国网调度中心大楼建设落成。从此,5G与国家电网的创新应用迈上了新的一个台阶,5G和电网的合作,将为老百姓提供更优质、高效、绿色和创新的供电服务。 图1:青岛5G智能电网示范基地 众所周知,5G作为新一代移动通信技术,不仅仅带宽更高速度更快,还...
iPhone 12 系列已经陆续送达消费者手中,有外媒对其进行了初步续航测试。结果显示,全程开启 5G 的 iPhone 12 续航要比开启 4G 短 2 个小时。iPhone 12 的电池容量已经曝光,为 2851mAh,相比去年 iPhone 11 的 3110mAh 少了 10% 左右。官网结果显示,iPhone 11 与 iPhone 12 的续航时间一致,均为 17 小时视频播放时间以及...
AT24C02的数据手册1 硬件连接:直接是连接到I2C1的SCL SDA引脚(PB6 PB7)上,因此可以使用硬件I2C2 存储容量描述可以看到,AT24C02共有256个字节。跟Flash类似,EEPROM也分成不同的页。AT24C02共有32页,每页8个字节,共256字节。支持400kHz的通讯速率(IIC快速模式)3 引脚说明4 设备描述5 地址选择6 写数据字节写入 字节写入操作,需...

史海拾趣

问答坊 | AI 解惑

30kHz高频开关电源变压器的设计

 在传统的高频变压器设计中,由于磁心材料的限制,其工作频率较低,一般在20kHz左右。随着电源技术的不断发展,电源系统的小型化,高频化和高功率比已成为一个永恒的研究方向和发展趋势。因此,研究使用频率更高的电源变压器是降低电源系统体 ...…

查看全部问答∨

LAN91C111型控制器在嵌入式以太网接口中的应用

摘要:嵌入式以太网不仅可用于工业现场实现现场节点的自动上网功能,而且还可以用于信息家电的以太网接口实现远程控制,具有很好的发展前景。文章介绍基于TMS320LF2407型DSP的嵌入式系统与LAN91C111型自适应10Mb/s/100Mb/s嵌入式以太网控制的接口电 ...…

查看全部问答∨

大家好

我是新的版主,大家可以留言,互相 帮助嘛!…

查看全部问答∨

人脸识别在安防领域应用潜力巨大

08年在北京奥运会开闭幕式上,首次应用到了基于静态比对的人脸识别技术,在关键场合的成功使用标志着人脸识别在监控领域取得了重大突破。计世资讯通过调研发现,虽然人脸识别在技术水平、产品研发、商业模式等方面尚不成熟,却有着巨大的应用潜力。 ...…

查看全部问答∨

1.5V升压3.3V_5V[转载]

原文如下: ◆電池1本時(入力電圧1.5V時)  ・3.3V 最大負荷電流 約160mA=効率約81%  ・5.0V 最大負荷電流 約70mA ※出力5Vでは電池2本での使用を推奨します。 ◆電池2本時(入力電圧3. ...…

查看全部问答∨

matlab基本模块开始

matlab建立基本模块,然后simulink仿真!…

查看全部问答∨

关于串行闪存的应用

目前想用一个小的Norflash存储bootloader,将image放在Nandflash中。 在网上查了一下,发现现在大多数小容量的Norflash都是串行闪存,采用SPI界面。因此有几个疑问向大家请教,请用过此类闪存的大侠指点一下。 1、这种串行闪存是否可以用于存储bo ...…

查看全部问答∨

求教怎样编译能在smdk2410上运行的eboot

前些日子已经把eboot成功的编译到pxa270上了,现在要编译2410的,但是一开始就出了问题,wince5.0自带的smdk2410看起来感觉不太对,eboot里面的startup.s好像就是程序入口了?而且也没有OALStartup,于是我在eboot文件下的startup.s中的Resethandle ...…

查看全部问答∨

如何买块合适的学习板

现在在职工作一年了,从事软件开发,经常和硬件打交道!算是一个嵌入式门口的程序员!发现在自己的能力增加到一定之后,对应用层代码的兴趣就没那么高啦。可是公司的产品很成熟,底层驱动都很稳定,不需要改动,所以平时也没有机会学到那方面知识, ...…

查看全部问答∨

求助:WINCE6.0 导出SDK时,在SDK属性页中无法配置Emulation中的设置

Clone了Device Emulator,做了一个OS,导出SDK时,在SDK属性页中无法配置Emulation中的设置。这样在应用中就无法启动设备访真…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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