完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
#include #define uchar unsigned char #define uint unsigned int uchar i,BEEP,c; unsigned int shi,ge,xiaoshu; uchar A1,A2,A3,a,flag; ***it sq=P1^4; ***it lcdrs=P1^0; ***it lcdrw=P1^1; ***it lcden=P1^2; ***it adcs=P3^5; ***it adrd=P3^6; ***it adwr=P3^7; uchar code t0[16]="wen du:"; uchar code t1[16]="yan wu:"; uchar code wendu[]="0123456789"; uchar code yanwu[]="0123456789"; ***it DQ=P1^3; //定义总线 unsigned int ti02s; unsigned char Ti05ms; unsigned char a; bit LING; void delay(uint z) //延时 { uint x,y; for(x=100;x>1;x--) for(y=z;y>1;y--); } void write_com(uchar com) //写命令 { lcdrs=0; P2=com; delay(5); lcden=1; delay(5); lcden=0; } void write_date(uchar date) //写数据 { lcdrs=1; P2=date; delay(5); lcden=1; delay(5); lcden=0; } void init_lcd() { lcden=0; lcdrw=0; write_com(0x38); write_com(0x01); write_com(0x0c); write_com(0x06); write_com(0x80); for(i=0;i<16;i++) { write_date(t0[i]); } write_com(0x80+0x40); for(i=0;i<16;i++) { write_date(t1[i]); } } void tmpDelay(int num) { while(num--); } void Init_DS18B20() //DS18B20初始化 { unsigned char x=0; DQ=1; tmpDelay(8); DQ=0; tmpDelay(80); DQ=1; tmpDelay(14); x=DQ; tmpDelay(20); } unsigned char ReadOneChar() //读一个字节 { unsigned char i=0; unsigned char dat=0; for(i=8;i>0;i--) { DQ=0; dat>>=1; DQ=1; if(DQ) dat|=0x80; tmpDelay(4); } return(dat); } void WriteOneChar(unsigned char dat) //写一个字节 { unsigned char i=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; tmpDelay(5); DQ=1; dat>>=1; } } unsigned int Readtemp() //读取温度 { unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xcc); //跳过读序号列号的操作 WriteOneChar(0x44); //启动温度转换 Init_DS18B20(); WriteOneChar(0xcc); WriteOneChar(0xbe); //读取温度寄存器 a=ReadOneChar(); //连续读两个字节数据。读低8位 b=ReadOneChar(); //读高8位 t=b; t<<=8; t=t|a; //两字节合成一个整形变量 tt=t*0.0625; //得到真实十进制温度值,因为DS18B20可以精确到0.0625读 t=tt*10+0.5; //放大十倍 return(t); } void shan()//闪灯 { sq=0; delay(50); sq=1; } void shumo() { uchar value; adcs=0; adwr=0; delay(10); adwr=1; adcs=1; delay(10); adcs=0; adrd=0; delay(5); value=P0; adrd=1; adcs=1; a=value/10; A1=value/100; A2=value%100/10; A3=value%10; write_com(0x80+0x40+7); write_date(yanwu[A1]); write_com(0x80+0x40+8); write_date(yanwu[A2]); write_com(0x80+0x40+9); write_date(yanwu[A3]); sq=0; if(a>3) { shan(); } } void time() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; SM1=1; REN=1; ES=1; EA=1; } void display() { unsigned int num,num1; num=Readtemp(); num1=num/10; if(num1>0&&num1<100) { sq=0; if(num1>37) { shan(); } else { LING=0; } shi=num/100; ge=num/10%10; xiaoshu=num%10; write_com(0x80+7); write_date(wendu[shi]); write_com(0x80+8); write_date(wendu[ge]); write_com(0x80+9); write_date(0x2e); write_com(0x80+10); write_date(wendu[xiaoshu]); } else { write_com(0x80+0x40+5); write_date(0); write_com(0x80+0x40+6); write_date(48); write_com(0x80+0x40+7); write_date(0x2e); write_com(0x80+0x40+8); write_date(48); } } void main() { time(); init_lcd(); while(1) { display(); shumo(); delay(10); if(flag==1) {flag=0; ES=0; for(i=0;i<16;i++) { SBUF=t0[i];//将lCD数据送入 while(!TI); TI=0; } SBUF=c; while(!TI); TI=0; ES=1; flag=0; } } } void ser(void) interrupt 4 { RI=0; c=SBUF; flag=1; } |
|
相关推荐
4个回答
|
|
|
什么现象?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
版主,你好,我想问下我proteus仿真时,为什么两块单片机的传感器会相互影响,其中一个传感器的变化会影响另一块单片机。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
601 浏览 0 评论
1654 浏览 0 评论
2096 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1542 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1386 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1794浏览 29评论
2821浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1748浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1667浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1681浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-15 07:40 , Processed in 0.722855 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4048