版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉华夏理工学院课程设计报告书 课 程 名 称 单片机原理及应用课程设计 课程设计总评成绩 学生姓名、学 号 周子林 102124142217 学 生 专 业 班级 自动化1142 指 导 教 师 姓名 李文彦 课程设计起止日期 2016.12.192016.12.30 单片机课程设计任务书题 目: 基于单片机的全自动浇花系统电路设计 初始条件:1. 采用湿度传感器采集数据;2. 采用温度传感器采集数据;3.采用单片机组成数据采集系统; 4.采用ULN2803芯片驱动直流电机。 要求完成的主要任务: 1. 对环境的温湿度状态进行数据采集;2. 设湿度传感器输出为0-5V的电路;3. 设计8位或
2、10位A/D转换接口电路;4. 设计单片机的信号显示电路;5. 设计单片机的控制电路;6. 设计掉电保存数据电路;7. 设计驱动直流电机电路;8. 严格按照课程设计说明书要求撰写课程设计说明书;时间安排: 序号阶 段 内 容所需时间(周)1方案选择及电路设计假期进行2制作、编程、调试13撰写课程设计报告及答辩1合 计2指导教师签名: 年 月 日 基于单片机的全自动浇花系统设计作者:周子林武汉华夏理工学院信息工程学院自动化1142摘要: 现代生活中,随着人们生活水平的提高,人们对花卉、树木等绿色植物的喜爱和种植越来越多,然而以前对花木的浇灌、施肥等工作都需要人工来实现,由于现代生活节奏加快,人们
3、往往忙于工作而忘记及时为花卉补充水分和养料,导致花木枯死。水是植物生存、生长的最基本需要,因此,设计一种能够在无人管理的情况下为花木自动浇水的系统,能够有效解决花木因缺水而枯死的难题。 本系统是采用AT89C52单片机为核心的全自动浇花系统。系统主要实现的功能是对花木的土壤中的湿度进行实时检测,当土壤湿度低于用户设定值时及时给花木浇水,当土壤湿度高于系统设定值时停止给花木浇水。关键词:C51单片机 A/D转换 IIC通信协议 LCD1602显示1 系统设计 本次设计包括AT89C52单片机及基本外围电路模块、温湿度检测电路模块、A/D转换电路模块、显示电路模块、EEPROM掉电数据保存电路模块
4、、按键控制电路模块、电机驱动电路模块、电源电路模块等部分组成,具体设计方案如图1-1所示。图1-1.系统框图2 硬件电路设计2.1 单片机本系统采用AT89C52单片机。 图2-1 单片机引脚图AT89C52是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机,如图2-1所示。AT89C2052是一种带4K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准
5、的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,就单片机而言,在课程中已经介绍,在此就不在多加解释。2.2 湿度传感器本系统采用FC-28电阻式湿度传感器输出模拟量更精确的计算出湿度值,如图2-2所示。 图2-2 湿度检测电路湿度值计算公式如式(1): (1) 当湿度传感器完全部浸入水中时,Rs=5.87k (稳定值),计算出Vo1=1.85V;当湿度传感器不接触水时,Rs=,计算出V01=5.0V。由于V01的变化范围为1.85V 5.0V,为了方便计算出湿度值,在程序的算法中作以下处理:Vo2=5.0V
6、-Vo1,即Vo2的变化范围为0V3.15V。显示湿度值计算公式:HR=(Vo2/3.15)*100%。2.3 温度传感器(1)温度传感器DS18B20特性 全数字温度转换及输出。 先进的单总线数据通信。 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。 可编程分辨率为912位,对应的可分辨温度分别为0.5,0.25,0.125和 0.0625,可实现高精度测温。 检测温度范围为-55+125。 内置EEPROM,限温报警功能。 64位光刻ROM,内置产品序列号,方便多机挂接。 负压特性。电源接反时,芯片不会因为发热而烧毁,但不能正常工作 。(2)DS18B20引
7、脚介绍如图2-3所示。 GND:电源负极。 DQ :信号输入输出。 VDD:电源正极。图2-3 DS18B20直插式(3) DS18B20RAM及EEPROM结构图如图2-4所示。 图2-4高速暂存器RAM由9个字节的存储器组成。第0、1个字节是温度转换后的数据值信息;第2、3个字节是用户EEPROM(常用于温度报警值储存)的镜像;第4个字节则是用户第3个EEPROM的镜像;第5、6、7个字节为计数寄存器,是为了让用户得到更高的分辨率而设计的,同样也是内温度转换、计算的暂存单元;第8个字节为前8个字节的CRC码。 (4)DS18B2电路原理图如图2-5所示。图2-5 DS18B20典型电路(5
8、) DS18B20工作时序图如图2-6所示。 图2-6 DS18B20工作时序 2.4 A/D转换电路设计 模数转换电路的作用是将图2-2所示电路中湿度传感器输出的直流量转换成数字量,送至单片机进行分析与处理。本设计模数转换器选用ADC0820,它是8位并行单极性A/D转换器。(1)ADC0820引脚说明 图2-7 ADC0820引脚图如图2-7所示。其中:模拟信号输入端,输入电压范围是。:数据端,三态数据输出。:片选端,低电平有效。:输入信号参考电压,当模拟信号的电压范围在时,接,接地。:溢出指示端,正常情况下,是逻辑高电平,当模拟输入比还高,在转换结束时将变低,还可用级联两个或多个器件以提
9、高分辨率(9位或10位)。:工作电压,:中断输出,其使用方法详见后述ADC0820工作方式。:方式选择端,ADC0820有两种工作方式,分别是读方式和写-读方式,当为低电平时为读方式,当为高电平时为写-读方式。:写/准备端,在写-读方式下,为低电平时,下降沿启动A/D转换;在读工作方式,在的下降沿且转换结果送入输出锁存电路时,进入高阻状态。:读,在写-读方式下,三态数据输出端在变为低电平时允许输出;在读方式下,在下降沿开始A/D转换,当进入高阻态且由高电平变为低电平时,表示一次A/D转换结束。(2)ADC0820工作方式 ADC0820有两种工作方式:读方式和写-读方式。 读方式 当为低电平时
10、,ADC0820工作于读方式。在读方式下,作为输出端且为准备端(即作为功能)。在此状态,当由高电平变为低电平,表示器件准备就绪, 在下降沿,开始转换,在由高电平变为低电平且恢复为高阻抗状态后内,完成转换。转换完成后,数据输出()从高阻状态转变为有效状态。数据读出之后,、为高电平,数据输出端恢复至高阻抗状态。读方式时序如图2-8所示。图2-8读方式工作时序(MODE为低电平) 写-读方式 当置为高电平时,转换器为写-读工作方式。在此模式下,将接低电平,若将接单片机I/O口,转换开始于的上升沿,并在其后600ns完成转换。在该工作方式下,单片机有三种读取数据的方式:a. 程序延时,在上升沿启动转换
11、,延时后,将由高电平置为低电平,通过读取数据,数据读出后,置为高电平,恢复高电平状态,数据输出恢复至高阻抗状态;b.程序查询,在此模式下,当单片机检测到下降沿到来时,将由高电平置为低电平,开始读取数据,数据读出之后,恢复为高电平状态,将置为高电平。当 恢复高电平状态后,数据输出端恢复至高阻状态;c. 直通方式,此工作方式操作简单,将、一直置于处低电平,转换开始于的上升沿,转换大约在内完成,在下降沿到来时表示转换完成,数据可读出。直通方式工作时序如图2-9所示。图2-9 直通方式工作时序(独立工作,MODE为高电平且为低电平)(3)本系统设计中ADC0820所选工作方式说明 本设计ADC0820
12、选用写-读方式下的直通工作方式,以提高工作效率。模数转换电路如图2-10所示。该方式下,将ADC0820的与直接接地、接高电平、不与外电路连接、端接单片机PB7端口以控制转换;先将置为低电平,延时一段时间后,将其置为高电平,A/D转换开始于其上升沿,由其内部计数器开始延时计时(延时时间约),如果后还没读取数据,则 变为高电平,数据被锁存。本设计中没有使用端,因为当置为低电平后,在转换开始后约数据就能读出。本设计中,数据输出端接单片机P1.7-P1.0口。 图2-10 A/D转换电路2.5 显示电路模块设计显示电路的作用是显示土壤湿度值、用户设定值及环境温度值,由于显示内容复杂,本系统采用LCD
13、1602液晶显示屏作为显示器。(1)接口信号说明 1602型液晶接口信号说明如表2.1所示。 表2.1 1602液晶接口信号说明编号符号引脚说明编号符号引脚说明1电源地9D2数据口2电源正极10D3数据口3VO液晶显示对比度调节11D4数据口4RS数据/命令选择端(H/L)12D5数据口5读写选择端(H/L)13D6数据口6E使能信号14D7数据口7D0数据口15BLA背光电源正极8D1数据口16BLK背光电源负极(2)基本操作时序 读状态 输入:RS=L,=H,E=H 输出:D0-D7=状态字。 读数据 输入:RS=H,=H,E=H 输出:无。 写指令 输入:RS=L,=L,D0-D7=指令
14、码,E=高脉冲 输出D0-D7=数据。 写数据 输入:RS=H,=L,D0-D7=数据,E=高脉冲 输出D0-D=无。(3)RAM地址映射图 控制器内部带有80B的RAM缓冲区,对应关系如图2.2所示。 表2.2 1602内部RAM地址映射表000102030405060708090A0B0C0D0E0F10.27404142434445464748494A4B4C4D4E4F50.67 当我们向表2.2中的00-0F、40-4F地址中的任一处写入显示数据时,液晶都可以立即显示出来,当写入到10-27或50-67地址时,必须通过移屏指令将它们移入可显示区域方可正常显示。(4)写操作时序(见图2
15、-11) 分析时序图可知操作1602液晶的流程如下: 通过RS确定是写数据还是写命令。写命令包括使液晶的光标显示/不显示、光标闪烁/不闪烁、需/不需要移屏、在液晶的什么位置显示,等等。写数据是指要显示什么内容。 读/写控制端设置为写模式,即低电平。 将数据或命令送达数据线上。 给E一个高脉冲将数据送入液晶控制器,完成写操作。图2-11 1602液晶写操作时序图 (5)1602液晶与单片机接口如图2-12所示。图2-12 1602液晶与单片机接口2.6 EEPROM掉电数据保存电路设计EEPROM掉电数据保存电路主要功能:在系统掉电之后保存用户设定的土壤湿度下限值。电路设计采用具有IIC总线接口
16、的EEPROM AT24C02,ATMEL公司生产的AT24C02可解决掉电数据保存问题,可对所存数据保存100年,并可多次擦写,擦写次数可达10万次以上。(1) AT24C02引脚配置与引脚功能 AT24C02芯片的常用封装形式有直插(DIP8)式和贴片(S0-8)式两种,无论是直插式还是贴片式,其引脚功能与序号都一样,引脚图如图2-13所示。图2-13 AT24C02引脚图 各引脚功能如下: 1,2,3(A0、A1、A2)可编程地址输入端。 4(GND)电源地。 5(SDA)串行数据输入/输出端。 6(SCL)串行时钟输入。 7(WP)写保护输入端,用于硬件数据保护。当其为低电平时,可以对
17、整个存储器进行正常的读/写操作;当其为高电平时,存储器具有写保护功能,但读操作不受影响。8(Vcc)电源正端。(2) 存储器结构与寻址 ATC2402的存储容量为2KB,内部分成32页,每页8B,共256B,操作时有两种寻址方式:芯片寻址和片内子地址寻址。 芯片寻址。AT24C02的芯片地址为1010,其地址控制字格式为1010A2A0。其中A2,A1,A0为可编程地址选择位。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器件的地址码。为芯片读写控制位,该位为0,表示对芯片进行读操作。 片内子地址寻址。芯片寻址可对内部256B中的任一个进行读/写操作,其寻
18、址范围为00-FF,共256个寻址单元。 由于第二种寻址方式寻址灵活,操作简单,即采用片内子地址寻址。(3) 读/写操作时序 图2-14 AT24C02工作时序图 (4)AT24C02电路连接如图2-15所示。 图2-15 AT24C02连接图2.7 按键控制电路设计按键的功能:用户针对不同植物的生长对土壤湿度需求的差异,设定土壤湿度下限值LHR。按键电路设计采用独立键盘,电路图如图2-16所示。图2-16 键盘电路S1键:控制土壤湿度下限值LHR增加S2键:控制土壤湿度下限值LHR增加2.8 电机驱动电路设计当传感器检测到土壤湿度值低于土壤湿度下限值LHR时,单片机发出命令,要求水泵启动,由
19、于单片机只能输出0V或5V的电压,不足以驱动6V-12V直流电机,因此需要借助驱动电路驱动电机。(1) 电磁继电器 利用单片机输出的高低电平触发电磁继电器工作,从而控制电机工作,但是,电磁继电器在工作瞬间常开触点闭合、常闭触点断开,会有嘀嗒的声音,制造噪音,所以不选用电磁继电器。 (2)电机驱动芯片 采用达林顿驱动器(ULN2803)如图2-17所示,它实际上是一个集成芯片,单块芯片同时可驱动8个电机,每个电机由单片机的一个I/O口控制,当需要调节直流电机转速时,使单片机相应I/O口输出不同占空比的PWM波形即可。驱动芯片工作时静音,且电路简单,功能强大,即选用ULN2803驱动器驱动电机。图
20、2-17 ULN2803电路连接图2.9 电源电路设计 (1)用5V直流电压给单片机及基本外围电路模块供电。 (2)用9V干电池给直流电机供电。 切记:直流电机供电电源和单片机的供电电源要共地。3 系统软件设计3.1 软件设计思路本系统软件设计是基于KEIL软件平台,以AT89C52单片机软件编程为主,系统软件部分主要由系统初始化模块、温湿度数据采集模块、A/D转换模块、键盘控制模块、数据存储模块以及1602液晶显示模块等部分组成。当系统上电后单片机及基本外围模块进行初始化设置,主程序运行,用户设置LHR值,湿度传感器开始检测土壤湿度,A/D模块将土壤湿度模拟量转换为数字量送到单片机处理分析,
21、如果土壤湿度值HR低于土壤湿度下限值LHR,单片机P3.7端口输出高电平触发驱动器工作,水泵开始浇水,如果土壤湿度值HR高于系统设定土壤湿度上限值HHR,单片机P3.7端口输出低电平,驱动器停止工作,水泵停止浇水。3.2 系统主程序流程图如图3-1所示。 图3-1 系统主程序流程图3.3 程序设计主程序:#include<reg52.h>#include"head.h"#define V 5.0sbit M=P37;float vi=0.0;uint c1;uchar num1;uchar s;void main()/主函数 EEPROM_int();num1=
22、read_add(2);lcd1602_init();/LCD1602初始化LCD_clear();/LCD1602清屏delay_ms(5);/硬件反应时间display3();P1=0xff;while(1)AD_Convert(); vi=vi*V/256;c1=(500-vi*100)/315)*100; if(99<c1)c1=99;if(0<=c1&&c1<=99)display1(11,c1);read_temperature();/读取温度数据if(s=0)display2(5,read_temperature();if(s=1)display
23、4(6,read_temperature();delay_us(100);/硬件反应时间keyscan();display1(4,num1);write_add(2,num1);if(c1<=num1) M=1; delay_ms(500); M=0; delay_ms(1500);if(40<=c1)M=0;A/D转换程序:#include <reg52.h>#include <intrins.h>#include <math.h>#include"head.h"#define N 64sbit ad_wr=P36;exte
24、rn float vi;uchar DataN;void AD_Convert() uint i;vi=0.0;for(i=0;i<N;i+) ad_wr=1;/wr port raise edage delay_ms(1); ad_wr=0;/wr pot false edage delay_ms(1); ad_wr=1;/start ad convert _nop_(); _nop_(); _nop_(); Datai=P1; ad_wr=0; for(i=0;i<N;i+)vi+=Datai; vi=vi/N; 温度检测程序:#include<reg52.h>#i
25、nclude<intrins.h>#include"head.h"sbit ds=P26;uchar time;extern uchar s;void dsreset(void)/DS18B20复位,初始化函数 ds=1;/数据线置高电平1 for(time=0;time<2;time+); /延时约6us,延时尽可能短一点 ds=0;/数据线置低电平0 for(time=0;time<200;time+);/延时约600us,延时控制在480960us之间 ds=1;/数据线置高电平1 for(time=0;time<10;time+);/延
26、时约30us if(!ds)/等待DS18B20应答 for(time=0;time<200;time+);/延时约600us,DS18B20应答脉冲void dswrite(uchar dat)/向DS18B20写指令函数,dat表示指令编码,例如,温度转换0x44uchar i=0;for (i=0; i<8; i+)/把dat中的数据分八次传给ds,一次只发送一位二进制数 ds=1;/数据线置高电平1 _nop_();/延时一个机器周期,约1us ds=0;/数据线置低电平0 _nop_();/延时一个机器周期,约1us ds=dat&0x01;/DS18B20采样,
27、把dat中的最低位传给ds for(time=0;time<15;time+);/延时约45us ds=1;/数据线置高电平1 for(time=0;time<1;time+);/延时约3us(1us<tREC<正无穷) dat>>=1; /dat数据右移一位 for(time=0;time<4;time+);/延时约为12us,硬件反应时间uchar dsread(void)/从DS18B20中的RAM读一个字节的数据 uchar i=0;uchar dat;/把RAM中的温度数据传给datfor (i=0;i<8;i+) ds=1;/数据线置
28、高电平1 _nop_();/延时一个机器周期,约1us ds=0;/数据线置低电平0 dat>>=1;/dat中的数据右移一位,读到的第一位二进制在最右边 _nop_();/延时一个机器周期,约1us ds=1;/数据线置高电平1 for(time=0;time<2;time+);/延时约为6us if(ds=1)/读数据线的状态得到一个状态位,并进行数据处理 dat|=0x80;/ 把dat的最高位置1else dat|=0x00;/把dat的最高位置0 for(time=0;time<10;time+);/延时约30us return dat; uint read_
29、temperature() /读取温度数据 uchar temp1,temp2;uint temp3;dsreset();/DS18B20复位 dswrite(0xcc);/写跳过读ROM指令,同时使用多个DS18B20时,要识别ROM中的序列号dswrite(0x44);/写温度转换指令for(time=0;time<100;time+);/硬件反应时间dsreset();/DS18B20复位dswrite(0xcc);/写跳过读ROM指令dswrite(0xbe);/写读RAM中9字节的温度数据指令for(time=0;time<100;time+);/硬件反应时间temp1=
30、dsread();/读温度值低八位(LSB)temp2=dsread();/读温度值高八位(MSB)dsreset();/DS18B20复位,表示温度数据读取完毕temp3=(temp2<<8)|temp1);if(temp3&0xf800) s=1;/温度为负值temp3=temp3+1;else s=0;/温度为正值temp3=temp3*0.0625*10+0.5;/温度在寄存器中为12位,分辨率为0.0625度 /(temp2<<8)|temp1,将两个字节组合为一个字 /*10表示保留小数点后一位,+0.5表示四舍五入return temp3;/返回以
31、十进制表示的temp3,例如:temp3=272,显示为27.2摄氏度 数据存储程序:#include <reg52.h>#include"head.h"sbit sda=P23;sbit scl=P24;void start()/开始信号 sda=1; delayus(); scl=1; delayus(); sda=0; delayus();void stop()/停止信号 sda=0; delayus(); scl=1; delayus(); sda=1; delayus();void respons()/应答 uchar i; scl=1; delayu
32、s(); while(sda=1)&&(i<255) i+; scl=0; delayus();void EEPROM_int() sda=1; delayus(); scl=1; delayus();void write_byte(uchar date) uchar i,temp; temp=date; for(i=0;i<8;i+) temp=temp<<1;scl=0;delayus();sda=CY;delayus();scl=1;delayus(); scl=0; delayus(); sda=1; delayus();uchar read_b
33、yte() uchar i,k; scl=0; delayus(); sda=1; delayus(); for(i=0;i<8;i+) scl=1;delayus();k=(k<<1)|sda;scl=0;delayus(); return k;void write_add(uchar address,uchar date) start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop();uchar read_add(uchar
34、 address) uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date;1602显示程序:#include"head.h"/*LCD1602 初始化函数*/void lcd1602_init(void)/*LCD 8位数据端口上电初始化时全部配置成输出低电平的形式 */ D0=0; D1=0; D2=0; D3=0
35、; D4=0; D5=0; D6=0; D7=0; EN=0; /硬件初始化时关闭LCD是使能端口 RW=0; /初始化时默认讲写功能打开,RW为低电平时为写LCD,为高电平时为读LCD RS=0; /初始化时默认讲RS配置成低电平选择命令。RS为高时为数据控制。 lcd1602_write_command(0X38); lcd1602_write_command(0X38); lcd1602_write_command(0X38); lcd1602_write_command(0X0c); lcd1602_write_command(0X06);/*LCD1602 写命令函数*/void l
36、cd1602_write_command(uchar com ) RS=1; RS=0; RW=1; delay_ms(1); RW=0; P0=com; EN=1; delay_ms(100); EN=0;/*LCD1602 写数据函数*/void lcd1602_write_date(uchar dat) RS=0; RS=1; RW=1; delay_ms(1); RW=0; P0=dat; EN=1; delay_ms(100); EN=0;/*LCD1602 清屏函数*/void LCD_clear()/清屏 lcd1602_write_command(0X01);void disp
37、lay1(uchar add1,uchar dat1)/显示LHR值及HR值 uchar shi,ge; shi=dat1/10; ge=dat1%10; lcd1602_write_command(0x80+add1); lcd1602_write_date(0x30+shi); lcd1602_write_date(0x30+ge); void display2(uchar add2,uint dat2)显示温度正值 uchar shi1,ge1,fen1; shi1=dat2/100; ge1=dat2%100/10; fen1=dat2%10; lcd1602_write_comman
38、d(0x80+0x40); lcd1602_write_date('T'); lcd1602_write_command(0x80+0x40+1); lcd1602_write_date('E'); lcd1602_write_command(0x80+0x40+2); lcd1602_write_date('M'); lcd1602_write_command(0x80+0x40+3); lcd1602_write_date('P'); lcd1602_write_command(0x80+0x40+4); lcd1602_wr
39、ite_date(':'); lcd1602_write_command(0x80+0x40+9); lcd1602_write_date('C'); lcd1602_write_command(0x80+0x40+add2); lcd1602_write_date(0x30+shi1); lcd1602_write_date(0x30+ge1); lcd1602_write_date('.'); lcd1602_write_date(0x30+fen1);void display3() lcd1602_write_command(0x80+0)
40、; lcd1602_write_date('L'); lcd1602_write_command(0x80+1); lcd1602_write_date('H'); lcd1602_write_command(0x80+2); lcd1602_write_date('R'); lcd1602_write_command(0x80+3); lcd1602_write_date(':'); lcd1602_write_command(0x80+6); lcd1602_write_date('%'); lcd1602_w
41、rite_command(0x80+8); lcd1602_write_date('H'); lcd1602_write_command(0x80+9); lcd1602_write_date('R'); lcd1602_write_command(0x80+10); lcd1602_write_date(':'); lcd1602_write_command(0x80+13); lcd1602_write_date('%');void display4(uchar add3,uint dat3)/显示温度负值 uchar shi
42、2,ge2,fen2; shi2=dat3/100; ge2=dat3%100/10; fen2=dat3%10; lcd1602_write_command(0x80+0x40); lcd1602_write_date('T'); lcd1602_write_command(0x80+0x40+1); lcd1602_write_date('E'); lcd1602_write_command(0x80+0x40+2); lcd1602_write_date('M'); lcd1602_write_command(0x80+0x40+3); l
43、cd1602_write_date('P'); lcd1602_write_command(0x80+0x40+4); lcd1602_write_date(':'); lcd1602_write_command(0x80+0x40+5); lcd1602_write_date('-'); lcd1602_write_command(0x80+0x4a); lcd1602_write_date('C'); lcd1602_write_command(0x80+0x40+add3); lcd1602_write_date(0x30+
44、shi2); lcd1602_write_date(0x30+ge2); lcd1602_write_date('.'); lcd1602_write_date(0x30+fen2);延时程序:#include"head.h"void delay_ms(uint ms) uint i,j; for(i=0;i<ms;i+) for(j=0;j<110;j+);void delay_us(uint us) uint s; us=us*5/4; for(s=0;s<us;s+);void delayus();键盘程序:#include <
45、reg52.h>#include"head.h"sbit s1=P32;sbit s2=P33;sbit s3=P34;sbit s4=P35;extern uchar num1;void keyscan() if(s1=0)/增加键 delay_ms(10); if(s1=0) /while(!s1); num1+; if(num1=61) num1=30; if(s2=0)/减小键 delay_ms(10); if(s2=0) /while(!s2); num1-; if(num1=-1) num1=30; 函数申明程序:#include <reg52.h>#i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校工作总结和工作计划(6篇)
- 读书活动的心得体会
- 教学工作心得体会总结8篇
- 新教材高考地理二轮复习综合题专项训练七简易绘图类含答案
- 四川省泸州市江阳区泸州老窖天府中学2024-2025学年七年级上学期期中地理试题(含答案)
- 河南省安阳市林州市湘豫名校联考2024-2025学年高三上学期11月一轮诊断考试 数学(含答案)
- 2015-2024年高考数学总复习:数列小题综合(学生卷)
- 个人信用贷款合同模板
- 户外照明产品购销合同模板
- 2024年公司运输司机聘用合同
- 关于合同违约扣款的函件
- NB-T33004-2013电动汽车充换电设施工程施工和竣工验收规范
- 2024版劳动合同合同范本
- 小学数学一年级上册数学试卷可直接打印
- 中药调剂员试题含参考答案
- 混凝土采购运输组织供应、运输、售后服务方案
- DZ∕T 0258-2014 多目标区域地球化学调查规范(1:250000)(正式版)
- 2024年鄂尔多斯市国资产投资控股集团限公司招聘公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 小学作业设计比赛评分标准
- 校企共建实验室方案
- 2024年电商直播行业现状及发展趋势研究
评论
0/150
提交评论