基于52单片机的自动浇灌系统设计

上传人:沈*** 文档编号:140163747 上传时间:2022-08-23 格式:DOC 页数:46 大小:2.66MB
收藏 版权申诉 举报 下载
基于52单片机的自动浇灌系统设计_第1页
第1页 / 共46页
基于52单片机的自动浇灌系统设计_第2页
第2页 / 共46页
基于52单片机的自动浇灌系统设计_第3页
第3页 / 共46页
资源描述:

《基于52单片机的自动浇灌系统设计》由会员分享,可在线阅读,更多相关《基于52单片机的自动浇灌系统设计(46页珍藏版)》请在装配图网上搜索。

1、实 践 教 学 目 标 实 践 报 告(1)学期 项目: 自动灌溉系统 班级: 学号: 姓名: 时间: 年 9 月 9 日 年10 月 14 日 指引教师: 制定日期: .9.16 1. 任务和规定a. 概述 重要是以51单片机80c52为主控芯片,运用DALAS一线式温度传感器DS18B20实现对周边温度环境的采集,单片机再根据采集的温度值来控制电磁阀的开关及持续时间等操作,从而实目前不同的温度对周边灌溉对象实行间隔性的灌溉,灌溉持续的时间与不同的温度范畴有关,同步有关的状态信息要在点阵中文液晶屏上实时的显示。b.功能(1)中文液晶屏上实时显示的信息有:(见图1)1.第一行显示:制动灌溉系统

2、;2.第二行显示:低温:*.*,或常温:*.*,或高温:*.* 。注:假设24如下为低温,2535为常温,35以上为高温。电磁阀状态:开,或关。3.第三行显示:时间:*时*分*秒。4.第四行显示:灌溉次数。a可以显示设立的界面b可以查看低、常、高温的值和灌溉时间及间隔时间c可以设立的低、常、高温的值和灌溉时间及间隔时间目的是为了实现灌溉 c. 性能使得灌溉器在低温时,电磁阀始终关,灌溉时间为0分0秒;在常温时,灌溉时间为30分钟,灌溉次数间隔为8小时;在高温时,灌溉时间为50分钟,灌溉次数间隔为4小时。从低温进入常温,灌溉时间为30分钟,灌溉次数间隔为8小时;蜂鸣器响 从常温进入高温时,灌溉时

3、间为50分钟,灌溉次数间隔为4小时。蜂鸣器响从高温进入常温,灌溉时间为30分钟,灌溉次数间隔为8小时;蜂鸣器响 从常温进入低温时,灌溉时间为0分0秒,阀关闭。蜂鸣器响d. 接口(软件、硬件)2.方案(思路)a) 总的思考运用DALAS一线式温度传感器DS18B20实现对周边温度环境的采集,单片机再根据采集的温度值来控制电磁阀的开关及发出声音,实目前不同的温度对周边灌溉对象实行间隔性的灌溉,灌溉持续的时间与不同的温度范畴有关,同步有关的状态信息在点阵中文液晶屏上实时的显示b.CPU选择80C52;c.硬件选择;水阀开关 蜂鸣器 继电器 液晶显示屏(TG12864B) 电源 电线;d.开发和测试环

4、境Keil 2;Proteus;e.系统框架图和系统功能阐明灌溉系统水阀解决(根据温度来控制水阀开关)灌溉解决(根据不同温度来控制灌溉时间)显示(将某些信息显示到屏幕)蜂鸣器(提示灌溉进行)温度仪(感应周边温度) 温度传感器DS18B20液晶显示屏80C51阀门控制水阀功能阐明:使得灌溉器在低温时,电磁阀始终关,灌溉时间为0分0秒;在常温时,灌溉时间为30分钟,灌溉次数间隔为8小时;在高温时,灌溉时间为50分钟,灌溉次数间隔为4小时。从低温进入常温,灌溉时间为30分钟,灌溉次数间隔为8小时;蜂鸣器响兰花草 从常温进入高温时,灌溉时间为50分钟,灌溉次数间隔为4小时。蜂鸣器响兰花草从高温进入常温

5、,灌溉时间为30分钟,灌溉次数间隔为8小时;蜂鸣器响兰花草从常温进入低温时,灌溉时间为0分0秒,阀关闭。蜂鸣器响兰花草f.接口概述MCU/P继电器水阀温度传感器显示屏蜂名器g开发筹划序号任务内容负责人筹划开始时间筹划结束时间实际开始时间实际结束时间1任务和规定概述,功能,性能,接口刘路.9.09.9.09.9.10.9.102方案总的思考 软硬件选择 开发和测试环境 系统框架图和系统功能阐明 接口概述 开发筹划刘路.9.10.9.10-9-12-9-123系统设计列出所需要的硬件软件电路及功能状态图 刘路.9.12.9.12.9.17.9.174具体设计将主体程序分解成各个功能模块 列出各模块

6、的功能所需刘路.9.17.9.17.9.23.9.235编码根据具体设计所考虑的思路 进行编码 刘路.9.23.9.23.10.12.10.86系统测试运用Proteus进行仿真 通过控制DS18B20的值 测试程序在各个温度下 显示 灌溉 时间 功能与否完整 有无错误刘路.10.12.10.8.10.17.10.123.系统设计a) 硬件设计i. 框图温度传感器DS18B20液晶显示屏80C51阀门控制水阀ii. 功能描述硬件设计重要涉及:DS18B20温度采集模块:用于温度采集;中文液晶屏显示状态信息模块:用于将有关信息显示出来;将数字温度传感器DS18B20并接在一起,数据线与单片机的P

7、1.0相连,液晶显示屏与单片机的连接采用模拟接口方式。蜂鸣器:运用外部中断触发 定期器t0控制音调高下 T1控制节拍长短(1)传感器DS18B20 DALLAS DS18B20 1 2 3 GND DQ VDD 图1-4 DS18B20引脚图 DS18B20是美国DALLAS公司推出的数字温度传感器,将温度传感器、数字转换电路集成到了一起,外形犹如一只三极管。微型化、低功耗、高性能、抗干扰能力强;它采用独特的单线接口方式,与单片机连接时,仅需一根口线;这样可以非常以便地构成多路温度测量系统。DS18B20的测温范畴为-55度125度,可完全满足规定。其引脚图如图1-4所示。DQ:数据输入/输出

8、。在数据总线供电方式可给传感器提供电源。VDD:可选的电源电压DS18B20有两种供电方式:数据总线供电方式和外部供电方式。若采用数据总路线供电方式,VDD应接地,这样可省一根线,但测浊的时间较长。GND:电源地。 温度与数字量的相应关系表如右表所示。(2)单片机80C52单片机内部有P0、P1、P2、P34个8位双向I/O口,其引脚如图1-8所示,外设与这些端口可以直接连接,无需此外的接芯片。P0P3既可以按字节输入或输出,也可以按位进行输入或输出,共32条口线,其控制十分灵活以便。各个端口的构造功能有所不同。在自动灌溉系统的设计中重要用到了P0、P1、P3这3 个口。 1)P0口P0.0

9、P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 80C51 RP1 VCC 图-10 P0口作输出口时需加上拉电阻 P0口每一位内部构造如图1-9所示,其基本功能是数据的输入与输出,此外在扩展程序存储器、外部数据存储器或I/O口时,作为数据总线和低8位地址总线。需要阐明的是P0口作为输出口使用时,“控制”引脚为低,使场效应管VT1截止,P0口事实上为漏极开路输出电路,因此需加上拉电阻,如图1-10所示;P0作为输入口使用时,必须一方面写端口输出“1”,使VT2截止,否则如果VT2导通,在输入引脚数据时,引起的的高电平会被强制拉成低电平。2)P1口在自动灌溉系统设计中,P1

10、.1与传感器DS18B20的DQ连接,将温度传感器上的值传送到单片机80C51在液晶屏上显示出来。3)P3口P3口险了双向I/O口功能外,还具有第二功能。在自动灌溉系统中P3.7、P3.6、P3.5不再是P3口的第二功能,RD、WR、T1是作为I/O口分别控制液晶模块的RS、R/W、E引脚,产生相应的时序信号。(3)TG12864B液晶屏BLK BLA VEE RST CS2 CS1 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 E R/W D/I VO VDD VSS 图1-11 TG12864B模块引脚图 TG12864B是128*64点阵的液晶显示模块,可以显示多种字符

11、(128个8*8点阵字符,或32个16*16点阵的中文)或图形,具有8位原则数据总线及相应的控制信号,可与单片机接口直接相连。其外观及引脚排列如图1-11所示:其引脚功TG12864B液晶模块事实上是由左右两块独立的64*64点阵液晶屏拼接而成,每半屏有一种8*64*8bit DDRAM,左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。它可显示4行16*16点阵的中文,每行显示8列,如果列号不不小于4,则显示在左半屏,否则显示在右半屏。TG12864B液晶模块内部没有字库,因此必须将ASCII的点阵信息放在程序存储器中,显示时根据ASCII值找到该字符的点阵码送到液晶显示模块DDRA

12、M中。(4)蜂鸣器三极管重要是做驱动用的。由于单片机的IO口驱动能力不够让蜂鸣器发出声音,因此我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,因此就不会发出声音。b) 软件设计i. 运营环境keil 2;Proteus;ii. 功能描述在低温时,电磁阀始终关,灌溉时间为0分0秒;在常温时,灌溉时间为30分钟,灌溉次数间隔为8小时;在高温时,灌溉时间为50分钟,灌溉次数间隔为4小时。从低温进入常温,灌溉时间为30分钟,灌溉次数间隔为8小时;从常温进入高温时,灌溉时间为50分钟

13、,灌溉次数间隔为4小时。从高温进入常温,灌溉时间为30分钟,灌溉次数间隔为8小时;响起音乐兰花草 从常温进入低温时,灌溉时间为0分0秒,阀关闭。1主程序模块功能:重要是要调用的函数的声明;变量的定义;根据温度,在该屏上逐行显示:温度、水龙头开关状态、灌溉时间等信息。2DS18B20温度采集模块功能:温度采集,通过温度传感器获取目前的温度值,再将温度值传到主程序中,然后在液晶屏显示相应的温度值。3中文液晶屏显示状态信息模块功能:对液晶屏进行初始化、复位、打开显示、设立起始行、清屏。4定期器模块功能:实现记录不同温度段的灌溉时间及灌溉间隔时间等信息5控制电磁阀开/关模块功能:根据温度信息控制继电器

14、吸合及断开,从而控制电磁阀的开关,实现灌溉与否。6响乐模块功能:单片机可以根据不同频率的脉冲信号 让蜂鸣器产生与音符相应的声音 可以运用单片机p3.2或者.p3.3引脚 外部中断来控制控制蜂鸣器有关。iii.状态图常温/开阀高温/开阀低温低温不灌溉高温低温/关阀常温灌溉高温灌溉常温/开阀蜂鸣器开,显示间隔时间到/开阀灌溉时间到/关阀间隔时间到/开阀灌溉时间到/关阀降温低温高温/开阀蜂鸣器开,显示常温/开阀常温不灌溉高温不灌溉NO状态条件事件动作目的状态1低温不灌溉常温开阀门/蜂鸣器响 显示常温灌溉2常温灌溉低温关阀门/显示低温不灌溉3常温不灌溉低温关阀门/显示低温不灌溉4常温灌溉30分钟时间到

15、关阀门/显示常温不灌溉5常温不灌溉8小时时间到开阀门/显示常温灌溉6常温灌溉高温蜂鸣器响 显示高温灌溉7高温灌溉常温显示常温灌溉8高温灌溉50分钟时间到关阀门/显示高温不灌溉9高温不灌溉4小时时间到开阀门/显示高温灌溉10常温不灌溉高温开阀门/显示蜂鸣器响高温灌溉11高温不灌溉常温关阀门/显示常温不灌溉 iii.iv. 重要流程图初始化灌溉系统灌溉v. 程序总体构造图自动灌溉系统灌溉解决显示温度仪键盘解决水阀解决vi. 接口设计MCU/P继电器水阀温度传感器键盘显示屏蜂名器4.具体设计c) 硬件具体设计i. Proteus图d) 软件具体构造图Reset(初始化DS18B20)Convert(

16、启动温度转换)Readt(读取温度暂存器的值)Wrbyte(写字节)Rdbyte(读字节)Ds18b20InitTimer0 (定期器T0中断)InitTimer0 (定期器T1中断)定期器Lcd_ LCD_DispFill (填充液晶屏)Lcd_dispIni(初始化液晶屏)LCD_DispChar(显示字符)LCD_DispStr(显示字符串)LCD_DispHZ(显示中文)LCD_DispHZStr(显示中文字符串)液晶显示模块e.软件具体设计i. 函数描述名称:void wrbyte(uchar d) 功能:向DS18B20写入一种字节 入口参数:d(uchar型 写入字节) 出口参数

17、:无 返回值:无 名称: uchar rdbyte(void) 功能: 从DS18B20读取一种字节 入口参数:无 出口参数:无 返回值:无名称:int readt(void) 功能:读取DS18B20暂存器中的温度值 入口参数:无 出口参数:无 返回值:无名称:void LCD_DispChar(uchar cy, uchar cx, char dispdata) 功能:在液晶屏的cy(0-7)行、cx(0-15)列显示字符dispdata入口参数:cy(uchar型 设立行) ; cx(uchar型 设立列); dispdata(char型 显示字符);出口参数:无返回值:无名称:void

18、 LCD_DispStr(uchar cy, uchar cx, char *disp_str) 功能: 在液晶屏的cy(0-7)行、cx(0-15)列显示字符串disp_str入口参数: cy(uchar型 设立行) cx(uchar型 设立列) *disp_str(char型 显示字符串)出口参数:无返回值:无名称:void LCD_DispHZ(uchar cy, uchar cx, uchar dispdata功能:在液晶屏cy,cx位置显示中文字符入口参数:cy(uchar型 设立行) ; cx(uchar型 设立列); dispdata(uchar显示中文字符)出口参数:无返回值:

19、无名称:void LCD_DispHZStr(uchar cy, uchar cx, uchar *disp_str) 功能:在液晶屏cy,cx位置显示中文字符串入口参数:cy(uchar型 设立行) cx(uchar型 设立列) *disp_str(uchar型 显示中文字符)出口参数:无返回值:无名称:void LCD_DispFill(uchar filldata)功能:以filldata充填液晶屏入口参数:filldata(uchar);出口参数:无返回值:无名称:void LCD_DispIni(void)功能:初始化液晶入口参数:无出口参数:无返回值:无名称:void InitTi

20、mer0(void)功能:定期器中断入口参数:无出口参数:无返回值:无 5.编码、集成和调试主函数模块:#include #include #define uchar unsigned char #define uint unsigned int#define water_time 3/常温的灌溉时间#define water_time1 6/高温的灌溉时间extern void LCD_DispIni(void);extern void LCD_DispFill(uchar filldata);extern void LCD_DispChar(uchar cy,uchar cx,char d

21、ispdata);extern void LCD_DispStr(uchar cy,uchar cx,char *disp_str);extern void LCD_DispHZ(uchar cy,uchar cx,uchar dispdata);extern void LCD_DispHZStr(uchar cy,uchar cx,uchar *disp_str);extern void late();extern int readt(void);extern void convert(void);uchar code dp16=0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9

22、;/小数部分转换uchar count,count1;uchar s;uchar m;uchar h;uchar s1;uchar m1;uchar h1;uchar time_s,time_m;uchar counter;/定义的一种判断灌溉时间的中间变量uchar dbuf= ; /小数部分转换uchar dbuf1= ;uchar idata dbuf2= ;uchar idata t;sbit led=P11;sbit SOUND=P17;void time0(void) interrupt 1 /interrupt N表达函数声明为中断服务函数,1:定期器/计数器T0中断 TH0=-

23、50000/256; /定期时间为50MS /取高8位 TL0=-50000%256; /取低8位count+; /每中断一次,计数器加1if(count=20) /每秒执行一次 count=0;s+;if(s=60) m+;s=0;if(m=60) m=0;h+;void time1(void) interrupt 3 /3:定期器/计数器T1中断 TH1=-50000/256;TL1=-50000%256;count1+;if(count1=20) count1=0;s1+;if(s1=60) m1+;s1=0;if(m1=60) m1=0;h1+;main() int temp,i; /

24、用来寄存传感器的温度值uchar str7=0,0,0,0,0,0; /用于将温度值转换为字符串uchar st2=0,0;uchar buf=0,1,2,3,4,5,0xff;uchar du=24,0xff;uchar chang=9,10,8,0xff;uchar di=11,12,8,0xff;uchar gao=6,7,8,0xff;uchar jgsj=13,14,8,0xff;uchar dcf=13,14,8,0xff;uchar on=22,0xff;uchar off=23,0xff;uchar fen=20,0xff;uchar miao=21,0xff;uchar co

25、u=15,16,25,26,0xff;int fleg=1,flag=1;bit zf; /正负标记 温度在0度如下为1,否则为0LCD_DispIni();str1=:; /在屏幕指定位置显示LCD_DispHZStr(0,1,buf);LCD_DispHZStr(1,6,du); LCD_DispHZStr(1,0,dcf);LCD_DispHZStr(2,0,jgsj);LCD_DispHZStr(2,5,fen);LCD_DispHZStr(2,7,miao);LCD_DispHZStr(3,0,cou);count=0;s=0;TMOD=0x11;/定期器0和1都设立成方式1TH0=

26、-50000/256;TL0=-50000%256;TH1=-50000/256;TL1=-50000%256;ET0=1; /容许T0中断TR0=1; /启动T0中断ET1=1;TR1=1;EA=1; /开CPU中断while(1) EA=0;convert();for(i=0;i0x01E0)/判断温度与否不小于30度 LCD_DispHZStr(1,0,gao);counter=m*60+s;if(counter3) /高温灌溉时间间隔 s=0;m=0;h=0; fleg=1;time_s=0;time_m=0;led=1;else if(temp0x0190)/判断温度与否低于25度T

27、R0=0;TR1=0;s=0;m=0;h=0;s1=0;m1=0;h=0;LCD_DispHZStr(1,0,di);LCD_DispHZStr(2,3,off);time_s=0;time_m=0;led=1;else LCD_DispHZStr(1,0,chang); time_s=0;time_m=0;counter=m*60+s;if(counter3) /常温灌溉时间间隔 s=0;m=0;h=0;flag=1;time_s=0;time_m=0;led=1;if(temp4;/舍去小数部分str0=temp/100+0x30;/求出百位的ASCII码temp=temp%100;str

28、1=temp/10+0x30;/求出十位的ASCII码str2=temp%10+0x30;/求出个位的ASCII码str3=.;dbuf0=(time_s%100)/10+0x30;dbuf1=time_s%10+0x30;dbuf10=(time_m%100)/10+0x30; dbuf11=time_m%10+0x30;dbuf20=(t%100)/10+0x30; dbuf21=t%10+0x30;if(zf=1)/如果是负数 if(str1=0) /如果十位为0 str0= ; /显示格式为 -x.xstr1=-;else /如果十位不为0str0=-; /显示格式为-xx.xelse

29、 /如果是正数 if(str0=0) /如果百位、十位都是0 if(str1=0) /显示格式为 x.x str1= ; / 如果只有百位为0 str0= ; /显示格式为 xx.xLCD_DispStr(3,7,str); /将字符串在屏幕指定位置显示出来LCD_DispStr(5,8,dbuf1); /显示分LCD_DispStr(5,12,dbuf); /显示秒LCD_DispStr(7,11,dbuf2);DS18B20模块:#define uchar unsigned char #define uint unsigned int#include #include sbit DQ=P1

30、0; bdata uchar dat;sbit dat0=dat0;sbit dat7=dat7;void delay15(uchar n) /约15us延时 do _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();n-; while(n); bit reset(void) bit err; DQ=0; delay15(40); DQ=1; delay15(6); err=DQ; delay15(

31、18); return(err); void wrbyte(uchar d)/向总线写入一种字节 uchar i; dat=d; for(i=8;i0;i-) DQ=0; delay15(1); DQ=dat0; dat=dat1; delay15(1); DQ=1; uchar rdbyte(void) /从总线上读取一种字节 uchar i; dat=0; for(i=8;i0;i-) dat=dat1;DQ=0;_nop_(); DQ=1; delay15(1); dat7=DQ; delay15(4);/新增在位与位之间加入50US的延时 return(dat); void conve

32、rt(void) bit err; err=reset(); /复位DS18B20 wrbyte(0xcc); /发READ ROM命令 wrbyte(0x44); /发READ ROM命令 int readt(void)uchar h,l; /复位DS18B20reset(); /复位DS18B20wrbyte(0xcc); /发READ ROM命令wrbyte(0xbe); /发READ ROM命令l=rdbyte(); /读取温度低字节、高字节h=rdbyte(); return(h*256+l);/保存16位温度值LCD液晶显示模块:#include #include #include

33、 #define uchar unsigned char#define uint unsigned intsbitLCD_RST=P37;sbitDI=P34;sbitRW=P35;sbitCS=P33;sbit EN=P36;sbitRDY=P07;sfrLCD=0x80;#defineLCD_DISPON 0x3f / 打开LCM显示命令 #define LCD_STARTROW 0xc0 / 设立起始行命令,用LCD_STARTROW+x设立起始行(x64) #defineLCD_ADDRSTRY 0xb8 / 设立页地址命令,用LCD_ADDRSTRX+x设立目前页(x8) #defi

34、neLCD_ADDRSTRX 0x40 / 设立列地址命令,用LCD_ADDRSTRY+x设立目前列(x64)#define CS1 0 /左半屏选择#define CS2 1 /右半屏选择/命令字cmd送左半屏(port=0)/右半屏(port=1)命令void LCD_WrCmd(bit port, uchar cmd)EN=0;CS=port;DI=0;RW=0;EN=1;LCD=cmd;EN=0;/数据wrdata送左半屏(port=0)/右半屏(port=1)数据口void LCD_WrDat(bit port, uchar wrdata) EN=0;CS=port;DI=1;RW=

35、0;EN=1;LCD=wrdata;EN=0;uchar code ASCII_TAB480 = /0X200X7F之间 ASCII码相应的点阵数据表 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x28, 0xfe, 0x28, 0xfe, 0x28, 0x48, 0x54, 0xfe, 0x54, 0x24, 0x46, 0x26, 0x10, 0xc8, 0xc4, 0x6c, 0x92, 0xaa, 0x44, 0xa0, 0x00, 0x0a, 0x

36、06, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x00, 0x00, 0x82, 0x44, 0x38, 0x00, 0x28, 0x10, 0x7c, 0x10, 0x28, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0xa0, 0x60, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x7C, 0xA2, 0x92, 0x8A, 0x7C, 0x00, 0x84, 0x

37、FE, 0x80, 0x00, 0x84, 0xC2, 0xA2, 0x92, 0x8C, 0x42, 0x82, 0x8A, 0x96, 0x62, 0x30, 0x28, 0x24, 0xFE, 0x20, 0x4E, 0x8A, 0x8A, 0x8A, 0x72, 0x78, 0x94, 0x92, 0x92, 0x60, 0x02, 0xE2, 0x12, 0x0A, 0x06, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x0C, 0x92, 0x92, 0x52, 0x3C, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0xAC, 0x

38、6C, 0x00, 0x00, 0x10, 0x28, 0x44, 0x82, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x82, 0x44, 0x28, 0x10, 0x04, 0x02, 0xA2, 0x12, 0x0C, 0x64, 0x92, 0xF2, 0x82, 0x7C, 0xFC, 0x22, 0x22, 0x22, 0xFC, 0xFE, 0x92, 0x92, 0x92, 0x6C, 0x7C, 0x82, 0x82, 0x82, 0x44, 0xFE, 0x82, 0x82, 0x44, 0x38, 0xFE, 0x92, 0x

39、92, 0x92, 0x82, 0xFE, 0x12, 0x12, 0x12, 0x02, 0x7C, 0x82, 0x92, 0x92, 0xF4, 0xFE, 0x10, 0x10, 0x10, 0xFE, 0x00, 0x82, 0xFE, 0x82, 0x00, 0x40, 0x80, 0x82, 0x7E, 0x02, 0xFE, 0x10, 0x28, 0x44, 0x82, 0xFE, 0x80, 0x80, 0x80, 0x80, 0xFE, 0x04, 0x18, 0x04, 0xFE, 0xFE, 0x08, 0x10, 0x20, 0xFE, 0x7C, 0x82, 0x

40、82, 0x82, 0x7C, 0xFE, 0x12, 0x12, 0x12, 0x0C, 0x7C, 0x82, 0xA2, 0x42, 0xBC, 0xFE, 0x12, 0x32, 0x52, 0x8C, 0x8C, 0x92, 0x92, 0x92, 0x62, 0x02, 0x02, 0xFE, 0x02, 0x02, 0x7E, 0x80, 0x80, 0x80, 0x7E, 0x3E, 0x40, 0x80, 0x40, 0x3E, 0x7E, 0x80, 0x70, 0x80, 0x7E, 0xC6, 0x28, 0x10, 0x28, 0xC6, 0x0E, 0x10, 0x

41、E0, 0x10, 0x0E, 0xC2, 0xA2, 0x92, 0x8A, 0x86, 0x00, 0xFE, 0x82, 0x82, 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x82, 0x82, 0xFE, 0x00, 0x08, 0x04, 0x02, 0x04, 0x08, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x02, 0x04, 0x08, 0x00, 0x40, 0xA8, 0xA8, 0xA8, 0xF0, 0xFE, 0x90, 0x88, 0x88, 0x70, 0x70, 0x88, 0x

42、88, 0x88, 0x40, 0x70, 0x88, 0x88, 0x90, 0xFE, 0x70, 0xA8, 0xA8, 0xA8, 0x30, 0x10, 0xFC, 0x12, 0x02, 0x04, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, 0xFE, 0x10, 0x08, 0x08, 0xF0, 0x00, 0x88, 0xFA, 0x80, 0x00, 0x40, 0x80, 0x88, 0x7A, 0x00, 0xFE, 0x20, 0x50, 0x88, 0x00, 0x00, 0x82, 0xFE, 0x80, 0x00, 0xF8, 0x08, 0x

43、30, 0x08, 0xF8, 0xF8, 0x10, 0x08, 0x08, 0xF0, 0x70, 0x88, 0x88, 0x88, 0x70, 0xF8, 0x28, 0x28, 0x28, 0x10, 0x10, 0x28, 0x28, 0x30, 0xF8, 0xF8, 0x10, 0x08, 0x08, 0x10, 0x90, 0xA8, 0xA8, 0xA8, 0x40, 0x08, 0x7E, 0x88, 0x80, 0x40, 0x78, 0x80, 0x80, 0x40, 0xF8, 0x38, 0x40, 0x80, 0x40, 0x38, 0x78, 0x80, 0x

44、60, 0x80, 0x78, 0x88, 0x50, 0x20, 0x50, 0x88, 0x18, 0xA0, 0xA0, 0xA0, 0x78, 0x88, 0xC8, 0xA8, 0x98, 0x88, 0x00, 0x10, 0x6C, 0x82, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x82, 0x6C, 0x10, 0x00, 0x10, 0x10, 0x54, 0x38, 0x10, 0x10, 0x38, 0x54, 0x10, 0x10;/以filldata充填液晶屏void LCD_DispFill(uchar fillda

45、ta) uchar x, y; LCD_WrCmd(CS1,LCD_STARTROW);/设立左半屏显示起始行为0 LCD_WrCmd(CS2,LCD_STARTROW);/设立右半屏显示起始行为0 for(y=0; y8; y+) /循环充填8页 LCD_WrCmd(CS1,LCD_ADDRSTRY+y);/ 设立左半屏页地址 LCD_WrCmd(CS1,LCD_ADDRSTRX); / 设立左半屏列地址 LCD_WrCmd(CS2,LCD_ADDRSTRY+y);/ 设立右半屏页地址 LCD_WrCmd(CS2,LCD_ADDRSTRX);/ 设立右半屏列地址 for(x=0; x64;

46、x+) /充填每页的64个单元(列) LCD_WrDat(CS1,filldata); LCD_WrDat(CS2,filldata); /液晶模块初始化void LCD_DispIni(void) uint i; LCD_RST = 0; / 复位驱动芯片 for(i=0; i500; i+); LCD_RST = 1; LCD_WrCmd(CS1,LCD_DISPON); / 打开显示 LCD_WrCmd(CS1,LCD_STARTROW); / 设立显示起始行为0 LCD_WrCmd(CS2,LCD_DISPON); LCD_WrCmd(CS2,LCD_STARTROW); LCD_Di

47、spFill(00);/ 清屏 LCD_WrCmd(CS1,LCD_ADDRSTRY+0);/ 设立页(字符行)地址 LCD_WrCmd(CS1,LCD_ADDRSTRX+0);/ 设立列地址 LCD_WrCmd(CS2,LCD_ADDRSTRY+0); LCD_WrCmd(CS2,LCD_ADDRSTRX+0);/在液晶屏的cy(0-7)行、cx(0-15)列显示字符dispdatavoid LCD_DispChar(uchar cy, uchar cx, char dispdata) uchar code *pch; uchar i; bit port; cy = cy&0x07;/ 参数过滤 cx = cx&0x0f; pch = &ASCII_TAB(dispdata-0X20)*5; /指向字符起始列的点阵码 if( (cx&0x08) =

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!