




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*基于盛群单片机开发的 获得温湿传感器dht11和光敏电阻的数据 并且发送到1602显示屏的程序*/#include #pragma vector isr_4 0x4#pragma vector isr_8 0x8#pragma vector isr_c 0xc#pragma vector isr_ad 0x10 /ad中断服务程序(r232地址是10)/ISR for safequardvoid isr_4() / external ISRvoid isr_8() / timer/event 0void isr_c() / timer/event 1/initialize registers for safeguardvoid safeguard_init()_intc0=0;_intc1=0;_tmr0h=0;_tmr0l=0;_tmr0c=0;_tmr1h=0;_tmr1l=0;_tmr1c=0;_pac=0xff;_pbc =0xff; /input mode_pcc =0xff;typedef unsigned char u8;#define rs _pc2 /屏幕的控制rs#define ep _pc0 /屏幕的控制rs#define rw _pc1 /屏幕的控制rs#define dht _pb1#define ko _pb2 /外部按键定义#define ky _pb3#define LED_DATA_CRL _pac /屏幕数据管脚的I/O控制#define DHT_DATA_CRL _pbc /dht数据管脚的I/O控制#define LED_DATA_DATA _pa /屏幕数据管脚的数据传递#define LED_CRL_CRL _pcc /屏幕控制管脚的I/O控制#define ad_start _26_7 /定义ad转换的start位(r232的adcr寄存器地址是0x26h)void busycheck(void);void init(void);void cmd(unsigned char);void data(int);signed char U8FLAG,U8temp,U8comdata;int U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;/*中间数值,校对校验码后付给最终的结果*/int U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;/*实际数值*/int k; /外部按键常量unsigned int light; /光强的数字值int light_b; /百位int light_s;/十位int light_g;/个位int count;void ADtrans() /ad转换开始ad_start=0;ad_start=1;ad_start=0;/-屏幕部分-/*屏幕初始*void init()LED_DATA_CRL=0;LED_CRL_CRL=0;LED_DATA_DATA=0;_pc=0;_delay(5000);_delay(5000);_delay(5000);cmd(0x38);_delay(5000);cmd(0x38);_delay(5000);cmd(0x38);_delay(5000);cmd(0x38);busycheck();cmd(0x08);busycheck();cmd(0x01);busycheck();cmd(0x06);busycheck();cmd(0x0c);busycheck();/*/*送指令函数*void cmd(u8 mingling) /busycheck(); rs= 0; rw = 0; ep = 0; LED_DATA_DATA=mingling;_delay(100); ep=1;_delay(100); ep=0;/*/*送数据*void data(int zimu)/busycheck();rw=0; rs = 1; rw = 0; ep = 0;LED_DATA_DATA= zimu;_delay(100);ep = 1;_delay(100);ep = 0; /*/*busycheck*void busycheck(void)u8 val;doep=0;LED_DATA_CRL=0xff;rs=0;rw=1;ep=1;_delay(100);val=LED_DATA_DATA;_delay(100);ep=0; while(val&(u8)0x80);rw=0;LED_DATA_CRL=0;/* /*写入地址*void pos(u8 x)cmd(x|0x80);/*/-dht21 部分-/*获取8位二进制数*/*COM获取一个8位二进制数*/ void COM(void) u8 i; for(i=0;i8;i+) U8FLAG=2; while(!dht)&U8FLAG+); _delay(35); U8temp=0; if(dht)U8temp=1; U8FLAG=2; while(dht)&U8FLAG+); /超时则跳出for循环 if(U8FLAG=1)break; /判断数据位是0还是1 / 如果高电平高过预定0高电平值则数据位为 1 U8comdata=1; U8comdata|=U8temp; /rof /*/*-*/*-温湿度读取子程序 -*/*-*/*-以下变量均为全局变量-*/*-温度高8位= U8T_data_H-*/*-温度低8位= U8T_data_L-*/*-湿度高8位= U8RH_data_H-*/*-湿度低8位= U8RH_data_L-*/*-校验 8位 = U8checkdata-*/void RH(void) int c=0; DHT_DATA_CRL=0; dht=0; _delay(20000); /主机拉低500us DHT_DATA_CRL=0xff; /主机设为输入(电平由上拉电阻拉高) 在2040us后判断从机响应信号 while(dht=1)&(c+100); /判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!dht) U8FLAG=2; while(!dht)&U8FLAG+);/判断从机是否发出 80us 的低电平响应信号是否结束 U8FLAG=2; while(dht)&U8FLAG+); /判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 COM(); /数据接收状态 U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; /数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp=U8checkdata_temp) if(1) U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; /*/-华丽的main函数分割线-void main() /*变量定义*u8 r=r;u8 h=h;u8 t=t;u8 c=c;u8 l=l;u8 z=:;u8 si=4;u8 wu=5;u8 liu=6;u8 ling=0;int rhdatas; /湿度数据十位int rhdatag; / 湿度数据个位int tdatas;int tdatag;int i=0;/*/*初始化*safeguard_init();init();DHT_DATA_CRL=0xff; _acsr=0x01; /ad转换8分频_adcr=0x08; /设置通道 pb0 an0作为ad输入ad_start=1; /设置分频和通道ad_start=0;_emi=0; /关总中断_adf=0; /清除ad中断标志位_eadi=1; / 开ad中断使能_emi=1; /开总中断/*while(1) RH();ADtrans(); /ad转换开始if(ko=0)k=1; /查询键盘else if(ky=0)k=0;/*把获得的数据转换成屏幕可以显示的数字(根据屏幕的编码表)*rhdatas=U8RH_data_H/10;rhdatag=U8RH_data_H%10;rhdatas=(rhdatas|0x30)&0x3f;rhdatag=(rhdatag|0x30)&0x3f;if(ko=0)k=1;/查询键盘else if(ky=0)k=0;tdatas=U8T_data_H/10;tdatag=U8T_data_H%10;tdatas=(tdatas|0x30)&0x3f;tdatag=(tdatag|0x30)&0x3f;if(ko=0)k=1; /查询键盘else if(ky=0)k=0;light_b=light/100;light_s=(light-light_b*100)/10;light_g=light%10;light_b=(light_b|0x30)&0x3f;light_s=(light_s|0x30)&0x3f;light_g=(light_g|0x30)&0x3f;/*cmd(0x08); /先关显示屏!_delay(60000);cmd(0x01); / 清屏! _delay(60000); _delay(60000); if(ko=0)k=1; /查询键盘else if(ky=0)k=0;pos(0); /显示温度data(h);data(z);data(rhdatas);data(rhdatag);if(ko=0)k=1; /查询键盘else if(ky=0)k=0;pos(43); /显示湿度data(t);data(z);data(tdatas);data(tdatag);if(ko=0)k=1; /查询键盘else if(ky=0)k=0;pos(8);data(r); /显示推荐数据data(c);data(z);if(tdatas=3) if (k=1) data(si);data(ling); else data(si);data(wu);if(U8T_data_H=25) if (k=1) data(si);data(wu); else data(wu);data(ling);if (U8T_data_H25) if (k=1) data(wu);data(wu); else data(liu);data(ling);pos(0x4a); /显示当前光强data(l);data(z);data(light_b);data(light_s);data(light_g);pos(0x48);data(count);if(ko=0)k=1; /查询键盘else if(ky=0)k=0;cmd(0xc); /开显示屏!_delay(250000); if(ko=0)k=1; /查询+延时else if(ky=0)k=0; _delay(250000);if(ko=0)k=1;else if(ky=0)k=0;_delay(250000);if(ko=0)k=1;else if(ky=0)k=0;_delay(250000);if(ko=0)k=1;else if(k
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年老年医学老年疾病综合治疗策略模拟考试卷答案及解析
- 2025年肿瘤科治疗方案设计与评估模拟测试卷答案及解析
- 2025年消化内科常见病诊断筛查考试答案及解析
- 2025年康复医学截肢术后康复功能训练考试卷答案及解析
- 初中英语疑问句语法讲解
- 2025年精神科常见疾病症状评估与干预策略考核答案及解析
- 2025-2030纺织服装柔性供应链构建方法研究报告
- 2025-2030番茄种植智慧农业技术应用与精准管理实践分析报告
- 2025-2030浮船升降机行业新兴技术应用与商业模式创新报告
- 2025年保健理疗师运动康复方案设计考试答案及解析
- 2025民航西藏空管中心社会招聘14人(第1期)笔试参考题库附带答案详解(10套)
- 2025年职业病医师资格认证考试
- Unit4《Lesson 3 I am proud of my father》教案-2025-2026学年冀教版(三起)(2024)小学英语四年级上册
- 消防队伍管酒治酒课件
- 医学继续教育管理办法
- 夜间驾驶知识课件
- 动荡变化中的春秋时期
- 2025辅警考试题库(含答案)
- QGDW10212-2019电力系统无功补偿技术导则
- 牛奶面包食品配送服务 投标方案(技术方案)
- 菜鸟驿站运营管理制度
评论
0/150
提交评论