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)
上一篇:AVR单片机读取DS18B20温度上传到串口程序
下一篇:基于AVR单片机的多功能智能小车系统设计
推荐阅读
史海拾趣
面对竞争激烈的电子市场,EMMICRO公司制定了精准的市场拓展策略。公司根据市场需求和客户需求,不断调整产品结构和市场定位,积极开拓新的销售渠道和合作伙伴。同时,公司还加大了对新兴市场的投入和布局,通过差异化竞争策略,成功打开了多个新的市场领域。
2005年,埃派克森微电子发布了一系列USB鼠标控制器芯片,这些产品采用了公司独创的无晶振鼠标控制技术和对管免调技术。这些专利性的混合信号集成核心技术不仅为全球鼠标生产厂商提供了高性价比、简单方便的解决方案,还标志着埃派克森的专利技术全面进入商用时代。这一突破不仅提升了公司的市场地位,也为公司的后续发展注入了强大动力。
2015年,Contrinex正式进入中国市场,成立了全新的中国子公司。这一重要举措不仅进一步拓宽了公司的业务范围,也为中国客户提供了更加便捷和高效的服务。在中国市场,Contrinex凭借其电感式、光电式、安全光幕和RFID系统的工业级传感器产品,赢得了众多客户的青睐和信赖。
除了上述重要事件外,Contrinex还一直致力于产品创新和技术研发。多年来,公司不断推出新型传感器产品,如防磁防焊型电感式传感器、扩展型纤细型安全光幕等,以满足不同客户的需求。同时,Contrinex还积极与OEM和系统集成商合作,共同开发定制化解决方案,为客户提供更加全面和专业的服务。
这些故事只是Contrinex在电子行业发展历程中的一部分。作为一个不断追求卓越和创新的企业,Contrinex将继续致力于为客户提供高品质、高精度的传感器产品和解决方案,推动电子行业的持续发展。
在全球节能意识日益增强的背景下,DIALIGHT致力于推动绿色照明的发展。公司的LED产品具有高效节能、长寿命和环保等优点,有助于减少能源消耗和环境污染。此外,DIALIGHT还积极参与各种绿色照明项目,为推动可持续发展贡献自己的力量。
DIALIGHT在全球范围内不断拓展业务,目前在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设有业务。公司的LED产品广泛应用于各种工业场所,包括石油和天然气、矿业、化工、制造业等。通过提供定制化的照明解决方案,DIALIGHT赢得了众多客户的信赖和好评。
在传统的高频变压器设计中,由于磁心材料的限制,其工作频率较低,一般在20kHz左右。随着电源技术的不断发展,电源系统的小型化,高频化和高功率比已成为一个永恒的研究方向和发展趋势。因此,研究使用频率更高的电源变压器是降低电源系统体 ...… 查看全部问答∨ |
摘要:嵌入式以太网不仅可用于工业现场实现现场节点的自动上网功能,而且还可以用于信息家电的以太网接口实现远程控制,具有很好的发展前景。文章介绍基于TMS320LF2407型DSP的嵌入式系统与LAN91C111型自适应10Mb/s/100Mb/s嵌入式以太网控制的接口电 ...… 查看全部问答∨ |
08年在北京奥运会开闭幕式上,首次应用到了基于静态比对的人脸识别技术,在关键场合的成功使用标志着人脸识别在监控领域取得了重大突破。计世资讯通过调研发现,虽然人脸识别在技术水平、产品研发、商业模式等方面尚不成熟,却有着巨大的应用潜力。 ...… 查看全部问答∨ |
|
原文如下: ◆電池1本時(入力電圧1.5V時) ・3.3V 最大負荷電流 約160mA=効率約81% ・5.0V 最大負荷電流 約70mA ※出力5Vでは電池2本での使用を推奨します。 ◆電池2本時(入力電圧3. ...… 查看全部问答∨ |
|
前些日子已经把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中的设置。这样在应用中就无法启动设备访真… 查看全部问答∨ |